{
  "$comment": "Machine-readable inventory of the live playgrounds (docs/playgrounds/*.html, redirect stubs excluded). Hand-maintained; the playgrounds-manifest rule of scripts/verify-docs.ts checks that every live page is listed and every listed page exists, and that the count equals derived.playgrounds in docs/assets/ecosystem.json. Control ids are DOM ids on the page. selfContained: true means every code view of the page (the CODE object shown in #code-view and copied by the Copy button) declares all it uses and imports only from 'pdfnative', so it reproduces the result outside the browser; tests/docs/playgrounds.test.ts runs each such view in Node and locks that promise. false carries a note saying why the page is not covered.",
  "verifiedOn": "2026-09-27",
  "engine": "pdfnative@1.8.0 loaded from a CDN (esm.sh, jsdelivr or unpkg); nothing runs server-side",
  "playgrounds": [
    {
      "id": "extreme-scripts",
      "file": "extreme-scripts.html",
      "url": "https://pdfnative.dev/playgrounds/extreme-scripts.html",
      "title": "Extreme scripts",
      "purpose": "Stress the shaping pipeline: BiDi mixing, UAX #9 embeddings, colour emoji, Tamil and Bengali conjuncts, Arabic harakat, and Tai Tham and Cham through the Universal Shaping Engine.",
      "since": "1.3.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["bidi", "embeddings", "emoji", "tamil", "bengali", "harakat", "use"] },
        { "id": "title", "kind": "text", "meaning": "document title" },
        { "id": "heading", "kind": "text", "meaning": "H1 text" },
        { "id": "body", "kind": "textarea", "meaning": "body paragraphs, blank line separated" },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["registerFonts", "loadFontData", "buildDocumentPDFBytes", "downloadBlob", "params.fontEntries", "shaping.bidi", "shaping.use (nod, cjm)", "shaping.arabic", "shaping.indic", "shaping.emoji (COLRv1)"],
      "codeView": "#code-view",
      "selfContained": false,
      "note": "The code view is assembled from the form inputs at runtime and registers its fonts from esm.sh URLs, so it is not run by tests/docs/playgrounds.test.ts; it reproduces the result once those URLs are replaced by pdfnative/fonts/* imports.",
      "diagnostics": null,
      "output": "PDF offered as a download; status and timing in #status and #timer"
    },
    {
      "id": "all-scripts",
      "file": "all-scripts.html",
      "url": "https://pdfnative.dev/playgrounds/all-scripts.html",
      "title": "All 27 scripts + emoji",
      "purpose": "One document mixing every supported script (27 lang keys incl. the five 1.8.0 additions lo, nod, khb, tdd, cjm) plus colour or monochrome emoji, routed per code point to 29 embedded fonts.",
      "since": "1.3.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["world-color", "world-mono", "greetings"] },
        { "id": "title", "kind": "text", "meaning": "document title" },
        { "id": "heading", "kind": "text", "meaning": "H1 text" },
        { "id": "body", "kind": "textarea", "meaning": "body paragraphs, blank line separated; #greetings-table is the data source of the greetings preset" },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["registerFonts", "loadFontData", "buildDocumentPDFBytes", "downloadBlob", "params.fontEntries", "font routing across 27 scripts", "shaping.indic (hi, bn, ta, te, si — one OpenType engine since 1.8.0)", "shaping.use (nod, cjm)", "shaping.lao", "shaping.latin-marks (Yoruba and Igbo tone marks on the latin module)", "shaping.emoji (COLRv1 and monochrome)", "font subsetting (CIDFont Type2, Identity-H)"],
      "codeView": "#code-view",
      "selfContained": false,
      "note": "The code view is assembled from the form inputs at runtime and registers its fonts from esm.sh URLs, so it is not run by tests/docs/playgrounds.test.ts; it reproduces the result once those URLs are replaced by pdfnative/fonts/* imports.",
      "diagnostics": null,
      "output": "PDF offered as a download; status and timing in #status and #timer"
    },
    {
      "id": "toolkit",
      "file": "toolkit.html",
      "url": "https://pdfnative.dev/playgrounds/toolkit.html",
      "title": "PDF Toolkit",
      "purpose": "Bookmarks, page labels and viewer preferences; nested lists and cell borders; merge, split and extract pages; fill and flatten an encrypted AcroForm; merge and re-encrypt; extract text with positions.",
      "since": "1.4.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["bookmarks", "layout", "manipulation", "formfill", "secure", "extract"] },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["buildDocumentPDFBytes", "params.outline", "params.pageLabels", "layout.viewerPreferences", "list nesting", "table cellBorders and cellVAlign", "mergePdfs", "splitPdf", "extractPages", "fillForm", "flattenForm", "layout.encryption", "MergeOptions.encrypt", "extractText", "downloadBlob"],
      "codeView": "#code-view",
      "selfContained": true,
      "diagnostics": null,
      "output": "PDF offered as a download; the extract preset also prints the text in #extract-output"
    },
    {
      "id": "inspect",
      "file": "inspect.html",
      "url": "https://pdfnative.dev/playgrounds/inspect.html",
      "title": "Inspect & verify",
      "purpose": "Read a dropped PDF entirely in the tab: overview and /Info, extracted text (honouring /ActualText), PDF/UA structure, PDF/X structure, signature inventory and form fields; or build a tagged sample in the page.",
      "since": "1.6.0",
      "requires": ["a PDF file dropped on #dropzone or chosen with #file-input — or click #sample-btn to build the in-page sample instead"],
      "controls": [
        { "id": "dropzone", "kind": "dropzone", "meaning": "drop a PDF file" },
        { "id": "file-input", "kind": "file", "meaning": "choose a PDF file" },
        { "id": "sample-btn", "kind": "button", "meaning": "build the tagged sample document in the tab and inspect it (enabled once the engine has loaded)" },
        { "id": "pdf-password", "kind": "password", "meaning": "password for an encrypted file; shown in #password-row when needed" },
        { "id": "password-apply", "kind": "button", "meaning": "unlock and inspect" }
      ],
      "exercises": ["openPdf", "findStartxref", "extractText (includeRuns, /ActualText)", "validatePdfUA", "validatePdfX", "listSignatures", "readFormFields", "PdfPasswordError", "buildDocumentPDFBytes (tagged sample with a justified paragraph and an svg block with alt)", "setDefaultCreationDate"],
      "codeView": null,
      "selfContained": false,
      "note": "No code view: the page reads a dropped PDF and renders report cards.",
      "diagnostics": null,
      "output": "report cards in #report: #overview-body, #text-body, #ua-body (#ua-verdict), #x-body (#x-verdict), #sigs-body, #forms-body; each card has a Raw JSON details block"
    },
    {
      "id": "charts",
      "file": "charts.html",
      "url": "https://pdfnative.dev/playgrounds/charts.html",
      "title": "Charts",
      "purpose": "Native vector charts: bar, line, pie, donut, a dashboard, and the 1.7.0 charts v2 (stacked, area, scatter, data labels).",
      "since": "1.2.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["bar", "line", "pie", "donut", "mixed", "v2"] },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["buildDocumentPDFBytes", "chart block (bar, barH, line, pie, donut, stackedBar, stackedBarH, area, scatter)", "chart.series", "chart.alt under layout.tagged", "downloadBlob"],
      "codeView": "#code-view",
      "selfContained": true,
      "diagnostics": null,
      "output": "PDF offered as a download; status and timing in #status and #timer"
    },
    {
      "id": "authoring-plus",
      "file": "authoring-plus.html",
      "url": "https://pdfnative.dev/playgrounds/authoring-plus.html",
      "title": "Authoring+",
      "purpose": "SVG text labels, the layout debug overlay and inspectDocumentLayout(), markup annotations written and read back, the bundled math font, page labels round trip, and control-character hardening.",
      "since": "1.5.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["svgtext", "debug", "annotations", "math", "pagelabels", "controlchars"] },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["buildDocumentPDFBytes", "svg block with <text>", "layout.debug", "inspectDocumentLayout", "openPdf", "createModifier", "buildAnnotationBody", "getAnnotations", "registerFont (math)", "getPageLabels", "control-character sanitisation", "downloadBlob"],
      "codeView": "#code-view",
      "selfContained": false,
      "note": "Two of the six code views do not run standalone: 'math' registers the math font from an esm.sh URL instead of pdfnative/fonts/noto-sans-math-data.js, and 'annotations' calls downloadBlob without importing it. The other four (svgtext, debug, pagelabels, controlchars) are self-contained. Not run by tests/docs/playgrounds.test.ts until the two views are fixed.",
      "diagnostics": null,
      "output": "PDF offered as a download; read-back results in #status"
    },
    {
      "id": "scale",
      "file": "scale.html",
      "url": "https://pdfnative.dev/playgrounds/scale.html",
      "title": "Scale",
      "purpose": "Stream up to 100,000 lean pages from an ES-module Web Worker with buildDocumentPDFStreamTrue, measuring pages per second, bytes per page and peak memory; works on pdfnative.dev, disabled on file:// origins.",
      "since": "1.6.0",
      "requires": ["an http(s) origin (ES-module Workers are blocked on file://)", "for 100,000 pages: tick #confirmBig and enough memory (several hundred MB inside the worker)"],
      "controls": [
        { "id": "pageCount", "kind": "select", "values": ["1000", "10000", "50000", "100000"] },
        { "id": "sinkDownload", "kind": "radio", "meaning": "output sink: download; siblings #sinkDisk (save to disk) and the measure-only default" },
        { "id": "chunkSize", "kind": "select", "values": ["65536", "262144", "1048576"] },
        { "id": "verifyPages", "kind": "checkbox", "meaning": "count /Type /Page headers in the emitted bytes" },
        { "id": "confirmBig", "kind": "checkbox", "meaning": "acknowledge the memory cost of 100,000 pages" },
        { "id": "generate", "kind": "button" },
        { "id": "cancel", "kind": "button", "meaning": "terminate the worker" }
      ],
      "exercises": ["buildDocumentPDFStreamTrue", "Web Worker dispatch", "pageBreak block", "chunked streaming (chunkSize)", "measured page count"],
      "codeView": null,
      "selfContained": false,
      "note": "No code view: the page drives a Web Worker and reports measurements.",
      "diagnostics": null,
      "output": "progress in #phases and result tiles #rPages, #rBytes, #rTime, #rRate, #rPerPage, #rMem; PDF downloaded or saved when a file sink is chosen"
    },
    {
      "id": "cli",
      "file": "cli.html",
      "url": "https://pdfnative.dev/playgrounds/cli.html",
      "title": "CLI builder",
      "purpose": "Compose a pdfnative-cli command (render, sign, verify, inspect, merge, split, extract-pages, annotate, fill, encrypt, decrypt, extract-text, metadata, ltv, doc-timestamp, compare, batch, govern-verify…) from a form and copy it; nothing runs in the browser.",
      "since": "1.3.0",
      "requires": ["pdfnative-cli installed (npx pdfnative-cli) to run the generated command outside the page"],
      "controls": [
        { "id": "preset", "kind": "select", "meaning": "worked examples that fill the form; one option value per scenario (render-basic, render-pdfa, sign-meta, verify-strict, merge-basic, ltv-add, doc-timestamp-lta, compare-ci, batch-manifest…; v1.5.0 presets render-typography, render-pdfx4-cmyk, render-font-file, render-reproducible, render-dry-run, inspect-pdfx, annotate-link, sign-timestamp-timeout, verify-weak-digest, doctor-conformance, global-flags-first)" },
        { "id": "cmd-output", "kind": "code", "meaning": "the generated shell command" },
        { "id": "copy", "kind": "button", "meaning": "copy #cmd-output to the clipboard" },
        { "id": "reset", "kind": "button" },
        { "id": "validation", "kind": "status", "meaning": "form validation messages" }
      ],
      "exercises": ["pdfnative-cli command surface (21 commands)", "JSON-in/JSON-out flags", "PAdES ladder (sign, ltv, doc-timestamp)", "shell completion (#co-shell)", "v1.5.0 render flags: --split-paragraphs, --keep-headings-with-next, --kerning, --font-features, --pdfx pdfx4, --output-intent-icc, --output-intent-id, --trapped, --font-file", "global --creation-date (SOURCE_DATE_EPOCH fallback) and global flags placed before the command (#gl-position)", "inspect --pdfx / --check pdfx / --iso-dates; annotate link; sign --timestamp-timeout; verify weak-digest note; doctor fonts / unicode / conformance"],
      "codeView": "#cmd-output",
      "selfContained": false,
      "note": "The code view is a pdfnative-cli shell command, not a pdfnative program; it runs wherever pdfnative-cli is installed.",
      "diagnostics": "#validation",
      "output": "a shell command string; no PDF is produced in the page"
    },
    {
      "id": "mcp",
      "file": "mcp.html",
      "url": "https://pdfnative.dev/playgrounds/mcp.html",
      "title": "MCP explorer",
      "purpose": "Client configuration snippets for pdfnative-mcp and one card per tool with an example prompt, the pdfnative payload the page executes, and a Generate button that builds the PDF the assistant would receive.",
      "since": "1.3.0",
      "requires": [],
      "controls": [
        { "id": "config-output", "kind": "code", "meaning": "MCP servers config for the selected client (Claude Desktop, Cursor, Continue, Zed)" },
        { "id": "copy-config", "kind": "button", "meaning": "copy #config-output to the clipboard" },
        { "id": "cards", "kind": "container", "meaning": "tool cards; each has data-action buttons (generate, copy-args) and a [data-status] line" }
      ],
      "exercises": ["pdfnative-mcp tool surface (28 tools)", "buildDocumentPDFBytes", "mergePdfs", "splitPdf", "extractPages", "annotations", "update metadata", "inspectDocumentLayout", "governance issue draft validation", "layout.typography", "PDF/X-4 (layout.pdfx, outputIntent, colour bars)", "validatePdfX", "validatePdfUA", "inspect_pdf pdfX claim", "27 scripts (lo, nod, khb, tdd, cjm)", "reproducible output (creationDate, SHA-256)", "operator environment (12 variables, #env-panel)", "7 MCP prompts (#prompts-panel)"],
      "codeView": "#config-output",
      "selfContained": false,
      "note": "The code view is an MCP client configuration, not a pdfnative program; the per-card payloads are tool arguments for pdfnative-mcp.",
      "diagnostics": null,
      "output": "PDF offered as a download per card; JSON reports for inspect_layout and draft_governance_issue"
    },
    {
      "id": "react",
      "file": "react.html",
      "url": "https://pdfnative.dev/playgrounds/react.html",
      "title": "React renderer",
      "purpose": "Edit JSX and render a PDF in the browser with pdfnative-react (React 19 reconciler to pdfnative blocks), including charts v2 and print production presets, plus the DocSpec alternative.",
      "since": "1.5.0",
      "requires": ["React 19, pdfnative-react 1.3.0 and Babel standalone loaded from the CDN by the page"],
      "controls": [
        { "id": "rx-preset", "kind": "select", "values": ["invoice", "report", "multilingual", "charts-v2", "print", "typography-justify", "print-pdfx4-cmyk", "reproducible-creationDate", "scripts-27", "lint-gate"] },
        { "id": "rx-editor", "kind": "textarea", "meaning": "JSX source" },
        { "id": "rx-run", "kind": "button", "meaning": "render the PDF" },
        { "id": "rx-reset", "kind": "button" },
        { "id": "rx-copy", "kind": "button", "meaning": "copy the JSX" },
        { "id": "rx-download", "kind": "button", "meaning": "download the rendered PDF" }
      ],
      "exercises": ["pdfnative-react components (Document, Table, Barcode, Chart)", "registerFont (Arabic)", "charts v2", "print production (bleed, marks)", "DocSpec (compileSpec, renderSpecToBytes)", "Document typography + Heading keepWithNext + Paragraph align=\"justify\" splittable (typography-justify)", "Document pdfx=\"pdfx4\" + outputIntent (synthetic prtr ICC) + metadata.trapped + print.marks.colourBars, CMYK colours, resolveFonts, lintDocument, validatePdfX (print-pdfx4-cmyk)", "Document creationDate: two renderToBytes runs compared by length + SHA-256 (reproducible-creationDate)", "resolveFonts for Lao and Cham font modules (scripts-27)", "lintDocument + Object.keys(LINT_RULES).length read live, fixed tree re-linted and rendered (lint-gate)"],
      "codeView": "#rx-editor",
      "selfContained": false,
      "note": "The code view is JSX compiled by Babel standalone and rendered through pdfnative-react in the page; it needs React 19 and pdfnative-react outside the browser.",
      "diagnostics": "#rx-status",
      "output": "PDF preview in #rx-preview and a download via #rx-download"
    },
    {
      "id": "typography",
      "file": "typography.html",
      "url": "https://pdfnative.dev/playgrounds/typography.html",
      "title": "Typography",
      "purpose": "Generate the same document with and without each layout.typography option and read the diagnostics every build raises through layout.onDiagnostic.",
      "since": "1.8.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["breaks", "shortwords", "justify", "spacing", "hyphenation", "metrics", "kerning", "figures", "figures-tnum"] },
        { "id": "apply", "kind": "checkbox", "meaning": "generate with (checked) or without the option" },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["layout.typography.splitParagraphs", "layout.typography.orphans", "layout.typography.widows", "layout.typography.keepHeadingsWithNext (true and { minLines: 3 })", "layout.typography.bindShortWords", "layout.typography.opticalMargins", "layout.typography.unitBinding", "layout.typography.punctuationSpacing", "setHyphenationProvider", "layout.typography.hyphenationLanguage", "soft hyphens (U+00AD)", "layout.typography.metrics: 'exact'", "layout.typography.kerning", "layout.typography.fontFeatures", "layout.onDiagnostic", "TYPOGRAPHY_FEATURE_INEFFECTIVE", "registerFonts", "loadFontData"],
      "codeView": "#code-view",
      "selfContained": true,
      "diagnostics": "#diagnostics",
      "output": "PDF offered as a download (typography-<preset>-on.pdf or -off.pdf); diagnostics rendered in #diagnostics"
    },
    {
      "id": "print",
      "file": "print.html",
      "url": "https://pdfnative.dev/playgrounds/print.html",
      "title": "Print & PDF/X",
      "purpose": "Bleed and printer's marks, CMYK colours, a CMYK OutputIntent (the user's profile or the inlined synthetic one), a PDF/X-4 claim with its validatePdfX() report, and the coherence errors the builder throws.",
      "since": "1.8.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["bleed", "cmyk", "pdfa", "pdfx", "errors"] },
        { "id": "icc", "kind": "file", "meaning": "optional output ICC profile (.icc/.icm); when empty the synthetic CMYK profile inlined in the page is used — it characterises no press" },
        { "id": "bars", "kind": "checkbox", "meaning": "colour bars in a 5 mm bleed instead of plain marks in 3 mm" },
        { "id": "claim", "kind": "checkbox", "meaning": "cmyk preset only: add tagged: 'pdfa2b' under the default sRGB intent so PDFA_DEVICE_CMYK_CONTENT is raised in #diagnostics" },
        { "id": "generate", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["layout.print.bleed", "layout.print.marks", "layout.print.marks.colourBars", "layout.pageWidth and pageHeight from PAGE_SIZES", "CMYK colours ([c, m, y, k] percent)", "layout.outputIntent", "layout.tagged: 'pdfa2b' under a CMYK intent", "layout.pdfx: 'pdfx4'", "validatePdfX", "PDF/X coherence errors (pdfx + tagged, pdfx + encryption, missing outputIntent, metadata.trapped: 'Unknown')", "registerFonts", "loadFontData"],
      "codeView": "#code-view",
      "selfContained": true,
      "diagnostics": "#diagnostics",
      "output": "PDF offered as a download (print-<preset>.pdf); every build's layout.onDiagnostic output is rendered in #diagnostics; the pdfx preset prints the validatePdfX() report and the errors preset prints the thrown messages in #report"
    },
    {
      "id": "reproducible",
      "file": "reproducible.html",
      "url": "https://pdfnative.dev/playgrounds/reproducible.html",
      "title": "Reproducible output",
      "purpose": "Build the same document twice with the creation instant pinned (layout.creationDate or setDefaultCreationDate), compare the SHA-256 of both builds, and flip one input — title, creation date or compression — to watch the digests diverge; copy-only snippets show the same pin for the CLI, the MCP server and React.",
      "since": "1.8.0",
      "requires": [],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["invoice", "report", "footer-date"] },
        { "id": "creation-date", "kind": "datetime-local", "meaning": "the pinned creation instant, read as UTC (default 2026-01-01T00:00)" },
        { "id": "flip", "kind": "select", "values": ["none", "title", "creation-date", "compress"], "meaning": "the one input the second build changes; none builds the same input twice" },
        { "id": "build", "kind": "button", "meaning": "build the preset twice and compare the SHA-256 of both builds" },
        { "id": "copy", "kind": "button", "meaning": "copy the code view to the clipboard" }
      ],
      "exercises": ["layout.creationDate", "setDefaultCreationDate", "getDefaultCreationDate", "footerTemplate {date}", "buildDocumentPDFBytes", "downloadBlob", "SHA-256 via crypto.subtle", "layout.onDiagnostic"],
      "codeView": "#code-view",
      "selfContained": true,
      "diagnostics": "#diagnostics",
      "output": "Build A offered as a download (reproducible-<preset>.pdf); SHA-256 of each build in #hash-a and #hash-b, identical/different in #verdict; build log and layout.onDiagnostic output rendered in #diagnostics"
    },
    {
      "id": "docspec-lint",
      "file": "docspec-lint.html",
      "url": "https://pdfnative.dev/playgrounds/docspec-lint.html",
      "title": "DocSpec lint",
      "purpose": "Paste or pick a DocSpec JSON, run pdfnative-react 1.3.0's validateSpec (shape tier) and lintSpec (37 rules) in the browser, read the report with rule ids and hints, fix the spec, and render a clean spec to a PDF with renderSpecToBytes.",
      "since": "1.8.0",
      "requires": [
        "React 19 and pdfnative-react 1.3.0 loaded from the CDN by the page"
      ],
      "controls": [
        { "id": "preset", "kind": "select", "values": ["valid-invoice", "pdfx-incoherent", "typography-ineffective", "tagged-no-fonts", "colour-bars-off-print", "schema-error"] },
        { "id": "spec", "kind": "textarea", "meaning": "DocSpec JSON" },
        { "id": "lint", "kind": "button", "meaning": "run validateSpec then lintSpec; report in #report" },
        { "id": "render", "kind": "button", "meaning": "renderSpecToBytes; enabled only when the last lint reported no error" },
        { "id": "reset", "kind": "button" },
        { "id": "copy", "kind": "button", "meaning": "copy the spec" },
        { "id": "download", "kind": "button", "meaning": "download the rendered PDF" },
        { "id": "rules", "kind": "table", "meaning": "the LINT_RULES table built at load; caption counts the rules live" }
      ],
      "exercises": ["validateSpec (V_ARITY, V_UNKNOWN_KIND, V_PAYLOAD_TYPE, V_BLOCK_SHAPE, V_UNKNOWN_FIELD)", "lintSpec", "LINT_RULES (37 rules)", "renderSpecToBytes", "DocSpec pdfx / outputIntent / typography / creationDate fields", "L_PDFX_TAGGED_CONFLICT, L_PDFX_OUTPUT_INTENT, L_PDFX_NO_FONTS, L_PDFX_ANNOTATIONS", "L_TYPOGRAPHY_INEFFECTIVE", "L_TAGGED_NO_FONTS", "L_PRINT_COLOUR_BARS"],
      "codeView": "#code-view",
      "selfContained": false,
      "note": "The code view is the equivalent Node snippet; the page itself runs validateSpec, lintSpec and renderSpecToBytes from the pdfnative-react CDN build, which needs React 19 and pdfnative-react outside the browser.",
      "diagnostics": "#report",
      "output": "PDF preview in #preview and a download via #download"
    }
  ]
}
