@pebble-software/bonsai 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +367 -88
  3. package/dist/chunks/button-CSLrIvsS.js +166 -0
  4. package/dist/chunks/button-CSLrIvsS.js.map +1 -0
  5. package/dist/chunks/create-renderer-1cky1uN9.js +280 -0
  6. package/dist/chunks/create-renderer-1cky1uN9.js.map +1 -0
  7. package/dist/chunks/render-shared-CIUUkLDn.js +2319 -0
  8. package/dist/chunks/render-shared-CIUUkLDn.js.map +1 -0
  9. package/dist/components/core/bonsai.d.ts +5 -0
  10. package/dist/components/core/render-shared.d.ts +123 -0
  11. package/dist/components/core/render-tree-client.d.ts +4 -0
  12. package/dist/components/core/render-tree-server.d.ts +2 -0
  13. package/dist/components/ui/a.d.ts +3 -0
  14. package/dist/components/ui/accordion.d.ts +17 -0
  15. package/dist/components/ui/alert-dialog.d.ts +23 -0
  16. package/dist/components/ui/alert.d.ts +12 -0
  17. package/dist/components/ui/avatar.d.ts +21 -0
  18. package/dist/components/ui/badge.d.ts +10 -0
  19. package/dist/components/ui/breadcrumb.d.ts +10 -0
  20. package/dist/components/ui/button.d.ts +14 -0
  21. package/dist/components/ui/calendar.d.ts +9 -0
  22. package/dist/components/ui/card.d.ts +15 -0
  23. package/dist/components/ui/checkbox.d.ts +7 -0
  24. package/dist/components/ui/collapsible.d.ts +5 -0
  25. package/dist/components/ui/combobox.d.ts +31 -0
  26. package/dist/components/ui/command.d.ts +23 -0
  27. package/dist/components/ui/dialog.d.ts +23 -0
  28. package/dist/components/ui/drawer.d.ts +22 -0
  29. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  30. package/dist/components/ui/form.d.ts +24 -0
  31. package/dist/components/ui/h.d.ts +10 -0
  32. package/dist/components/ui/input-group.d.ts +18 -0
  33. package/dist/components/ui/input-otp.d.ts +11 -0
  34. package/dist/components/ui/input.d.ts +3 -0
  35. package/dist/components/ui/label.d.ts +10 -0
  36. package/dist/components/ui/loader.d.ts +14 -0
  37. package/dist/components/ui/p.d.ts +11 -0
  38. package/dist/components/ui/popover.d.ts +9 -0
  39. package/dist/components/ui/progress.d.ts +31 -0
  40. package/dist/components/ui/scroll-area.d.ts +13 -0
  41. package/dist/components/ui/select.d.ts +17 -0
  42. package/dist/components/ui/separator.d.ts +8 -0
  43. package/dist/components/ui/sidebar.d.ts +70 -0
  44. package/dist/components/ui/signature-pad.d.ts +7 -0
  45. package/dist/components/ui/skeleton.d.ts +7 -0
  46. package/dist/components/ui/switch.d.ts +8 -0
  47. package/dist/components/ui/table.d.ts +14 -0
  48. package/dist/components/ui/tabs.d.ts +15 -0
  49. package/dist/components/ui/textarea.d.ts +5 -0
  50. package/dist/components/ui/toast.d.ts +46 -0
  51. package/dist/components/ui/tooltip.d.ts +15 -0
  52. package/dist/core.d.ts +12 -0
  53. package/dist/core.js +17 -0
  54. package/dist/core.js.map +1 -0
  55. package/dist/hooks/haptics.d.ts +8 -0
  56. package/dist/hooks/use-mobile.d.ts +1 -0
  57. package/dist/index.css +7 -0
  58. package/dist/index.d.ts +27 -339
  59. package/dist/index.js +1076 -4194
  60. package/dist/index.js.map +1 -0
  61. package/dist/lib/ast/cache.d.ts +8 -0
  62. package/dist/lib/ast/evaluator.d.ts +2 -0
  63. package/dist/lib/ast/helpers.d.ts +2 -0
  64. package/dist/lib/ast/index.d.ts +29 -0
  65. package/dist/lib/ast/setup.d.ts +2 -0
  66. package/dist/lib/ast/types.d.ts +1 -0
  67. package/dist/lib/ast/utils.d.ts +4 -0
  68. package/dist/lib/haptics.d.ts +8 -0
  69. package/dist/lib/registry/drift.d.ts +17 -0
  70. package/dist/lib/registry/identity.d.ts +24 -0
  71. package/dist/lib/registry/json-schema-to-zod.d.ts +32 -0
  72. package/dist/lib/registry/manifest-schema.d.ts +62 -0
  73. package/dist/lib/registry/manifest.d.ts +26 -0
  74. package/dist/lib/registry/merge-generated.d.ts +7 -0
  75. package/dist/lib/registry/pebble-registry.d.ts +1 -0
  76. package/dist/lib/registry/types.d.ts +29 -0
  77. package/dist/lib/registry/validate.d.ts +18 -0
  78. package/dist/lib/renderer/compile-template.d.ts +70 -0
  79. package/dist/lib/ui/registry.d.ts +19 -0
  80. package/dist/lib/utils.d.ts +3 -0
  81. package/dist/presets/calendar.js +373 -0
  82. package/dist/presets/calendar.js.map +1 -0
  83. package/dist/presets/signature.js +404 -0
  84. package/dist/presets/signature.js.map +1 -0
  85. package/dist/renderer/core-registry.d.ts +52 -0
  86. package/dist/renderer/create-renderer.d.ts +38 -0
  87. package/dist/renderer/presets/calendar.d.ts +5 -0
  88. package/dist/renderer/presets/signature.d.ts +6 -0
  89. package/dist/types.d.ts +1 -0
  90. package/package.json +47 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../library/schemas/src/common.ts","../../../library/schemas/src/api.schema.ts","../../../library/schemas/src/bonsai.schema.ts","../../../library/schemas/src/builder.meta.ts","../../../library/schemas/src/entities/user.schema.ts","../../../library/schemas/src/entities/organization.schema.ts","../../../library/schemas/src/entities/organization-user.schema.ts","../../../library/schemas/src/entities/template.schema.ts","../../../library/schemas/src/entities/form-request.schema.ts","../../../library/schemas/src/entities/api-key.schema.ts","../../../library/schemas/src/entities/webhook.schema.ts","../../../library/schemas/src/entities/jwt.schema.ts","../../../library/schemas/src/entities/file.schema.ts","../../../library/schemas/src/entities/pdf-request.schema.ts","../../../library/schemas/src/index.ts","../src/lib/ui/registry.ts","../src/lib/registry/pebble-registry.ts","../src/lib/registry/identity.ts","../src/lib/registry/validate.ts","../src/lib/registry/json-schema-to-zod.ts","../src/lib/registry/manifest-schema.ts","../src/lib/registry/manifest.ts","../src/lib/registry/merge-generated.ts","../src/lib/registry/drift.ts","../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** MongoDB ObjectId as a 24-character hex string (transport layer — no Mongoose coupling) */\nexport const OID = z.string().length(24).meta({\n description: \"MongoDB ObjectId (24-character hex string)\",\n example: \"67e091ab2c4d3f22001a2b3c\",\n});\n\n/** Valid email address */\nexport const EMAIL = z.string().email().meta({\n description: \"Valid email address\",\n example: \"jack@datahaven.net\",\n});\n\n/** ISO 8601 datetime string with timezone offset */\nexport const TIMESTAMP = z.string().datetime({ offset: true }).meta({\n description: \"ISO 8601 datetime with optional timezone offset\",\n example: \"2077-12-25T23:59:59Z\",\n});\n\n/** A boolean or string-coerced boolean (common in HTML attribute bindings like 'disabled', 'checked') */\nexport const BOOLISH = z.union([z.boolean(), z.string()]).meta({\n description: \"Boolean or string-coerced boolean ('true'/'false')\",\n example: true,\n});\n","import { z } from \"zod\";\n\n// ── Response Envelope ─────────────────────────────────────────────────────────\n// Reusable wrappers for the standard {message, data} / {error} envelope.\n// The docs server calls these with the per-endpoint data shape.\n\n/** Wrap a data schema in the success envelope */\nexport const API_SUCCESS = <T extends z.ZodTypeAny>(dataSchema: T) =>\n z.object({\n message: z.string().meta({ description: \"Human-readable status message\", example: \"Success\" }),\n data: dataSchema.optional().meta({ description: \"Response payload\" }),\n }).meta({ description: \"Successful API response\" });\n\n/** Standard error response envelope */\nexport const API_ERROR = z.object({\n error: z.string().meta({ description: \"Human-readable error description\", example: \"Forbidden — no access to this resource\" }),\n data: z.any().optional().meta({ description: \"Additional error context (if available)\" }),\n}).meta({ description: \"Error API response\" });\n\n/** Convenience union — caller passes a data schema to get {message, data?} | {error} */\nexport function API_RESPONSE<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.union([API_SUCCESS(dataSchema), API_ERROR]);\n}\n","import { COMPONENT } from \"@bonsai/constants\";\nimport { z } from \"zod\";\n\nconst CoreArgs = z.object({\n id: z.string().optional().meta({ description: \"Unique identifier for the element\" }),\n className: z\n .string()\n .optional()\n .meta({ description: \"CSS classes to apply to the element\" }),\n});\n\nconst AArgs = CoreArgs.extend({\n href: z\n .string({ error: \"Link destination (href) is required\" })\n .min(1, { message: \"Link destination (href) cannot be empty\" }),\n});\n\nconst HArgs = CoreArgs.extend({\n variant: z\n .enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"], {\n error:\n \"Invalid heading variant. Must be one of: h1, h2, h3, h4, h5, or h6\",\n })\n .optional()\n .meta({ description: \"Heading level variant (h1-h6)\" }),\n as: z\n .enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"], {\n error:\n \"Invalid heading element type. Must be one of: h1, h2, h3, h4, h5, or h6\",\n })\n .optional()\n .meta({ description: \"Render as a different heading element\" }),\n}).optional();\n\nconst PArgs = CoreArgs.extend({\n size: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"], {\n error: \"Invalid paragraph size. Must be one of: xs, sm, md, lg, or xl\",\n })\n .optional()\n .meta({ description: \"Paragraph text size\" }),\n variant: z\n .enum([\"default\", \"muted\"])\n .optional()\n .meta({ description: \"Paragraph style variant\" }),\n as: z\n .enum([\"p\", \"div\", \"span\"])\n .optional()\n .meta({ description: \"Render as a different element\" }),\n}).optional();\n\nconst OLArgs = CoreArgs.optional();\nconst ULArgs = CoreArgs.optional();\nconst LIArgs = CoreArgs.optional();\n\nconst DivArgs = CoreArgs.optional();\n\nconst SpanArgs = CoreArgs.optional();\n\nconst SeparatorArgs = CoreArgs.optional();\n\nconst AlertArgs = CoreArgs.extend({\n variant: z\n .enum([\"default\", \"success\", \"warning\", \"destructive\"], {\n error: \"Invalid alert variant. Must be one of: default, success, warning, or destructive\",\n })\n .optional()\n .meta({ description: \"Alert style variant\" }),\n size: z\n .enum([\"default\", \"sm\", \"lg\"])\n .optional()\n .meta({ description: \"Alert size\" }),\n raised: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Alert shadow elevation\" }),\n}).optional();\n\nconst BadgeArgs = CoreArgs.extend({\n variant: z\n .enum([\"default\", \"secondary\", \"destructive\", \"outline\", \"ghost\"], {\n error: \"Invalid badge variant. Must be one of: default, secondary, destructive, outline, or ghost\",\n })\n .optional()\n .meta({ description: \"Badge style variant\" }),\n size: z\n .enum([\"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Badge size\" }),\n raised: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Badge shadow elevation\" }),\n extrude: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Badge extrude elevation\" }),\n}).optional();\n\nconst ButtonArgs = CoreArgs.extend({\n variant: z\n .enum([\"default\", \"secondary\", \"outline\", \"destructive\", \"warning\", \"ghost\"], {\n error:\n \"Invalid button variant. Must be one of: default, secondary, outline, destructive, warning, or ghost\",\n })\n .optional()\n .meta({ description: \"Button style variant\" }),\n size: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"], {\n error: \"Invalid button size. Must be one of: xs, sm, md, or lg\",\n })\n .optional()\n .meta({ description: \"Button size\" }),\n icon: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Icon-only button size\" }),\n raised: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Button shadow elevation\" }),\n extrude: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Button extrude elevation\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the button is disabled\" }),\n loading: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether to show a loading spinner\" }),\n type: z\n .enum([\"button\", \"submit\"], {\n error: \"Invalid button type. Must be either 'button' or 'submit'\",\n })\n .optional()\n .meta({ description: \"Button type attribute\" }),\n}).optional();\n\nconst CardArgs = CoreArgs.extend({\n size: z\n .enum([\"sm\", \"md\"])\n .optional()\n .meta({ description: \"Card size\" }),\n raised: z\n .enum([\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Card shadow elevation\" }),\n}).optional();\n\nconst CardHeaderArgs = CoreArgs.optional();\nconst CardTitleArgs = CoreArgs.optional();\nconst CardDescriptionArgs = CoreArgs.optional();\nconst CardContentArgs = CoreArgs.optional();\nconst CardFooterArgs = CoreArgs.optional();\nconst CardActionArgs = CoreArgs.optional();\nconst CardIconArgs = CoreArgs.optional();\n\nconst CheckboxArgs = CoreArgs.extend({\n checked: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Checkbox checked state\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the checkbox is disabled\" }),\n required: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the checkbox must be checked\" }),\n size: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Checkbox size\" }),\n}).strict();\n\nconst ImageArgs = CoreArgs.extend({\n src: z.union(\n [\n z.url({ error: \"Image source (src) must be a valid URL\" }),\n z.string().min(1, { message: \"Image source (src) cannot be empty\" }),\n ],\n {\n error: \"Image source (src) is required\",\n },\n ),\n alt: z\n .string()\n .optional()\n .default(\"unknown image url\")\n .meta({ description: \"Alternative text for the image\" }),\n}).strict();\n\nconst OTPArgs = CoreArgs.extend({\n value: z\n .union([z.string(), z.number()], {\n error: \"OTP value is required\",\n })\n .meta({ description: \"Current OTP value\" }),\n placeholder: z\n .string()\n .optional()\n .meta({ description: \"Placeholder text for the OTP input\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the OTP input is disabled\" }),\n containerClassName: z\n .string()\n .optional()\n .meta({ description: \"Custom CSS class for the OTP input container\" }),\n}).strict();\n\nconst InputArgs = CoreArgs.extend({\n type: z\n .enum([\"text\", \"email\", \"password\", \"number\"], {\n error: \"Invalid input type. Must be one of: text, email, password, or number\",\n })\n .optional()\n .meta({ description: \"Input type; a number input stores a number\" }),\n value: z\n .union([z.string(), z.number()], {\n error: \"Input value is required\",\n })\n .meta({ description: \"Current input value\" }),\n placeholder: z\n .string()\n .optional()\n .meta({ description: \"Placeholder text shown when empty\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the input is disabled\" }),\n}).strict();\n\nconst LabelArgs = CoreArgs.extend({\n htmlFor: z\n .string()\n .min(1, {\n message:\n \"Label 'for' attribute is required and must reference an input ID\",\n })\n .meta({ description: \"ID of the associated input element\" }),\n size: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Label text size\" }),\n variant: z\n .enum([\"default\", \"underline\", \"destructive\"])\n .optional()\n .meta({ description: \"Label style variant\" }),\n}).strict();\n\nconst SwitchArgs = CoreArgs.extend({\n checked: z\n .union([z.string(), z.boolean()], {\n error: \"Switch checked state is required\",\n })\n .meta({ description: \"Current switch state\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the switch is disabled\" }),\n required: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the switch must be turned on\" }),\n size: z\n .enum([\"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Switch size\" }),\n rounded: z\n .enum([\"none\", \"sm\", \"md\", \"lg\", \"full\"])\n .optional()\n .meta({ description: \"Switch border radius\" }),\n}).strict();\n\nconst TextareaArgs = CoreArgs.extend({\n value: z\n .string({ error: \"Textarea value is required\" })\n .meta({ description: \"Current textarea content\" }),\n placeholder: z\n .string()\n .optional()\n .meta({ description: \"Placeholder text shown when empty\" }),\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the textarea is disabled\" }),\n autosize: z\n .boolean()\n .optional()\n .meta({ description: \"Whether the textarea auto-resizes to fit content\" }),\n rows: z\n .number()\n .min(1, { message: \"Minimum number of rows is 1\" })\n .max(100, { message: \"Maximum number of rows is 100\" })\n .optional()\n .meta({ description: \"Number of visible text lines\" }),\n minLength: z\n .number()\n .min(0, { message: \"Minimum character length cannot be negative\" })\n .optional()\n .meta({ description: \"Minimum number of characters allowed\" }),\n maxLength: z\n .number()\n .max(10000, { message: \"Maximum character length cannot exceed 10,000\" })\n .optional()\n .meta({ description: \"Maximum number of characters allowed\" }),\n}).strict();\n\nconst InputGroupArgs = CoreArgs.optional();\n\nconst InputGroupTextArgs = CoreArgs.optional();\n\nconst InputGroupAddonArgs = CoreArgs.extend({\n align: z.enum([\"inline-start\", \"inline-end\", \"block-start\", \"block-end\"])\n .optional()\n .meta({ description: \"Alignment of the addon within the input group\" }),\n}).optional();\n\nconst InputGroupInputArgs = CoreArgs.extend({\n value: z.union([z.string(), z.number()], {\n error: \"Input value is required\",\n }).meta({ description: \"Current input value\" }),\n placeholder: z.string().optional().meta({ description: \"Placeholder text shown when empty\" }),\n disabled: z.union([z.string(), z.boolean()]).optional().meta({ description: \"Whether the input is disabled\" }),\n}).strict();\n\nconst InputGroupButtonArgs = CoreArgs.extend({\n variant: z.enum([\"default\", \"secondary\", \"outline\", \"destructive\", \"warning\", \"ghost\"]).optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\"]).optional(),\n}).optional();\n\nconst InputGroupTextareaArgs = CoreArgs.extend({\n value: z.string({ error: \"Textarea value is required\" }).meta({ description: \"Current textarea content\" }),\n placeholder: z.string().optional(),\n disabled: z.union([z.string(), z.boolean()]).optional(),\n}).strict();\n\nconst SignatureArgs = CoreArgs.extend({\n value: z\n .string()\n .nullable()\n .meta({ description: \"Current signature value (base64 or null if empty)\" }),\n canvasClassname: z\n .string()\n .optional()\n .meta({ description: \"Custom CSS class for the signature canvas\" }),\n imageType: z\n .enum([\"image/png\", \"image/jpeg\", \"image/webp\"])\n .optional()\n .meta({ description: \"Image format for the exported signature\" }),\n}).strict();\n\nconst CalendarArgs = CoreArgs.extend({\n selected: z\n .union([z.string(), z.date(), z.array(z.date())], {\n error:\n \"Invalid calendar selection. Must be a date string, Date object, or array of dates\",\n })\n .optional()\n .meta({ description: \"Currently selected date(s)\" }),\n buttonVariant: z\n .enum([\"default\", \"secondary\", \"outline\", \"destructive\", \"warning\", \"ghost\"])\n .optional()\n .meta({ description: \"Variant for calendar navigation buttons\" }),\n hideWeekends: z\n .boolean()\n .optional()\n .meta({ description: \"Whether to hide Saturday and Sunday columns\" }),\n}).optional();\n\nconst TableArgs = CoreArgs.optional();\nconst TableHeaderArgs = CoreArgs.optional();\nconst TableBodyArgs = CoreArgs.optional();\nconst TableFooterArgs = CoreArgs.optional();\nconst TableHeadArgs = CoreArgs.optional();\nconst TableRowArgs = CoreArgs.optional();\nconst TableCellArgs = CoreArgs.optional();\nconst TableCaptionArgs = CoreArgs.optional();\n\nconst AccordionArgs = CoreArgs.extend({\n variant: z\n .enum([\"default\", \"contained\", \"separated\"])\n .optional()\n .meta({ description: \"Accordion style variant\" }),\n raised: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Accordion shadow elevation\" }),\n extrude: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Accordion extrude elevation\" }),\n}).optional();\n\nconst AccordionItemArgs = CoreArgs.optional();\n\nconst AccordionTriggerArgs = CoreArgs.extend({\n disabled: z\n .union([z.string(), z.boolean()])\n .optional()\n .meta({ description: \"Whether the accordion trigger is disabled\" }),\n icon: z\n .any()\n .optional()\n .meta({ description: \"Custom icon component for the trigger\" }),\n}).optional();\n\nconst AccordionContentArgs = CoreArgs.optional();\n\nconst AvatarArgs = CoreArgs.extend({\n src: z\n .string()\n .optional()\n .meta({ description: \"Image source URL\" }),\n alt: z\n .string()\n .optional()\n .meta({ description: \"Alternative text for the avatar image\" }),\n size: z\n .enum([\"full\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Avatar size\" }),\n rounded: z\n .enum([\"none\", \"sm\", \"md\", \"lg\", \"full\"])\n .optional()\n .meta({ description: \"Avatar border radius\" }),\n raised: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Avatar shadow elevation\" }),\n fallback: z\n .string()\n .optional()\n .meta({ description: \"Fallback text or element when image fails to load\" }),\n badge: z\n .any()\n .optional()\n .meta({ description: \"Badge element to overlay on the avatar\" }),\n}).optional();\n\nconst CollapsibleArgs = CoreArgs.optional();\nconst CollapsibleTriggerArgs = CoreArgs.optional();\nconst CollapsibleContentArgs = CoreArgs.optional();\n\nconst LoaderArgs = CoreArgs.extend({\n variant: z\n .enum([\"spinner\", \"ping\"])\n .optional()\n .meta({ description: \"Loader animation variant\" }),\n fill: z\n .enum([\"default\", \"destructive\", \"warning\", \"pending\"])\n .optional()\n .meta({ description: \"Loader fill color\" }),\n size: z\n .enum([\"sm\", \"md\", \"lg\"])\n .optional()\n .meta({ description: \"Loader size\" }),\n icon: z\n .any()\n .optional()\n .meta({ description: \"Custom spinner icon component\" }),\n pingIcon: z\n .any()\n .optional()\n .meta({ description: \"Custom ping icon component\" }),\n iconProps: z\n .any()\n .optional()\n .meta({ description: \"Props to pass to the icon components\" }),\n}).optional();\n\nconst ProgressArgs = CoreArgs.extend({\n mode: z\n .enum([\"single\", \"multiple\"])\n .optional()\n .meta({ description: \"Progress display mode\" }),\n value: z\n .union([\n z.number().nullable(),\n z.array(\n z.object({\n name: z.string().optional(),\n value: z.number(),\n }),\n ),\n ])\n .optional()\n .meta({ description: \"Current progress value(s)\" }),\n size: z\n .enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Progress size\" }),\n raised: z\n .enum([\"default\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Progress shadow elevation\" }),\n stacked: z\n .enum([\"default\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"])\n .optional()\n .meta({ description: \"Progress stacked spacing\" }),\n}).optional();\n\nconst SkeletonArgs = CoreArgs.extend({\n variant: z\n .enum([\"circle\", \"square\", \"default\", \"text\"])\n .optional()\n .meta({ description: \"Skeleton shape variant\" }),\n animate: z\n .boolean()\n .optional()\n .meta({ description: \"Whether to animate the skeleton\" }),\n}).optional();\n\nconst Node: z.ZodType<any> = z.lazy(() => z.union([z.string(), ComponentNode]));\n\nconst CoreNode = z.object({\n children: z\n .array(Node)\n .optional()\n .meta({ description: \"Child nodes to render inside this element\" }),\n});\n\nconst DivNode = CoreNode.extend({\n type: z.literal(COMPONENT.DIV),\n args: DivArgs,\n}).meta({ description: \"Container div element for grouping content\" });\n\nconst ANode = CoreNode.extend({\n type: z.literal(COMPONENT.A),\n args: AArgs,\n}).meta({ description: \"Anchor/link element\" });\n\nconst HNode = CoreNode.extend({\n type: z.literal(COMPONENT.H),\n args: HArgs,\n}).meta({ description: \"Heading element (h1-h6)\" });\n\nconst PNode = CoreNode.extend({\n type: z.literal(COMPONENT.P),\n args: PArgs,\n}).meta({ description: \"Paragraph text element\" });\n\nconst OLNode = CoreNode.extend({\n type: z.literal(COMPONENT.OL),\n args: OLArgs,\n}).meta({ description: \"Ordered list element\" });\n\nconst ULNode = CoreNode.extend({\n type: z.literal(COMPONENT.UL),\n args: ULArgs,\n}).meta({ description: \"Unordered list element\" });\n\nconst LINode = CoreNode.extend({\n type: z.literal(COMPONENT.LI),\n args: LIArgs,\n}).meta({ description: \"List item element\" });\n\nconst SpanNode = CoreNode.extend({\n type: z.literal(COMPONENT.SPAN),\n args: SpanArgs,\n}).meta({ description: \"Inline span element\" });\n\nconst SeparatorNode = CoreNode.extend({\n type: z.literal(COMPONENT.SEPARATOR),\n args: SeparatorArgs,\n}).meta({ description: \"Horizontal separator / divider element\" });\n\nconst AlertNode = CoreNode.extend({\n type: z.literal(COMPONENT.ALERT),\n args: AlertArgs,\n}).meta({ description: \"Alert message box\" });\n\nconst BadgeNode = CoreNode.extend({\n type: z.literal(COMPONENT.BADGE),\n args: BadgeArgs,\n}).meta({ description: \"Badge/status indicator\" });\n\nconst ButtonNode = CoreNode.extend({\n type: z.literal(COMPONENT.BUTTON),\n args: ButtonArgs,\n}).meta({ description: \"Clickable button element\" });\n\nconst CardNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD),\n args: CardArgs,\n}).meta({ description: \"Card container element\" });\n\nconst CheckboxNode = CoreNode.extend({\n type: z.literal(COMPONENT.CHECKBOX),\n args: CheckboxArgs,\n}).meta({ description: \"Checkbox input element\" });\n\nconst ImageNode = CoreNode.extend({\n type: z.literal(COMPONENT.IMAGE),\n args: ImageArgs,\n}).meta({ description: \"Image element\" });\n\nconst OTPNode = CoreNode.extend({\n type: z.literal(COMPONENT.OTP),\n args: OTPArgs,\n}).meta({ description: \"One-time password (OTP) input\" });\n\nconst InputNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT),\n args: InputArgs,\n}).meta({ description: \"Text input element\" });\n\nconst LabelNode = CoreNode.extend({\n type: z.literal(COMPONENT.LABEL),\n args: LabelArgs,\n}).meta({ description: \"Form label element\" });\n\nconst SwitchNode = CoreNode.extend({\n type: z.literal(COMPONENT.SWITCH),\n args: SwitchArgs,\n}).meta({ description: \"Toggle switch element\" });\n\nconst TextareaNode = CoreNode.extend({\n type: z.literal(COMPONENT.TEXTAREA),\n args: TextareaArgs,\n}).meta({ description: \"Multi-line text input\" });\n\nconst SignatureNode = CoreNode.extend({\n type: z.literal(COMPONENT.SIGNATURE),\n args: SignatureArgs,\n}).meta({ description: \"Signature pad input\" });\n\nconst CalendarNode = CoreNode.extend({\n type: z.literal(COMPONENT.CALENDAR),\n args: CalendarArgs,\n}).meta({ description: \"Date picker calendar\" });\n\nconst CardHeaderNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_HEADER),\n args: CardHeaderArgs,\n}).meta({ description: \"Card header container\" });\n\nconst CardTitleNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_TITLE),\n args: CardTitleArgs,\n}).meta({ description: \"Card title element\" });\n\nconst CardDescriptionNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_DESCRIPTION),\n args: CardDescriptionArgs,\n}).meta({ description: \"Card description element\" });\n\nconst CardContentNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_CONTENT),\n args: CardContentArgs,\n}).meta({ description: \"Card content body\" });\n\nconst CardFooterNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_FOOTER),\n args: CardFooterArgs,\n}).meta({ description: \"Card footer container\" });\n\nconst CardActionNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_ACTION),\n args: CardActionArgs,\n}).meta({ description: \"Card action slot\" });\n\nconst CardIconNode = CoreNode.extend({\n type: z.literal(COMPONENT.CARD_ICON),\n args: CardIconArgs,\n}).meta({ description: \"Card icon slot\" });\n\nconst TableNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE),\n args: TableArgs,\n}).meta({ description: \"Table container\" });\n\nconst TableHeaderNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_HEADER),\n args: TableHeaderArgs,\n}).meta({ description: \"Table header section\" });\n\nconst TableBodyNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_BODY),\n args: TableBodyArgs,\n}).meta({ description: \"Table body section\" });\n\nconst TableFooterNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_FOOTER),\n args: TableFooterArgs,\n}).meta({ description: \"Table footer section\" });\n\nconst TableHeadNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_HEAD),\n args: TableHeadArgs,\n}).meta({ description: \"Table header cell\" });\n\nconst TableRowNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_ROW),\n args: TableRowArgs,\n}).meta({ description: \"Table row\" });\n\nconst TableCellNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_CELL),\n args: TableCellArgs,\n}).meta({ description: \"Table data cell\" });\n\nconst TableCaptionNode = CoreNode.extend({\n type: z.literal(COMPONENT.TABLE_CAPTION),\n args: TableCaptionArgs,\n}).meta({ description: \"Table caption\" });\n\nconst AccordionNode = CoreNode.extend({\n type: z.literal(COMPONENT.ACCORDION),\n args: AccordionArgs,\n}).meta({ description: \"Accordion container\" });\n\nconst AccordionItemNode = CoreNode.extend({\n type: z.literal(COMPONENT.ACCORDION_ITEM),\n args: AccordionItemArgs,\n}).meta({ description: \"Accordion item\" });\n\nconst AccordionTriggerNode = CoreNode.extend({\n type: z.literal(COMPONENT.ACCORDION_TRIGGER),\n args: AccordionTriggerArgs,\n}).meta({ description: \"Accordion trigger\" });\n\nconst AccordionContentNode = CoreNode.extend({\n type: z.literal(COMPONENT.ACCORDION_CONTENT),\n args: AccordionContentArgs,\n}).meta({ description: \"Accordion content panel\" });\n\nconst AvatarNode = CoreNode.extend({\n type: z.literal(COMPONENT.AVATAR),\n args: AvatarArgs,\n}).meta({ description: \"Avatar image or fallback\" });\n\nconst CollapsibleNode = CoreNode.extend({\n type: z.literal(COMPONENT.COLLAPSIBLE),\n args: CollapsibleArgs,\n}).meta({ description: \"Collapsible container\" });\n\nconst CollapsibleTriggerNode = CoreNode.extend({\n type: z.literal(COMPONENT.COLLAPSIBLE_TRIGGER),\n args: CollapsibleTriggerArgs,\n}).meta({ description: \"Collapsible trigger\" });\n\nconst CollapsibleContentNode = CoreNode.extend({\n type: z.literal(COMPONENT.COLLAPSIBLE_CONTENT),\n args: CollapsibleContentArgs,\n}).meta({ description: \"Collapsible content panel\" });\n\nconst LoaderNode = CoreNode.extend({\n type: z.literal(COMPONENT.LOADER),\n args: LoaderArgs,\n}).meta({ description: \"Loading spinner indicator\" });\n\nconst ProgressNode = CoreNode.extend({\n type: z.literal(COMPONENT.PROGRESS),\n args: ProgressArgs,\n}).meta({ description: \"Progress bar indicator\" });\n\nconst SkeletonNode = CoreNode.extend({\n type: z.literal(COMPONENT.SKELETON),\n args: SkeletonArgs,\n}).meta({ description: \"Skeleton loading placeholder\" });\n\nconst InputGroupNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP),\n args: InputGroupArgs,\n}).meta({ description: \"Input group container\" });\n\nconst InputGroupTextNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP_TEXT),\n args: InputGroupTextArgs,\n}).meta({ description: \"Text element within input group\" });\n\nconst InputGroupAddonNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP_ADDON),\n args: InputGroupAddonArgs,\n}).meta({ description: \"Addon container within input group\" });\n\nconst InputGroupInputNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP_INPUT),\n args: InputGroupInputArgs,\n}).meta({ description: \"Input element within input group\" });\n\nconst InputGroupButtonNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP_BUTTON),\n args: InputGroupButtonArgs,\n}).meta({ description: \"Button element within input group\" });\n\nconst InputGroupTextareaNode = CoreNode.extend({\n type: z.literal(COMPONENT.INPUT_GROUP_TEXTAREA),\n args: InputGroupTextareaArgs,\n}).meta({ description: \"Textarea element within input group\" });\n\nconst EachArgs = z\n .object({\n items: z\n .string({ error: \"each.items is required\" })\n .min(1, { message: \"each.items cannot be empty\" })\n .meta({\n description:\n 'Binding path to the array to iterate, e.g. \"{{applicants}}\". Must be a plain path (not a computed/filtered expression) so each row maps back to a real store index for two-way binding.',\n }),\n as: z\n .string({ error: \"each.as is required\" })\n .min(1, { message: \"each.as cannot be empty\" })\n .meta({ description: \"Alias name bound to the current item, e.g. \\\"applicant\\\"\" }),\n index: z\n .string()\n .optional()\n .meta({ description: \"Alias name bound to the current numeric index\" }),\n key: z\n .string()\n .optional()\n .meta({\n description:\n 'Binding expression used as the React key per row, e.g. \"{{applicant.id}}\". Falls back to the row index when omitted.',\n }),\n })\n .strict();\n\nconst EachNode = CoreNode.extend({\n type: z.literal(COMPONENT.EACH),\n args: EachArgs,\n}).meta({ description: \"Repeats its children once per item in a bound array\" });\n\nconst IfArgs = z\n .object({\n condition: z\n .string({ error: \"if.condition is required\" })\n .min(1, { message: \"if.condition cannot be empty\" })\n .meta({ description: \"Binding expression; children render only when it evaluates truthy\" }),\n })\n .strict();\n\nconst IfNode = CoreNode.extend({\n type: z.literal(COMPONENT.IF),\n args: IfArgs,\n}).meta({ description: \"Conditionally renders its children based on a bound expression\" });\n\n// Extracts the `args` sub-schema and description back out of an already-built `*Node`\n// schema, so the registry-driven builder below can reuse every hand-written node\n// definition above without retyping its args schema or description.\nfunction argsOf(node: z.ZodType<any>): z.ZodType<any> {\n return (node as unknown as { shape: { args: z.ZodType<any> } }).shape.args;\n}\n\nfunction descriptionOf(node: z.ZodType<any>): string | undefined {\n return (node.meta() as { description?: string } | undefined)?.description;\n}\n\nexport interface TemplateSchemaComponent {\n argsSchema: z.ZodType<any>;\n description?: string;\n}\n\nexport interface GeneratedTemplateSchema {\n Node: z.ZodType<any>;\n ComponentNode: z.ZodDiscriminatedUnion<any>;\n}\n\n/**\n * Builds the same `CoreNode.extend({ type, args }).meta({ description })` shape used\n * above, from a registry's component list rather than a hand-written literal — the\n * union stops being static; it does not stop existing. See REGISTRY_SPIKE.md,\n * \"Schema strategy\".\n */\nexport function createTemplateSchema(\n components: Record<string, TemplateSchemaComponent>,\n): GeneratedTemplateSchema {\n if (Object.keys(components).length === 0) {\n throw new Error(\"createTemplateSchema: registry must declare at least one component\");\n }\n\n // Self-contained recursion (its own Node/CoreNode), not the module-level ones above —\n // those exist only so PEBBLE_COMPONENT_SCHEMAS can source args/descriptions from the\n // hand-written *Node consts. Reusing the module Node here would make `Config` a second,\n // structurally-identical-but-distinct lazy wrapper, which breaks zod-openapi's schema\n // dedup/naming (it stops emitting a named `BonsaiConfig` $ref and inlines it instead).\n let componentNode: z.ZodDiscriminatedUnion<any>;\n const localNode: z.ZodType<any> = z.lazy(() => z.union([z.string(), componentNode]));\n const localCoreNode = z.object({\n children: z\n .array(localNode)\n .optional()\n .meta({ description: \"Child nodes to render inside this element\" }),\n });\n\n const nodeSchemas = Object.entries(components).map(([type, { argsSchema, description }]) => {\n const node = localCoreNode.extend({\n type: z.literal(type),\n args: argsSchema,\n });\n return description ? node.meta({ description }) : node;\n });\n componentNode = z.discriminatedUnion(\n \"type\",\n nodeSchemas as [(typeof nodeSchemas)[number], ...(typeof nodeSchemas)[number][]],\n );\n return { Node: localNode, ComponentNode: componentNode };\n}\n\nexport const PEBBLE_COMPONENT_SCHEMAS: Record<string, TemplateSchemaComponent> = {\n [COMPONENT.DIV]: { argsSchema: argsOf(DivNode), description: descriptionOf(DivNode) },\n [COMPONENT.A]: { argsSchema: argsOf(ANode), description: descriptionOf(ANode) },\n [COMPONENT.H]: { argsSchema: argsOf(HNode), description: descriptionOf(HNode) },\n [COMPONENT.P]: { argsSchema: argsOf(PNode), description: descriptionOf(PNode) },\n [COMPONENT.OL]: { argsSchema: argsOf(OLNode), description: descriptionOf(OLNode) },\n [COMPONENT.UL]: { argsSchema: argsOf(ULNode), description: descriptionOf(ULNode) },\n [COMPONENT.LI]: { argsSchema: argsOf(LINode), description: descriptionOf(LINode) },\n [COMPONENT.SPAN]: { argsSchema: argsOf(SpanNode), description: descriptionOf(SpanNode) },\n [COMPONENT.SEPARATOR]: {\n argsSchema: argsOf(SeparatorNode),\n description: descriptionOf(SeparatorNode),\n },\n [COMPONENT.ALERT]: { argsSchema: argsOf(AlertNode), description: descriptionOf(AlertNode) },\n [COMPONENT.BADGE]: { argsSchema: argsOf(BadgeNode), description: descriptionOf(BadgeNode) },\n [COMPONENT.BUTTON]: { argsSchema: argsOf(ButtonNode), description: descriptionOf(ButtonNode) },\n [COMPONENT.CARD]: { argsSchema: argsOf(CardNode), description: descriptionOf(CardNode) },\n [COMPONENT.CARD_HEADER]: {\n argsSchema: argsOf(CardHeaderNode),\n description: descriptionOf(CardHeaderNode),\n },\n [COMPONENT.CARD_TITLE]: {\n argsSchema: argsOf(CardTitleNode),\n description: descriptionOf(CardTitleNode),\n },\n [COMPONENT.CARD_DESCRIPTION]: {\n argsSchema: argsOf(CardDescriptionNode),\n description: descriptionOf(CardDescriptionNode),\n },\n [COMPONENT.CARD_CONTENT]: {\n argsSchema: argsOf(CardContentNode),\n description: descriptionOf(CardContentNode),\n },\n [COMPONENT.CARD_FOOTER]: {\n argsSchema: argsOf(CardFooterNode),\n description: descriptionOf(CardFooterNode),\n },\n [COMPONENT.CARD_ACTION]: {\n argsSchema: argsOf(CardActionNode),\n description: descriptionOf(CardActionNode),\n },\n [COMPONENT.CARD_ICON]: {\n argsSchema: argsOf(CardIconNode),\n description: descriptionOf(CardIconNode),\n },\n [COMPONENT.CHECKBOX]: {\n argsSchema: argsOf(CheckboxNode),\n description: descriptionOf(CheckboxNode),\n },\n [COMPONENT.IMAGE]: { argsSchema: argsOf(ImageNode), description: descriptionOf(ImageNode) },\n [COMPONENT.OTP]: { argsSchema: argsOf(OTPNode), description: descriptionOf(OTPNode) },\n [COMPONENT.INPUT]: { argsSchema: argsOf(InputNode), description: descriptionOf(InputNode) },\n [COMPONENT.LABEL]: { argsSchema: argsOf(LabelNode), description: descriptionOf(LabelNode) },\n [COMPONENT.SWITCH]: { argsSchema: argsOf(SwitchNode), description: descriptionOf(SwitchNode) },\n [COMPONENT.TEXTAREA]: {\n argsSchema: argsOf(TextareaNode),\n description: descriptionOf(TextareaNode),\n },\n [COMPONENT.SIGNATURE]: {\n argsSchema: argsOf(SignatureNode),\n description: descriptionOf(SignatureNode),\n },\n [COMPONENT.CALENDAR]: {\n argsSchema: argsOf(CalendarNode),\n description: descriptionOf(CalendarNode),\n },\n [COMPONENT.TABLE]: { argsSchema: argsOf(TableNode), description: descriptionOf(TableNode) },\n [COMPONENT.TABLE_HEADER]: {\n argsSchema: argsOf(TableHeaderNode),\n description: descriptionOf(TableHeaderNode),\n },\n [COMPONENT.TABLE_BODY]: {\n argsSchema: argsOf(TableBodyNode),\n description: descriptionOf(TableBodyNode),\n },\n [COMPONENT.TABLE_FOOTER]: {\n argsSchema: argsOf(TableFooterNode),\n description: descriptionOf(TableFooterNode),\n },\n [COMPONENT.TABLE_HEAD]: {\n argsSchema: argsOf(TableHeadNode),\n description: descriptionOf(TableHeadNode),\n },\n [COMPONENT.TABLE_ROW]: {\n argsSchema: argsOf(TableRowNode),\n description: descriptionOf(TableRowNode),\n },\n [COMPONENT.TABLE_CELL]: {\n argsSchema: argsOf(TableCellNode),\n description: descriptionOf(TableCellNode),\n },\n [COMPONENT.TABLE_CAPTION]: {\n argsSchema: argsOf(TableCaptionNode),\n description: descriptionOf(TableCaptionNode),\n },\n [COMPONENT.ACCORDION]: {\n argsSchema: argsOf(AccordionNode),\n description: descriptionOf(AccordionNode),\n },\n [COMPONENT.ACCORDION_ITEM]: {\n argsSchema: argsOf(AccordionItemNode),\n description: descriptionOf(AccordionItemNode),\n },\n [COMPONENT.ACCORDION_TRIGGER]: {\n argsSchema: argsOf(AccordionTriggerNode),\n description: descriptionOf(AccordionTriggerNode),\n },\n [COMPONENT.ACCORDION_CONTENT]: {\n argsSchema: argsOf(AccordionContentNode),\n description: descriptionOf(AccordionContentNode),\n },\n [COMPONENT.AVATAR]: { argsSchema: argsOf(AvatarNode), description: descriptionOf(AvatarNode) },\n [COMPONENT.COLLAPSIBLE]: {\n argsSchema: argsOf(CollapsibleNode),\n description: descriptionOf(CollapsibleNode),\n },\n [COMPONENT.COLLAPSIBLE_TRIGGER]: {\n argsSchema: argsOf(CollapsibleTriggerNode),\n description: descriptionOf(CollapsibleTriggerNode),\n },\n [COMPONENT.COLLAPSIBLE_CONTENT]: {\n argsSchema: argsOf(CollapsibleContentNode),\n description: descriptionOf(CollapsibleContentNode),\n },\n [COMPONENT.LOADER]: { argsSchema: argsOf(LoaderNode), description: descriptionOf(LoaderNode) },\n [COMPONENT.PROGRESS]: {\n argsSchema: argsOf(ProgressNode),\n description: descriptionOf(ProgressNode),\n },\n [COMPONENT.SKELETON]: {\n argsSchema: argsOf(SkeletonNode),\n description: descriptionOf(SkeletonNode),\n },\n [COMPONENT.INPUT_GROUP]: {\n argsSchema: argsOf(InputGroupNode),\n description: descriptionOf(InputGroupNode),\n },\n [COMPONENT.INPUT_GROUP_TEXT]: {\n argsSchema: argsOf(InputGroupTextNode),\n description: descriptionOf(InputGroupTextNode),\n },\n [COMPONENT.INPUT_GROUP_ADDON]: {\n argsSchema: argsOf(InputGroupAddonNode),\n description: descriptionOf(InputGroupAddonNode),\n },\n [COMPONENT.INPUT_GROUP_INPUT]: {\n argsSchema: argsOf(InputGroupInputNode),\n description: descriptionOf(InputGroupInputNode),\n },\n [COMPONENT.INPUT_GROUP_BUTTON]: {\n argsSchema: argsOf(InputGroupButtonNode),\n description: descriptionOf(InputGroupButtonNode),\n },\n [COMPONENT.INPUT_GROUP_TEXTAREA]: {\n argsSchema: argsOf(InputGroupTextareaNode),\n description: descriptionOf(InputGroupTextareaNode),\n },\n [COMPONENT.EACH]: { argsSchema: argsOf(EachNode), description: descriptionOf(EachNode) },\n [COMPONENT.IF]: { argsSchema: argsOf(IfNode), description: descriptionOf(IfNode) },\n};\n\nconst pebbleTemplateSchema = createTemplateSchema(PEBBLE_COMPONENT_SCHEMAS);\n\nexport const ComponentNode = pebbleTemplateSchema.ComponentNode;\nexport const Config = pebbleTemplateSchema.Node;\nexport type Config = z.infer<typeof pebbleTemplateSchema.Node>;\n\n/** Every element (non-string) node schema, keyed by its `type` literal. */\nexport const NodeSchemas: Record<string, z.ZodObject<any>> = Object.fromEntries(\n (ComponentNode.options as z.ZodObject<any>[]).map((schema) => [schema.shape.type.value, schema]),\n);\n","import { z } from \"zod\";\nimport { COMPONENT } from \"@bonsai/constants\";\n\nimport { NodeSchemas } from \"./bonsai.schema\";\n\n// Editor-facing metadata for the Bonsai node schemas: nesting rules and\n// inspector UI hints. Kept in dedicated registries rather than `.meta()` so it\n// never leaks into `z.toJSONSchema` output (the OpenAPI document and the code\n// editor's JSON schema stay as they are).\n\n/**\n * Which children a node type may hold, and where it may be placed.\n * `each` / `if` are transparent: they are allowed wherever their children are,\n * and a child's `parent` rule is checked against the nearest element above them.\n */\nexport interface NodeRules {\n /** \"any\" (default), \"none\" (void / self-contained), or an allow-list of child types. */\n accepts: \"any\" | \"none\" | string[];\n /** Allow-list of direct parent types; absent means any parent. */\n parent?: string[];\n}\n\nexport type FieldControl =\n | \"text\"\n | \"textarea\"\n | \"select\"\n | \"switch\"\n | \"number\"\n | \"color\"\n | \"binding\"\n | \"json\";\n\nexport type FieldGroup = \"Content\" | \"Data\" | \"Style\" | \"Advanced\";\n\nexport interface FieldHints {\n label?: string;\n control?: FieldControl;\n group?: FieldGroup;\n placeholder?: string;\n}\n\nexport const nodeRules = z.registry<NodeRules>();\nexport const fieldHints = z.registry<FieldHints>();\n\nconst C = COMPONENT;\n\n// Components that render no children of their own (void elements throw when given any).\nconst SELF_CONTAINED = [\n C.INPUT,\n C.INPUT_GROUP_INPUT,\n C.INPUT_GROUP_TEXTAREA,\n C.TEXTAREA,\n C.IMAGE,\n C.SEPARATOR,\n C.CHECKBOX,\n C.SWITCH,\n C.OTP,\n C.SIGNATURE,\n C.CALENDAR,\n C.LOADER,\n C.SKELETON,\n C.PROGRESS,\n C.AVATAR,\n];\n\nconst TABLE_SECTIONS = [C.TABLE_HEADER, C.TABLE_BODY, C.TABLE_FOOTER];\nconst CARD_SLOTS = [C.CARD, C.CARD_HEADER, C.CARD_FOOTER];\nconst INPUT_GROUP_SLOTS = [C.INPUT_GROUP, C.INPUT_GROUP_ADDON];\n\nconst RULES: Partial<Record<string, Partial<NodeRules>>> = {\n [C.ACCORDION]: { accepts: [C.ACCORDION_ITEM] },\n [C.ACCORDION_ITEM]: { accepts: [C.ACCORDION_TRIGGER, C.ACCORDION_CONTENT], parent: [C.ACCORDION] },\n [C.ACCORDION_TRIGGER]: { parent: [C.ACCORDION_ITEM] },\n [C.ACCORDION_CONTENT]: { parent: [C.ACCORDION_ITEM] },\n [C.COLLAPSIBLE_TRIGGER]: { parent: [C.COLLAPSIBLE] },\n [C.COLLAPSIBLE_CONTENT]: { parent: [C.COLLAPSIBLE] },\n [C.TABLE]: { accepts: [...TABLE_SECTIONS, C.TABLE_CAPTION] },\n [C.TABLE_HEADER]: { accepts: [C.TABLE_ROW], parent: [C.TABLE] },\n [C.TABLE_BODY]: { accepts: [C.TABLE_ROW], parent: [C.TABLE] },\n [C.TABLE_FOOTER]: { accepts: [C.TABLE_ROW], parent: [C.TABLE] },\n [C.TABLE_CAPTION]: { parent: [C.TABLE] },\n [C.TABLE_ROW]: { accepts: [C.TABLE_CELL, C.TABLE_HEAD], parent: TABLE_SECTIONS },\n [C.TABLE_CELL]: { parent: [C.TABLE_ROW] },\n [C.TABLE_HEAD]: { parent: [C.TABLE_ROW] },\n [C.CARD_HEADER]: { parent: [C.CARD] },\n [C.CARD_CONTENT]: { parent: [C.CARD] },\n [C.CARD_FOOTER]: { parent: [C.CARD] },\n [C.CARD_TITLE]: { parent: CARD_SLOTS },\n [C.CARD_DESCRIPTION]: { parent: CARD_SLOTS },\n [C.CARD_ACTION]: { parent: CARD_SLOTS },\n [C.CARD_ICON]: { parent: CARD_SLOTS },\n [C.INPUT_GROUP_ADDON]: { parent: [C.INPUT_GROUP] },\n [C.INPUT_GROUP_TEXT]: { parent: INPUT_GROUP_SLOTS },\n [C.INPUT_GROUP_INPUT]: { parent: INPUT_GROUP_SLOTS },\n [C.INPUT_GROUP_BUTTON]: { parent: INPUT_GROUP_SLOTS },\n [C.INPUT_GROUP_TEXTAREA]: { parent: INPUT_GROUP_SLOTS },\n [C.OL]: { accepts: [C.LI] },\n [C.UL]: { accepts: [C.LI] },\n [C.LI]: { parent: [C.OL, C.UL] },\n};\n\nfor (const type of SELF_CONTAINED) RULES[type] = { ...RULES[type], accepts: \"none\" };\n\n// Inspector hints by arg name; `TYPE_FIELD_HINTS` refines a name for one type.\nconst FIELD_HINTS: Record<string, FieldHints> = {\n id: { label: \"Element ID\", group: \"Advanced\" },\n className: { label: \"Classes\", group: \"Advanced\" },\n href: { label: \"Link URL\", group: \"Content\", placeholder: \"https://\" },\n src: { label: \"Image URL\", group: \"Content\", placeholder: \"https:// or {{binding}}\" },\n alt: { label: \"Alt text\", group: \"Content\" },\n placeholder: { label: \"Placeholder\", group: \"Content\" },\n fallback: { label: \"Fallback text\", group: \"Content\" },\n value: { label: \"Bound value\", control: \"binding\", group: \"Data\" },\n checked: { label: \"Bound value\", control: \"binding\", group: \"Data\" },\n selected: { label: \"Bound value\", control: \"binding\", group: \"Data\" },\n htmlFor: { label: \"For input (ID)\", group: \"Data\" },\n disabled: { label: \"Disabled\", group: \"Data\" },\n required: { label: \"Required\", group: \"Data\" },\n loading: { label: \"Loading\", group: \"Data\" },\n readonly: { label: \"Read only\", group: \"Data\" },\n items: { label: \"Repeat over\", control: \"binding\", group: \"Data\", placeholder: \"{{items}}\" },\n index: { label: \"Index alias\", group: \"Data\" },\n key: { label: \"Row key\", control: \"binding\", group: \"Advanced\" },\n condition: { label: \"Show when\", control: \"binding\", group: \"Data\", placeholder: \"{{flag}}\" },\n variant: { label: \"Variant\", group: \"Style\" },\n size: { label: \"Size\", group: \"Style\" },\n raised: { label: \"Shadow\", group: \"Style\" },\n extrude: { label: \"Extrude\", group: \"Style\" },\n rounded: { label: \"Corners\", group: \"Style\" },\n align: { label: \"Alignment\", group: \"Style\" },\n fill: { label: \"Colour\", group: \"Style\" },\n stacked: { label: \"Stacked spacing\", group: \"Style\" },\n animate: { label: \"Animate\", group: \"Style\" },\n buttonVariant: { label: \"Button variant\", group: \"Style\" },\n mode: { label: \"Mode\", group: \"Style\" },\n rows: { label: \"Rows\", group: \"Style\" },\n autosize: { label: \"Auto-size\", group: \"Style\" },\n type: { label: \"Button type\", group: \"Content\" },\n imageType: { label: \"Image format\", group: \"Advanced\" },\n containerClassName: { label: \"Container classes\", group: \"Advanced\" },\n canvasClassname: { label: \"Canvas classes\", group: \"Advanced\" },\n minLength: { label: \"Min length\", group: \"Advanced\" },\n maxLength: { label: \"Max length\", group: \"Advanced\" },\n hideWeekends: { label: \"Hide weekends\", group: \"Advanced\" },\n pins: { label: \"Pins\", control: \"json\", group: \"Advanced\" },\n zoom: { label: \"Zoom\", group: \"Advanced\" },\n pitch: { label: \"Pitch\", group: \"Advanced\" },\n fixed: { label: \"Fixed viewport\", group: \"Advanced\" },\n allowMultiple: { label: \"Allow multiple pins\", group: \"Advanced\" },\n icon: { label: \"Icon\", group: \"Advanced\" },\n pingIcon: { label: \"Ping icon\", control: \"json\", group: \"Advanced\" },\n iconProps: { label: \"Icon props\", control: \"json\", group: \"Advanced\" },\n badge: { label: \"Badge\", control: \"json\", group: \"Advanced\" },\n};\n\nconst TYPE_FIELD_HINTS: Record<string, Record<string, FieldHints>> = {\n [C.EACH]: { as: { label: \"Item alias\", group: \"Data\" } },\n [C.H]: { as: { label: \"Render as\", group: \"Advanced\" } },\n [C.P]: { as: { label: \"Render as\", group: \"Advanced\" } },\n [C.BUTTON]: { icon: { label: \"Icon-only size\", group: \"Style\" } },\n};\n\n/** The args object schema of a node type, unwrapped from `.optional()`. */\nexport function getArgsSchema(type: string): z.ZodObject | undefined {\n let args: z.ZodType | undefined = NodeSchemas[type]?.shape.args;\n while (args instanceof z.ZodOptional) args = args.unwrap() as z.ZodType;\n return args instanceof z.ZodObject ? args : undefined;\n}\n\nfor (const [type, schema] of Object.entries(NodeSchemas)) {\n nodeRules.add(schema, { accepts: \"any\", ...RULES[type] });\n const shape = getArgsSchema(type)?.shape ?? {};\n for (const [name, field] of Object.entries(shape)) {\n // Shared field instances (CoreArgs) receive identical hints from every type.\n fieldHints.add(field as z.ZodType, { ...FIELD_HINTS[name], ...TYPE_FIELD_HINTS[type]?.[name] });\n }\n}\n\n/** Nesting rules for a node type; unknown types accept anything. */\nexport function getNodeRules(type: string): NodeRules {\n const schema = NodeSchemas[type];\n return (schema && nodeRules.get(schema)) || { accepts: \"any\" };\n}\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\n\n// ── User ─────────────────────────────────────────────────────────────────────\n\nexport const UserSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n email: z.string().email().meta({\n description: \"User's email address (used as the primary identifier)\",\n example: \"jack@datahaven.net\",\n readOnly: true,\n }),\n name: z.string().min(1).max(100).meta({ description: \"Full display name\", example: \"Razor Jack\" }),\n emailVerified: z.boolean().nullable().optional().meta({ description: \"Whether the user's email has been verified\" }),\n image: z.string().optional().meta({ description: \"Avatar image URL\", example: \"https://cdn.datahaven.net/avatars/rj7741.png\" }),\n createdAt: TIMESTAMP.optional().meta({ description: \"When the user account was created\", readOnly: true }),\n updatedAt: TIMESTAMP.optional().meta({ description: \"When the user account was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"An authenticated user account. Users are distinct from organization memberships — a user may belong to multiple organizations.\",\n});\n\n// ── Edit User Request ────────────────────────────────────────────────────────\n\nexport const EditUserRequestSchema = z.object({\n name: z.string().min(1).optional().meta({ description: \"Updated display name\", example: \"Cyber Jack\" }),\n image: z.string().optional().meta({ description: \"Updated avatar URL\", example: \"https://cdn.datahaven.net/avatars/cj7741.png\" }),\n}).strict().meta({ description: \"Update the authenticated user's profile\" });\n","import { z } from \"zod\";\nimport { OID, TIMESTAMP } from \"../common\";\n\n// ── Organization ──────────────────────────────────────────────────────────────\n\nexport const OrganizationSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n clientId: z.string().min(1).meta({ description: \"Unique client identifier for the organization\", example: \"pb-org-7f3a2b9c\", readOnly: true }),\n name: z.string().min(3).max(50).meta({ description: \"Unique organization slug/identifier\", example: \"neon-shadow\" }),\n displayName: z.string().min(3).max(50).meta({ description: \"Human-readable organization name shown in UI and emails\", example: \"Neon Shadow Corp\" }),\n legalName: z.string().min(3).max(50).meta({ description: \"Legal business name for contracts and compliance\", example: \"Neon Shadow Corporation Ltd.\" }),\n legalAddress: z.string().min(3).max(100).meta({ description: \"Registered business address\", example: \"42 Cyber Avenue, Night City, NC 20777\" }),\n contactEmail: z.string().email().meta({ description: \"Primary contact email for the organization\", example: \"legal@neon-shadow.io\" }),\n icon: z.string().meta({ description: \"Organization icon/logo URL\", example: \"https://cdn.neon-shadow.io/icon.png\" }),\n banner: z.string().nullable().optional().meta({ description: \"Organization banner image URL\", example: \"https://cdn.neon-shadow.io/banner.png\" }),\n createdBy: OID.meta({ description: \"User ObjectId who created the organization\", readOnly: true }),\n customerId: z.string().optional().nullable().meta({ description: \"Stripe customer ID for billing\", example: \"cus_9x8y7z6w5v4u3t2s\", readOnly: true }),\n subscriptionId: z.string().optional().nullable().meta({ description: \"Stripe subscription ID\", example: \"sub_1A2B3C4D5E6F7G8H\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the organization was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the organization was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A tenant organization. Each organization has its own isolated workspace, templates, signature requests, and API keys.\",\n});\n\n// ── Requests ─────────────────────────────────────────────────────────────────\n\nexport const CreateOrganizationRequestSchema = z.object({\n name: z.string().min(3).max(50).meta({ description: \"Unique organization slug/identifier\", example: \"neon-shadow\" }),\n displayName: z.string().min(3).max(50).meta({ description: \"Human-readable name shown in UI\", example: \"Neon Shadow Corp\" }),\n legalName: z.string().min(3).max(50).meta({ description: \"Legal business name\", example: \"Neon Shadow Corporation Ltd.\" }),\n legalAddress: z.string().min(3).max(100).meta({ description: \"Registered business address\", example: \"42 Cyber Avenue, Night City, NC 20777\" }),\n contactEmail: z.string().email().meta({ description: \"Primary contact email\", example: \"legal@neon-shadow.io\" }),\n icon: z.string().meta({ description: \"Organization icon/logo URL\", example: \"https://cdn.neon-shadow.io/icon.png\" }),\n}).strict().meta({ description: \"Create a new organization\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\n\n// ── Organization User ─────────────────────────────────────────────────────────\n\nexport const OrganizationUserSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n organization: OID.meta({ description: \"The organization this membership belongs to\", readOnly: true }),\n user: OID.meta({ description: \"The user who is a member of the organization\", readOnly: true }),\n role: z.string().min(1).meta({ description: \"Role identifier (e.g. 'admin', 'member', 'viewer')\", example: \"admin\" }),\n permissions: z.string().min(1).meta({ description: \"Permission set identifier or JSON string\", example: \"{\\\"templates\\\":\\\"rw\\\",\\\"forms\\\":\\\"r\\\"}\" }),\n status: z.enum([\"active\", \"inactive\", \"blocked\"]).meta({ description: \"Membership status\", example: \"active\" }),\n lastLogin: TIMESTAMP.nullable().meta({ description: \"When the user last logged into this organization\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the membership was created\", readOnly: true }),\n updatedAt: TIMESTAMP.optional().meta({ description: \"When the membership was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A user's membership within an organization. This links a User to an Organization and defines their role and permissions.\",\n});\n\n// ── Requests ─────────────────────────────────────────────────────────────────\n\nexport const InviteOrganizationUserRequestSchema = z.object({\n email: z.string().email().meta({ description: \"Email address of the user to invite\", example: \"jack@datahaven.net\" }),\n name: z.string().min(3).meta({ description: \"Display name of the invited user\", example: \"Razor Jack\" }),\n role: z.string().min(2).meta({ description: \"Role to assign (e.g. 'admin', 'member')\", example: \"member\" }),\n image: z.string().optional().meta({ description: \"Avatar URL for the invited user\", example: \"https://cdn.datahaven.net/avatars/rj7741.png\" }),\n permissions: z.string().min(1).meta({ description: \"Permission set to assign\", example: \"{\\\"templates\\\":\\\"r\\\",\\\"forms\\\":\\\"rw\\\"}\" }),\n}).strict().meta({ description: \"Invite a user to join an organization\" });\n\nexport const EditOrganizationUserRequestSchema = z.object({\n _id: OID.meta({ description: \"OrganizationUser membership MongoDB ObjectId\", readOnly: true }),\n role: z.string().min(2).meta({ description: \"Updated role\", example: \"viewer\" }),\n permissions: z.string().min(1).meta({ description: \"Updated permission set\", example: \"{\\\"templates\\\":\\\"r\\\"}\" }),\n}).strict().meta({ description: \"Update an organization user's role or permissions\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\nimport { Config } from \"../bonsai.schema\";\n\n// ── Template ──────────────────────────────────────────────────────────────────\n\n/**\n * The builder's own document for a template (blocks, editor ids). Opaque to the\n * API and SSR, which only ever read `config`; `version` lets the builder migrate\n * older documents.\n */\nexport const TemplateSource = z\n .looseObject({\n version: z.number().int().positive().meta({ description: \"Builder document format version\" }),\n })\n .meta({ description: \"Builder source document the config was compiled from (editor-only)\" });\n\nexport const TemplateSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n organization: OID.meta({ description: \"Organization that owns this template\", readOnly: true }),\n createdBy: OID.meta({ description: \"OrganizationUser ID who created this template\", readOnly: true }),\n name: z.string().min(1).meta({ description: \"Template name (unique within the organization)\", example: \"Neural_NDA_v3\" }),\n description: z.string().default(\"\").meta({ description: \"Human-readable description of the template's purpose\", example: \"Standard non-disclosure agreement with neural implant data clause\" }),\n config: z.any().meta({ description: \"The Bonsai component tree defining the template layout and fields\" }),\n source: TemplateSource.optional(),\n header: z.string().optional().meta({ description: \"A small Bonsai component tree used for page headers in PDF rendering output\" }),\n footer: z.string().optional().meta({ description: \"A small Bonsai component tree used for page footers in PDF rendering output\" }),\n contentHash: z.string().optional().meta({ description: \"SHA-256 hash of the serialized config, used for deduplication\", example: \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1\" }),\n css: z.string().optional().meta({ description: \"Generated Tailwind CSS for the template layout\" }),\n tags: z.array(z.string()).default([]).meta({ description: \"Tags for organizing and discovering templates\", example: [\"nda\", \"legal\", \"neural-interface\"] }),\n active: z.boolean().default(true).meta({ description: \"Whether the template is active and available for use\" }),\n lastUsed: TIMESTAMP.nullable().optional().meta({ description: \"When the template was last referenced in a signature request\", readOnly: true }),\n usageCount: z.number().default(0).meta({ description: \"Total number of signature requests created from this template\" }),\n version: z.number().default(1).meta({ description: \"Template schema version (increments on significant config changes)\" }),\n createdAt: TIMESTAMP.meta({ description: \"When the template was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the template was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A reusable Bonsai signature template. Templates define the form layout via a component tree and can be referenced by ID when creating signature requests.\",\n});\n\n// ── Requests / Responses ──────────────────────────────────────────────────────\n\n/** POST /v1/template — Create a new template */\nexport const CreateTemplateRequest = z.object({\n ou: OID.meta({ description: \"OrganizationUser ID of the user creating the template\" }),\n name: z.string().min(1).meta({ description: \"Template name (must be unique within the organization)\", example: \"Neural_NDA_v3\" }),\n description: z.string().optional().meta({ description: \"Optional description of the template's purpose\", example: \"Standard NDA with neural implant clause\" }),\n config: Config.meta({ description: \"The Bonsai component tree that defines the template layout\" }),\n source: TemplateSource.optional(),\n pdf: z.object({\n header: Config.optional().meta({ description: \"PDF header Bonsai component tree\" }),\n footer: Config.optional().meta({ description: \"PDF footer Bonsai component tree\" }),\n }).optional(),\n tags: z.array(z.string()).optional().meta({ description: \"Tags for organizing and filtering templates\", example: [\"nda\", \"legal\"] }),\n}).strict().meta({ description: \"Create a new reusable signature template\" });\n\n/** PUT /v1/template/{id} — Replace a template's content */\nexport const UpdateTemplateRequest = z.object({\n name: z.string().min(1).optional().meta({ description: \"New template name (must be unique within the organization)\" }),\n description: z.string().optional().meta({ description: \"New description\" }),\n config: Config.optional().meta({ description: \"Replacement Bonsai component tree; CSS and content hash are recomputed\" }),\n source: TemplateSource.optional(),\n pdf: z.object({\n header: Config.optional().meta({ description: \"PDF header Bonsai component tree\" }),\n footer: Config.optional().meta({ description: \"PDF footer Bonsai component tree\" }),\n }).optional(),\n tags: z.array(z.string()).optional().meta({ description: \"Replacement tags\" }),\n}).strict()\n .refine((body) => Object.keys(body).length > 0, { message: \"Provide at least one field to update\" })\n .meta({ description: \"Update an existing template\" });\n\nexport const UpdateTemplateResponseData = z.object({\n id: z.string().meta({ description: \"MongoDB ObjectId of the template\", example: \"67e091ab2c4d3f22001a2b3c\", readOnly: true }),\n name: z.string().meta({ description: \"Template name\", example: \"Neural_NDA_v3\" }),\n contentHash: z.string().optional().meta({ description: \"SHA-256 hash of the config after the update\" }),\n version: z.number().meta({ description: \"Template version after the update\" }),\n}).strict().meta({ description: \"Updated template summary\" });\n\nexport const CreateTemplateResponseData = z.object({\n id: z.string().meta({ description: \"MongoDB ObjectId of the created template\", example: \"67e091ab2c4d3f22001a2b3c\", readOnly: true }),\n name: z.string().meta({ description: \"Template name\", example: \"Neural_NDA_v3\" }),\n contentHash: z.string().optional().meta({ description: \"SHA-256 hash of the config, useful for deduplication\" }),\n}).strict().meta({ description: \"Created template summary\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\nimport { Config } from \"../bonsai.schema\";\n\n// ── Form Request ──────────────────────────────────────────────────────────────\n\nexport const FormRequestStatus = z.enum([\n \"pending\", \"captured\", \"completed\", \"error\", \"revoked\",\n]);\nexport type FormRequestStatus = z.infer<typeof FormRequestStatus>;\n\nexport const FormRequestSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n id: z.string().meta({ description: \"Public-facing unique request ID (random hex string)\", example: \"fr_a7b8c9d0e1f2\", readOnly: true }),\n token: z.string().meta({ description: \"Verification token used for cookie-based auth in the signer's browser\", readOnly: true }),\n email: z.string().email().meta({ description: \"Recipient email address where the signature link was sent\", example: \"jack@datahaven.net\" }),\n name: z.string().min(1).meta({ description: \"Recipient's display name\", example: \"Razor Jack\" }),\n attachments: z.array(z.string()).optional().meta({ description: \"Array of attachment URLs included with the form\", example: [\"https://files.datahaven.net/nda_v3.pdf\"] }),\n data: z.any().optional().meta({ description: \"Form field data submitted by the signer\" }),\n webhooks: z.array(OID).optional().meta({ description: \"Webhook ObjectIds notified on lifecycle events\", example: [\"67e091ab2c4d3f22001a2b3c\"] }),\n metadata: z.any().optional().meta({ description: \"Capture-time metadata such as IP address, user agent, and timestamps\" }),\n expiry: TIMESTAMP.meta({ description: \"When the signature request link expires\" }),\n due: TIMESTAMP.optional().nullable().meta({ description: \"Soft deadline for completing the signature\" }),\n digest: z.string().meta({ description: \"SHA-256 hash of the serialized payload, used for deduplication\", readOnly: true }),\n template: z.any().meta({ description: \"Snapshot of the Bonsai component tree config at the time of form creation\", readOnly: true }),\n header: z.any().meta({ description: \"Snapshot of the (small) Bonsai component tree config used for the output PDF page header rendering\", readOnly: true }),\n footer: z.any().meta({ description: \"Snapshot of the (small) Bonsai component tree config used for the output PDF page footer rendering\", readOnly: true }),\n css: z.string().meta({ description: \"Tailwind CSS generated from the template at the time of form creation\", readOnly: true }),\n status: FormRequestStatus.meta({ description: \"Current lifecycle status of the form request\", example: \"pending\" }),\n organization: OID.meta({ description: \"Organization that owns this form request\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the form request was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the form request was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A signature request sent to a recipient. Tracks the full lifecycle from creation through signing, completion, or revocation.\",\n});\n\n// ── Requests / Responses ──────────────────────────────────────────────────────\n\n/** POST /v1/form — Create a new signature request */\nexport const CreateFormRequest = z.object({\n name: z.string().min(1).meta({ description: \"Recipient's display name (used in the email greeting and form header)\", example: \"Razor Jack\" }),\n email: z.string().email().meta({ description: \"Recipient email address where the signature link will be sent\", example: \"jack@datahaven.net\" }),\n template: z.union([Config, z.string()]).meta({\n description: \"Either an inline Bonsai component tree config, or a saved template MongoDB ObjectId to use as the form layout\",\n }),\n expiry: z.coerce.date().optional().meta({ description: \"When the signature request link expires (ISO 8601 date)\", example: \"2077-12-25T23:59:59Z\" }),\n due: z.coerce.date().optional().meta({ description: \"Soft deadline for the signature (ISO 8601 date)\", example: \"2077-12-20T18:00:00Z\" }),\n webhooks: z.array(z.string()).min(1).meta({ description: \"Array of webhook ObjectIds to notify on form lifecycle events\", example: [\"67e091ab2c4d3f22001a2b3c\"] }),\n attachments: z.array(z.string()).optional().meta({ description: \"Array of attachment URLs to include with the form\", example: [\"https://files.datahaven.net/nda_v3.pdf\"] }),\n metadata: z.any().optional().meta({ description: \"Arbitrary metadata to associate with the form request\", example: { department: \"Legal\", priority: \"high\" } }),\n data: z.any().optional().meta({ description: \"Pre-filled form field data to populate the form on load\", example: { full_name: \"Razor Jack\", badge_id: \"RJ-7741\" } }),\n pdf: z.union([z.boolean(), z.object({\n header: z.union([Config, z.string()]).optional().meta({ description: \"A (small) Bonsai component tree config used for the output PDF page header rendering\" }),\n footer: z.union([Config, z.string()]).optional().meta({ description: \"A (small) Bonsai component tree config used for the output PDF page footer rendering\" }),\n })]).optional().meta({ description: \"PDF file config object (header||footer) or `true/false` boolean to trigger PDF file generation after form capture\" }),\n}).strict().meta({ description: \"Create a new signature request targeting a recipient\" });\n\nexport const CreateFormRequestResponseData = z.object({\n formId: z.string().meta({ description: \"MongoDB ObjectId of the newly created form request\", example: \"67e091ab2c4d3f22001a2b3c\", readOnly: true }),\n}).strict().meta({ description: \"Created form request identifier\" });\n\n/** POST /v1/form/{id}/revoke — Revoke a pending form request */\nexport const RevokeFormRequest = z.object({\n reason: z.string().optional().meta({ description: \"Optional explanation for why the form was revoked (logged for audit)\", example: \"Signer compromised — ICE breach detected on endpoint\" }),\n}).strict().meta({ description: \"Payload for revoking a signature request\" });\n\n/** POST /v1/form/{id}/resend — Re-send the signature request email */\nexport const ResendFormRequestEmail = z.object({\n email: z.string().email().optional().meta({ description: \"Override the recipient email address (uses the original if omitted)\", example: \"jack@neon-shadow.io\" }),\n}).strict().meta({ description: \"Payload for re-sending the signature request email\" });\n\n/** POST /v1/capture — Submit form data from the signer's browser */\nexport const SubmitCaptureRequest = z.object({\n data: z.record(z.string(), z.any()).optional().meta({\n description: \"Form field data collected from the signer\",\n example: { signature: \"data:image/png;base64,iVBOR...\", accepted_terms: true },\n }),\n}).strict().meta({ description: \"Submit captured form data from the signer's browser session\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\n\n// ── API Key ───────────────────────────────────────────────────────────────────\n\nexport const ApiKeySchema = z.object({\n _id: OID.meta({ readOnly: true }),\n id: z.string().meta({ description: \"Public key identifier (e.g. pb-xxxx). Used as the 'client' field when authenticating.\", example: \"pb-a7f3b2c9d1e8f4a5b6c7d8e9\", readOnly: true }),\n secret: z.string().meta({ description: \"Encrypted API key secret — only viewable at creation time\", readOnly: true }),\n allowedOrigins: z.array(z.string()).default([]).meta({ description: \"CORS origin allowlist. Requests from origins not in this list are rejected.\", example: [\"https://console.neon-shadow.io\"] }),\n allowedIps: z.array(z.string()).default([]).meta({ description: \"IP CIDR allowlist. Requests from IPs not in this list are rejected.\", example: [\"203.0.113.0/24\"] }),\n active: z.boolean().default(true).meta({ description: \"Whether the key is active and can be used for authentication\" }),\n expiry: TIMESTAMP.meta({ description: \"When the API key expires and can no longer be used\" }),\n lastUsed: TIMESTAMP.meta({ description: \"Timestamp of the most recent request using this key\", readOnly: true }),\n audience: z.enum([\"internal\", \"external\"]).meta({ description: \"Key audience — 'internal' for server-to-server, 'external' for client-side\", example: \"internal\" }),\n organization: OID.meta({ description: \"Organization this key belongs to\", readOnly: true }),\n generatedBy: OID.meta({ description: \"OrganizationUser ID who created this key\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the API key was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the API key was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"An API key scoped to an organization. Each key has configurable IP and origin restrictions for fine-grained access control.\",\n});\n\n// ── Requests / Responses ──────────────────────────────────────────────────────\n\n/** POST /v1/api-key — Create a new API key */\nexport const CreateApiKeyRequest = z.object({\n ou: OID.meta({ description: \"OrganizationUser ID of the user creating the API key\" }),\n expiry: z.coerce.date().optional().meta({ description: \"Key expiration date (defaults to +1 year from creation)\", example: \"2078-12-19T00:00:00Z\" }),\n audience: z.enum([\"internal\", \"external\"]).meta({ description: \"Key audience — 'internal' for server-to-server, 'external' for client-side usage\", example: \"internal\" }),\n allowedOrigins: z.array(z.string()).optional().meta({ description: \"CORS origin allowlist (e.g. ['https://app.example.com']). Empty array disables origin restriction.\", example: [\"https://console.neon-shadow.io\", \"https://api.datahaven.net\"] }),\n allowedIps: z.array(z.string()).optional().meta({ description: \"IP CIDR allowlist (e.g. ['203.0.113.0/24']). Empty array disables IP restriction.\", example: [\"203.0.113.0/24\", \"10.0.0.0/8\"] }),\n}).strict().meta({ description: \"Payload for creating a new API key\" });\n\nexport const CreateApiKeyResponseData = z.object({\n id: z.string().meta({ description: \"Public API key ID (e.g. pb-xxxx)\", example: \"pb-a7f3b2c9d1e8f4a5b6c7d8e9\", readOnly: true }),\n secret: z.string().meta({ description: \"API key secret — **this is the only time the secret is returned**. Store it securely.\", readOnly: true }),\n}).strict().meta({ description: \"API key credentials — the secret is only shown once\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\n\n// ── Webhook ───────────────────────────────────────────────────────────────────\n\nexport const WebhookSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n id: z.string().meta({ description: \"Public webhook identifier (e.g. pb-wbhk-xxxx)\", example: \"pb-wbhk-a7b8c9d0\", readOnly: true }),\n url: z.string().url().meta({ description: \"HTTPS endpoint receiving POST event notifications\", example: \"https://hooks.datahaven.net/events\" }),\n secret: z.string().meta({ description: \"HMAC-SHA256 signing secret — used to verify that webhook payloads genuinely came from Bonsai\", readOnly: true }),\n active: z.boolean().default(true).meta({ description: \"Whether the webhook is active and receiving events\" }),\n lastUsed: TIMESTAMP.meta({ description: \"When the webhook last received an event\", readOnly: true }),\n organization: OID.meta({ description: \"Organization that owns this webhook\", readOnly: true }),\n generatedBy: OID.meta({ description: \"OrganizationUser ID who created this webhook\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the webhook was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the webhook was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A webhook destination for form request lifecycle events. When a form is created, signed, or revoked, Bonsai sends a POST request to this URL with a JSON payload signed via HMAC-SHA256.\",\n});\n\n// ── Requests / Responses ──────────────────────────────────────────────────────\n\n/** POST /v1/webhook — Create a new webhook destination */\nexport const CreateWebhookRequest = z.object({\n ou: OID.meta({ description: \"OrganizationUser ID of the user creating the webhook\" }),\n url: z.string().url().meta({ description: \"HTTPS endpoint that will receive POST event notifications\", example: \"https://hooks.datahaven.net/events\" }),\n}).strict().meta({ description: \"Payload for creating a new webhook destination\" });\n\nexport const CreateWebhookResponseData = z.object({\n id: z.string().meta({ description: \"Webhook MongoDB ObjectId\", example: \"67e091ab2c4d3f22001a2b3c\", readOnly: true }),\n secret: z.string().meta({ description: \"HMAC signing secret — **this is the only time the secret is returned**. Use it to verify webhook payload authenticity.\", readOnly: true }),\n}).strict().meta({ description: \"Webhook credentials — the signing secret is only shown once\" });\n","import { z } from \"zod\";\n\n// ── JWT / Auth ────────────────────────────────────────────────────────────────\n\n/** POST /v1/token — Exchange API key credentials for a JWT */\nexport const GenerateTokenRequest = z.object({\n client: z.string().min(1).meta({ description: \"API key ID (e.g. pb-xxxx)\", example: \"pb-7f3a2b9c1d8e4f5a6b7c8d9e\" }),\n secret: z.string().min(1).meta({ description: \"API key secret\", example: \"sk_liv...1f0e\" }),\n refresh: z.boolean().optional().meta({ description: \"If true, also issues a refresh token (30 day expiry)\", example: true }),\n}).strict().meta({ description: \"Credentials for obtaining a JWT access token\" });\n\nexport const GenerateTokenResponseData = z.object({\n token: z.string().meta({ description: \"JWT access token (1 hour expiry). Include as Bearer token in subsequent requests.\", example: \"eyJhbGciOiJIUzI1NiIs...f456\" }),\n refresh: z.string().optional().meta({ description: \"Refresh token (30 day expiry). Use at POST /v1/token/refresh to get a new JWT without re-entering credentials.\", example: \"rt_live_8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d\" }),\n}).strict().meta({ description: \"Token response containing JWT and optional refresh token\" });\n\n/** POST /v1/token/refresh — Exchange a refresh token for a new JWT */\nexport const RefreshTokenRequest = z.object({\n refreshToken: z.string().min(1).meta({ description: \"Refresh token obtained from a prior POST /v1/token response\", example: \"rt_live_8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d\" }),\n}).strict().meta({ description: \"Request to refresh an expired JWT using a refresh token\" });\n\nexport const RefreshTokenResponseData = z.object({\n token: z.string().meta({ description: \"New JWT access token (1 hour expiry)\", example: \"eyJhbGciOiJIUzI1NiIs...c012\" }),\n}).strict().meta({ description: \"New JWT access token\" });\n","import { z } from \"zod\";\n\n// ── File MIME Types ───────────────────────────────────────────────────────────\n\nexport const FileMimeType = z.enum([\n \"application/pdf\",\n \"image/png\",\n \"image/jpeg\",\n \"image/webp\",\n \"text/plain\",\n \"text/csv\",\n]);\nexport type FileMimeType = z.infer<typeof FileMimeType>;\n\n// ── Signed Download URL ───────────────────────────────────────────────────────\n\n/** GET /v1/file/{id}/url — Get a signed GCS download URL */\nexport const GetFileUrlQuery = z.object({\n ttl: z.coerce.number().int().min(60).max(86400).default(3600)\n .meta({ description: \"Signed URL lifetime in seconds (default 3600, min 60, max 86400 [24h])\", example: 3600 }),\n}).strict().meta({ description: \"Query parameters for generating a signed download URL\" });\n\nexport const GetFileUrlResponseData = z.object({\n downloadUrl: z.string().url().meta({ description: \"Pre-signed GCS download URL\", example: \"https://storage.googleapis.com/bonsai-secure/f1e2d3...X-Goog-Signature=def456\" }),\n filename: z.string().meta({ description: \"Original filename (for Content-Disposition)\", example: \"signed_nda_razorjack.pdf\" }),\n mimeType: FileMimeType.meta({ description: \"MIME type (for Content-Type)\", example: \"application/pdf\" }),\n size: z.number().int().meta({ description: \"File size in bytes\", example: 245760 }),\n}).strict().meta({ description: \"Signed download URL for secure file access\" });\n","import { z } from \"zod\";\n\nimport { OID, TIMESTAMP } from \"../common\";\nimport { Config } from \"../bonsai.schema\";\n\n// ── PDF Request ──────────────────────────────────────────────────────────────\n\nexport const PDFRequestStatus = z.enum([\n \"pending\", \"generating\", \"completed\", \"error\", \"revoked\",\n]);\nexport type PDFRequestStatus = z.infer<typeof PDFRequestStatus>;\n\nexport const PDFRequestSchema = z.object({\n _id: OID.meta({ readOnly: true }),\n id: z.string().meta({ description: \"Public-facing unique request ID (random hex string)\", example: \"fr_a7b8c9d0e1f2\", readOnly: true }),\n token: z.string().meta({ description: \"Verification token used for cookie-based auth in the signer's browser\", readOnly: true }),\n data: z.any().optional().meta({ description: \"Form field data submitted by the signer/requester\" }),\n webhooks: z.array(OID).optional().meta({ description: \"Webhook ObjectIds notified on lifecycle events\", example: [\"67e091ab2c4d3f22001a2b3c\"] }),\n metadata: z.any().optional().meta({ description: \"File metadata such as size, contentType, etc.\" }),\n digest: z.string().meta({ description: \"SHA-256 hash of the serialized payload, used for deduplication\", readOnly: true }),\n template: z.any().meta({ description: \"Snapshot of the Bonsai component tree config at the time of PDF creation\" }),\n header: z.any().meta({ description: \"Snapshot of the (small) Bonsai component tree config used for the output PDF page header rendering\" }),\n footer: z.any().meta({ description: \"Snapshot of the (small) Bonsai component tree config used for the output PDF page footer rendering\" }),\n css: z.string().meta({ description: \"Tailwind CSS generated from the template at the time of PDF generation request\", readOnly: true }),\n status: PDFRequestStatus.meta({ description: \"Current lifecycle status of the PDF request\", example: \"pending\" }),\n organization: OID.meta({ description: \"Organization that owns this PDF request\", readOnly: true }),\n createdAt: TIMESTAMP.meta({ description: \"When the PDF request was created\", readOnly: true }),\n updatedAt: TIMESTAMP.meta({ description: \"When the PDF request was last updated\", readOnly: true }),\n}).strict().meta({\n description: \"A PDF request used to trigger the generation of a custom PDF file. Tracks the full lifecycle and alerts sends results via webhook.\",\n});\n\n// ── Requests / Responses ──────────────────────────────────────────────────────\n\n/** POST /v1/pdf — Create a new pdf file generation request */\nexport const CreatePDFRequest = z.object({\n template: z.union([Config, z.string()]).meta({\n description: \"Either an inline Bonsai component tree config, or a saved template MongoDB ObjectId to use as the PDF content layout\",\n }),\n webhooks: z.array(z.string()).min(1).meta({ description: \"Array of webhook ObjectIds to notify on form lifecycle events\", example: [\"67e091ab2c4d3f22001a2b3c\"] }),\n metadata: z.any().optional().meta({ description: \"Arbitrary metadata to associate with the PDF request\", example: { department: \"Legal\", priority: \"high\" } }),\n data: z.any().optional().meta({ description: \"Pre-filled template field data to populate the PDF with\", example: { full_name: \"Razor Jack\", badge_id: \"RJ-7741\" } }),\n header: z.union([Config, z.string()]).optional().meta({ description: \"A (small) Bonsai component tree config used for the output PDF page header rendering\" }),\n footer: z.union([Config, z.string()]).optional().meta({ description: \"A (small) Bonsai component tree config used for the output PDF page footer rendering\" }),\n}).strict().meta({ description: \"Create a new PDF request to generate a PDF file from a Bonsai template\" });\n\nexport const CreatePDFRequestResponseData = z.object({\n pdfId: z.string().meta({ description: \"MongoDB ObjectId of the newly created PDF request (this is NOT the rendered pdf file - a file ID is returned after async pdf generation via webhook)\", example: \"67e091ab2c4d3f22001a2b3c\", readOnly: true }),\n}).strict().meta({ description: \"Created form request identifier\" });\n","import zod from \"zod\";\nimport { createErrorMap } from \"zod-validation-error\";\n\nzod.config({\n customError: createErrorMap(),\n});\n\n// Common primitives (shared across schema files)\nexport * from \"./common\";\n\n// API response envelope + request/response schemas\nexport * from \"./api.schema\";\n\n// Bonsai UI component tree (the template DSL)\nexport * from \"./bonsai.schema\";\nexport * from \"./builder.meta\";\n\n// Domain entity schemas (for OpenAPI component schemas + docs)\nexport * from \"./entities/user.schema\";\nexport * from \"./entities/organization.schema\";\nexport * from \"./entities/organization-user.schema\";\nexport * from \"./entities/template.schema\";\nexport * from \"./entities/form-request.schema\";\nexport * from \"./entities/api-key.schema\";\nexport * from \"./entities/webhook.schema\";\nexport * from \"./entities/jwt.schema\";\nexport * from \"./entities/file.schema\";\nexport * from \"./entities/pdf-request.schema\";\n","import {\n coreComponents,\n coreControlledInputs,\n type ComponentRegistry,\n type ControlledInput,\n type ControlledInputEntry,\n type ControlledInputRegistry,\n} from \"../../renderer/core-registry\";\nimport { calendarPreset } from \"../../renderer/presets/calendar\";\nimport { signaturePreset } from \"../../renderer/presets/signature\";\n\n/**\n * The full, batteries-included registry: every core component plus the heavy\n * opt-in presets (calendar, signature). Importing this module transitively\n * pulls in react-day-picker and react-signature-canvas — use\n * `renderer/core-registry` if you want to stay lightweight.\n *\n * Typed with `ComponentRegistry`/`ControlledInputRegistry` (both\n * `Record<string, ...>`) rather than `Record<COMPONENT[number], ...>` from\n * `@bonsai/constants` — that package is workspace-only and unpublished, and\n * referencing its types here would bake an escaping import path into this\n * file's emitted declaration, the same class of bug fixed for `Config` in\n * `src/types.ts`. (`COMPONENT[number]`, a numeric index into a union of\n * string-literal enum members, was already widening to plain `string` here —\n * so `ComponentRegistry`/`ControlledInputRegistry` lose nothing.)\n */\nexport const componentMap: ComponentRegistry = {\n ...coreComponents,\n ...calendarPreset.components,\n ...signaturePreset.components,\n};\n\nexport const controlledInputMap: ControlledInputRegistry = {\n ...coreControlledInputs,\n ...calendarPreset.controlledInputs,\n ...signaturePreset.controlledInputs,\n};\n\nexport type { ControlledInput, ControlledInputEntry };\n","import { PEBBLE_COMPONENT_SCHEMAS } from \"@bonsai/schemas\";\nimport { componentMap, controlledInputMap } from \"../ui/registry\";\nimport { coreRegistry, extendRegistry } from \"../../renderer/core-registry\";\nimport { defineBonsaiRegistry, defineComponent } from \"./types\";\n\nconst builtIns = extendRegistry(coreRegistry, {\n components: componentMap,\n controlledInputs: controlledInputMap,\n});\n\n// The full built-in library: `coreRegistry`'s identity, every built-in component\n// (heavy presets included), plus each component's `propsSchema` for `validateTemplate`.\nexport const pebbleRegistry = defineBonsaiRegistry({\n ...builtIns,\n components: Object.fromEntries(\n Object.entries(builtIns.components).map(([type, def]) => [\n type,\n defineComponent({ ...def, propsSchema: PEBBLE_COMPONENT_SCHEMAS[type]?.argsSchema }),\n ]),\n ),\n});\n","import type { BonsaiRegistry } from \"./types\";\n\nexport interface RegistryIdentity {\n id: string;\n version: string;\n manifestHash?: string;\n}\n\nexport type PinResolution =\n | { action: \"render\"; reason: \"no-pin\" }\n | { action: \"render\"; reason: \"match\" }\n | { action: \"render\"; reason: \"version-skew\"; warning: string }\n | { action: \"fail\"; reason: \"id-mismatch\"; error: string };\n\n// Implements the migration rule in REGISTRY_SPIKE.md, \"Schema strategy\": templates\n// already in storage carry no pin at all, so an absent pin must render (not fail).\n// A patch bump must not brick live forms — only an `id` mismatch is a different\n// component library, and that is the only case that fails closed.\nexport function resolveRegistryPin(\n pin: RegistryIdentity | undefined,\n registry: Pick<BonsaiRegistry, \"id\" | \"version\"> & { manifestHash?: string },\n): PinResolution {\n if (!pin) {\n return { action: \"render\", reason: \"no-pin\" };\n }\n\n if (pin.id !== registry.id) {\n return {\n action: \"fail\",\n reason: \"id-mismatch\",\n error: `Template is pinned to registry \"${pin.id}\", but rendering registry is \"${registry.id}\" — this is a different component library, not a version skew.`,\n };\n }\n\n const versionMatches = pin.version === registry.version;\n // A Case A manifest can be edited at a stable URL without a version bump — that's\n // exactly the drift the pinning rules exist to prevent, so a manifestHash mismatch\n // is treated the same as a version mismatch even when `version` itself matches.\n const manifestHashMatches =\n pin.manifestHash == null || registry.manifestHash == null || pin.manifestHash === registry.manifestHash;\n\n if (versionMatches && manifestHashMatches) {\n return { action: \"render\", reason: \"match\" };\n }\n\n return {\n action: \"render\",\n reason: \"version-skew\",\n warning: versionMatches\n ? `Template is pinned to registry \"${pin.id}\"@\"${pin.version}\" (manifest ${pin.manifestHash}), but the resolved manifest is now ${registry.manifestHash}. Re-pin on next save.`\n : `Template is pinned to registry \"${pin.id}\"@\"${pin.version}\", but rendering registry is \"${pin.id}\"@\"${registry.version}\". Re-pin on next save.`,\n };\n}\n","import { COMPONENT } from \"@bonsai/constants\";\nimport type { Config } from \"../../types\";\nimport { resolveRegistryPin, type RegistryIdentity } from \"./identity\";\nimport type { BonsaiRegistry, ComponentDefinition } from \"./types\";\n\n// `each`/`if` are core engine control-flow nodes, not registry components — the renderer\n// special-cases them before ever consulting the registry (see bonsai.tsx), so validation\n// must too rather than reporting them as unknown components.\nconst STRUCTURAL_TYPES: string[] = [COMPONENT.EACH, COMPONENT.IF];\n\nexport interface RegistryValidationError {\n path: string;\n message: string;\n componentType?: string;\n}\n\nexport interface RegistryValidationResult {\n valid: boolean;\n errors: RegistryValidationError[];\n // Non-fatal notices — currently only a registry version/manifest skew on an\n // otherwise-matching pin (REGISTRY_SPIKE.md, \"Schema strategy\" migration rules).\n warnings: string[];\n}\n\nexport interface ValidateTemplateOptions {\n // Which render target this validation gates. A component whose capabilities omit\n // the matching mode (e.g. no \"pdf\") is rejected for that mode. Defaults to \"web\".\n mode?: \"web\" | \"pdf\";\n // The registry identity a stored template was last validated against. Absent for\n // templates written before pinning existed — that renders unpinned, not fail-closed\n // (see the migration rules this implements in identity.ts).\n pin?: RegistryIdentity;\n}\n\nfunction isRenderTargetCapable(\n def: ComponentDefinition,\n mode: \"web\" | \"pdf\",\n): boolean {\n if (!def.capabilities) return true;\n if (mode === \"pdf\") return def.capabilities.includes(\"pdf\");\n return def.capabilities.includes(\"ssr\");\n}\n\nfunction walk(\n node: Config | undefined,\n path: string,\n registry: BonsaiRegistry,\n mode: \"web\" | \"pdf\",\n errors: RegistryValidationError[],\n): void {\n if (node == null) return;\n if (typeof node === \"string\") return;\n\n const type = node.type;\n if (!type) {\n errors.push({ path, message: \"Node is missing a required `type` field\" });\n return;\n }\n\n if (STRUCTURAL_TYPES.includes(type)) {\n (node.children ?? []).forEach((child, i) =>\n walk(child, `${path}.children[${i}]`, registry, mode, errors),\n );\n return;\n }\n\n const def = registry.components[type];\n if (!def) {\n errors.push({\n path,\n componentType: type,\n message: `Unknown component type \"${type}\" in registry \"${registry.id}\"@\"${registry.version}\"`,\n });\n return;\n }\n\n if (!isRenderTargetCapable(def, mode)) {\n errors.push({\n path,\n componentType: type,\n message: `Component \"${type}\" in registry \"${registry.id}\"@\"${registry.version}\" does not support \"${mode}\" rendering`,\n });\n }\n\n if (def.propsSchema) {\n const result = def.propsSchema.safeParse(node.args);\n if (!result.success) {\n for (const issue of result.error.issues) {\n const issuePath = issue.path.length ? `${path}.args.${issue.path.join(\".\")}` : `${path}.args`;\n errors.push({ path: issuePath, componentType: type, message: issue.message });\n }\n }\n }\n\n const hasChildren = (node.children?.length ?? 0) > 0;\n if (hasChildren) {\n if (def.capabilities && !def.capabilities.includes(\"children\")) {\n errors.push({\n path,\n componentType: type,\n message: `Component \"${type}\" in registry \"${registry.id}\"@\"${registry.version}\" does not accept children`,\n });\n }\n (node.children ?? []).forEach((child, i) =>\n walk(child, `${path}.children[${i}]`, registry, mode, errors),\n );\n }\n}\n\nexport function validateTemplate(\n template: Config,\n registry: BonsaiRegistry,\n options: ValidateTemplateOptions = {},\n): RegistryValidationResult {\n const errors: RegistryValidationError[] = [];\n const warnings: string[] = [];\n\n if (options.pin) {\n const resolution = resolveRegistryPin(options.pin, registry);\n if (resolution.action === \"fail\") {\n errors.push({ path: \"root\", message: resolution.error });\n return { valid: false, errors, warnings };\n }\n if (resolution.reason === \"version-skew\") {\n warnings.push(resolution.warning);\n }\n }\n\n walk(template, \"root\", registry, options.mode ?? \"web\", errors);\n return { valid: errors.length === 0, errors, warnings };\n}\n","import { z } from \"zod\";\n\n/**\n * Compiles the JSON Schema subset a manifest's `propsSchema` is allowed to use into a\n * Zod validator (REGISTRY_SPIKE.md, \"Registry manifests\": \"JSON Schema on the wire;\n * compiled to a Zod validator at load\"). Deliberately a subset, not a general JSON\n * Schema implementation — enough to express prop narrowing (type, enum, required,\n * string/number bounds), which is the only thing a Case A manifest is allowed to do\n * to a prop schema in the first place.\n */\nexport type JsonSchema = Record<string, unknown>;\n\nexport interface JsonSchemaToZodOptions {\n /**\n * Accept a `\"{{expression}}\"` binding anywhere a typed value is declared.\n *\n * A template author writes `checked: \"{{form.agree}}\"` and the binding is resolved at\n * render time, long after validation runs — so a schema saying `{\"type\":\"boolean\"}`\n * rejects a template that would render perfectly. The hand-rolled registry has always\n * worked around this by declaring `z.union([z.string(), z.boolean()])` by hand on every\n * affected prop. This is that convention made available to manifests whose schemas were\n * machine-derived from component sources and so cannot hand-write it.\n *\n * Opt-in rather than automatic: `bonsai.generated.json` doubles as an LLM tool\n * definition, and a prop that reads \"boolean\" there is worth keeping precise.\n *\n * Narrower than the hand-rolled convention on purpose — only binding-*shaped* strings\n * are admitted, not every string. `{\"type\":\"string\",\"minLength\":1}` therefore still\n * rejects `\"\"`, and an `enum` still rejects a value outside it, both of which a blanket\n * `z.string()` union would silently discard.\n */\n allowBindings?: boolean;\n}\n\n// The exact test `parseExpression` and `extractVariables` apply before treating a value as\n// an expression (`lib/ast/index.ts`). Anything failing it is a literal at render time, so\n// admitting it here would accept values the renderer will never substitute.\nconst bindingExpression = z\n .string()\n .refine((value) => value.startsWith(\"{{\") && value.endsWith(\"}}\"), {\n message: 'Expected a value of the declared type, or a \"{{binding}}\" expression',\n });\n\nexport function jsonSchemaToZod(schema: JsonSchema, options: JsonSchemaToZodOptions = {}): z.ZodType<unknown> {\n // Applied to every terminus but `object`: an object schema is a prop *container* — the\n // root `propsSchema` is one — and a node's `args` is never itself a binding string. Its\n // properties each pass back through here and are wrapped individually.\n const bindable = (inner: z.ZodType<unknown>): z.ZodType<unknown> =>\n options.allowBindings ? z.union([bindingExpression, inner]) : inner;\n\n if (\"const\" in schema) {\n return bindable(z.literal(schema.const as string | number | boolean));\n }\n\n if (Array.isArray(schema.enum)) {\n const values = schema.enum as (string | number | boolean)[];\n if (values.length === 0) {\n throw new Error(\"jsonSchemaToZod: enum must have at least one value\");\n }\n const [first, ...rest] = values;\n return bindable(rest.reduce((acc: z.ZodType<unknown>, v) => z.union([acc, z.literal(v)]), z.literal(first)));\n }\n\n const type = schema.type as string | undefined;\n\n switch (type) {\n case \"string\": {\n let s = z.string();\n if (typeof schema.minLength === \"number\") s = s.min(schema.minLength);\n if (typeof schema.maxLength === \"number\") s = s.max(schema.maxLength);\n if (typeof schema.pattern === \"string\") s = s.regex(new RegExp(schema.pattern));\n return bindable(s);\n }\n case \"number\":\n case \"integer\": {\n let n = z.number();\n if (type === \"integer\") n = n.int();\n if (typeof schema.minimum === \"number\") n = n.min(schema.minimum);\n if (typeof schema.maximum === \"number\") n = n.max(schema.maximum);\n return bindable(n);\n }\n case \"boolean\":\n return bindable(z.boolean());\n case \"array\": {\n const items = schema.items ? jsonSchemaToZod(schema.items as JsonSchema, options) : z.unknown();\n return bindable(z.array(items));\n }\n case \"object\": {\n const properties = (schema.properties ?? {}) as Record<string, JsonSchema>;\n const required = new Set((schema.required as string[] | undefined) ?? []);\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, propSchema] of Object.entries(properties)) {\n const propZod = jsonSchemaToZod(propSchema, options);\n shape[key] = required.has(key) ? propZod : propZod.optional();\n }\n let obj = z.object(shape);\n if (schema.additionalProperties === false) obj = obj.strict();\n return obj;\n }\n default:\n return z.unknown();\n }\n}\n","import { z } from \"zod\";\n\n// Structural shape of a RegistryManifest on the wire (REGISTRY_SPIKE.md, \"Registry\n// manifests\"). Pure JSON: no function can be expressed in this schema — that is the\n// entire reason a Case A manifest is safe to accept from a tenant.\nexport const ManifestControlledSchema = z\n .object({\n valueProp: z.string().min(1),\n changeProp: z.string().min(1),\n extract: z.string().min(1),\n })\n .strict();\n\nexport const ManifestComponentSchema = z\n .object({\n name: z.string().min(1),\n canonicalName: z.string().min(1).optional(),\n // Case A: a key resolved against `base`'s exports, never a module path to import.\n entry: z.string().min(1),\n propsSchema: z.record(z.string(), z.unknown()).optional(),\n capabilities: z\n .array(z.enum([\"children\", \"bindings\", \"events\", \"formField\", \"ssr\", \"pdf\"]))\n .optional(),\n controlled: ManifestControlledSchema.optional(),\n css: z.array(z.string()).optional(),\n })\n .strict();\n\nexport const RegistryManifestSchema = z\n .object({\n $schema: z.string().optional(),\n id: z.string().min(1),\n namespace: z.string().min(1).optional(),\n version: z.string().min(1),\n engine: z\n .object({\n name: z.literal(\"bonsai\"),\n api: z.string().min(1),\n })\n .strict(),\n components: z.array(ManifestComponentSchema).min(1),\n integrity: z\n .object({\n algorithm: z.literal(\"sha256\"),\n manifestHash: z.string().min(1),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type RegistryManifest = z.infer<typeof RegistryManifestSchema>;\nexport type ManifestComponent = z.infer<typeof ManifestComponentSchema>;\n","import { z } from \"zod\";\nimport { jsonSchemaToZod, type JsonSchema } from \"./json-schema-to-zod\";\nimport { RegistryManifestSchema, type ManifestComponent, type RegistryManifest } from \"./manifest-schema\";\nimport { defineBonsaiRegistry, defineComponent, type BonsaiRegistry } from \"./types\";\n\nexport type { RegistryManifest, ManifestComponent } from \"./manifest-schema\";\nexport { RegistryManifestSchema } from \"./manifest-schema\";\n\nconst SUPPORTED_ENGINE_API = \"1\";\n\n// Named-extractor allowlist (REGISTRY_SPIKE.md, \"Core registry contract\"): a manifest\n// names an extractor from this fixed list, resolved to a real function by the loader.\n// There is no syntactic position in a manifest where a function can be expressed, so\n// none can be smuggled in — this is the reason a Case A manifest is safe to accept\n// from a tenant at all.\nexport const EXTRACTOR_ALLOWLIST: Record<string, (eventOrValue: unknown) => unknown> = {\n identity: (value) => value,\n targetValue: (event) => (event as { target?: { value?: unknown } })?.target?.value,\n targetChecked: (event) => (event as { target?: { checked?: unknown } })?.target?.checked,\n targetValueAsNumber: (event) =>\n (event as { target?: { valueAsNumber?: unknown } })?.target?.valueAsNumber,\n};\n\nexport class ManifestLoadError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ManifestLoadError\";\n }\n}\n\n// Intersect, never replace (locked decision, REGISTRY_SPIKE.md \"Security and trust\n// boundaries\": a manifest can narrow or re-describe props but must not widen a\n// component past what its own first-party schema accepts). Deliberately not\n// `z.intersection` — zod's intersection merge does not reliably propagate a strict()\n// base schema's rejection of unrecognized keys, which would silently defeat the\n// narrowing-only guarantee. This runs both schemas independently and requires both to\n// accept the value, so the stricter of the two always wins.\nexport function composePropsSchema(\n baseSchema: z.ZodType<unknown> | undefined,\n tenantSchema: z.ZodType<unknown> | undefined,\n): z.ZodType<unknown> | undefined {\n if (!baseSchema) return tenantSchema;\n if (!tenantSchema) return baseSchema;\n return z.any().superRefine((value, ctx) => {\n const baseResult = baseSchema.safeParse(value);\n if (!baseResult.success) {\n for (const issue of baseResult.error.issues) {\n ctx.addIssue({ code: \"custom\", message: issue.message, path: issue.path });\n }\n }\n const tenantResult = tenantSchema.safeParse(value);\n if (!tenantResult.success) {\n for (const issue of tenantResult.error.issues) {\n ctx.addIssue({ code: \"custom\", message: issue.message, path: issue.path });\n }\n }\n });\n}\n\nexport async function computeManifestHash(raw: string): Promise<string> {\n const bytes = new TextEncoder().encode(raw);\n const digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n const hex = Array.from(new Uint8Array(digest))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n return `sha256:${hex}`;\n}\n\nexport interface ResolveManifestOptions {\n base: BonsaiRegistry;\n engineApi?: string;\n maxComponents?: number;\n maxManifestBytes?: number;\n rawManifestSize?: number;\n manifestHash?: string;\n}\n\nfunction resolveExtractor(name: string): (eventOrValue: unknown) => unknown {\n const fn = EXTRACTOR_ALLOWLIST[name];\n if (!fn) {\n throw new ManifestLoadError(\n `Registry manifest: unknown extractor \"${name}\" — must be one of: ${Object.keys(EXTRACTOR_ALLOWLIST).join(\", \")}`,\n );\n }\n return fn;\n}\n\nfunction resolveComponent(\n entry: ManifestComponent,\n base: BonsaiRegistry,\n manifestId: string,\n): [string, ReturnType<typeof defineComponent>] {\n const baseDef = base.components[entry.entry];\n if (!baseDef) {\n throw new ManifestLoadError(\n `Registry manifest \"${manifestId}\": component \"${entry.name}\" resolves entry \"${entry.entry}\", which is not exported by base registry \"${base.id}\"@\"${base.version}\"`,\n );\n }\n\n const tenantPropsSchema = entry.propsSchema\n ? jsonSchemaToZod(entry.propsSchema as JsonSchema)\n : undefined;\n\n const controlled = entry.controlled\n ? {\n valueProp: entry.controlled.valueProp,\n changeProp: entry.controlled.changeProp,\n extract: resolveExtractor(entry.controlled.extract),\n }\n : baseDef.controlled;\n\n const canonicalName = entry.canonicalName ?? entry.name;\n\n return [\n canonicalName,\n defineComponent({\n component: baseDef.component,\n propsSchema: composePropsSchema(baseDef.propsSchema, tenantPropsSchema),\n capabilities: entry.capabilities ?? baseDef.capabilities,\n controlled,\n assets: entry.css ? { css: entry.css } : baseDef.assets,\n }),\n ];\n}\n\n// Case A only: the manifest binds to component implementations already in `base` —\n// `entry` is a key resolved against `base`'s exports, never a module path to import.\n// Resolution happens once (at init/template-create time), never per render.\nexport function resolveManifest(\n manifest: RegistryManifest,\n options: ResolveManifestOptions,\n): BonsaiRegistry {\n const parsed = RegistryManifestSchema.parse(manifest);\n\n const engineApi = options.engineApi ?? SUPPORTED_ENGINE_API;\n if (parsed.engine.api !== engineApi) {\n throw new ManifestLoadError(\n `Registry manifest \"${parsed.id}\" targets engine.api \"${parsed.engine.api}\", but this build supports \"${engineApi}\"`,\n );\n }\n\n const maxComponents = options.maxComponents ?? 500;\n if (parsed.components.length > maxComponents) {\n throw new ManifestLoadError(\n `Registry manifest \"${parsed.id}\" declares ${parsed.components.length} components, exceeding the limit of ${maxComponents}`,\n );\n }\n\n const maxBytes = options.maxManifestBytes ?? 5 * 1024 * 1024;\n if (options.rawManifestSize != null && options.rawManifestSize > maxBytes) {\n throw new ManifestLoadError(\n `Registry manifest \"${parsed.id}\" is ${options.rawManifestSize} bytes, exceeding the limit of ${maxBytes}`,\n );\n }\n\n const components = Object.fromEntries(\n parsed.components.map((entry) => resolveComponent(entry, options.base, parsed.id)),\n );\n\n return defineBonsaiRegistry({\n id: parsed.id,\n version: parsed.version,\n namespace: parsed.namespace,\n manifestHash: options.manifestHash,\n fallback: options.base.fallback,\n components,\n });\n}\n\nexport interface LoadManifestOptions extends ResolveManifestOptions {\n allowedOrigins?: string[];\n // Test/DI seam — defaults to the global fetch.\n fetchImpl?: typeof fetch;\n}\n\nconst manifestCache = new Map<string, BonsaiRegistry>();\n\nexport function clearManifestCache(): void {\n manifestCache.clear();\n}\n\nfunction verifyIntegrity(manifest: RegistryManifest, hash: string): void {\n if (!manifest.integrity) {\n throw new ManifestLoadError(\n `Registry manifest \"${manifest.id}\" has no integrity block — a manifest hash is required before use`,\n );\n }\n if (manifest.integrity.manifestHash !== hash) {\n throw new ManifestLoadError(\n `Registry manifest \"${manifest.id}\" failed its integrity check: expected \"${manifest.integrity.manifestHash}\", computed \"${hash}\"`,\n );\n }\n}\n\n// Resolves once and caches by manifestHash — never fetched or re-resolved per render\n// (the hosted SSR path has a ~13ms warm budget a network hop plus manifest parse does\n// not fit in).\nexport async function loadRegistryManifest(\n source: RegistryManifest | string,\n options: LoadManifestOptions,\n): Promise<BonsaiRegistry> {\n let raw: string;\n\n if (typeof source === \"string\") {\n const url = new URL(source);\n if (options.allowedOrigins && !options.allowedOrigins.includes(url.origin)) {\n throw new ManifestLoadError(\n `Registry manifest origin \"${url.origin}\" is not in the allowed origins list`,\n );\n }\n const doFetch = options.fetchImpl ?? fetch;\n const res = await doFetch(source);\n if (!res.ok) {\n throw new ManifestLoadError(\n `Registry manifest fetch failed: ${source} responded ${res.status}`,\n );\n }\n raw = await res.text();\n } else {\n raw = JSON.stringify(source);\n }\n\n const manifest = RegistryManifestSchema.parse(JSON.parse(raw));\n\n // The hash covers the manifest's content, not its own integrity block — hashing the\n // raw bytes (which already embed `integrity.manifestHash`) would be self-referential\n // and could never match. This is what a build step computes before stamping the hash\n // back into the manifest it just built.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- discarding `integrity` on purpose\n const { integrity: _integrity, ...withoutIntegrity } = manifest;\n const hash = await computeManifestHash(JSON.stringify(withoutIntegrity));\n verifyIntegrity(manifest, hash);\n\n const cached = manifestCache.get(hash);\n if (cached) return cached;\n\n const resolved = resolveManifest(manifest, { ...options, rawManifestSize: raw.length, manifestHash: hash });\n manifestCache.set(hash, resolved);\n return resolved;\n}\n","import type { JsonSchema } from \"./json-schema-to-zod\";\n\n// A type alias, not an interface, on purpose: `JsonSchema` is `Record<string, unknown>`\n// and only aliases get an implicit index signature. As an interface this type cannot be\n// passed to `jsonSchemaToZod` — which is exactly the composition the comment below\n// describes and which every generated registry adapter performs.\nexport type ObjectPropsSchema = {\n type?: \"object\";\n properties: Record<string, JsonSchema>;\n required?: string[];\n};\n\n// REGISTRY_SPIKE.md 5.5: `generated ∪ overrides`, per component and per prop, overrides\n// win. NOT `composePropsSchema` (manifest.ts) — that intersects because it composes an\n// *untrusted* tenant schema over a first-party one, a security boundary. Here both\n// sides are first-party and dev-authored; overrides are authoritative, not narrowing.\n// Runs at the JSON Schema level, before `jsonSchemaToZod` — merging Zod types directly\n// would give intersect-flavoured semantics instead.\nexport function mergeGeneratedWithOverrides(\n generated: ObjectPropsSchema | undefined,\n overrides: Partial<ObjectPropsSchema> | undefined,\n): ObjectPropsSchema {\n const properties = { ...(generated?.properties ?? {}), ...(overrides?.properties ?? {}) };\n const required = [...new Set([...(generated?.required ?? []), ...(overrides?.required ?? [])])];\n return { type: \"object\", properties, required };\n}\n","// REGISTRY_SPIKE.md 5.6: the two checks that run at build/startup, in the app that\n// consumes the generated artifact — network-free by construction, both sides are\n// values already on disk (the committed artifact and the installed @base-ui/react).\nexport interface RegistrySource {\n url: string;\n registryHash: string;\n}\n\nexport interface DriftCheckInput {\n // `bonsai.generated.json`'s `registries` and `pebble-kit.json`'s `registries`. Compared\n // per URL rather than as one aggregate hash: this file ships in the browser bundle and\n // must not pull in a hash implementation, and a per-URL comparison can name the\n // registry that moved instead of reporting two opaque digests.\n artifactRegistries: RegistrySource[];\n configRegistries: RegistrySource[];\n artifactBaseUiVersion: string;\n installedBaseUiVersion: string;\n}\n\nfunction describeStaleArtifact(artifact: RegistrySource[], config: RegistrySource[]): string | undefined {\n const artifactByUrl = new Map(artifact.map((r) => [r.url, r.registryHash]));\n const configByUrl = new Map(config.map((r) => [r.url, r.registryHash]));\n const reasons: string[] = [];\n\n for (const [url, configHash] of configByUrl) {\n const artifactHash = artifactByUrl.get(url);\n if (artifactHash === undefined) {\n reasons.push(`${url} is configured but missing from the artifact`);\n } else if (artifactHash !== configHash) {\n reasons.push(`${url}: artifact has ${artifactHash}, pebble-kit.json records ${configHash}`);\n }\n }\n for (const url of artifactByUrl.keys()) {\n if (!configByUrl.has(url)) reasons.push(`${url} is in the artifact but no longer configured`);\n }\n\n return reasons.length > 0 ? reasons.join(\"; \") : undefined;\n}\n\nexport interface DriftIssue {\n check: \"stale-artifact\" | \"baseui-drift\";\n level: \"warn\" | \"fail\";\n message: string;\n}\n\nfunction extractMajor(version: string): number | undefined {\n const match = /(\\d+)\\.\\d+\\.\\d+/.exec(version);\n return match ? Number(match[1]) : undefined;\n}\n\nexport function checkArtifactDrift(input: DriftCheckInput): DriftIssue[] {\n const issues: DriftIssue[] = [];\n\n const staleReason = describeStaleArtifact(input.artifactRegistries, input.configRegistries);\n if (staleReason) {\n issues.push({\n check: \"stale-artifact\",\n level: \"fail\",\n message: `bonsai.generated.json is out of date with pebble-kit.json (${staleReason}) — run \"pebble-kit generate\"`,\n });\n }\n\n if (input.artifactBaseUiVersion !== input.installedBaseUiVersion) {\n const artifactMajor = extractMajor(input.artifactBaseUiVersion);\n const installedMajor = extractMajor(input.installedBaseUiVersion);\n const majorMismatch = artifactMajor !== undefined && installedMajor !== undefined && artifactMajor !== installedMajor;\n issues.push({\n check: \"baseui-drift\",\n level: majorMismatch ? \"fail\" : \"warn\",\n message: `generated artifact's baseline was built against @base-ui/react ${input.artifactBaseUiVersion}, but ${input.installedBaseUiVersion} is installed`,\n });\n }\n\n return issues;\n}\n\n// \"Fail loud\" (5.6): a fail-level issue throws; warn-level issues are the caller's to\n// surface however it likes (console.warn, a logger, ...) — this only gates the hard stop.\nexport function assertNoFailingDrift(issues: DriftIssue[]): void {\n const failing = issues.filter((i) => i.level === \"fail\");\n if (failing.length > 0) {\n throw new Error(failing.map((f) => f.message).join(\"; \"));\n }\n}\n","// Default entrypoint: the batteries-included preset. `Bonsai` here resolves\n// every built-in component, including the heavy ones (calendar, signature),\n// which keeps existing consumers working unchanged. Import\n// `@pebble-software/bonsai/core` instead to start from the lightweight\n// registry and opt into heavy components via `.../presets/*`.\n//\n// The theme stylesheet is not imported here: it ships raw as\n// `@pebble-software/bonsai/index.css` for the consumer's Tailwind build.\n\nimport { createBonsaiRenderer } from \"./renderer/create-renderer\";\nimport { pebbleRegistry } from \"./lib/registry/pebble-registry\";\n\n/** Renderer bound to the full built-in registry. */\nexport const { Bonsai } = createBonsaiRenderer({ registry: pebbleRegistry });\n\nexport { createBonsaiRenderer };\nexport { useUpdateData, useBonsaiRenderMode } from \"./components/core/bonsai\";\nexport { componentMap, controlledInputMap } from \"./lib/ui/registry\";\nexport { pebbleRegistry };\nexport { coreRegistry, extendRegistry } from \"./renderer/core-registry\";\nexport { defineComponent, defineBonsaiRegistry } from \"./lib/registry/types\";\nexport type {\n BonsaiRegistry,\n ComponentDefinition,\n ControlledFieldSpec,\n ComponentCapability,\n} from \"./lib/registry/types\";\nexport { validateTemplate } from \"./lib/registry/validate\";\nexport type {\n RegistryValidationError,\n RegistryValidationResult,\n ValidateTemplateOptions,\n} from \"./lib/registry/validate\";\nexport { resolveRegistryPin } from \"./lib/registry/identity\";\nexport type { RegistryIdentity, PinResolution } from \"./lib/registry/identity\";\nexport {\n resolveManifest,\n loadRegistryManifest,\n computeManifestHash,\n composePropsSchema,\n clearManifestCache,\n ManifestLoadError,\n EXTRACTOR_ALLOWLIST,\n RegistryManifestSchema,\n} from \"./lib/registry/manifest\";\nexport type {\n RegistryManifest,\n ManifestComponent,\n ResolveManifestOptions,\n LoadManifestOptions,\n} from \"./lib/registry/manifest\";\nexport { jsonSchemaToZod } from \"./lib/registry/json-schema-to-zod\";\nexport type { JsonSchema } from \"./lib/registry/json-schema-to-zod\";\nexport { mergeGeneratedWithOverrides } from \"./lib/registry/merge-generated\";\nexport type { ObjectPropsSchema } from \"./lib/registry/merge-generated\";\nexport { checkArtifactDrift, assertNoFailingDrift } from \"./lib/registry/drift\";\nexport type { DriftCheckInput, DriftIssue, RegistrySource } from \"./lib/registry/drift\";\n\nexport type { BonsaiProps, RenderMode } from \"./components/core/bonsai\";\nexport type {\n BonsaiRendererOptions,\n BonsaiRendererInstance,\n} from \"./renderer/create-renderer\";\nexport type {\n BonsaiPreset,\n ComponentRegistry,\n ControlledInput,\n ControlledInputEntry,\n ControlledInputRegistry,\n} from \"./renderer/core-registry\";\nexport type { Config } from \"./types\";\n"],"names":["OID","z","TIMESTAMP","CoreArgs","AArgs","HArgs","PArgs","OLArgs","ULArgs","LIArgs","DivArgs","SpanArgs","SeparatorArgs","AlertArgs","BadgeArgs","ButtonArgs","CardArgs","CardHeaderArgs","CardTitleArgs","CardDescriptionArgs","CardContentArgs","CardFooterArgs","CardActionArgs","CardIconArgs","CheckboxArgs","ImageArgs","OTPArgs","InputArgs","LabelArgs","SwitchArgs","TextareaArgs","InputGroupArgs","InputGroupTextArgs","InputGroupAddonArgs","InputGroupInputArgs","InputGroupButtonArgs","InputGroupTextareaArgs","SignatureArgs","CalendarArgs","TableArgs","TableHeaderArgs","TableBodyArgs","TableFooterArgs","TableHeadArgs","TableRowArgs","TableCellArgs","TableCaptionArgs","AccordionArgs","AccordionItemArgs","AccordionTriggerArgs","AccordionContentArgs","AvatarArgs","CollapsibleArgs","CollapsibleTriggerArgs","CollapsibleContentArgs","LoaderArgs","ProgressArgs","SkeletonArgs","Node","ComponentNode","CoreNode","DivNode","COMPONENT","ANode","HNode","PNode","OLNode","ULNode","LINode","SpanNode","SeparatorNode","AlertNode","BadgeNode","ButtonNode","CardNode","CheckboxNode","ImageNode","OTPNode","InputNode","LabelNode","SwitchNode","TextareaNode","SignatureNode","CalendarNode","CardHeaderNode","CardTitleNode","CardDescriptionNode","CardContentNode","CardFooterNode","CardActionNode","CardIconNode","TableNode","TableHeaderNode","TableBodyNode","TableFooterNode","TableHeadNode","TableRowNode","TableCellNode","TableCaptionNode","AccordionNode","AccordionItemNode","AccordionTriggerNode","AccordionContentNode","AvatarNode","CollapsibleNode","CollapsibleTriggerNode","CollapsibleContentNode","LoaderNode","ProgressNode","SkeletonNode","InputGroupNode","InputGroupTextNode","InputGroupAddonNode","InputGroupInputNode","InputGroupButtonNode","InputGroupTextareaNode","EachArgs","EachNode","IfArgs","IfNode","argsOf","node","descriptionOf","createTemplateSchema","components","componentNode","localNode","localCoreNode","nodeSchemas","type","argsSchema","description","PEBBLE_COMPONENT_SCHEMAS","pebbleTemplateSchema","Config","NodeSchemas","schema","nodeRules","fieldHints","C","SELF_CONTAINED","TABLE_SECTIONS","CARD_SLOTS","INPUT_GROUP_SLOTS","RULES","FIELD_HINTS","TYPE_FIELD_HINTS","getArgsSchema","args","shape","name","field","TemplateSource","body","FormRequestStatus","FileMimeType","PDFRequestStatus","zod","createErrorMap","componentMap","coreComponents","calendarPreset","signaturePreset","controlledInputMap","coreControlledInputs","builtIns","extendRegistry","coreRegistry","pebbleRegistry","defineBonsaiRegistry","def","defineComponent","resolveRegistryPin","pin","registry","versionMatches","manifestHashMatches","STRUCTURAL_TYPES","isRenderTargetCapable","mode","walk","path","errors","child","i","result","issue","issuePath","validateTemplate","template","options","warnings","resolution","bindingExpression","value","jsonSchemaToZod","bindable","inner","values","first","rest","acc","v","s","n","items","properties","required","key","propSchema","propZod","obj","ManifestControlledSchema","ManifestComponentSchema","RegistryManifestSchema","SUPPORTED_ENGINE_API","EXTRACTOR_ALLOWLIST","event","ManifestLoadError","message","composePropsSchema","baseSchema","tenantSchema","ctx","baseResult","tenantResult","computeManifestHash","raw","bytes","digest","b","resolveExtractor","fn","resolveComponent","entry","base","manifestId","baseDef","tenantPropsSchema","controlled","resolveManifest","manifest","parsed","engineApi","maxComponents","maxBytes","manifestCache","clearManifestCache","verifyIntegrity","hash","loadRegistryManifest","source","url","res","_integrity","withoutIntegrity","cached","resolved","mergeGeneratedWithOverrides","generated","overrides","describeStaleArtifact","artifact","config","artifactByUrl","r","configByUrl","reasons","configHash","artifactHash","extractMajor","version","match","checkArtifactDrift","input","issues","staleReason","artifactMajor","installedMajor","majorMismatch","assertNoFailingDrift","failing","f","Bonsai","createBonsaiRenderer"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class LRUCache<K, V> {
2
+ private cache;
3
+ private maxSize;
4
+ constructor(maxSize: number);
5
+ get(key: K): V | undefined;
6
+ set(key: K, value: V): void;
7
+ clear(): void;
8
+ }
@@ -0,0 +1,2 @@
1
+ import { ASTNode } from './types.js';
2
+ export declare function evaluate(node: ASTNode, data: Record<string, any>): any;
@@ -0,0 +1,2 @@
1
+ export type Helper = (...args: any[]) => any;
2
+ export declare const helpers: Record<string, Helper>;
@@ -0,0 +1,29 @@
1
+ import { ASTNode } from './types.js';
2
+ export type { ASTNode } from './types.js';
3
+ export declare function extractVariables(expr: string): string[];
4
+ export declare function parseExpression(expr: string, data: Record<string, any>): any;
5
+ export declare function clearExpressionCache(): void;
6
+ /**
7
+ * The single predicate that decides whether a value is a template expression.
8
+ * `parseExpression` / `extractVariables` / the template compiler must all agree
9
+ * on it — a divergence would silently stop evaluating a prop.
10
+ */
11
+ export declare function isExpression(value: unknown): value is string;
12
+ export interface CompiledExpression {
13
+ /** The original `{{...}}` source, i.e. what gets handed to `parseExpression`. */
14
+ source: string;
15
+ /** The trimmed inner content, i.e. the raw binding path for a plain path binding. */
16
+ content: string;
17
+ /** Parsed AST, or null for an empty expression or a parse failure. */
18
+ ast: ASTNode | null;
19
+ /** Parse failure, if any. Deferred to evaluation time so logging stays per-render. */
20
+ error: unknown;
21
+ /** Data paths the expression reads. Empty for literal-only expressions. */
22
+ variables: string[];
23
+ }
24
+ /**
25
+ * Parses an expression ahead of render. Returns null for anything that isn't a
26
+ * `{{...}}` expression. Never throws: a malformed expression is captured in
27
+ * `error` so the caller can keep `parseExpression`'s per-render error reporting.
28
+ */
29
+ export declare function compileExpression(value: unknown): CompiledExpression | null;
@@ -0,0 +1,2 @@
1
+ import { default as jsep } from 'jsep';
2
+ export default jsep;
@@ -0,0 +1 @@
1
+ export type { Expression as ASTNode } from 'jsep';
@@ -0,0 +1,4 @@
1
+ import { ASTNode } from './types.js';
2
+ export declare function getOwn(obj: any, key: string | number): any;
3
+ export declare function staticPath(node: ASTNode): string | null;
4
+ export declare function extractIdentifiers(node: ASTNode): string[];
@@ -0,0 +1,8 @@
1
+ import { HapticInput } from 'web-haptics';
2
+ export { useWebHaptics as useHaptics } from 'web-haptics/react';
3
+ export declare const HAPTIC_BUTTON: HapticInput;
4
+ export declare const HAPTIC_TAB: HapticInput;
5
+ export declare const HAPTIC_SWITCH: HapticInput;
6
+ export declare const HAPTIC_CHECKBOX: HapticInput;
7
+ export declare const HAPTIC_ACCORDION: HapticInput;
8
+ export declare const HAPTIC_MENU_ITEM: HapticInput;
@@ -0,0 +1,17 @@
1
+ export interface RegistrySource {
2
+ url: string;
3
+ registryHash: string;
4
+ }
5
+ export interface DriftCheckInput {
6
+ artifactRegistries: RegistrySource[];
7
+ configRegistries: RegistrySource[];
8
+ artifactBaseUiVersion: string;
9
+ installedBaseUiVersion: string;
10
+ }
11
+ export interface DriftIssue {
12
+ check: "stale-artifact" | "baseui-drift";
13
+ level: "warn" | "fail";
14
+ message: string;
15
+ }
16
+ export declare function checkArtifactDrift(input: DriftCheckInput): DriftIssue[];
17
+ export declare function assertNoFailingDrift(issues: DriftIssue[]): void;
@@ -0,0 +1,24 @@
1
+ import { BonsaiRegistry } from './types.js';
2
+ export interface RegistryIdentity {
3
+ id: string;
4
+ version: string;
5
+ manifestHash?: string;
6
+ }
7
+ export type PinResolution = {
8
+ action: "render";
9
+ reason: "no-pin";
10
+ } | {
11
+ action: "render";
12
+ reason: "match";
13
+ } | {
14
+ action: "render";
15
+ reason: "version-skew";
16
+ warning: string;
17
+ } | {
18
+ action: "fail";
19
+ reason: "id-mismatch";
20
+ error: string;
21
+ };
22
+ export declare function resolveRegistryPin(pin: RegistryIdentity | undefined, registry: Pick<BonsaiRegistry, "id" | "version"> & {
23
+ manifestHash?: string;
24
+ }): PinResolution;