diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md index 44e3ce2..15a39fd 100644 --- a/.agents/AGENTS.md +++ b/.agents/AGENTS.md @@ -15,7 +15,7 @@ This workspace is a **Turborepo** monorepo using **Bun** workspaces for high-per │ └── tscheck/ # TypeScript & AST checking module ├── apps/ │ ├── native/ # Interactive Expo playground app (iOS / Android / Web) -│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.netlify.app) +│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.vercel.app) ├── scripts/ # Workspace maintenance & audit scripts (e.g. audit-codebase.ts) └── .agents/ # Centralized AI rules, skills, and configuration ``` diff --git a/.agents/rules/architecture.md b/.agents/rules/architecture.md index 10da727..c0d2c13 100644 --- a/.agents/rules/architecture.md +++ b/.agents/rules/architecture.md @@ -15,7 +15,7 @@ Welcome to the **Masum Dev** React Native & Expo Library Workspace. This project │ └── tscheck/ # TypeScript & AST checking module ├── apps/ │ ├── native/ # Interactive Expo playground app (iOS / Android / Web) -│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.netlify.app) +│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.vercel.app) ├── scripts/ # Workspace maintenance & audit scripts (e.g. audit-codebase.ts) ├── .agents/ # Centralized AI rules, skills, and configuration ├── turbo.json # Turborepo task orchestration diff --git a/README.md b/README.md index f6e4ccc..b912ce3 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Welcome to **Masum Dev** monorepo repository. This project contains high-perform │ └── tscheck/ # TypeScript & AST auditing module ├── apps/ │ ├── native/ # Interactive Expo playground app (iOS / Android / Web) -│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.netlify.app) +│ └── docs/ # Astro 5 + Starlight documentation portal (https://react-native-library-docs.vercel.app) ├── CONTEXT.md # Monorepo architecture & domain context ├── RULES.md # Mandatory development & contribution rules ├── README.md # Monorepo setup & getting started guide @@ -104,5 +104,5 @@ https://raw.githubusercontent.com/masumrpg/react-native-library/main/packages/ts ## 📄 Documentation -Visit our official documentation portal at **[https://react-native-library-docs.netlify.app](https://react-native-library-docs.netlify.app)** for guides, component API references, and interactive code samples. +Visit our official documentation portal at **[https://react-native-library-docs.vercel.app](https://react-native-library-docs.vercel.app)** for guides, component API references, and interactive code samples. diff --git a/apps/cli/markforge/markforge.full-config.ts b/apps/cli/markforge/markforge.full-config.ts index c7bdd1d..72fd2fe 100644 --- a/apps/cli/markforge/markforge.full-config.ts +++ b/apps/cli/markforge/markforge.full-config.ts @@ -6,6 +6,9 @@ import { PaperSizeEnum, SyntaxTheme, WatermarkPosition, + SignatureAlign, + SignatureStyle, + CoverPagePreset, } from "@masumdev/markforge"; /** @@ -14,8 +17,8 @@ import { * Any property that is optional or alternative is also presented as a commented line for quick toggling. */ export default defineConfig({ - // Target output formats (using OutputFormat enum or strings: "docx" | "pdf" | "html" | "png") - to: [OutputFormat.DOCX, OutputFormat.PDF, OutputFormat.HTML], + // Target output formats (using OutputFormat enum or strings: "docx" | "pdf" | "html" | "txt" | "png") + to: [OutputFormat.DOCX, OutputFormat.PDF, OutputFormat.HTML, OutputFormat.TXT, OutputFormat.PNG], // to: [OutputFormat.PDF], // Single target compilation // Output directory where compiled documents will be saved @@ -39,29 +42,25 @@ export default defineConfig({ // fontMono: "Fira Code, monospace", // }, - // Page orientation (Orientation.PORTRAIT or Orientation.LANDSCAPE) - orientation: Orientation.PORTRAIT, - // orientation: Orientation.LANDSCAPE, + // Page geometry and layout + orientation: Orientation.PORTRAIT, // "portrait" | "landscape" + paperSize: PaperSizeEnum.A4, // "A4" | "Letter" | "Legal" | "A3" | "A5" - // Standard paper size (A4, Letter, Legal, A3, A5) - paperSize: PaperSizeEnum.A4, - - // Page margins (supports CSS units: "3cm", "25mm", "1in", or numbers in pt) + // Precise document margins with standard units (cm, mm, in, pt) margins: { - top: "3cm", + top: "2.5cm", bottom: "2.5cm", left: "2.5cm", right: "2.5cm", }, - // Document running headers with dynamic variable substitution & per-zone slot styling + // Document running headers with dynamic token interpolation & per-zone slot styling header: { - // Left slot: Can be a plain string template OR a rich HeaderFooterSlot object + // Left slot: Custom colored title token left: { - text: "{company}", + text: "{title}", color: "#0D998D", - fontSize: 9, - fontFamily: "Inter, Segoe UI, sans-serif", + fontSize: 8.5, bold: true, }, // Center slot: Plain string template using default header styles @@ -75,6 +74,7 @@ export default defineConfig({ }, // Horizontal separator line under header divider: false, + // dividerColor: "#E2E8F0", }, // Document running footers with dynamic page numbering & per-zone slot styling @@ -101,15 +101,18 @@ export default defineConfig({ }, // Horizontal separator line above footer divider: false, + // dividerColor: "#E2E8F0", }, // Automatic Table of Contents generation toc: true, + // tocTitle: "TABLE OF CONTENTS", + // tocDepth: 3, // Dedicated Standalone Front Cover Page Builder coverPage: { enabled: true, - preset: "modern", // Options: "modern" | "corporate-split" | "minimal" | "card" + preset: CoverPagePreset.MODERN, // Options: "modern" | "corporate-split" | "minimal" | "card" or CoverPagePreset Enum title: "{title}", subtitle: "{subtitle}", author: "{author}", @@ -120,17 +123,35 @@ export default defineConfig({ badgeColor: "#ECFDFD", badgeTextColor: "#0D998D", logo: "./assets/company-logo.png", // Company logo path or Base64 data URI - logoWidth: 120, // Logo display width in px + logoWidth: 120, // Logo display width in px or css string (e.g. "120px") footerText: "Proprietary & Confidential — Masum Dev Technologies", + + // Symmetric Custom Styling Properties (uncomment to customize): + // backgroundColor: "#0A192F", + // bgGradient: "linear-gradient(135deg, #0A192F 0%, #0D998D 100%)", + // textColor: "#F8FAFC", + // titleColor: "#38BDF8", + // subtitleColor: "#94A3B8", + // accentColor: "#0D998D", + // address: "Jakarta, Indonesia", + // email: "contact@masumdev.com", + // phone: "+62 812 3456 7890", + // website: "https://react-native-library-docs.vercel.app", + // social: { + // github: "https://github.com/masumrpg", + // twitter: "https://x.com/masumdev", + // linkedin: "https://linkedin.com/in/masumdev", + // }, + // copyright: "Copyright (c) {year} {company}. All Rights Reserved.", }, // coverPage: false, // Set to false to disable front cover page entirely // Hierarchical decimal section numbering (e.g. 1., 1.1, 1.1.1) numberHeadings: { enabled: true, - depth: 3, // Max heading depth to number (H1..H3) + depth: 3, // Max heading depth to number (H1..H3) skipH1: false, // Number from H1 downwards (set true if H1 is document title) - prefix: "", // Optional prefix (e.g. "Section ") + prefix: "", // Optional prefix (e.g. "Section ") }, // numberHeadings: false, // Set to false to disable section numbering @@ -140,9 +161,9 @@ export default defineConfig({ // PDF Document Security & Password Encryption // security: { // userPassword: "masumdev_secret", // Password required to open document - // ownerPassword: "masumdev_admin", // Master password required to modify permissions + // ownerPassword: "masumdev_admin", // Master password required to modify permissions // permissions: { - // printing: "highResolution", // "highResolution" | "lowResolution" | false + // printing: "highResolution", // "highResolution" | "lowResolution" | false // modifying: false, // copying: true, // annotating: true, @@ -174,8 +195,8 @@ export default defineConfig({ // Document signature & approval blocks (1 to 4 signatory slots with customizable style and alignment) signatures: { - align: "space-between", // "space-between" | "center" | "left" | "right" - style: "line", // "line" | "box" | "clean" + align: SignatureAlign.SPACE_BETWEEN, // SignatureAlign.SPACE_BETWEEN | SignatureAlign.CENTER | SignatureAlign.LEFT | SignatureAlign.RIGHT + style: SignatureStyle.LINE, // SignatureStyle.LINE | SignatureStyle.BOX | SignatureStyle.CLEAN items: [ { title: "Prepared by", @@ -211,19 +232,30 @@ export default defineConfig({ company: "{company}", address: "Jakarta, Indonesia", email: "contact@masumdev.com", - // phone: "+62 812 3456 7890", - website: "https://react-native-library-docs.netlify.app", - // social: { - // github: "https://github.com/masumrpg", - // // twitter: "https://x.com/masumdev", - // // linkedin: "https://linkedin.com/in/masumdev", - // }, + phone: "+62 812 3456 7890", + website: "https://react-native-library-docs.vercel.app", + social: { + github: "https://github.com/masumrpg", + twitter: "https://x.com/masumdev", + linkedin: "https://linkedin.com/in/masumdev", + }, copyright: "Copyright (c) {year} {company}. All Rights Reserved.", - // bgGradient: "#fff", + + // Symmetric Custom Styling Properties (uncomment to customize): + // backgroundColor: "#0A192F", + // bgGradient: "linear-gradient(135deg, #0A192F 0%, #0D998D 100%)", + // textColor: "#F8FAFC", + // titleColor: "#38BDF8", + // subtitleColor: "#94A3B8", + // accentColor: "#0D998D", + // badge: "MASUM DEV TECHNOLOGIES", + // badgeColor: "#0D998D", + // badgeTextColor: "#FFFFFF", + // footerText: "End of Official Specification Document", }, // backCover: false, // Set to false to disable back cover closing page - // Fallback metadata dictionary + // Fallback metadata dictionary & arbitrary dynamic token interpolation metadata: { title: "Complete MarkForge Reference Manual", subtitle: "Enterprise Document Compiler & Visual Architecture", @@ -231,8 +263,10 @@ export default defineConfig({ company: "Masum Dev Technologies", version: "1.0.0", date: "2026-08-29", + year: "2026", lang: "en", - metakuda: "Kuda" + metakuda: "CONFIDENTIAL DRAFT", + custom_project_code: "MF-2026-PROD", }, // Custom external stylesheet path(s) to inject into HTML and PDF documents diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs index e594ec8..0777f07 100644 --- a/apps/docs/astro.config.mjs +++ b/apps/docs/astro.config.mjs @@ -4,7 +4,7 @@ import starlight from '@astrojs/starlight'; // https://astro.build/config export default defineConfig({ - site: 'https://react-native-library-docs.netlify.app', + site: 'https://react-native-library-docs.vercel.app', integrations: [ starlight({ title: 'Masum Dev', diff --git a/apps/docs/src/content/docs/markforge/changelog.mdx b/apps/docs/src/content/docs/markforge/changelog.mdx index 981b165..9561ae0 100644 --- a/apps/docs/src/content/docs/markforge/changelog.mdx +++ b/apps/docs/src/content/docs/markforge/changelog.mdx @@ -6,6 +6,19 @@ sidebar: description: Release history and version notes for @masumdev/markforge. --- +## [0.5.0] - 2026-09-03 + +### Plain Text (.txt) Document Publishing Engine + +- **Plain Text (.txt) Output Format**: + - Added native support for compiling Markdown documents into structured plain text files (`OutputFormat.TXT` or `"txt"` in `to:` array / `--to txt`). + - Structured document rendering with centered title banner, Table of Contents, double (`=`) and single (`-`) divider rules, callout tags (`| [NOTE]`), blockquotes (`> text`), code blocks with language annotations, and task item checkboxes (`[x]` / `[ ]`). + - ASCII grid-aligned tables with dynamic column width calculation and text padding. + - Complete support for footnotes (`[1] text`), approval signatures, and back cover closing card with dynamic metadata token replacement. + - Terminal CLI and Ink UI integration with green badge color highlighting for `[TXT]` documents in the compilation summary table. + +--- + ## [0.4.1] - 2026-08-30 ### Enhancements, Security, CLI, and Configuration Refinements diff --git a/apps/docs/src/content/docs/markforge/configuration.mdx b/apps/docs/src/content/docs/markforge/configuration.mdx index 05ab48f..a3dc2b9 100644 --- a/apps/docs/src/content/docs/markforge/configuration.mdx +++ b/apps/docs/src/content/docs/markforge/configuration.mdx @@ -39,7 +39,7 @@ import { export default defineConfig({ // Target output formats - to: [OutputFormat.DOCX, OutputFormat.PDF, OutputFormat.HTML], + to: [OutputFormat.DOCX, OutputFormat.PDF, OutputFormat.HTML, OutputFormat.TXT], // Output destination directory outputDir: ".temp/output", @@ -81,7 +81,7 @@ export default defineConfig({ address: "Jakarta, Indonesia", email: "contact@masumdev.com", phone: "+62 812 3456 7890", - website: "https://react-native-library-docs.netlify.app", + website: "https://react-native-library-docs.vercel.app", social: { github: "https://github.com/masumrpg", }, @@ -210,7 +210,7 @@ export default defineConfig({ | Property | Type | Default | Description | | :--- | :--- | :--- | :--- | -| `to` | `OutputFormat[]` | `['docx', 'pdf']` | Array of output file formats to compile: `OutputFormat.DOCX`, `OutputFormat.PDF`, `OutputFormat.HTML`, `OutputFormat.PNG`. | +| `to` | `OutputFormat[]` | `['docx', 'pdf']` | Array of output file formats to compile: `OutputFormat.DOCX`, `OutputFormat.PDF`, `OutputFormat.HTML`, `OutputFormat.TXT`, `OutputFormat.PNG`. | | `outputDir` | `string` | `'.'` | Destination folder for compiled document files. Created automatically if it does not exist. | | `clean` | `boolean` | `false` | When `true`, removes existing compiled documents in `outputDir` prior to compilation. | @@ -351,7 +351,7 @@ backCover: { address: "Jakarta, Indonesia", email: "contact@masumdev.com", phone: "+62 812 3456 7890", - website: "https://react-native-library-docs.netlify.app", + website: "https://react-native-library-docs.vercel.app", logo: "./assets/company-logo.png", logoWidth: 120, social: { diff --git a/apps/docs/src/content/docs/rn-qr-code/customization.mdx b/apps/docs/src/content/docs/rn-qr-code/customization.mdx index d5ae19e..c3d7383 100644 --- a/apps/docs/src/content/docs/rn-qr-code/customization.mdx +++ b/apps/docs/src/content/docs/rn-qr-code/customization.mdx @@ -8,7 +8,7 @@ description: Custom eye corner radii, linear & radial gradients, logos, and imag import { Code } from '@astrojs/starlight/components'; export const customEyeCode = ``; export const gradientCode = ``; export const logoCode = ` @@ -46,7 +46,7 @@ import { Skeleton } from '@masumdev/rn-ui'; export function AsyncQRCodeExample() { return ( ( diff --git a/apps/docs/src/content/docs/tscheck/changelog.mdx b/apps/docs/src/content/docs/tscheck/changelog.mdx index 07e846c..9422e97 100644 --- a/apps/docs/src/content/docs/tscheck/changelog.mdx +++ b/apps/docs/src/content/docs/tscheck/changelog.mdx @@ -6,6 +6,19 @@ sidebar: description: Release history and version notes for @masumdev/tscheck. --- +### v0.2.3 + +#### Bug Fixes & Improvements +- **Default Report Server Behavior**: + - Changed default `serve` option to `false`. Running `tscheck` now executes the audit and exits cleanly without starting an HTTP background server or blocking the shell. + - Report server is only launched when explicitly enabled via `-s` / `--serve [port]`, `-p` / `--port `, or `-O` / `--open`. +- **CLI Options & Configuration Precedence**: + - Fixed Commander option defaults so that configuration file values for `editor` and `format` are properly respected when CLI flags are omitted. + - Added `-p, --port ` flag for configuring the local report server port. + - Added clean terminal unmounting on non-interactive audit completion. + +--- + ### v0.2.2 #### New Features diff --git a/apps/docs/src/content/docs/tscheck/configuration.mdx b/apps/docs/src/content/docs/tscheck/configuration.mdx index 15f9291..a6ff556 100644 --- a/apps/docs/src/content/docs/tscheck/configuration.mdx +++ b/apps/docs/src/content/docs/tscheck/configuration.mdx @@ -41,7 +41,7 @@ When no explicit configuration file path is passed via `-c` or `--config`, `tsch "markdown": true, "html": true, "ai": true, - "serve": true, + "serve": false, "open": false, "port": 5500, "editor": "vscode", @@ -213,4 +213,4 @@ const b: any = 2; - **Author**: **[Ma'sum](https://github.com/masumrpg)** - **Repository**: [GitHub Repository](https://github.com/masumrpg/react-native-library) -- **Docs Portal**: [https://react-native-library-docs.netlify.app](https://react-native-library-docs.netlify.app) +- **Docs Portal**: [https://react-native-library-docs.vercel.app/](https://react-native-library-docs.vercel.app/) diff --git a/apps/docs/src/content/docs/tscheck/index.mdx b/apps/docs/src/content/docs/tscheck/index.mdx index a203995..ab51b83 100644 --- a/apps/docs/src/content/docs/tscheck/index.mdx +++ b/apps/docs/src/content/docs/tscheck/index.mdx @@ -23,7 +23,7 @@ import { LinkCard, CardGrid, Card } from '@astrojs/starlight/components'; test coverage - tests passing + tests passing ci status @@ -63,7 +63,7 @@ import { LinkCard, CardGrid, Card } from '@astrojs/starlight/components'; Generates single-file self-contained HTML audit reports with live filtering, dark/light mode toggle, and clickable deprecation links. - Guaranteed reliability with 56 unit and end-to-end integration tests spanning AST rules, terminal rendering, configuration parsing, and CLI subprocess execution. + Guaranteed reliability with 62 unit and end-to-end integration tests spanning AST rules, terminal rendering, configuration parsing, and CLI subprocess execution. diff --git a/apps/docs/src/content/docs/tscheck/usage.mdx b/apps/docs/src/content/docs/tscheck/usage.mdx index 08f3594..bc7d7ad 100644 --- a/apps/docs/src/content/docs/tscheck/usage.mdx +++ b/apps/docs/src/content/docs/tscheck/usage.mdx @@ -26,8 +26,9 @@ tscheck | :--- | :--- | :--- | | `-c, --config ` | Path to custom configuration file (`.json`, `.yaml`, `.ts`) | Auto-detected | | `-o, --output ` | Custom directory to write audit reports | `.temp/tscheck` | -| `-s, --serve [port]` | Start local HTTP server to host and inspect interactive HTML reports | `true` (port: `5500`) | -| `--no-serve` | Disable starting local HTTP report server after audit | `false` | +| `-s, --serve [port]` | Start local HTTP server to host and inspect interactive HTML reports | `false` (port: `5500`) | +| `-p, --port ` | Port for the local HTML report server | `5500` | +| `--no-serve` | Disable starting local HTTP report server after audit | `true` | | `-O, --open` | Automatically open the HTML report in your default browser | `false` | | `--editor ` | Default editor scheme (`vscode`, `cursor`, `antigravity`, `windsurf`, `zed`, `webstorm`, `sublime`) | `vscode` | | `--ai` | Output token-efficient AI prompt markdown to stdout | `false` | diff --git a/apps/native/app/qr-code.tsx b/apps/native/app/qr-code.tsx index 45e241b..238e4f5 100644 --- a/apps/native/app/qr-code.tsx +++ b/apps/native/app/qr-code.tsx @@ -30,7 +30,7 @@ const icon = (Icon: React.ComponentType<{ color?: string; size?: number }>): RenderIcon => ({ color, size }) => ; -const DOCS_URL = "https://react-native-library-docs.netlify.app/"; +const DOCS_URL = "https://react-native-library-docs.vercel.app/"; async function shareQRCodeFile( base64Data: string, @@ -292,7 +292,7 @@ export default function QRCodeScreen() { Scan to explore live documentation & components - react-native-library-docs.netlify.app + react-native-library-docs.vercel.app diff --git a/bun.lock b/bun.lock index 91a701f..fca2f31 100644 --- a/bun.lock +++ b/bun.lock @@ -93,7 +93,7 @@ }, "packages/markforge": { "name": "@masumdev/markforge", - "version": "0.4.0", + "version": "0.5.0", "bin": { "markforge": "./dist/cli.mjs", }, @@ -179,7 +179,7 @@ }, "packages/tscheck": { "name": "@masumdev/tscheck", - "version": "0.2.2", + "version": "0.2.3", "bin": { "tscheck": "./dist/cli.mjs", }, @@ -908,19 +908,19 @@ "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@2.3.0", "", {}, "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="], - "@turbo/darwin-64": ["@turbo/darwin-64@2.10.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-v3R+1R/Ysozyo+p7Ri8MCIbndOvYt3DgPFrGLhrhQHfvyvbxyH3WyJj+A/2JTNmNleuAlh3JUyCV0iSVHIONTA=="], + "@turbo/darwin-64": ["@turbo/darwin-64@2.10.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-9nKgKoF6ZOUsM+or0OtNf+TTJSfGvDNP7ZFv/ZGWVwOSCkumyctQiTeHwB4UNljHTnC41AqylgbunLDHoccNrA=="], - "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.10.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-R0a0CvGAeYYsBgPIgFNB3agGXh6qukjduNhFlwVVX1Ss2IdBJLXmgjytNGmo084bLKS0B6UdLRwKhXMHKKaObQ=="], + "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.10.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-H4Elb1jqTZVeIC9bbcNwjSzemZ6RegoTOVHeuV5Osirt2Z8UguTyisMEkvZjPVZgMeN9J4ERZBFad40tFnkb7w=="], - "@turbo/gen": ["@turbo/gen@2.10.11", "", { "dependencies": { "@inquirer/prompts": "^7.10.1", "esbuild": "^0.28.1" }, "bin": { "gen": "dist/cli.js" } }, "sha512-tVpy0jNGNOkOyQ8ykUPFlT+x1/eSTbY34fB3oU5pAyhtNUB0bsS7weCrSASn6kMZu8huVUiKQaErWsrCVnlcjA=="], + "@turbo/gen": ["@turbo/gen@2.10.12", "", { "dependencies": { "@inquirer/prompts": "^7.10.1", "esbuild": "^0.28.1" }, "bin": { "gen": "dist/cli.js" } }, "sha512-WK6xu1GJAg3845Zp+UeVHyzUiPNutJkfcoJPNbpwwu+rf9JgEWmc4LyOPH+JtX0OiQbi/uN+g/mC6CkP2dtnlw=="], - "@turbo/linux-64": ["@turbo/linux-64@2.10.11", "", { "os": [ "linux", "android", ], "cpu": "x64" }, "sha512-dGlY2vg7jpsLjGS1bf9sD/cw1sGMAYbeHGQKGRFxd5Zaj+Ufbj8cNXl/vIit8ueCU97zhL/znn60ZV5iSfZAxw=="], + "@turbo/linux-64": ["@turbo/linux-64@2.10.12", "", { "os": [ "linux", "android", ], "cpu": "x64" }, "sha512-lr7KIotukvjZwEXiFSYAeOH3BWzjFVBbSzTbv0fuGFsNukYyH0+g1hB5ecqnJkgkYU+KHEMG1edOhnjiKON1wQ=="], - "@turbo/linux-arm64": ["@turbo/linux-arm64@2.10.11", "", { "os": [ "linux", "android", ], "cpu": "arm64" }, "sha512-eSP9+jjsSCBs2x0QpJZlp49dSD1EIMwXH7PsMIhdWk7w6IThhuKJ+jL95JQ2IW7tRjRmdh8gKcKQtrHLD5R5lA=="], + "@turbo/linux-arm64": ["@turbo/linux-arm64@2.10.12", "", { "os": [ "linux", "android", ], "cpu": "arm64" }, "sha512-f0pZDTtvzB5SuNwuXBaKbZHUCMCukgc8nMlHEuvLmj91Fzec+MEbr3cAvGNor5htEDqZnO6Lxt9N/GPI/77oGA=="], - "@turbo/windows-64": ["@turbo/windows-64@2.10.11", "", { "os": "win32", "cpu": "x64" }, "sha512-4aD7edogJ8arK8DOyvjTI2KKwmchD5M/WM4BZgidrtFf7aSgn8Ce2rJnDwmriw980c2cKlHnhXtlGy38VtKB8g=="], + "@turbo/windows-64": ["@turbo/windows-64@2.10.12", "", { "os": "win32", "cpu": "x64" }, "sha512-SDOueJRjS/QcykWf2KCRtTLmIl5YMKsLbXkXQGhDwcTXvKXZiS5ih5lBl/gkwZIpYFjqA/rAlfMzlAFcVHNe0g=="], - "@turbo/windows-arm64": ["@turbo/windows-arm64@2.10.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-m8tJkIrTrbQ9O1uHxV0GUq623Zg1678xGna8eMsy4KbygUX/wVFgdZDYV/AxyoyaW/U7nyKoBvaDVwm22p9xqA=="], + "@turbo/windows-arm64": ["@turbo/windows-arm64@2.10.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-0i0mVUa4kKk+/B3RwEwPMf9CB+T7ul56hn5FFHNA4VUNTOoLBEd6aNf3FaKfCatDNZ6cicCEf6if9QUTVyzzcA=="], "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], @@ -2326,7 +2326,7 @@ "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], - "turbo": ["turbo@2.10.11", "", { "optionalDependencies": { "@turbo/darwin-64": "2.10.11", "@turbo/darwin-arm64": "2.10.11", "@turbo/linux-64": "2.10.11", "@turbo/linux-arm64": "2.10.11", "@turbo/windows-64": "2.10.11", "@turbo/windows-arm64": "2.10.11" }, "bin": { "turbo": "bin/turbo" } }, "sha512-yQfwQVoRXwOuyX1LxiJFBFNg6VfuYh+/RyZLd82+isgyLkBXw3S5XRRzvcck1FAjSCG5sVyLd+O1eDMvYa3J7g=="], + "turbo": ["turbo@2.10.12", "", { "optionalDependencies": { "@turbo/darwin-64": "2.10.12", "@turbo/darwin-arm64": "2.10.12", "@turbo/linux-64": "2.10.12", "@turbo/linux-arm64": "2.10.12", "@turbo/windows-64": "2.10.12", "@turbo/windows-arm64": "2.10.12" }, "bin": { "turbo": "bin/turbo" } }, "sha512-AswgMPnpOoaVZHrrSBejETzEbuIA69OVGwfkHwfrY0A23VjWXBANzgq9+OymWOHAIArB7D1+1z498WY8fGg1Jw=="], "type-fest": ["type-fest@5.8.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA=="], diff --git a/package.json b/package.json index 8c8476a..36ccfdb 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ "markforge:test": "bun test --cwd packages/markforge" }, "devDependencies": { - "@turbo/gen": "^2.9.8", - "prettier": "^3.1.1", - "turbo": "^2.10.7" + "@turbo/gen": "^2.10.12", + "prettier": "^3.9.6", + "turbo": "^2.10.12" }, "engines": { "node": ">=18" @@ -31,7 +31,6 @@ "apps/cli/*", "packages/*" ], - "overrides": { "react-native": "0.86.2", "react-native-reanimated": "4.5.1", diff --git a/packages/markforge/CHANGELOG.md b/packages/markforge/CHANGELOG.md index 3438abb..10e72ca 100644 --- a/packages/markforge/CHANGELOG.md +++ b/packages/markforge/CHANGELOG.md @@ -7,9 +7,68 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.5.0] - 2026-09-03 + +### Plain Text (.txt) Document Publishing Engine + +- **Plain Text (.txt) Output Format**: + - Added native support for compiling Markdown documents into structured plain text files (`OutputFormat.TXT` or `"txt"` in `to:` array / `--to txt`). + - Structured document rendering with centered title banner, Table of Contents, double (`=`) and single (`-`) divider rules, callout tags (`| [NOTE]`), blockquotes (`> text`), code blocks with language annotations, and task item checkboxes (`[x]` / `[ ]`). + - ASCII grid-aligned tables with dynamic column width calculation and text padding. + - Complete support for footnotes (`[1] text`), approval signatures, and back cover closing card with dynamic metadata token replacement. + - Terminal CLI and Ink UI integration with green badge color highlighting for `[TXT]` documents in the compilation summary table. + +--- + +## [0.4.1] - 2026-08-30 + +### Enhancements, Security, CLI, and Configuration Refinements + +- **Watermark Suppression on Front & Back Covers**: + - Excluded the vector/PNG watermark overlay from both the Front Cover Page (page 0) and the Back Cover Closing Page (final page) in PDF generation. + - Suppressed the HTML fixed canvas watermark in print media (`@media print { .document-watermark { display: none !important; } }`) to ensure only explicit `pdf-lib` page indexing controls watermark rendering. +- **Symmetric & Unified Cover & Back Cover Styling Configuration**: + - Unified configuration property names across `CoverPageConfig` and `BackCoverConfig` for complete API consistency. + - Added support for `backgroundColor`, `bgGradient`, `textColor`, `titleColor`, `subtitleColor`, `accentColor`, `badge`, `badgeColor`, `badgeTextColor`, `logo`, `logoWidth`, `footerText`, `copyright`, `address`, `email`, `phone`, `website`, and `social` across front and back covers in HTML, PDF, and DOCX. +- **Heading Color Harmonization (`h1` through `h6`)**: + - Unified all heading levels (`h1`, `h2`, `h3`, `h4`, `h5`, `h6`) to use brand primary dark styling (`var(--mf-primary-dark)`) across HTML, PDF, and DOCX for visual consistency. + - `h1`: 2.5px solid primary border underline; `h2`: 1px subtle teal border underline. +- **Strict Package.json Version Resolution**: + - Removed fallback version constant in `version.ts`. The engine now resolves version strictly from the nearest `@masumdev/markforge` `package.json` at runtime and throws an explicit error if missing or unreadable. +- **Comprehensive Terminal CLI Parameter & Configuration Banner**: + - Ink CLI header box and Live Preview banner (`--serve`) now display all resolved configuration details: source path, config path, visual theme, syntax highlighter, layout, output directory, and active module list (TOC, Numbering, Cover, BackCover, Watermark, Security, Math, Syntax). +- **Arbitrary Dynamic Metadata & Nested Record Token Interpolation**: + - Enhanced `replaceDocumentTokens` to dynamically unpack and replace tokens defined in top-level `metadata` or nested `metadata` dictionaries (e.g. `{metakuda}` or `{custom_key}`). + - Fixed AST parser inline text chunking to merge adjacent plain text spans, ensuring token names containing underscores (`_`) or hyphens are not split across separate tokens. +- **Table of Contents (TOC) Page Break Isolation**: + - Table of Contents is now fully isolated from subsequent document body content via `page-break-after: always; break-after: page;` in PDF/HTML and a dedicated section break in Microsoft Word DOCX. +- **Academic & Enterprise Page Numbering Schema**: + - Front Cover: Unnumbered, running headers/footers suppressed. + - Table of Contents: Formal lowercase Roman numerals (`i`, `ii`, ...). + - Main Document Body: Counter reset (`counter-reset: page 1;`) with standard decimal numbers (`1, 2, ...`). + - Back Cover: Unnumbered, isolated final closing section. +- **Config-Driven Section Numbering (`numberHeadings`)**: + - Propagated top-level configuration options (`numberHeadings: { enabled, depth, skipH1, prefix }`) directly into AST parsing and compilation across HTML, PDF, and DOCX. + +--- + +## [0.4.0] - 2026-08-29 + +### Major Enterprise Features & Security Release + +- **ISO 32000-2 AES-256 PDF Security & Password Encryption (`security`)**: + - Native standard PDF encryption with independent `userPassword` (password required to open the document) and `ownerPassword` (master password required to modify document permissions). + - Granular permissions enforcement: `printing`, `modifying`, `copying`, `annotating`, `fillingForms`, `contentAccessibility`, and `documentAssembly`. +- **Closing Page / Back Cover Builder (`backCover`)**: + - Dedicated closing page builder supporting presets (`corporate`, `modern`, `minimal`, `card`), custom backgrounds, logos, company details, and social channels. +- **Multi-Signatory Approval Block (`signatureBlock`)**: + - Multi-column signature blocks with custom alignment (`left`, `center`, `right`, `space-between`, `grid`), border styles (`line`, `box`, `card`), and digital signature support across DOCX, PDF, and HTML. + +--- + ## [0.2.3] - 2026-08-28 -### 🛠️ Fixed +### Fixed - **Node.js 22/25 `--localstorage-file` warning**: The `docx` library accesses `globalThis.localStorage` during its module evaluation. In ESM, static `import` declarations are evaluated before any user code in the entry point. Refactored `cli.tsx` to dynamically import `App`, `Ink`, and `loadConfig`, ensuring the `globalThis.localStorage` stub is active before `docx` is loaded by Node.js. - **CLI Compilation Error (`expected input to be a string or buffer`)**: Fixed a prop name mismatch in `cli.tsx` where `inputPath` was passed instead of `inputFile` to the Ink `` component. @@ -19,68 +78,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.2.2] - 2026-08-28 -### 🛠️ Fixed +### Fixed -- **CLI warning still showing after 0.2.1**: The `--localstorage-file` warning suppression in `cli.tsx` was broken due to incorrect listener registration order. `process.removeAllListeners("warning")` was called *after* `process.on("warning", handler)`, which immediately removed the handler we just added. Fixed by calling `removeAllListeners` **before** registering the filter handler. -- **Dynamic version**: `MARKFORGE_VERSION` in `version.ts` is now resolved at runtime by walking up the directory tree to find `package.json`. The hardcoded string is only a fallback. Version bumps in `package.json` are now automatically reflected in `markforge -V` output without needing to touch `version.ts`. +- **CLI warning still showing after 0.2.1**: The `--localstorage-file` warning suppression in `cli.tsx` was broken due to incorrect listener registration order. Fixed by calling `removeAllListeners` before registering the filter handler. +- **Dynamic version**: `MARKFORGE_VERSION` in `version.ts` is now resolved at runtime by walking up the directory tree to find `package.json`. --- ## [0.2.1] - 2026-08-28 -### 🛠️ Fixed +### Fixed -- **Windows PDF not using Chromium (fallback)**: `findChromeExecutable()` now resolves Windows browser paths using runtime environment variables instead of hardcoded strings: - - `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe` — user-level Chrome install (most common on Windows) - - `%PROGRAMFILES%\Google\Chrome\Application\chrome.exe` — system-level Chrome - - `%LOCALAPPDATA%\Microsoft\Edge\Application\msedge.exe` — Microsoft Edge (bundled with Windows 10/11) - - `%PROGRAMFILES%\Microsoft\Edge\Application\msedge.exe` — system Edge - - `%LOCALAPPDATA%\Chromium\Application\chrome.exe` — Chromium standalone - - Also added `where chrome` and `where msedge` to PATH search on Windows. - - Set `CHROME_PATH` or `PUPPETEER_EXECUTABLE_PATH` env variable to override auto-detection. -- **CLI `--localstorage-file` warning**: Suppressed the noisy Bun startup warning `--localstorage-file was provided without a valid path`. This fired because Bun's built-in localStorage API is enabled by default but no file path was configured. MarkForge never uses localStorage, so the warning is harmless — it is now silently filtered at process startup. -- **Mermaid renderer**: Added `--virtual-time-budget=5000` and `--disable-software-rasterizer` flags to Chromium invocation for more reliable diagram capture on Windows and lower-end hardware. +- **Windows PDF not using Chromium (fallback)**: `findChromeExecutable()` now resolves Windows browser paths using runtime environment variables. +- **CLI `--localstorage-file` warning**: Suppressed the noisy Bun startup warning. +- **Mermaid renderer**: Added `--virtual-time-budget=5000` and `--disable-software-rasterizer` flags to Chromium invocation. --- ## [0.2.0] - 2026-08-27 -### 🚀 Added +### Added -- **Mermaid Diagram Support**: Full Mermaid.js rendering for all output formats. Diagrams in ` ```mermaid ``` ` blocks are rasterized via headless browser and embedded as images in DOCX, PDF, and HTML. Configurable `--virtual-time-budget=8000ms` ensures complex diagrams fully render before capture. -- **Callout / Alert Boxes**: GitHub-flavored callout syntax (`> [!NOTE]`, `> [!TIP]`, `> [!WARNING]`, `> [!CAUTION]`, `> [!IMPORTANT]`) now renders with colored left-border and background in all three output formats. -- **Watermark Configuration**: Optional per-document watermark support via `markforge.config.ts` or frontmatter. Disabled by default. Configurable text, opacity, and position (`diagonal`, `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right`). -- **Multi-Zone Header & Footer**: Left / Center / Right header and footer zones now work correctly in both DOCX (via OpenXML tab-stop logic) and PDF (via CSS Paged Media `@top-*` / `@bottom-*` rules). -- **`THEME_COMPONENTS` Base Layer**: Extracted all shared component CSS (callouts, blockquotes, code blocks, tables, images, TOC, document header) into a `THEME_COMPONENTS` constant that is always injected regardless of the chosen theme. Fixes missing styles in `academic` and other non-default themes. +- **Mermaid Diagram Support**: Full Mermaid.js rendering for all output formats. +- **Callout / Alert Boxes**: GitHub-flavored callout syntax across all output formats. +- **Watermark Configuration**: Optional per-document watermark support via configuration or frontmatter. +- **Multi-Zone Header & Footer**: Left / Center / Right header and footer zones. +- **`THEME_COMPONENTS` Base Layer**: Extracted shared component CSS. -### 🎨 Changed +### Changed -- **Primary Color Palette**: Updated to Blu by BCA Digital cyan — primary `#33CDCF`, deep `#009DA0`, tint `#ECFDFD` — across all themes and component styles. -- **Dual Syntax Highlight Themes**: - - **PDF / HTML (dark)**: New VS Code Dark+-inspired palette — strings in warm orange `#E07C4F`, keywords in coral `#FF7B72`, plain text in light gray `#E2E8F0`. All colors have sufficient contrast on dark `#0f172a` backgrounds. - - **DOCX (light)**: GitHub Light-inspired palette — strings in forest teal `#0A7E5C`, keywords in crimson `#D73A49`, plain text near-black `#24292E`. All colors readable on white backgrounds. - - `tokenizeCodeLine()` now accepts a `theme: "dark" | "light"` parameter. `docxBuilder` passes `"light"`, HTML/PDF builders use `"dark"` (default). -- **PDF Code Block Scrollbar Removed**: Added `@media print { pre { overflow: visible; white-space: pre-wrap; } }` — scrollbars no longer appear in PDF output. -- **Callout Inline Styles**: Callout boxes now use inline `style` attributes for background and border colors (in addition to CSS classes). This bypasses Chromium's headless PDF background-graphics suppression, ensuring colors render without needing `--print-background-graphics`. -- **`THEME_ACADEMIC`**: Now includes a full `:root` CSS variable block compatible with `THEME_COMPONENTS` (adds `--mf-card-bg`, `--mf-primary`, `--mf-border`, etc.), enabling all component styles to apply correctly. +- **Primary Color Palette**: Updated to Blu by BCA Digital cyan (`#33CDCF`, `#009DA0`, `#ECFDFD`). +- **Dual Syntax Highlight Themes**: VS Code Dark+ for PDF/HTML and GitHub Light for DOCX. +- **PDF Code Block Scrollbar Removed**: Added print stylesheet overrides. +- **Callout Inline Styles**: Callout boxes use inline style attributes to ensure print background rendering. -### 🛠️ Fixed +### Fixed -- **PDF Header/Footer not rendering**: Refactored `injectPagedMediaStyles` in `pdfBuilder.ts` to inject frontmatter header/footer config into CSS `@page` rules using `@top-left`, `@top-center`, `@top-right`, `@bottom-*` selectors. -- **DOCX Header/Footer single-zone bug**: Implemented `TabStopType` logic to correctly split headers into Left/Center/Right zones using tab characters in OpenXML paragraphs. -- **Callout styles missing in PDF**: Root cause was `THEME_ACADEMIC` missing component CSS. Fixed by the `THEME_COMPONENTS` extraction and injection approach. -- **Chromium PDF color suppression**: Added `--force-color-profile=srgb` Chrome flag. Callout box colors now render with inline styles that bypass print background suppression. +- **PDF Header/Footer not rendering**: Refactored CSS Paged Media `@page` injection. +- **DOCX Header/Footer single-zone bug**: Implemented `TabStopType` logic. +- **Callout styles missing in PDF**: Injected base component styles. +- **Chromium PDF color suppression**: Added `--force-color-profile=srgb` Chrome flag. --- ## [0.1.0] - 2026-08-27 -### 🚀 Initial Release +### Initial Release - **Multi-Format Document Engine**: Full compiler pipeline producing Microsoft Word (`.docx`), Print-ready (`.pdf`), and Standalone (`.html`). -- **Embedded HTML & CSS Support**: Native parsing of inline HTML tags (`
`, ``, ``, ``, `