{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "paradoc",
  "homepage": "https://docs.paradoc.dev",
  "items": [
    {
      "name": "document-styles",
      "type": "registry:lib",
      "title": "Document Styles",
      "description": "Tailwind entry for document components; typography inherits from the application.",
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/styles.css",
          "type": "registry:file",
          "target": "styles/paradoc.css"
        }
      ]
    },
    {
      "name": "keep-together",
      "type": "registry:ui",
      "title": "Keep Together",
      "description": "The pagination unit. Content inside one is never split across a page break, and renders only on the page the plan put it on.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/keep-together.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/keep-together.tsx"
        }
      ]
    },
    {
      "name": "page-break",
      "type": "registry:ui",
      "title": "Page Break",
      "description": "Starts a new page at its position and occupies no height of its own. The plan opens a page there in both outputs, and a table's header still repeats on the page it opens.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/page-break.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/page-break.tsx"
        }
      ]
    },
    {
      "name": "document",
      "type": "registry:ui",
      "title": "Document",
      "description": "Binds one form artifact and its data to the components beneath it. The only component that knows how the artifact is loaded.",
      "dependencies": [
        "@paradoc/react@^0.6.0",
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/document.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/document.tsx"
        }
      ]
    },
    {
      "name": "bundle",
      "type": "registry:ui",
      "title": "Bundle",
      "description": "Groups the documents of one composition, mirroring the artifact hierarchy's outermost level.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/bundle.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/bundle.tsx"
        }
      ]
    },
    {
      "name": "part",
      "type": "registry:ui",
      "title": "Part",
      "description": "One document of a packet. It is the boundary between them, so each numbers its own pages and says where it sits in the packet.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/part.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/part.tsx"
        }
      ]
    },
    {
      "name": "pdf-pages",
      "type": "registry:ui",
      "title": "PDF Pages",
      "description": "A PDF part of a packet, painted page by page at its own paper size, or a named attachment card when it cannot be painted.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/pdf-pages.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/pdf-pages.tsx"
        }
      ]
    },
    {
      "name": "paper",
      "type": "registry:ui",
      "title": "Paper",
      "description": "One sheet at the document's page geometry, the scaled sheet the preview lays out, and the fit-to-width hook.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/paper.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/paper.tsx"
        }
      ]
    },
    {
      "name": "pages",
      "type": "registry:ui",
      "title": "Pages",
      "description": "Measures the document once and lays it out as paginated sheets. One tree, rendered once per page.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/paper"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/pages.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/pages.tsx"
        }
      ]
    },
    {
      "name": "page-number",
      "type": "registry:ui",
      "title": "Page Number",
      "description": "The page being drawn and how many there are, for a document's page furniture. The preview counts the sheets it laid out and the PDF engine fills the same two numbers.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/page-number.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/page-number.tsx"
        }
      ]
    },
    {
      "name": "section",
      "type": "registry:ui",
      "title": "Section",
      "description": "A titled container. It collapses on the pages that hold none of its keeps, so a continued page carries no empty heading.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/section.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/section.tsx"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "One labelled value at a path into the artifact, printed by the artifact's serializers. It never formats a value itself.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/field.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/field.tsx"
        }
      ]
    },
    {
      "name": "image",
      "type": "registry:ui",
      "title": "Image",
      "description": "A picture at a declared size, from its own bytes or from a source. The encoding is sniffed and one an engine cannot decode fails by name.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/image.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/image.tsx"
        }
      ]
    },
    {
      "name": "text",
      "type": "registry:ui",
      "title": "Text",
      "description": "Static prose in a named role — heading, body, caption, or small — sized and led by the document's typography token.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/text.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/text.tsx"
        }
      ]
    },
    {
      "name": "list",
      "type": "registry:ui",
      "title": "List",
      "description": "An ordered or unordered list whose markers are text, so both outputs draw the same ones. Every item is its own pagination unit.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/list.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/list.tsx"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "A list field as rows. Each row is its own pagination unit and the header repeats on every page the table continues onto.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/table.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/table.tsx"
        }
      ]
    },
    {
      "name": "totals",
      "type": "registry:ui",
      "title": "Totals",
      "description": "The artifact's computed amounts, evaluated by @paradoc/core and printed by the serializer each def's type names.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/totals.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/totals.tsx"
        }
      ]
    },
    {
      "name": "party",
      "type": "registry:ui",
      "title": "Party",
      "description": "One party of a declared role — name, organization, address, and contact — as a block or inline, through the shared formatter.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/party.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/party.tsx"
        }
      ]
    },
    {
      "name": "signature",
      "type": "registry:ui",
      "title": "Signature",
      "description": "A party's signing block. Its rule is the placeholder the core seal measures a flow-placed signature field from.",
      "dependencies": [
        "@paradoc/react@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/keep-together"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/signature.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/signature.tsx"
        }
      ]
    },
    {
      "name": "qr-code",
      "type": "registry:ui",
      "title": "QR Code",
      "description": "An SVG QR code that links a printed or previewed document to a URL, with configurable size and colors.",
      "dependencies": [
        "qrcode.react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/components/qr-code.tsx",
          "type": "registry:ui",
          "target": "components/paradoc/qr-code.tsx"
        }
      ]
    },
    {
      "name": "priced-line-items",
      "type": "registry:lib",
      "title": "Line-item arithmetic",
      "description": "Sample-owned row multiplication and subtotal arithmetic used by the priced document blocks.",
      "dependencies": [
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "paradoc/packages/components/src/examples/line-items.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/line-items.ts"
        }
      ]
    },
    {
      "name": "purchase-order",
      "type": "registry:block",
      "title": "Purchase Order",
      "description": "A whole document: the purchase order artifact with its React layer, the composition that binds it, and a sample order that runs to three pages.",
      "dependencies": [
        "@paradoc/react@^0.6.0",
        "@paradoc/core@^0.6.0",
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/document",
        "@paradoc/field",
        "@paradoc/page-number",
        "@paradoc/priced-line-items",
        "@paradoc/section",
        "@paradoc/signature",
        "@paradoc/table",
        "@paradoc/text",
        "@paradoc/totals"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/examples/purchase-order.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/purchase-order.artifact.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/purchase-order-data.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/purchase-order.data.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/purchase-order-document.tsx",
          "type": "registry:component",
          "target": "components/paradoc/purchase-order.tsx"
        }
      ]
    },
    {
      "name": "invoice",
      "type": "registry:block",
      "title": "Invoice",
      "description": "A whole document nothing signs: the invoice artifact with its React layer, the composition that brands it from its own tokens, and two samples — one that fits a page and one whose table runs past two breaks.",
      "dependencies": [
        "@paradoc/react@^0.6.0",
        "@paradoc/core@^0.6.0",
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/document",
        "@paradoc/field",
        "@paradoc/image",
        "@paradoc/page-number",
        "@paradoc/party",
        "@paradoc/priced-line-items",
        "@paradoc/section",
        "@paradoc/table",
        "@paradoc/text",
        "@paradoc/totals"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/examples/invoice.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/invoice.artifact.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/invoice-data.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/invoice.data.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/invoice-document.tsx",
          "type": "registry:component",
          "target": "components/paradoc/invoice.tsx"
        }
      ]
    },
    {
      "name": "engagement-letter",
      "type": "registry:block",
      "title": "Engagement Letter",
      "description": "A prose document: the engagement letter artifact with its React layer and two signature slots, the composition that renders its scope as numbered clauses, and one sample that runs to two pages.",
      "dependencies": [
        "@paradoc/react@^0.6.0",
        "@paradoc/core@^0.6.0",
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/document",
        "@paradoc/field",
        "@paradoc/list",
        "@paradoc/page-number",
        "@paradoc/party",
        "@paradoc/section",
        "@paradoc/signature",
        "@paradoc/text"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/examples/engagement-letter.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/engagement-letter.artifact.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/engagement-letter-data.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/engagement-letter.data.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/engagement-letter-document.tsx",
          "type": "registry:component",
          "target": "components/paradoc/engagement-letter.tsx"
        }
      ]
    },
    {
      "name": "vendor-packet",
      "type": "registry:block",
      "title": "Vendor Packet",
      "description": "A packet of three documents: the purchase order composed live, a filled W-9 painted from its PDF layer, and the vendor's certificate of insurance as an annex, whose bytes it ships.",
      "dependencies": [
        "@paradoc/react@^0.6.0",
        "@paradoc/core@^0.6.0",
        "@paradoc/types@^0.6.0"
      ],
      "registryDependencies": [
        "@paradoc/bundle",
        "@paradoc/pages",
        "@paradoc/part",
        "@paradoc/pdf-pages",
        "@paradoc/purchase-order"
      ],
      "files": [
        {
          "path": "paradoc/packages/components/src/examples/vendor-packet.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/vendor-packet.artifact.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/vendor-packet-annex.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/vendor-packet.annex.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/vendor-packet-data.ts",
          "type": "registry:file",
          "target": "artifacts/paradoc/vendor-packet.data.ts"
        },
        {
          "path": "paradoc/packages/components/src/examples/vendor-packet-document.tsx",
          "type": "registry:component",
          "target": "components/paradoc/vendor-packet.tsx"
        }
      ]
    }
  ]
}
