@riverbankcms/sdk 0.4.3 → 0.5.1

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 (178) hide show
  1. package/README.md +84 -0
  2. package/dist/cli/index.js +3463 -120
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/analytics.js +1 -1
  5. package/dist/client/analytics.js.map +1 -1
  6. package/dist/client/analytics.mjs +1 -1
  7. package/dist/client/analytics.mjs.map +1 -1
  8. package/dist/client/bookings.js +6 -6
  9. package/dist/client/bookings.js.map +1 -1
  10. package/dist/client/bookings.mjs +6 -6
  11. package/dist/client/bookings.mjs.map +1 -1
  12. package/dist/client/client.d.mts +2 -2
  13. package/dist/client/client.d.ts +2 -2
  14. package/dist/client/client.js +1379 -519
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +1379 -519
  17. package/dist/client/client.mjs.map +1 -1
  18. package/dist/client/hooks.d.mts +2 -2
  19. package/dist/client/hooks.d.ts +2 -2
  20. package/dist/client/hooks.js +26 -11
  21. package/dist/client/hooks.js.map +1 -1
  22. package/dist/client/hooks.mjs +26 -11
  23. package/dist/client/hooks.mjs.map +1 -1
  24. package/dist/client/rendering/client.js +20 -14
  25. package/dist/client/rendering/client.js.map +1 -1
  26. package/dist/client/rendering/client.mjs +20 -14
  27. package/dist/client/rendering/client.mjs.map +1 -1
  28. package/dist/client/usePage-BTPnCuWC.d.mts +6511 -0
  29. package/dist/client/usePage-BXjk8BhD.d.mts +6704 -0
  30. package/dist/client/usePage-BafOS9UT.d.mts +6512 -0
  31. package/dist/client/usePage-BiOReg0_.d.ts +6704 -0
  32. package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
  33. package/dist/client/usePage-DoPI6b8V.d.ts +6511 -0
  34. package/dist/client/usePage-QNWArrVO.d.ts +6670 -0
  35. package/dist/client/usePage-fBgPB6Oq.d.ts +6512 -0
  36. package/dist/server/{Layout-CXI_VkhN.d.ts → Layout-BClXUTsd.d.mts} +4 -4
  37. package/dist/server/{Layout-p6f3TLw9.d.mts → Layout-UXGjXv8M.d.ts} +4 -4
  38. package/dist/server/{chunk-6JBKKV3G.js → chunk-2KCF2DNK.js} +30 -10
  39. package/dist/server/chunk-2KCF2DNK.js.map +1 -0
  40. package/dist/server/chunk-5STV4MWD.js +189 -0
  41. package/dist/server/chunk-5STV4MWD.js.map +1 -0
  42. package/dist/server/{chunk-VHDDXCK6.js → chunk-7UPVCT3K.js} +1206 -496
  43. package/dist/server/chunk-7UPVCT3K.js.map +1 -0
  44. package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
  45. package/dist/server/chunk-AEFWG657.mjs.map +1 -0
  46. package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
  47. package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
  48. package/dist/server/{chunk-ES6QDZUX.mjs → chunk-C6FIJC7T.mjs} +2 -2
  49. package/dist/server/{chunk-N3PX76AP.mjs → chunk-CMABGYGI.mjs} +269 -135
  50. package/dist/server/chunk-CMABGYGI.mjs.map +1 -0
  51. package/dist/server/{chunk-TO7FD6TQ.js → chunk-I2D7KOEA.js} +4 -4
  52. package/dist/server/{chunk-TO7FD6TQ.js.map → chunk-I2D7KOEA.js.map} +1 -1
  53. package/dist/server/{chunk-R5B6IOFQ.js → chunk-KA74YRK6.js} +269 -135
  54. package/dist/server/chunk-KA74YRK6.js.map +1 -0
  55. package/dist/server/chunk-KFLZGNPO.mjs +189 -0
  56. package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
  57. package/dist/server/chunk-L5EA4FXU.mjs +134 -0
  58. package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
  59. package/dist/server/{chunk-U2NI3TS3.mjs → chunk-LNOUXALA.mjs} +1135 -425
  60. package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
  61. package/dist/server/{chunk-24F6FTCI.mjs → chunk-OSF34JTQ.mjs} +4 -4
  62. package/dist/server/{chunk-G35R7N7B.js → chunk-P3NNN73G.js} +3 -3
  63. package/dist/server/{chunk-G35R7N7B.js.map → chunk-P3NNN73G.js.map} +1 -1
  64. package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
  65. package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
  66. package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
  67. package/dist/server/chunk-RVDS7VSP.js.map +1 -0
  68. package/dist/server/{chunk-2SSEBAHC.js → chunk-TT5JWA4X.js} +9 -9
  69. package/dist/server/{chunk-2SSEBAHC.js.map → chunk-TT5JWA4X.js.map} +1 -1
  70. package/dist/server/chunk-VSFQRHYZ.js +134 -0
  71. package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
  72. package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
  73. package/dist/server/chunk-YYO3RIFO.js.map +1 -0
  74. package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
  75. package/dist/server/{components-Dhiemsjd.d.ts → components-BmaJxgCV.d.mts} +20 -75
  76. package/dist/server/{components-C75e4poV.d.mts → components-DppHY5oD.d.ts} +20 -75
  77. package/dist/server/components.d.mts +11 -8
  78. package/dist/server/components.d.ts +11 -8
  79. package/dist/server/components.js +5 -4
  80. package/dist/server/components.js.map +1 -1
  81. package/dist/server/components.mjs +4 -3
  82. package/dist/server/config-validation.d.mts +3 -3
  83. package/dist/server/config-validation.d.ts +3 -3
  84. package/dist/server/config-validation.js +9 -5
  85. package/dist/server/config-validation.js.map +1 -1
  86. package/dist/server/config-validation.mjs +8 -4
  87. package/dist/server/config.d.mts +243 -5
  88. package/dist/server/config.d.ts +243 -5
  89. package/dist/server/config.js +72 -5
  90. package/dist/server/config.js.map +1 -1
  91. package/dist/server/config.mjs +72 -5
  92. package/dist/server/config.mjs.map +1 -1
  93. package/dist/server/core-DsNWrl3o.d.mts +44 -0
  94. package/dist/server/core-DsNWrl3o.d.ts +44 -0
  95. package/dist/server/data.d.mts +4 -3
  96. package/dist/server/data.d.ts +4 -3
  97. package/dist/server/data.js +3 -3
  98. package/dist/server/data.mjs +2 -2
  99. package/dist/server/{index-CAwBj3-A.d.ts → index-Bucs6UqG.d.mts} +2 -1
  100. package/dist/server/{index-C6o9LPvq.d.mts → index-Cp7tJuRt.d.ts} +2 -1
  101. package/dist/server/index.d.mts +84 -6
  102. package/dist/server/index.d.ts +84 -6
  103. package/dist/server/index.js +91 -2
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/server/index.mjs +90 -1
  106. package/dist/server/index.mjs.map +1 -1
  107. package/dist/server/link-DjxLyC82.d.mts +23 -0
  108. package/dist/server/link-DjxLyC82.d.ts +23 -0
  109. package/dist/server/{loadContent-CdXfuCuE.d.mts → loadContent-BS-3wesN.d.mts} +4 -4
  110. package/dist/server/{loadContent-CsvQRoxb.d.ts → loadContent-Buvmudee.d.ts} +4 -4
  111. package/dist/server/{loadPage-p3AWwwrd.d.mts → loadPage-B8mQUUSo.d.mts} +5 -46
  112. package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
  113. package/dist/server/{loadPage-BA0HiT-6.d.ts → loadPage-DP3nrHBi.d.ts} +5 -46
  114. package/dist/server/loadPage-IDGVDFBB.js +11 -0
  115. package/dist/server/{loadPage-DLC7DJZP.js.map → loadPage-IDGVDFBB.js.map} +1 -1
  116. package/dist/server/metadata.d.mts +6 -4
  117. package/dist/server/metadata.d.ts +6 -4
  118. package/dist/server/navigation.d.mts +199 -29
  119. package/dist/server/navigation.d.ts +199 -29
  120. package/dist/server/navigation.js +27 -43
  121. package/dist/server/navigation.js.map +1 -1
  122. package/dist/server/navigation.mjs +20 -36
  123. package/dist/server/navigation.mjs.map +1 -1
  124. package/dist/server/rendering/server.d.mts +8 -6
  125. package/dist/server/rendering/server.d.ts +8 -6
  126. package/dist/server/rendering/server.js +7 -6
  127. package/dist/server/rendering/server.js.map +1 -1
  128. package/dist/server/rendering/server.mjs +6 -5
  129. package/dist/server/rendering.d.mts +14 -10
  130. package/dist/server/rendering.d.ts +14 -10
  131. package/dist/server/rendering.js +9 -8
  132. package/dist/server/rendering.js.map +1 -1
  133. package/dist/server/rendering.mjs +8 -7
  134. package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
  135. package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
  136. package/dist/server/routing.d.mts +178 -11
  137. package/dist/server/routing.d.ts +178 -11
  138. package/dist/server/routing.js +95 -2
  139. package/dist/server/routing.js.map +1 -1
  140. package/dist/server/routing.mjs +94 -1
  141. package/dist/server/routing.mjs.map +1 -1
  142. package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.mts} +1 -1
  143. package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.ts} +1 -1
  144. package/dist/server/server.d.mts +9 -7
  145. package/dist/server/server.d.ts +9 -7
  146. package/dist/server/server.js +6 -6
  147. package/dist/server/server.mjs +5 -5
  148. package/dist/server/theme-bridge.js +8 -8
  149. package/dist/server/theme-bridge.mjs +2 -2
  150. package/dist/server/{types-Dj8B3QRb.d.ts → types-1cLz0vnq.d.mts} +55 -2
  151. package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
  152. package/dist/server/{types-CdhKJrB0.d.mts → types-BvcJU7zk.d.ts} +55 -2
  153. package/dist/server/{types-BWQ-TohG.d.ts → types-CVykEqXN.d.ts} +289 -83
  154. package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
  155. package/dist/server/{types-BLf-hE50.d.mts → types-Dsu9wsUh.d.mts} +289 -83
  156. package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
  157. package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
  158. package/package.json +5 -1
  159. package/dist/server/chunk-6JBKKV3G.js.map +0 -1
  160. package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
  161. package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
  162. package/dist/server/chunk-HOY77YBF.js.map +0 -1
  163. package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
  164. package/dist/server/chunk-LCYGQDAB.mjs +0 -835
  165. package/dist/server/chunk-LCYGQDAB.mjs.map +0 -1
  166. package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
  167. package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
  168. package/dist/server/chunk-TNYU5EIO.js +0 -835
  169. package/dist/server/chunk-TNYU5EIO.js.map +0 -1
  170. package/dist/server/chunk-U2NI3TS3.mjs.map +0 -1
  171. package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
  172. package/dist/server/chunk-VHDDXCK6.js.map +0 -1
  173. package/dist/server/loadPage-DLC7DJZP.js +0 -11
  174. package/dist/server/loadPage-GEGN4UAL.mjs +0 -11
  175. /package/dist/server/{chunk-ES6QDZUX.mjs.map → chunk-C6FIJC7T.mjs.map} +0 -0
  176. /package/dist/server/{chunk-24F6FTCI.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
  177. /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
  178. /package/dist/server/{loadPage-GEGN4UAL.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../blocks/src/system/manifest/schema.ts","../../../blocks/src/system/node/schema.ts","../../../blocks/src/system/node/typeBasedLayout.ts","../../../blocks/src/system/manifest/augmentManifest.ts","../../../blocks/src/system/manifest/registry.ts","../../../blocks/src/utils/env.ts","../../../blocks/src/system/node/types.ts","../../../blocks/src/system/node/builder.ts","../../../blocks/src/system/node/fragments/backgroundLayer.ts","../../../blocks/src/theme/utils/colorStyles.ts","../../../blocks/src/system/node/fragments/headingGroup.ts","../../../blocks/src/system/node/fragments/sectionContainer.ts","../../../blocks/src/system/spacing.ts","../../../blocks/src/system/node/fragments/styledSection.ts","../../../blocks/src/system/node/fragments/ctaButton.ts","../../../blocks/src/system/node/fragments/ctaRow.ts","../../../blocks/src/system/node/fragments/navRow.ts","../../../blocks/src/system/fragments/types.ts","../../../blocks/src/system/fragments/builder.ts","../../../blocks/src/system/fragments/library/bodyCopy.ts","../../../blocks/src/system/fragments/library/heroCopy.ts","../../../blocks/src/system/fields/button.ts","../../../blocks/src/system/fields/ctas.ts","../../../blocks/src/system/fragments/library/ctaRow.ts","../../../blocks/src/system/fragments/library/ctaCopy.ts","../../../blocks/src/system/fragments/library/testimonialsHeading.ts","../../../blocks/src/system/fragments/library/testimonialsCarousel.ts","../../../blocks/src/system/fragments/library/formCopy.ts","../../../blocks/src/system/fragments/library/formEmbed.ts","../../../blocks/src/system/fragments/library/footerBottomText.ts","../../../blocks/src/system/fragments/library/footerLinkGroups.ts","../../../blocks/src/system/fragments/library/blogFeaturedPost.ts","../../../blocks/src/system/fragments/library/blogListGrid.ts","../../../blocks/src/system/fragments/library/blogListStack.ts","../../../blocks/src/system/fragments/library/faqHeading.ts","../../../blocks/src/system/fragments/library/faqAccordion.ts","../../../blocks/src/system/fragments/library/card.ts","../../../blocks/src/system/fragments/library/heading.ts","../../../blocks/src/system/fragments/library/richText.ts","../../../blocks/src/system/fragments/utils/toRepeaterSchema.ts","../../../blocks/src/system/fragments/library/image.ts","../../../blocks/src/system/fragments/library/columnContent.ts","../../../blocks/src/system/constants/background.ts","../../../blocks/src/system/fields/background.ts","../../../blocks/src/system/fields/boxStyles.ts","../../../blocks/src/system/defineBlock.ts","../../../blocks/src/system/blocks/hero.ts","../../../blocks/src/system/blocks/body-text.ts","../../../blocks/src/system/blocks/blog-post.tsx","../../../blocks/src/system/blocks/blog-placeholder.ts","../../../blocks/src/system/blocks/blog-listing.ts","../../../blocks/src/system/blocks/cta-full.ts","../../../blocks/src/system/blocks/form.tsx","../../../blocks/src/system/blocks/faq.ts","../../../blocks/src/system/transforms/registry/formatting.ts","../../../blocks/src/system/transforms/registry/ui.ts","../../../blocks/src/system/transforms/registry/layout.ts","../../../blocks/src/theme/palette/utils/colorConversion.ts","../../../blocks/src/system/transforms/registry/media.ts","../../../blocks/src/system/transforms/typed.ts","../../../blocks/src/system/blocks/site-header.ts","../../../blocks/src/system/blocks/site-footer.ts","../../../blocks/src/system/blocks/testimonials.tsx","../../../blocks/src/system/blocks/columns.ts","../../../blocks/src/system/blocks/appointment-booking.tsx","../../../blocks/src/system/blocks/event-registration.ts","../../../blocks/src/system/blocks/events/shared/schemas.ts","../../../blocks/src/system/blocks/events/shared/fields.ts","../../../blocks/src/system/blocks/events/event-spotlight.ts","../../../blocks/src/system/blocks/events/event-listing.ts","../../../blocks/src/system/blocks/events/event-calendar.ts","../../../blocks/src/system/blocks/embed.ts","../../../blocks/src/system/blocks/index.ts","../../../blocks/src/system/registry.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { NodeSchema } from \"../node\";\n\n/**\n * Visibility levels gate editor access to fields/slots.\n */\nexport const visibilityLevels = [\"admin\", \"designer\", \"author\"] as const;\nexport type VisibilityLevel = (typeof visibilityLevels)[number];\n\n// metadata has been removed from BlockManifest. Use manifest.title/description\n// directly for any display purposes.\n\nconst uiSchema = z\n .object({\n widget: z.string().optional(),\n flattenInRepeater: z.boolean().optional(),\n hidden: z.boolean().optional(),\n hideLabel: z.boolean().optional(),\n hideDescription: z.boolean().optional(),\n showCharCount: z\n .union([z.number().int().positive(), z.object({ max: z.number().int().positive() })])\n .optional(),\n showSlugPreview: z.boolean().optional(),\n variant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n richTextVariant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n // Optional input hints for validators/widgets\n inputType: z.enum(['text', 'email', 'tel', 'number']).optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n pattern: z.string().optional(),\n placeholder: z.string().optional(),\n visibleWhen: z\n .object({\n field: z.string().min(1),\n equals: z.any().optional(),\n notEquals: z.any().optional(),\n oneOf: z.array(z.any()).optional(),\n notIn: z.array(z.any()).optional(),\n })\n .optional(),\n // Modal configuration for modal and group fields\n modalConfig: z\n .object({\n buttonLabel: z.string().optional(),\n description: z.string().optional(),\n buttonVariant: z.enum(['default', 'outline']).optional(),\n showCustomizedIndicator: z.boolean().optional(),\n maxWidth: z.string().optional(),\n })\n .optional(),\n // Background field configuration\n allowedTypes: z.array(z.enum(['color', 'gradient', 'image'])).optional(),\n // Tab group configuration\n fullWidth: z.boolean().optional(),\n // Field layout configuration\n row: z.string().optional(),\n colSpan: z.number().int().min(1).max(4).optional(),\n // Group layout configuration\n layout: z.enum(['stack', 'grid']).optional(),\n columns: z.number().int().min(2).max(4).optional(),\n // Entry picker configuration\n contentTypeField: z.string().optional(),\n })\n .partial();\n\nconst baseFieldSchema = z.object({\n id: z.string().min(1, \"Field id is required\"),\n label: z.string().min(1, \"Field label is required\"),\n description: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n defaultValue: z.any().optional(),\n required: z.boolean().default(false),\n ui: uiSchema.optional(),\n});\n\nconst textFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"text\"),\n multiline: z.boolean().default(false),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst richTextFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"richText\"),\n format: z.enum([\"markdown\", \"html\"]).default(\"markdown\"),\n});\n\nconst mediaFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"media\"),\n mediaKinds: z.array(z.enum([\"image\", \"video\"])).default([\"image\"]),\n aspectRatio: z.string().optional(),\n});\n\nconst booleanFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"boolean\"),\n});\n\nconst dateFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"date\"),\n});\n\nconst timeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"time\"),\n});\n\nconst dateTimeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"datetime\"),\n});\n\nconst slugFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"slug\"),\n sourceFieldId: z.string().min(1).optional(),\n statusFieldId: z.string().min(1).optional(),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst urlFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"url\"),\n allowRelative: z.boolean().default(false),\n});\n\nconst linkFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"link\"),\n});\n\nconst selectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"select\"),\n options: z.array(z.object({\n value: z.string(),\n label: z.string(),\n })).min(1),\n multiple: z.boolean().default(false),\n});\n\nconst referenceFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"reference\"),\n referenceKind: z.string().min(1),\n allowManualEntry: z.boolean().default(false),\n});\n\n/**\n * Item type schema for polymorphic repeaters.\n * Each type has a label, optional icon, and its own field schema.\n */\nconst itemTypeSchema = z.object({\n label: z.string().min(1),\n icon: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Item type requires at least one field\")),\n});\n\n/**\n * Repeater fields allow nesting of other fields within them.\n * This enables complex layouts and structures by repeating a set of fields.\n *\n * Supports two modes:\n * 1. Monomorphic (default): All items have the same schema\n * 2. Polymorphic: Items can be different types (e.g., card, quote, stat)\n *\n * Uses z.lazy() to allow mutual recursion.\n */\nconst repeaterFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"repeater\"),\n itemLabel: z.string().default(\"Item\"),\n itemLabelSource: z.string().optional(),\n minItems: z.number().int().min(0).default(0),\n maxItems: z.number().int().positive().optional(),\n\n // Monomorphic mode\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Repeater requires at least one field\")),\n }).optional(),\n\n // Polymorphic mode\n polymorphic: z.boolean().optional(),\n itemTypes: z.record(z.string(), itemTypeSchema).optional(),\n allowConversion: z.boolean().default(true),\n}).refine(\n (data) => {\n // Either schema OR (polymorphic + itemTypes) must be present\n const hasSchema = data.schema !== undefined;\n const hasPolymorphic = data.polymorphic === true && data.itemTypes !== undefined;\n return hasSchema !== hasPolymorphic; // XOR: exactly one must be true\n },\n {\n message: \"Repeater must have either 'schema' (monomorphic) or 'polymorphic: true' with 'itemTypes' (polymorphic)\",\n }\n);\n\nconst groupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"group\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Group requires at least one field\")),\n }),\n});\n\nconst modalFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"modal\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Modal requires at least one field\")),\n }),\n});\n\nconst numberFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"number\"),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n});\n\nconst tabDefinitionSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n icon: z.string().optional(),\n description: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array()),\n /** SDK section option that controls tab visibility based on site config */\n sdkSectionOption: z.enum(['backgroundColor', 'backgroundGradient', 'backgroundImage']).optional(),\n});\n\nconst tabGroupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"tabGroup\"),\n tabs: z.array(tabDefinitionSchema).min(1, \"TabGroup requires at least one tab\"),\n activeTabField: z.string().optional(),\n});\n\nconst presetOptionSchema = z.object({\n value: z.string(),\n label: z.string(),\n});\n\nconst presetOrCustomFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"presetOrCustom\"),\n presets: z.array(presetOptionSchema).min(1, \"PresetOrCustom requires at least one preset\"),\n customInput: z.object({\n placeholder: z.string().optional(),\n pattern: z.string().optional(),\n helpText: z.string().optional(),\n }).optional(),\n});\n\nconst contentTypeSelectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"contentTypeSelect\"),\n /** Filter: all, routable (hasPages=true), nonRoutable (hasPages=false) */\n filter: z.enum([\"all\", \"routable\", \"nonRoutable\"]).default(\"all\"),\n});\n\nconst entryPickerFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"entryPicker\"),\n});\n\ntype FieldSchemaMembers = readonly [\n typeof textFieldSchema,\n typeof richTextFieldSchema,\n typeof mediaFieldSchema,\n typeof booleanFieldSchema,\n typeof numberFieldSchema,\n typeof dateFieldSchema,\n typeof timeFieldSchema,\n typeof dateTimeFieldSchema,\n typeof slugFieldSchema,\n typeof urlFieldSchema,\n typeof linkFieldSchema,\n typeof selectFieldSchema,\n typeof referenceFieldSchema,\n typeof repeaterFieldSchema,\n typeof groupFieldSchema,\n typeof modalFieldSchema,\n typeof tabGroupFieldSchema,\n typeof presetOrCustomFieldSchema,\n typeof contentTypeSelectFieldSchema,\n typeof entryPickerFieldSchema,\n];\n\ntype FieldSchemaUnion = z.ZodDiscriminatedUnion<FieldSchemaMembers, \"type\">;\n\n// Cached instance for lazy initialization\nlet _fieldSchemaInternal: FieldSchemaUnion | null = null;\n\nfunction getFieldSchemaInternal(): FieldSchemaUnion {\n // Lazy initialization to avoid module-level circular reference issues\n // when bundled into a single file\n if (_fieldSchemaInternal) {\n return _fieldSchemaInternal;\n }\n\n _fieldSchemaInternal = z.discriminatedUnion(\"type\", [\n textFieldSchema,\n richTextFieldSchema,\n mediaFieldSchema,\n booleanFieldSchema,\n numberFieldSchema,\n dateFieldSchema,\n timeFieldSchema,\n dateTimeFieldSchema,\n slugFieldSchema,\n urlFieldSchema,\n linkFieldSchema,\n selectFieldSchema,\n referenceFieldSchema,\n repeaterFieldSchema,\n groupFieldSchema,\n modalFieldSchema,\n tabGroupFieldSchema,\n presetOrCustomFieldSchema,\n contentTypeSelectFieldSchema,\n entryPickerFieldSchema,\n ]) as unknown as FieldSchemaUnion;\n\n return _fieldSchemaInternal;\n}\n\n// Getter function for programmatic access\nexport function getFieldSchema(): FieldSchemaUnion {\n return getFieldSchemaInternal();\n}\n\n// Lazy proxy that forwards all method calls to getFieldSchemaInternal()\n// This allows backward compatibility with code using fieldSchema.array(), .parse(), etc.\n// The actual schema is only created when a method is first called\nexport const fieldSchema: FieldSchemaUnion = new Proxy({} as FieldSchemaUnion, {\n get(_, prop: keyof FieldSchemaUnion) {\n const schema = getFieldSchemaInternal();\n const value = schema[prop];\n // Bind functions to the schema so `this` works correctly\n return typeof value === 'function' ? value.bind(schema) : value;\n },\n // Forward has checks to the real schema\n has(_, prop) {\n return prop in getFieldSchemaInternal();\n },\n});\n\nexport type FieldSchema = FieldSchemaUnion;\n\nexport type TextFieldDefinition = z.output<typeof textFieldSchema>;\nexport type RichTextFieldDefinition = z.output<typeof richTextFieldSchema>;\nexport type MediaFieldDefinition = z.output<typeof mediaFieldSchema>;\nexport type BooleanFieldDefinition = z.output<typeof booleanFieldSchema>;\nexport type NumberFieldDefinition = z.output<typeof numberFieldSchema>;\nexport type DateFieldDefinition = z.output<typeof dateFieldSchema>;\nexport type TimeFieldDefinition = z.output<typeof timeFieldSchema>;\nexport type DateTimeFieldDefinition = z.output<typeof dateTimeFieldSchema>;\nexport type SlugFieldDefinition = z.output<typeof slugFieldSchema>;\nexport type UrlFieldDefinition = z.output<typeof urlFieldSchema>;\nexport type LinkFieldDefinition = z.output<typeof linkFieldSchema>;\nexport type SelectFieldDefinition = z.output<typeof selectFieldSchema>;\nexport type ReferenceFieldDefinition = z.output<typeof referenceFieldSchema>;\nexport type ItemTypeDefinition = {\n label: string;\n icon?: string;\n fields: FieldDefinition[];\n};\n\nexport type RepeaterFieldDefinition = Omit<z.output<typeof repeaterFieldSchema>, \"schema\" | \"itemTypes\"> & {\n schema?: {\n fields: FieldDefinition[];\n };\n itemTypes?: Record<string, ItemTypeDefinition>;\n};\n\nexport type GroupFieldDefinition = Omit<z.output<typeof groupFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type ModalFieldDefinition = Omit<z.output<typeof modalFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type TabDefinition = {\n id: string;\n label: string;\n icon?: string;\n description?: string;\n fields: FieldDefinition[];\n /**\n * Optional SDK section option that controls tab visibility.\n * When set, the tab is only shown when the SDK sectionOptions[key] is not false.\n */\n sdkSectionOption?: 'backgroundColor' | 'backgroundGradient' | 'backgroundImage';\n};\n\nexport type TabGroupFieldDefinition = Omit<z.output<typeof tabGroupFieldSchema>, \"tabs\"> & {\n tabs: TabDefinition[];\n};\n\nexport type PresetOption = {\n value: string;\n label: string;\n};\n\nexport type PresetOrCustomFieldDefinition = z.output<typeof presetOrCustomFieldSchema>;\n\nexport type ContentTypeSelectFieldDefinition = z.output<typeof contentTypeSelectFieldSchema>;\n\nexport type EntryPickerFieldDefinition = z.output<typeof entryPickerFieldSchema>;\n\nexport type FieldDefinition =\n | TextFieldDefinition\n | RichTextFieldDefinition\n | MediaFieldDefinition\n | BooleanFieldDefinition\n | NumberFieldDefinition\n | DateFieldDefinition\n | TimeFieldDefinition\n | DateTimeFieldDefinition\n | SlugFieldDefinition\n | UrlFieldDefinition\n | LinkFieldDefinition\n | SelectFieldDefinition\n | ReferenceFieldDefinition\n | RepeaterFieldDefinition\n | GroupFieldDefinition\n | ModalFieldDefinition\n | TabGroupFieldDefinition\n | PresetOrCustomFieldDefinition\n | ContentTypeSelectFieldDefinition\n | EntryPickerFieldDefinition;\n\n/**\n * Union type of all possible block field types.\n * Extracted from FieldDefinition for use in type compatibility checks.\n */\nexport type BlockFieldType = FieldDefinition['type'];\n\nexport const slotSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n allowedKinds: z.array(z.string()).default([]),\n min: z.number().int().min(0).default(0),\n max: z.number().int().positive().optional(),\n help: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n});\n\nexport type SlotDefinition = z.infer<typeof slotSchema>;\n\nconst typographyTokens = [\"display\", \"heading\", \"subheading\", \"body\", \"caption\"] as const;\nconst colorTokens = [\"background\", \"surface\", \"foreground\", \"accent\", \"muted\"] as const;\nconst spacingTokens = [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\nconst radiusTokens = [\"none\", \"sm\", \"md\", \"lg\", \"full\"] as const;\n\nexport const styleTokenSchema = z.object({\n background: z.enum(colorTokens).optional(),\n foreground: z.enum(colorTokens).optional(),\n border: z.enum(colorTokens).optional(),\n typography: z.enum(typographyTokens).optional(),\n spacing: z.enum(spacingTokens).optional(),\n radius: z.enum(radiusTokens).optional(),\n});\n\nexport type StyleTokenConfig = z.infer<typeof styleTokenSchema>;\n\nexport const behaviourSchema = z.object({\n supportsThemeSwitching: z.boolean().default(true),\n inlineEditing: z.boolean().default(false),\n animation: z.boolean().default(false),\n // Hide from block picker palettes (e.g., header/footer system blocks)\n paletteHidden: z.boolean().default(false),\n});\n\nexport type BehaviourConfig = z.infer<typeof behaviourSchema>;\n\n// Block discovery and organization metadata\nexport const blockCategoryEnum = z.enum(['marketing', 'content', 'blog', 'media', 'layout', 'interactive']);\nexport type BlockCategory = z.infer<typeof blockCategoryEnum>;\n\nexport const manifestSchema = z.object({\n name: z.string().min(1),\n version: z.string().min(1),\n title: z.string().min(1),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n component: z.string().min(1),\n fields: fieldSchema.array().default([]),\n slots: slotSchema.array().default([]),\n styleTokens: styleTokenSchema.optional(),\n behaviours: behaviourSchema.optional(),\n layout: NodeSchema.optional(),\n // Block variants system\n variants: z.record(z.string(), NodeSchema).optional(),\n defaultVariant: z.string().optional(),\n // Discovery metadata\n category: blockCategoryEnum.optional(),\n contentTypes: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n icon: z.string().optional(),\n});\n\nexport type BlockManifest = z.infer<typeof manifestSchema>;\n\n// ============================================================================\n// SDK Custom Block Types\n// ============================================================================\n\n/**\n * Whitelisted CMS loader endpoints for SDK custom blocks.\n *\n * The canonical list is SUPPORTED_LOADER_ENDPOINTS in @riverbankcms/sdk/data.\n * This type must remain in sync. The SDK validation derives its Zod schema\n * from that constant, ensuring runtime and compile-time consistency.\n *\n * Supported endpoints:\n * - listPublishedEntries: Fetch published content entries\n * - getPublishedEntryPreview: Fetch a single entry by slug\n * - listPublicEvents: Fetch public calendar events\n * - getPublicFormById: Fetch a form configuration\n * - getPublicBookingServices: Fetch booking services\n */\nexport type SdkLoaderEndpoint =\n | 'listPublishedEntries'\n | 'getPublishedEntryPreview'\n | 'listPublicEvents'\n | 'getPublicFormById'\n | 'getPublicBookingServices';\n\n/**\n * A binding expression for dynamic loader params.\n *\n * Bindings resolve at runtime from block content or page context:\n * - `content.fieldName` - Value from block's content field\n * - `$root.siteId` - Site ID from page context\n * - `$root.pageId` - Page ID from page context\n * - `$root.previewStage` - 'published' or 'preview'\n */\nexport type ParamBinding = {\n $bind: {\n /** Path to bind from (e.g., 'content.categoryId', '$root.siteId') */\n from: string;\n /** Fallback value if binding resolves to undefined */\n fallback?: string;\n };\n};\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport type LoaderParamValue = string | number | boolean | ParamBinding;\n\n/**\n * Config-based data loader for SDK custom blocks.\n *\n * Config loaders are declarative and restricted to whitelisted CMS endpoints.\n * They execute server-side during loadPage().\n */\nexport interface SdkConfigLoader {\n /** Whitelisted CMS endpoint to call */\n endpoint: SdkLoaderEndpoint;\n\n /**\n * Parameters to pass to the endpoint.\n * Values can be static or use bindings for dynamic resolution.\n */\n params: Record<string, LoaderParamValue>;\n\n /**\n * Execution mode.\n * Currently only 'server' is implemented - loaders run during loadPage().\n * 'client' is reserved for future client-side refresh functionality.\n * @default 'server'\n */\n mode?: 'server' | 'client';\n}\n\n/**\n * SDK Custom Block Definition\n *\n * Used by SDK sites to define entirely new blocks in their riverbank.config.ts.\n * These blocks:\n * - Have their own field schemas (using standard FieldDefinition format)\n * - Appear in the CMS block picker alongside system blocks\n * - Are edited using CMS-generated forms (existing infrastructure)\n * - MUST be rendered via blockOverrides on the SDK site\n *\n * Block IDs must start with 'custom.' to distinguish from system blocks.\n */\nexport interface SdkCustomBlock {\n /** Block ID - MUST start with 'custom.' (e.g., 'custom.team-member') */\n id: `custom.${string}`;\n\n /** Display title in block picker */\n title: string;\n\n /** Field ID to use as block title in lists (must match a field id) */\n titleSource?: string;\n\n /** Description shown in block picker */\n description?: string;\n\n /** Category for block picker organization */\n category: BlockCategory;\n\n /** Lucide icon name */\n icon?: string;\n\n /** Search tags for block discovery */\n tags?: string[];\n\n /** Field definitions - uses same type as system blocks */\n fields: FieldDefinition[];\n\n /**\n * Config-based data loaders for CMS endpoints.\n *\n * Keys are loader names (e.g., 'posts', 'events').\n * Data is available in the component as `data.{key}`.\n *\n * @example\n * ```typescript\n * dataLoaders: {\n * events: {\n * endpoint: 'listPublicEvents',\n * params: {\n * siteId: { $bind: { from: '$root.siteId' } },\n * limit: { $bind: { from: 'content.limit', fallback: '5' } },\n * },\n * },\n * }\n * ```\n */\n dataLoaders?: Record<string, SdkConfigLoader>;\n}\n","import { z } from \"zod\";\n\nconst transformStepSchema = z.object({\n id: z.string().min(1, \"Transform requires an identifier\"),\n options: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const bindingPathSchema = z\n .string()\n .min(1, \"Binding path is required\")\n .regex(/[A-Za-z0-9_\\.$\\[\\]/-]+/, \"Binding path contains invalid characters\");\n\nexport const bindingSchema = z.object({\n from: bindingPathSchema,\n fallback: z.unknown().optional(),\n transforms: transformStepSchema.array().default([]),\n pick: z.enum([\"value\", \"collection\", \"context\"]).default(\"value\"),\n});\n\nexport type Binding = z.infer<typeof bindingSchema>;\n\nexport const repeatSchema = z.object({\n collection: bindingSchema,\n itemName: z.string().min(1).default(\"item\"),\n indexName: z.string().min(1).default(\"index\"),\n limit: z.number().int().positive().optional(),\n sortBy: z\n .object({\n path: bindingPathSchema,\n direction: z.enum([\"asc\", \"desc\"]).default(\"asc\"),\n })\n .optional(),\n});\n\nexport type RepeatConfig = z.infer<typeof repeatSchema>;\n\nexport const conditionSchema = z.object({\n when: bindingSchema,\n equals: z.unknown().optional(),\n not: z.boolean().default(false),\n});\n\nexport type ConditionConfig = z.infer<typeof conditionSchema>;\n\nexport const dataScopeSchema = z.object({\n name: z.string().min(1),\n from: bindingSchema,\n});\n\nexport type DataScope = z.infer<typeof dataScopeSchema>;\n\nexport const nodePropsSchema = z.record(z.string(), z.unknown()).default({});\n\nexport const nodeSchema: z.ZodType<any> = z.object({\n type: z.string().min(1, \"Node type is required\"),\n key: z.string().optional(),\n props: nodePropsSchema.optional(),\n children: z.lazy(() => nodeSchema.array().default([])).optional(),\n $bind: bindingSchema.optional(),\n $repeat: repeatSchema.optional(),\n $when: conditionSchema.optional(),\n $scopes: dataScopeSchema.array().optional(),\n});\n\nexport type NodeDefinition = z.infer<typeof nodeSchema>;\n\nexport const nodeTreeSchema = nodeSchema.array().or(nodeSchema);\n\nexport type NodeTree = z.infer<typeof nodeTreeSchema>;\n\nexport const NodeSchema = nodeSchema;\nexport const NodeTreeSchema = nodeTreeSchema;\n","import type { NodeDefinition } from './schema';\n\n/**\n * Creates conditional layout branches based on item type.\n * Used for polymorphic repeaters where each item type has a different layout.\n *\n * @param itemTypesMap - Map of type IDs to their layout definitions\n * @param options - Configuration options\n * @returns Array of conditional node definitions\n *\n * @example\n * ```typescript\n * // In a repeater with items: [{_type: 'card', ...}, {_type: 'quote', ...}]\n * const children = typeBasedLayout({\n * card: stack({}, [\n * text({ as: 'h3' }, bind('item.title')),\n * richText({}, bind('item.body'))\n * ]),\n * quote: stack({}, [\n * richText({}, bind('item.text')),\n * text({ className: 'author' }, bind('item.author'))\n * ])\n * }, { itemName: 'item' });\n * ```\n */\nexport function typeBasedLayout(\n itemTypesMap: Record<string, NodeDefinition>,\n options?: {\n /**\n * Name of the repeater item variable (default: 'item')\n */\n itemName?: string;\n }\n): NodeDefinition[] {\n const itemName = options?.itemName ?? 'item';\n\n const result = Object.entries(itemTypesMap).map(([typeId, layout]) => {\n // Unwrap single-element arrays (fragments return [NodeDefinition])\n const node = Array.isArray(layout) && layout.length === 1 ? layout[0] : layout;\n\n return {\n ...node,\n $when: {\n when: { from: `${itemName}._type` },\n equals: typeId\n }\n };\n });\n\n return result;\n}\n","import type { BlockManifest, FieldDefinition } from './schema';\n\n/**\n * Augments a block manifest with synthetic fields and other transformations.\n * This should be called at the block definition level, not at runtime.\n *\n * Current augmentations:\n * - Adds a variant select field if the manifest has multiple variants\n *\n * Future augmentations might include:\n * - Theme field injection\n * - Spacing/layout presets\n * - Animation controls\n */\nexport function augmentManifest(manifest: BlockManifest): BlockManifest {\n let augmentedFields = manifest.fields ?? [];\n\n // Add variant field if block has multiple variants\n const variantField = createVariantField(manifest);\n if (variantField) {\n augmentedFields = [variantField, ...augmentedFields];\n }\n\n return {\n ...manifest,\n fields: augmentedFields,\n };\n}\n\n/**\n * Creates a synthetic variant field definition when a manifest has variants.\n */\nfunction createVariantField(manifest: BlockManifest): FieldDefinition | null {\n if (!manifest.variants || Object.keys(manifest.variants).length <= 1) {\n return null;\n }\n\n const variantKeys = Object.keys(manifest.variants);\n\n const field: FieldDefinition = {\n id: 'variant',\n type: 'select',\n label: 'Variant',\n description: 'Choose a layout variant for this block',\n required: false,\n defaultValue: manifest.defaultVariant ?? variantKeys[0],\n options: variantKeys.map((key) => ({\n value: key,\n label: formatVariantLabel(key),\n })),\n multiple: false,\n };\n\n return field;\n}\n\nfunction formatVariantLabel(variantKey: string): string {\n // Convert camelCase or snake_case to Title Case\n // Examples: \"splitReverse\" → \"Split Reverse\", \"classic\" → \"Classic\"\n return variantKey\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/_/g, ' ') // Replace underscores with spaces\n .trim()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n","import type { BlockManifest } from \"./schema\";\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/manifest-registry\");\n\ntype ManifestRegistryStore = Map<string, BlockManifest>;\n\ninterface ManifestRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: ManifestRegistryStore;\n}\n\nconst globalScope = globalThis as ManifestRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst manifestStore = globalScope[REGISTRY_SYMBOL]!;\n\nexport function registerManifest(manifest: BlockManifest): BlockManifest {\n manifestStore.set(manifest.name, manifest);\n return manifest;\n}\n\nexport function getManifestByName(name: string): BlockManifest | undefined {\n return manifestStore.get(name);\n}\n\nexport function hasManifest(name: string): boolean {\n return manifestStore.has(name);\n}\n\nexport function listManifests(): BlockManifest[] {\n return Array.from(manifestStore.values());\n}\n\nexport function clearManifestRegistry(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n\n manifestStore.clear();\n}\n","/**\n * Environment detection utilities\n *\n * Provides type-safe environment detection without relying on 'as any' casts.\n */\n\n/**\n * Check if the current environment is development.\n *\n * Returns true if NODE_ENV is not 'production', or if NODE_ENV cannot be determined\n * (which is the safe default for validation and warnings).\n *\n * @returns true if in development mode, false if in production\n */\nexport function isDevEnvironment(): boolean {\n try {\n // Try to access process.env.NODE_ENV safely\n if (typeof process !== 'undefined' && process.env?.NODE_ENV !== undefined) {\n return process.env.NODE_ENV !== 'production'\n }\n // If process.env is unavailable (e.g., browser context), assume dev (safe default)\n return true\n } catch {\n // If accessing process throws (strict browser context), assume dev (safe default)\n return true\n }\n}\n","/**\n * Type-safe node builder types\n *\n * These types prevent common mistakes like putting 'children' in props\n * by explicitly excluding reserved keys at compile time.\n */\n\nimport type { NodeDefinition } from './schema'\nimport { isDevEnvironment } from '../../utils/env'\n\n/**\n * Reserved keys that should NEVER appear in node props.\n * These are top-level NodeDefinition properties that would conflict if placed in props.\n *\n * Note: 'type' is NOT included because components may legitimately need a 'type' prop\n * (e.g., Accordion needs type=\"single\"). The NodeDefinition.type is separate from props.type.\n */\ntype ReservedNodeKeys =\n | 'children'\n | 'key'\n | '$bind'\n | '$when'\n | '$repeat'\n | '$scopes'\n\n/**\n * List of reserved keys (for runtime validation).\n * Kept in sync with the ReservedNodeKeys type above.\n */\nconst RESERVED_KEYS: readonly ReservedNodeKeys[] = [\n 'children',\n 'key',\n '$bind',\n '$when',\n '$repeat',\n '$scopes',\n] as const\n\n/**\n * Props type that explicitly excludes reserved keys.\n * This makes it a compile-time error to pass children, $bind, etc. in props.\n *\n * @example\n * // ✅ OK\n * const props: NodeProps = { className: 'foo', gap: 'md' }\n *\n * // ❌ Type error - 'children' is not allowed in props\n * const props: NodeProps = { className: 'foo', children: [...] }\n */\nexport type NodeProps = Record<string, unknown> & {\n [K in ReservedNodeKeys]?: never\n}\n\n/**\n * Type-safe version of the el() function signature.\n * Ensures props cannot contain reserved keys.\n */\nexport type ElementBuilder = (\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: Array<(node: NodeDefinition) => NodeDefinition>\n) => NodeDefinition\n\n/**\n * Type guard to check if props contain reserved keys at runtime.\n * Use this in development mode to catch bugs early.\n *\n * @param props - Props object to validate\n * @returns Array of reserved keys found in props, or empty array if none\n */\nexport function findReservedKeysInProps(props: Record<string, unknown> | null | undefined): ReservedNodeKeys[] {\n if (!props) return []\n\n return RESERVED_KEYS.filter(key => key in props) as ReservedNodeKeys[]\n}\n\n/**\n * Validates that props don't contain reserved keys.\n * Throws in development, warns in production.\n *\n * @param props - Props to validate\n * @param context - Context for error message (e.g., \"el('grid', ...)\")\n */\nexport function validateProps(\n props: Record<string, unknown> | null | undefined,\n context: string = 'node builder'\n): void {\n const reserved = findReservedKeysInProps(props)\n\n if (reserved.length === 0) return\n\n const message = `[blocks:${context}] Reserved keys found in props: ${reserved.join(', ')}. ` +\n `These should be passed as separate parameters or modifiers, not in props. ` +\n `For example, 'children' should be the 3rd parameter to el(), not in the props object.`\n\n if (isDevEnvironment()) {\n throw new TypeError(message)\n } else {\n console.error(message)\n }\n}\n\n/**\n * Helper type to infer proper props for specific node types.\n * Can be extended to provide type-specific prop validation.\n */\nexport type NodeTypeProps<T extends string> = T extends 'grid'\n ? NodeProps & {\n cols?: unknown\n gap?: unknown\n }\n : T extends 'stack' | 'inline'\n ? NodeProps & {\n gap?: unknown\n align?: unknown\n justify?: unknown\n className?: unknown\n }\n : T extends 'text' | 'richText'\n ? NodeProps & {\n as?: string\n className?: unknown\n }\n : NodeProps\n","import { NodeSchema, type NodeDefinition } from './schema'\nimport { validateProps, type NodeProps } from './types'\nimport { isDevEnvironment } from '../../utils/env'\n\n// Modifier function that mutates or augments a node definition\nexport type NodeModifier = (node: NodeDefinition) => NodeDefinition\n\nfunction normalizeChildren(children?: Array<NodeDefinition | null | undefined>): NodeDefinition[] | undefined {\n if (!children) return undefined\n const flat = children.flat().filter(Boolean) as NodeDefinition[]\n return flat.length > 0 ? flat : undefined\n}\n\nexport function el(\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n): NodeDefinition {\n // Validate that reserved keys aren't in props (throws in dev, warns in prod)\n validateProps(props, `el('${type}', ...)`)\n\n const node: NodeDefinition = {\n type,\n ...(props && Object.keys(props).length > 0 ? { props } : {}),\n ...(children && children.length ? { children: normalizeChildren(children) } : {}),\n }\n\n if (mods && mods.length > 0) {\n // Filter out any non-function values (e.g., undefined, null)\n const validMods = mods.filter((mod): mod is NodeModifier => typeof mod === 'function')\n if (validMods.length > 0) {\n const modified = validMods.reduce((acc, fn) => fn(acc), node)\n return devValidate(modified)\n }\n }\n return devValidate(node)\n}\n\n// Convenience element helpers for common primitives\nexport const section = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('section', props, children, ...mods)\n\nexport const headerSection = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('headerSection', props, children, ...mods)\n\nexport const stack = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('stack', props, children, ...mods)\n\nexport const inline = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('inline', props, children, ...mods)\n\nexport const accordion = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordion', props, children, ...mods)\n\nexport const accordionItem = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordionItem', props, children, ...mods)\n\nexport const carousel = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('carousel', props, children, ...mods)\n\nexport const text = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('text', props, undefined, ...mods)\n\nexport const richText = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('richText', props, undefined, ...mods)\n\nexport const media = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('media', props, undefined, ...mods)\n\nexport const button = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('button', props, children, ...mods)\n\nexport const link = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('link', props, children, ...mods)\n\nexport const form = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('form', props, children, ...mods)\n\nexport const bookingForm = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('booking-form', props, children, ...mods)\n\nexport const eventList = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-list', props, children, ...mods)\n\nexport const eventRegistration = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-registration', props, children, ...mods)\n\n// Modifiers\nexport function bind(from: string, options?: { fallback?: unknown; transforms?: Array<{ id: string; options?: Record<string, unknown> }>; pick?: 'value' | 'collection' | 'context' }): NodeModifier {\n return (node) => ({\n ...node,\n $bind: {\n from,\n ...(options?.fallback !== undefined ? { fallback: options.fallback } : {}),\n ...(options?.transforms ? { transforms: options.transforms } : {}),\n ...(options?.pick ? { pick: options.pick } : {}),\n },\n })\n}\n\nexport function when(path: string, options?: { equals?: unknown; not?: boolean }): NodeModifier {\n return (node) => ({\n ...node,\n $when: {\n when: { from: path },\n ...(options?.equals !== undefined ? { equals: options.equals } : {}),\n ...(options?.not ? { not: true } : {}),\n },\n })\n}\n\nexport function repeat(\n collectionPath: string,\n itemName: string = 'item',\n options?: { indexName?: string; limit?: number; sortBy?: { path: string; direction?: 'asc' | 'desc' } },\n): NodeModifier {\n return (node) => ({\n ...node,\n $repeat: {\n collection: { from: collectionPath, pick: 'collection' },\n itemName,\n ...(options?.indexName ? { indexName: options.indexName } : {}),\n ...(options?.limit ? { limit: options.limit } : {}),\n ...(options?.sortBy\n ? { sortBy: { path: options.sortBy.path, direction: options.sortBy.direction ?? 'asc' } }\n : {}),\n },\n })\n}\n\nexport function props(extra: Record<string, unknown>): NodeModifier {\n // Validate that reserved keys aren't being injected via the modifier\n validateProps(extra, 'props() modifier')\n\n return (node) => ({\n ...node,\n props: { ...(node.props ?? {}), ...extra },\n })\n}\n\ntype AccordionListOptions = {\n collection: string\n itemName?: string\n indexName?: string\n accordionProps?: NodeProps | null\n itemProps?: NodeProps | null\n triggerFrom: string\n contentFrom?: string\n valueFrom?: string | null\n}\n\nexport function accordionList(\n {\n collection,\n itemName = 'item',\n indexName,\n accordionProps = null,\n itemProps = null,\n triggerFrom,\n contentFrom,\n valueFrom,\n }: AccordionListOptions,\n ...mods: NodeModifier[]\n) {\n const resolvedIndexName = indexName ?? `${itemName}Index`\n const resolvedValuePath = valueFrom === null ? null : (valueFrom ?? resolvedIndexName)\n\n const baseItemProps: Record<string, unknown> = {\n ...(itemProps ?? {}),\n trigger: { $bind: { from: triggerFrom } },\n }\n\n if (contentFrom) {\n baseItemProps.content = { $bind: { from: contentFrom } }\n }\n\n if (resolvedValuePath) {\n baseItemProps.value = { $bind: { from: resolvedValuePath } }\n }\n\n return accordion(\n accordionProps ?? undefined,\n [\n accordionItem(\n baseItemProps,\n undefined,\n repeat(collection, itemName, { indexName: resolvedIndexName }),\n ),\n ],\n ...mods,\n )\n}\n\n// Dev-time validation against NodeSchema\nfunction devValidate(node: NodeDefinition): NodeDefinition {\n try {\n if (isDevEnvironment()) {\n const res = NodeSchema.safeParse(node)\n if (!res.success) {\n console.warn('[blocks:builder] Invalid node produced by builder', res.error.format())\n }\n }\n } catch {\n // noop: avoid crashing if zod or env is unavailable in certain runtimes\n }\n return node\n}\n","import { el, media, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Options for customizing the appearance of background layers.\n */\nexport type BackgroundLayerOptions = {\n /**\n * CSS class applied to the color/gradient layer container.\n * This layer renders solid colors and gradients.\n *\n * @default 'absolute inset-0 -z-10 h-full w-full pointer-events-none'\n */\n styleClassName?: string\n\n /**\n * Base CSS classes applied to the background image element.\n * This layer renders background images with dynamic positioning based on scale.\n *\n * Note: Do NOT include positioning (inset-0), sizing (h-full w-full), object-fit, or opacity.\n * Those properties are applied dynamically via transforms:\n * - Positioning/sizing: background.resolveImageClassName (based on scale)\n * - Visual properties: background.resolveImageStyle (object-fit, opacity, width/height)\n *\n * @default 'absolute -z-10'\n */\n imageClassName?: string\n}\n\n/**\n * Creates a pair of background layer nodes for rendering backgrounds from field data.\n *\n * This helper generates two nodes:\n * 1. A style layer (div) that renders solid colors and gradients\n * 2. An image layer that conditionally renders background images\n *\n * The layers are designed to be placed behind content (z-index -10) and work\n * with data from `sectionStylesField`, `containerStylesField`, or `cardStylesField`.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param options - Optional customization for layer appearance\n * @returns Array of two NodeDefinition objects: [styleLayer, imageLayer]\n *\n * @example\n * // Basic usage in a block\n * const heroBackgroundNodes = backgroundLayer('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const customBackgroundNodes = backgroundLayer('_sectionStyles.background', {\n * imageClassName: 'absolute inset-0 -z-10 h-full w-full object-cover opacity-30'\n * })\n *\n * @example\n * // In a block layout\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n */\nexport function backgroundLayer(\n path: string,\n options: BackgroundLayerOptions = {},\n): NodeDefinition[] {\n const {\n styleClassName = 'absolute inset-0 -z-10 h-full w-full pointer-events-none',\n imageClassName,\n } = options\n\n const styleLayer = el('div', {\n className: { $bind: { from: path, transforms: [{ id: 'background.resolveClass', options: { baseClass: styleClassName } }] } },\n style: { $bind: { from: path, transforms: [{ id: 'background.resolveStyle' }] } },\n })\n\n const imageLayer = createBackgroundImageNode(path, imageClassName)\n\n return [styleLayer, imageLayer]\n}\n\n/**\n * Creates a media node for rendering a background image with conditional rendering.\n *\n * This helper creates a media element that:\n * - Only renders when the image path has a value (via `when` modifier)\n * - Binds to the image data at the specified path (via `bind` modifier)\n * - Applies the provided CSS class for positioning and styling\n * - Applies advanced image options (object-fit, object-position, opacity) via transform\n *\n * Used internally by `backgroundLayer()` but can be used independently for custom layouts.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param className - CSS class for the image element\n * @returns A media NodeDefinition with conditional rendering and data binding\n *\n * @example\n * // Standalone usage\n * const imageNode = createBackgroundImageNode('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const imageNode = createBackgroundImageNode(\n * '_sectionStyles.background',\n * 'absolute inset-0 h-full w-full'\n * )\n */\nexport function createBackgroundImageNode(\n path: string,\n baseClassName: string = 'absolute -z-10',\n): NodeDefinition {\n const imagePath = `${path}.image`\n\n // Note: Visual properties (object-fit, opacity, scale) are applied dynamically.\n // className: Resolved via background.resolveImageClassName based on scale\n // style: Resolved via background.resolveImageStyle for object-fit, opacity, width/height\n return media(\n {\n className: {\n $bind: {\n from: path,\n transforms: [{\n id: 'background.resolveImageClassName',\n options: { baseClass: `background-image ${baseClassName}` }\n }]\n }\n },\n style: {\n $bind: {\n from: path,\n transforms: [{ id: 'background.resolveImageStyle' }],\n },\n },\n },\n when(imagePath),\n bind(imagePath),\n )\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * Theme color tokens support three formats:\n *\n * 1. Semantic/palette tokens: 'text', 'surface', 'primary', 'mutedText', 'neutral-900', etc.\n * These resolve to CSS variables like `var(--tb-primary)`\n *\n * 2. Tokens with opacity: 'surface/95', 'primary/50', 'border/20'\n * Format: `{token}/{opacity%}`\n * These resolve to rgba with the specified opacity (e.g., `rgba(var(--tb-surface), 0.95)`)\n *\n * 3. Raw CSS values: 'raw:transparent', 'raw:#ffffff', 'raw:rgba(255, 0, 0, 0.5)'\n * Format: `raw:{css-value}`\n * These bypass the CSS variable system and output the literal value\n *\n * @example\n * // Semantic token\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n *\n * @example\n * // Token with opacity\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n *\n * @example\n * // Raw value\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\ntype ThemeColorToken = string;\n\ntype ParsedToken = {\n token: string;\n alpha?: number;\n raw?: string;\n};\n\nconst COLOR_VAR_PREFIX = '--tb-';\n\nfunction parseToken(source: ThemeColorToken): ParsedToken {\n if (source.startsWith('raw:')) {\n return { token: source, raw: source.slice(4) };\n }\n if (source.includes('/')) {\n const [token, opacity] = source.split('/');\n const alpha = Number(opacity) / 100;\n if (!Number.isNaN(alpha) && token) {\n return { token, alpha };\n }\n return { token: source };\n }\n return { token: source };\n}\n\n/**\n * Converts a theme color token to a CSS rgb/rgba value.\n * This is the primary function for applying theme colors to CSS properties.\n *\n * @param token - Theme color token (semantic, with opacity, or raw)\n * @returns CSS color value (rgb, rgba, or raw CSS value)\n *\n * @example\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\nexport function rgbColorValue(token: ThemeColorToken): string {\n const { token: baseToken, alpha, raw } = parseToken(token);\n if (raw) {\n return raw;\n }\n const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;\n if (alpha === undefined) {\n return `rgb(var(${cssVar}))`;\n }\n return `rgba(var(${cssVar}), ${alpha})`;\n}\n\n/**\n * Converts a theme color token to a CSS variable reference.\n * Note: This returns the base variable without rgb() wrapper, ignoring opacity.\n *\n * @param token - Theme color token\n * @returns CSS variable reference\n *\n * @example\n * cssVarValue('primary') // => 'var(--tb-primary)'\n * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)\n */\nexport function cssVarValue(token: ThemeColorToken): string {\n const { token: baseToken } = parseToken(token);\n return `var(${COLOR_VAR_PREFIX}${baseToken})`;\n}\n\n/**\n * Creates a backgroundColor style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with backgroundColor\n */\nexport function backgroundColorStyle(token: ThemeColorToken): CSSProperties {\n return { backgroundColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a text color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with color\n */\nexport function textColorStyle(token: ThemeColorToken): CSSProperties {\n return { color: rgbColorValue(token) };\n}\n\n/**\n * Creates a border color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with borderColor\n */\nexport function borderColorStyle(token: ThemeColorToken): CSSProperties {\n return { borderColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a linear gradient background from theme tokens.\n *\n * @param tokens - Array of theme color tokens for gradient stops\n * @param direction - CSS gradient direction (default: 'to bottom')\n * @returns CSSProperties with backgroundImage\n *\n * @example\n * gradientBackgroundStyle(['primary', 'secondary'])\n * // => { backgroundImage: 'linear-gradient(to bottom, rgb(var(--tb-primary)), rgb(var(--tb-secondary)))' }\n *\n * @example\n * gradientBackgroundStyle(['primary/80', 'secondary/60'], '45deg')\n * // => { backgroundImage: 'linear-gradient(45deg, rgba(var(--tb-primary), 0.8), rgba(var(--tb-secondary), 0.6))' }\n */\nexport function gradientBackgroundStyle(\n tokens: ThemeColorToken[],\n direction: string = 'to bottom',\n): CSSProperties {\n const stops = tokens.map((stop) => rgbColorValue(stop)).join(', ');\n return { backgroundImage: `linear-gradient(${direction}, ${stops})` };\n}\n\n/**\n * Creates a Tailwind ring color style object from a theme token.\n * Used for focus ring styling with Tailwind's ring utilities.\n *\n * @param token - Theme color token\n * @returns CSSProperties with --tw-ring-color CSS variable\n */\nexport function ringColorStyle(token: ThemeColorToken): CSSProperties {\n return { '--tw-ring-color': rgbColorValue(token) } as CSSProperties;\n}\n\n/**\n * Merges multiple CSSProperties objects into a single object.\n * Later styles override earlier ones. Undefined values are filtered out.\n * Returns undefined if the merged result is empty.\n *\n * @param styles - Variable number of CSSProperties objects (can be undefined)\n * @returns Merged CSSProperties object, or undefined if empty\n *\n * @example\n * mergeStyles(\n * backgroundColorStyle('surface'),\n * textColorStyle('text'),\n * borderColorStyle('border')\n * )\n * // => { backgroundColor: '...', color: '...', borderColor: '...' }\n */\nexport function mergeStyles(...styles: Array<CSSProperties | undefined>): CSSProperties | undefined {\n const merged = styles.filter(Boolean).reduce<CSSProperties>((acc, style) => Object.assign(acc, style!), {});\n return Object.keys(merged).length ? merged : undefined;\n}\n\n","import { stack, text, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { textColorStyle } from '../../../theme/utils/colorStyles'\n\nexport function headingGroup(opts: {\n eyebrowPath?: string\n titlePath: string\n containerClass?: string\n className?: string\n eyebrowClass?: string\n titleClass?: string\n eyebrowStyle?: Record<string, unknown>\n titleStyle?: Record<string, unknown>\n}): NodeDefinition {\n const {\n eyebrowPath,\n titlePath,\n containerClass = 'text-center',\n className,\n eyebrowClass = 'heading-eyebrow text-sm font-semibold tracking-wide',\n // h2 now gets size/weight from theme typography CSS\n titleClass = 'heading-title',\n eyebrowStyle = textColorStyle('neutral-500'),\n titleStyle = textColorStyle('neutral-900'),\n } = opts\n\n const finalContainerClass = className ? `${containerClass} ${className}` : containerClass\n\n return stack({ gap: 'sm', className: finalContainerClass }, [\n eyebrowPath ? text({ as: 'p', className: eyebrowClass, style: eyebrowStyle }, when(eyebrowPath), bind(eyebrowPath)) : null,\n text({ as: 'h2', className: titleClass, style: titleStyle }, bind(titlePath)),\n ])\n}\n","import { stack } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Creates a centered container with responsive max-width.\n *\n * By default, uses Tailwind's responsive `container` class which provides:\n * - sm: max-w-640px\n * - md: max-w-768px\n * - lg: max-w-1024px\n * - xl: max-w-1280px\n * - 2xl: max-w-1536px\n *\n * When `bindFrom` points to _containerStyles with fullWidth=true, switches to `w-full`\n * for edge-to-edge content without horizontal constraints.\n *\n * @param children - Child nodes to render inside container\n * @param opts - Configuration options\n * @param opts.gap - Vertical spacing between children (default: 'md')\n * @param opts.align - Horizontal alignment (default: undefined)\n * @param opts.className - Additional static classes\n * @param opts.bindFrom - Data path for container styles (default: '_containerStyles')\n * @returns A stack NodeDefinition configured as a responsive container\n */\nexport function sectionContainer(\n children: Array<NodeDefinition | null | undefined>,\n opts?: {\n gap?: 'sm' | 'md' | 'lg' | 'xl'\n align?: 'start' | 'center' | 'end'\n className?: string\n bindFrom?: string\n },\n): NodeDefinition {\n const gap = opts?.gap ?? 'md'\n const align = opts?.align\n const bindFrom = opts?.bindFrom ?? '_containerStyles'\n const additionalClasses = opts?.className ?? ''\n\n return stack(\n {\n gap,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'containerStyles.resolveClassName',\n options: { baseClass: additionalClasses },\n },\n ],\n fallback: additionalClasses ? `container mx-auto ${additionalClasses}` : 'container mx-auto',\n },\n },\n ...(align ? { align } : {}),\n },\n children,\n )\n}\n\n","/**\n * Type-safe spacing system for sections and containers.\n *\n * This module provides:\n * - Semantic spacing values (none, compact, cozy, medium, comfortable, spacious)\n * - Type-safe mappings to Tailwind CSS classes\n * - Runtime validation via type guards\n * - Separate handling for section (vertical) vs container (all-sides) spacing\n *\n * Type Safety Guarantees:\n * - Type is derived from data (single source of truth)\n * - Maps are validated for completeness at compile time\n * - Runtime validation available via isSemanticSpacing()\n */\n\n/**\n * Single source of truth for semantic spacing values.\n * The SemanticSpacing type is derived from this array to ensure they stay in sync.\n *\n * Adding a new spacing value:\n * 1. Add it to this array\n * 2. TypeScript will error until you update both spacing maps\n * 3. No way to get out of sync\n */\nconst SEMANTIC_SPACING_VALUES = [\n 'none', // No padding\n 'compact', // Minimal padding\n 'cozy', // Small but comfortable\n 'medium', // Standard spacing (default for most blocks)\n 'comfortable', // Generous spacing\n 'spacious', // Maximum spacing\n] as const;\n\n/**\n * Semantic spacing values used across the block system.\n * These abstract away the specific CSS classes and provide a consistent vocabulary.\n *\n * This type is derived from SEMANTIC_SPACING_VALUES to ensure compile-time safety.\n */\nexport type SemanticSpacing = typeof SEMANTIC_SPACING_VALUES[number];\n\n/**\n * Runtime type guard for validating spacing values.\n * Use this at system boundaries where data enters from external sources.\n *\n * @param value - Unknown value to validate\n * @returns true if value is a valid SemanticSpacing, with type narrowing\n *\n * @example\n * const userInput = 'medium';\n * if (isSemanticSpacing(userInput)) {\n * // TypeScript knows userInput is SemanticSpacing here\n * const classes = resolveSpacing(userInput, 'y');\n * }\n */\nexport function isSemanticSpacing(value: unknown): value is SemanticSpacing {\n return typeof value === 'string' &&\n (SEMANTIC_SPACING_VALUES as readonly string[]).includes(value);\n}\n\n/**\n * Spacing axis determines which sides receive padding.\n * - 'y': Vertical only (py-*) - used for sections\n * - 'all': All sides (p-*) - used for containers/cards\n */\nexport type SpacingAxis = 'y' | 'all';\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for sections (y-axis).\n *\n * Sections use vertical padding only to control spacing between blocks.\n * Horizontal padding (px-6) is handled separately via baseClass.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n * TypeScript will error if any spacing value is missing or if extra keys exist.\n */\nexport const SECTION_SPACING_MAP = {\n none: 'py-0',\n compact: 'py-6 sm:py-8',\n cozy: 'py-10 sm:py-14',\n medium: 'py-12 sm:py-16',\n comfortable: 'py-16 sm:py-20',\n spacious: 'py-20 sm:py-28',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for containers (all sides).\n *\n * Containers use padding on all sides for internal content spacing.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n */\nexport const CONTAINER_SPACING_MAP = {\n none: 'p-0',\n compact: 'p-4 sm:p-6',\n cozy: 'p-6 sm:p-8',\n medium: 'p-6 sm:p-8',\n comfortable: 'p-8 sm:p-10',\n spacious: 'p-10 sm:p-14',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Resolve semantic spacing to CSS classes based on axis.\n *\n * This function guarantees that valid SemanticSpacing values always return a result.\n * Since spacing is typed, there's no need for fallback logic.\n *\n * @param spacing - Semantic spacing value (validated at compile time)\n * @param axis - Which axis to apply padding ('y' for sections, 'all' for containers)\n * @returns Tailwind CSS class string\n *\n * @example\n * resolveSpacing('medium', 'y') // => 'py-12 sm:py-16'\n * resolveSpacing('medium', 'all') // => 'p-6 sm:p-8'\n * resolveSpacing('compact') // => 'py-6 sm:py-8' (defaults to 'y' axis)\n */\nexport function resolveSpacing(spacing: SemanticSpacing, axis: SpacingAxis = 'y'): string {\n const map = axis === 'y' ? SECTION_SPACING_MAP : CONTAINER_SPACING_MAP;\n return map[spacing];\n}\n\n/**\n * Resolve semantic spacing to section CSS classes (vertical padding only).\n * More explicit alternative to resolveSpacing(spacing, 'y').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for vertical padding (py-*)\n *\n * @example\n * resolveSectionSpacing('medium') // => 'py-12 sm:py-16'\n */\nexport function resolveSectionSpacing(spacing: SemanticSpacing): string {\n return SECTION_SPACING_MAP[spacing];\n}\n\n/**\n * Resolve semantic spacing to container CSS classes (all-sides padding).\n * More explicit alternative to resolveSpacing(spacing, 'all').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for all-sides padding (p-*)\n *\n * @example\n * resolveContainerSpacing('medium') // => 'p-6 sm:p-8'\n */\nexport function resolveContainerSpacing(spacing: SemanticSpacing): string {\n return CONTAINER_SPACING_MAP[spacing];\n}\n\n/**\n * Default spacing value for sections when not explicitly configured.\n */\nexport const DEFAULT_SECTION_SPACING: SemanticSpacing = 'medium';\n\n/**\n * Default spacing value for containers when not explicitly configured.\n */\nexport const DEFAULT_CONTAINER_SPACING: SemanticSpacing = 'medium';\n","import type { NodeDefinition } from '../schema';\nimport { section } from '../builder';\nimport { backgroundLayer } from './backgroundLayer';\nimport type { SemanticSpacing } from '../../spacing';\nimport { DEFAULT_SECTION_SPACING } from '../../spacing';\n\n/**\n * Configuration for creating a styled section with background support.\n */\nexport type StyledSectionConfig = {\n /**\n * Content nodes to render inside the section.\n * Can be a single node, array of nodes, or empty array.\n */\n children: NodeDefinition | NodeDefinition[];\n\n /**\n * Base horizontal padding class (e.g., 'px-6', 'px-8').\n * This provides consistent horizontal constraints across sections.\n * Removed when fullWidth is enabled in _containerStyles.\n * @default 'px-6'\n */\n baseClass?: string;\n\n /**\n * Semantic vertical spacing value for the section.\n * Uses semantic values (none, compact, cozy, medium, comfortable, spacious)\n * which are transformed to responsive Tailwind classes.\n *\n * @default 'medium' (resolves to 'py-12 sm:py-16')\n */\n spacing?: SemanticSpacing;\n\n /**\n * Theme background token to apply.\n * @default 'background/base'\n */\n background?: string;\n\n /**\n * Path to the section styles data in the content (e.g., '_sectionStyles').\n * This path is used for binding className, allowOverflow, and background layers.\n * @default '_sectionStyles'\n */\n bindFrom?: string;\n\n /**\n * CSS class to apply to background image layer.\n * @default 'absolute -z-10'\n */\n imageClassName?: string;\n};\n\n/**\n * Create a styled section with automatic background layer and spacing bindings.\n *\n * This helper encapsulates the common pattern of:\n * - Creating a section wrapper with background theme\n * - Adding background color/gradient/image layers\n * - Binding className to section styles with transform\n * - Binding allowOverflow for background positioning\n * - Wrapping content children\n *\n * Use this helper to eliminate 25+ lines of boilerplate section setup code.\n *\n * @example\n * // Basic usage with default spacing\n * const layout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'md' }),\n * });\n *\n * @example\n * // Custom spacing and base padding\n * const compactLayout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'sm' }),\n * baseClass: 'px-8',\n * spacing: 'py-6 sm:py-8',\n * });\n *\n * @example\n * // Multiple children\n * const layout = styledSection({\n * children: [\n * heading({ text: 'Title' }),\n * sectionContainer(contentNodes, { gap: 'md' }),\n * ],\n * });\n *\n * @example\n * // Custom binding path (for nested sections)\n * const nestedSection = styledSection({\n * children: content,\n * bindFrom: 'container.styles',\n * });\n */\nexport function styledSection(config: StyledSectionConfig): NodeDefinition {\n const {\n children,\n baseClass = 'px-6',\n spacing = DEFAULT_SECTION_SPACING,\n background = 'background/base',\n bindFrom = '_sectionStyles',\n imageClassName = 'absolute -z-10',\n } = config;\n\n // Create background layers (color/gradient + image)\n const backgroundNodes = backgroundLayer(`${bindFrom}.background`, {\n imageClassName,\n });\n\n // Normalize children to array\n const childrenArray = Array.isArray(children) ? children : [children];\n\n // Create section with background, className binding, and allowOverflow binding\n return section(\n {\n background,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'sectionStyles.resolveClassName',\n options: { baseClass, defaultSpacing: spacing },\n },\n ],\n // No fallback needed - transform handles all cases via defaultSpacing\n },\n },\n allowOverflow: {\n $bind: {\n from: `${bindFrom}.background.overflow`,\n fallback: false,\n },\n },\n },\n [\n ...backgroundNodes,\n ...childrenArray,\n ],\n );\n}\n","import { button, media, text, bind, when, repeat } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n// Single CTA button primitive.\n// - Uses ui.buttonClass transform to resolve classes from `variant`\n// - Accepts optional icons and when-path\n// - Can optionally repeat over a collection when `repeatFrom` is provided\nexport function ctaButton(opts?: {\n basePath?: string\n linkPath?: string\n labelPath?: string\n variantPath?: string\n iconLeftPath?: string\n iconRightPath?: string\n whenPath?: string\n repeatFrom?: { collectionPath: string; itemName?: string }\n className?: string\n}): NodeDefinition {\n const base = opts?.basePath ?? 'cta'\n const linkPath = opts?.linkPath ?? `${base}.link`\n const labelPath = opts?.labelPath ?? `${base}.label`\n const variantPath = opts?.variantPath ?? `${base}.variant`\n const iconLeftPath = opts?.iconLeftPath ?? `${base}.iconLeft`\n const iconRightPath = opts?.iconRightPath ?? `${base}.iconRight`\n const whenPath = opts?.whenPath ?? labelPath\n\n const leftIcon = media({ className: 'mr-2 h-4 w-4 inline-block' }, when(iconLeftPath), bind(iconLeftPath))\n const rightIcon = media({ className: 'ml-2 h-4 w-4 inline-block' }, when(iconRightPath), bind(iconRightPath))\n const label = text({ as: 'span' }, bind(labelPath))\n\n // Build className object with $bind and $prepend, optionally $append\n const classNameObj: any = {\n $bind: {\n from: variantPath,\n fallback: 'primary',\n },\n $prepend: 'button-',\n };\n\n if (opts?.className) {\n classNameObj.$append = ` ${opts.className}`;\n }\n\n const node = button(\n {\n className: classNameObj,\n href: { $bind: { from: linkPath, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n },\n [leftIcon, label, rightIcon],\n )\n\n // Apply repeat to the node if requested\n if (opts?.repeatFrom) {\n return button(\n node.props ?? {},\n node.children as any,\n repeat(opts.repeatFrom.collectionPath, opts.repeatFrom.itemName ?? base),\n )\n }\n return button(node.props ?? {}, node.children as any, when(whenPath))\n}\n","import { inline, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { ctaButton } from './ctaButton'\n\n// Renders a single inline container whose children are the repeated CTA buttons.\n// Button styling uses theme-friendly Tailwind utility classes (mapped to CSS vars),\n// selected by a simple transform keyed by `variant`.\nexport function ctaRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n justify?: 'start' | 'center' | 'end'\n containerClassName?: string\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'content.ctas'\n const item = opts?.itemName ?? 'cta'\n const gap = opts?.gap ?? 'sm'\n const justify = opts?.justify ?? 'center'\n const containerClassName = ['cta-row flex-wrap', opts?.containerClassName].filter(Boolean).join(' ')\n\n return inline(\n { gap, justify, className: containerClassName },\n [\n ctaButton({ basePath: item, repeatFrom: { collectionPath, itemName: item } }),\n ],\n when(collectionPath),\n )\n}\n","import { bind, inline, link, repeat, text, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\nexport function navRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n align?: 'start' | 'center' | 'end'\n className?: string\n linkClassName?: string | Record<string, unknown>\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'menu.items'\n const itemName = opts?.itemName ?? 'navItem'\n const gap = opts?.gap ?? 'md'\n const align = opts?.align ?? 'end'\n const className = ['items-center flex-wrap', opts?.className].filter(Boolean).join(' ').trim()\n\n const linkClassName = opts?.linkClassName ?? 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard'\n\n const links = link(\n {\n className: linkClassName,\n href: { $bind: { from: `${itemName}.link`, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n target: { $bind: { from: `${itemName}.target` } },\n rel: { $bind: { from: `${itemName}.rel` } },\n 'data-active': { $bind: { from: `${itemName}.active` } },\n },\n [text({ as: 'span' }, bind(`${itemName}.label`))],\n repeat(collectionPath, itemName),\n )\n\n return inline(\n { gap, align, className },\n [links],\n when(collectionPath),\n )\n}\n","import { z } from \"zod\";\n\nimport { fieldSchema, type FieldDefinition } from \"../manifest/schema\";\nimport {\n NodeSchema,\n type NodeDefinition,\n type Binding,\n type RepeatConfig,\n type ConditionConfig,\n type DataScope,\n} from \"../node\";\n\nconst FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;\nconst FIELD_ID_PATTERN = /^[a-z][a-zA-Z0-9_-]*$/;\n\nconst dataLoaderSchema = z.object({\n endpoint: z.string().min(1, \"Fragment data loader requires an endpoint\"),\n params: z.record(z.string(), z.unknown()).default({}),\n mode: z.enum([\"server\", \"client\"]).default(\"server\"),\n});\n\nconst fragmentDataSchema = z.object({\n key: z.string().min(1, \"Fragment data key is required\"),\n loader: dataLoaderSchema.optional(),\n});\n\nexport type FragmentDataConfig = z.output<typeof fragmentDataSchema>;\n\nconst fragmentConfigSchema = z.object({\n id: z\n .string()\n .min(1, \"Fragment id is required\")\n .regex(FRAGMENT_ID_PATTERN, \"Fragment id must be alphanumeric with optional . _ - separators\"),\n title: z.string().optional(),\n description: z.string().optional(),\n category: z.enum([\"content\", \"media\", \"interactive\", \"layout\"]).optional(),\n icon: z.string().optional(),\n fields: fieldSchema.array().default([]),\n layout: z\n .union([NodeSchema, NodeSchema.array()])\n .transform((value): NodeDefinition[] => (Array.isArray(value) ? value : [value])),\n data: fragmentDataSchema.optional(),\n}) as any;\n\nexport type FragmentConfig = z.input<typeof fragmentConfigSchema>;\nexport type FragmentDefinition = z.output<typeof fragmentConfigSchema>;\n\nexport class FragmentConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentConfigError\";\n }\n}\n\nexport function defineFragment(config: FragmentConfig): FragmentDefinition {\n const parsed = fragmentConfigSchema.parse(config);\n\n validateFieldDefinitions(parsed.fields as FieldDefinition[], parsed.id);\n\n return {\n ...parsed,\n fields: (parsed.fields as FieldDefinition[]).map(cloneFieldDefinition as (field: any) => FieldDefinition),\n layout: parsed.layout.map((node: any) => ({ ...node })),\n };\n}\n\nexport function scopeFragmentFields(fragment: FragmentDefinition, scope: string): FieldDefinition[] {\n const normalizedScope = scope.trim();\n if (!normalizedScope) {\n return fragment.fields.map(cloneFieldDefinition as (field: any) => FieldDefinition);\n }\n return fragment.fields.map((field: any) => prefixFieldId(field, normalizedScope));\n}\n\nexport function scopeFragmentLayout(fragment: FragmentDefinition, scope: string): NodeDefinition[] {\n const normalizedScope = scope.trim();\n return fragment.layout.map((node: any) => cloneAndScopeNode(node, normalizedScope));\n}\n\nfunction validateFieldDefinitions(fields: FieldDefinition[], fragmentId: string): void {\n const seen = new Set<string>();\n\n for (const field of fields) {\n if (field.id.includes(\".\")) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" should not include dot notation; the builder scopes fields automatically.`,\n );\n }\n if (!FIELD_ID_PATTERN.test(field.id)) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" must start with a letter and contain only alphanumeric, \"_\", or \"-\".`,\n );\n }\n if (seen.has(field.id)) {\n throw new FragmentConfigError(\n `Duplicate field id \"${field.id}\" found in fragment \"${fragmentId}\". Field ids must be unique per fragment.`,\n );\n }\n seen.add(field.id);\n }\n}\n\nfunction prefixFieldId(field: FieldDefinition, scope: string): FieldDefinition {\n const cloned = cloneFieldDefinition(field);\n cloned.id = `${scope}.${field.id}`;\n\n cloned.defaultValue = cloneUnknown(cloned.defaultValue);\n cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : undefined;\n cloned.ui = cloneUnknown(cloned.ui);\n\n return cloned;\n}\n\nfunction cloneFieldDefinition(field: FieldDefinition): FieldDefinition {\n switch (field.type) {\n case \"repeater\":\n if (field.polymorphic && field.itemTypes) {\n // Polymorphic repeater: clone itemTypes\n return {\n ...field,\n polymorphic: true as const,\n itemTypes: Object.fromEntries(\n Object.entries(field.itemTypes).map(([key, itemType]) => [\n key,\n {\n ...itemType,\n fields: itemType.fields.map(cloneFieldDefinition),\n },\n ])\n ),\n } as FieldDefinition;\n } else if (field.schema) {\n // Monomorphic repeater: clone schema\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n } as FieldDefinition;\n }\n // Fallback (shouldn't happen due to XOR validation)\n return { ...field } as FieldDefinition;\n case \"group\":\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n };\n default:\n return { ...field };\n }\n}\n\nfunction cloneUnknown<T>(value: T): T {\n if (value == null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => cloneUnknown(entry)) as T;\n }\n return { ...(value as Record<string, unknown>) } as T;\n}\n\nfunction cloneAndScopeNode(node: NodeDefinition, scope: string): NodeDefinition {\n const cloned: NodeDefinition = {\n ...node,\n };\n\n if (node.children) {\n cloned.children = node.children.map((child: NodeDefinition) => cloneAndScopeNode(child, scope));\n }\n\n if (node.props) {\n cloned.props = scopePropBindings(node.props, scope);\n }\n\n if (node.$bind) {\n cloned.$bind = scopeBinding(node.$bind, scope);\n }\n\n if (node.$repeat) {\n cloned.$repeat = scopeRepeat(node.$repeat, scope);\n }\n\n if (node.$when) {\n cloned.$when = scopeCondition(node.$when, scope);\n }\n\n if (node.$scopes) {\n cloned.$scopes = node.$scopes.map((entry: DataScope) => ({\n name: entry.name,\n from: scopeBinding(entry.from, scope),\n }));\n }\n\n return cloned;\n}\n\nfunction scopeBinding(binding: Binding, scope: string): Binding {\n const cloned: Binding = {\n ...binding,\n transforms: binding.transforms?.map(\n (step: { id: string; options?: Record<string, unknown> }) => ({ ...step }),\n ) ?? [],\n };\n\n cloned.from = scopeContentPath(binding.from, scope);\n\n return cloned;\n}\n\nfunction scopeRepeat(repeat: RepeatConfig, scope: string): RepeatConfig {\n const cloned: RepeatConfig = {\n ...repeat,\n collection: scopeBinding(repeat.collection, scope),\n };\n\n if (repeat.sortBy) {\n cloned.sortBy = {\n ...repeat.sortBy,\n path: scopeContentPath(repeat.sortBy.path, scope),\n };\n }\n\n return cloned;\n}\n\nfunction scopeCondition(condition: ConditionConfig, scope: string): ConditionConfig {\n return {\n ...condition,\n when: scopeBinding(condition.when, scope),\n };\n}\n\nfunction scopePropBindings(input: Record<string, unknown>, scope: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = scopePropValue(value, scope);\n }\n return result;\n}\n\nfunction scopePropValue(value: unknown, scope: string): unknown {\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => scopePropValue(entry, scope));\n }\n if (value && typeof value === \"object\") {\n if (\"$bind\" in (value as Record<string, unknown>)) {\n const bindingConfig = (value as { $bind: Binding }).$bind;\n return {\n $bind: scopeBinding(bindingConfig, scope),\n };\n }\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n result[key] = scopePropValue(entry, scope);\n }\n return result;\n }\n return value;\n}\n\nfunction scopeContentPath(path: string, scope: string): string {\n if (!scope || scope.length === 0) {\n return path;\n }\n if (path === \"content\") {\n return `content.${scope}`;\n }\n if (path.startsWith(\"content.\")) {\n const remainder = path.slice(\"content.\".length);\n return remainder.length > 0 ? `content.${scope}.${remainder}` : `content.${scope}`;\n }\n if (path.startsWith(\"content[\")) {\n return path.replace(/^content/, `content.${scope}`);\n }\n // Handle $root paths - don't scope them\n if (path.startsWith(\"$root.\")) {\n return path;\n }\n // Handle scope-qualified paths like \"item.label\" - don't rescope them\n // These are paths that reference other scopes (item, index, etc.)\n // We detect them by checking if they contain a dot (indicating scope.field pattern)\n // but don't start with content/$ root (which we handle above)\n if (path.includes('.')) {\n return path;\n }\n // Handle simple relative paths (field names without dots) - add content.scope prefix\n // e.g., \"media\" with scope \"background\" becomes \"content.background.media\"\n return `content.${scope}.${path}`;\n}\n","import type { BlockManifest } from \"../manifest\";\nimport type { FieldDefinition } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport {\n type FragmentDefinition,\n type FragmentDataConfig,\n scopeFragmentFields,\n scopeFragmentLayout,\n} from \"./types\";\n\ntype FragmentInstanceConfig = {\n fragment: FragmentDefinition;\n scope?: string;\n dataKey?: string;\n fieldPriority?: number;\n};\n\nexport type MaterializedFragment = {\n fragment: FragmentDefinition;\n scope: string;\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data?: FragmentDataConfig;\n fieldPriority: number;\n};\n\nexport type FragmentComposition = {\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data: MaterializedFragment[\"data\"][];\n scopes: string[];\n};\n\nexport type FragmentDataLoaders = Record<\n string,\n {\n endpoint: string;\n params: Record<string, unknown>;\n mode: \"server\" | \"client\";\n }\n>;\n\nexport class FragmentCompositionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentCompositionError\";\n }\n}\n\nconst DOT_SCOPE_REGEX = /^[A-Za-z0-9_.-]*$/;\n\nexport function materializeFragment(config: FragmentInstanceConfig): MaterializedFragment {\n const scope = normalizeScope(config.scope);\n const fields = scopeFragmentFields(config.fragment, scope);\n const layout = scopeFragmentLayout(config.fragment, scope);\n const fieldPriority = config.fieldPriority ?? 0;\n\n let data: FragmentDataConfig | undefined;\n if (config.fragment.data) {\n const key = config.dataKey ?? config.fragment.data.key;\n if (!key || typeof key !== \"string\") {\n throw new FragmentCompositionError(\n `Fragment \"${config.fragment.id}\" requires a data key to compose.`,\n );\n }\n data = {\n key,\n loader: config.fragment.data.loader ? { ...config.fragment.data.loader } : undefined,\n };\n }\n\n return {\n fragment: config.fragment,\n scope,\n fields,\n layout,\n data,\n fieldPriority,\n };\n}\n\nexport function composeFragments(instances: FragmentInstanceConfig[]): FragmentComposition {\n type FieldEntry = {\n id: string;\n field: FieldDefinition;\n priority: number;\n order: number;\n };\n\n const fieldEntries: FieldEntry[] = [];\n const layouts: NodeDefinition[] = [];\n const dataEntries: FragmentDataConfig[] = [];\n const scopes: string[] = [];\n const seenFieldIds = new Set<string>();\n let fieldOrder = 0;\n\n for (const instance of instances) {\n const materialized = materializeFragment(instance);\n\n for (const field of materialized.fields) {\n if (seenFieldIds.has(field.id)) {\n throw new FragmentCompositionError(\n `Duplicate field id \"${field.id}\" when composing fragments.`,\n );\n }\n seenFieldIds.add(field.id);\n fieldEntries.push({\n id: field.id,\n field,\n priority: materialized.fieldPriority,\n order: fieldOrder++,\n });\n }\n\n scopes.push(materialized.scope);\n layouts.push(...materialized.layout);\n\n if (materialized.data) {\n if (dataEntries.find((entry) => entry.key === materialized.data?.key)) {\n throw new FragmentCompositionError(\n `Duplicate fragment data key \"${materialized.data.key}\" detected.`,\n );\n }\n dataEntries.push(materialized.data);\n }\n }\n\n return {\n fields: fieldEntries\n .sort((a, b) => {\n if (a.priority !== b.priority) {\n return a.priority - b.priority;\n }\n return a.order - b.order;\n })\n .map((entry) => entry.field),\n layout: layouts,\n data: dataEntries,\n scopes,\n };\n}\n\nexport function applyFragmentsToManifest(\n manifest: BlockManifest,\n composition: FragmentComposition,\n): BlockManifest {\n return {\n ...manifest,\n fields: [...composition.fields, ...(manifest.fields ?? [])],\n layout: manifest.layout ?? normalizeLayout(composition.layout),\n };\n}\n\nfunction normalizeScope(scope?: string): string {\n if (!scope) return \"\";\n const trimmed = scope.trim();\n if (!DOT_SCOPE_REGEX.test(trimmed)) {\n throw new FragmentCompositionError(\n `Fragment scope \"${scope}\" contains invalid characters. Use alphanumeric, \".\", \"-\", or \"_\".`,\n );\n }\n return trimmed;\n}\n\nfunction normalizeLayout(layout: NodeDefinition[]): NodeDefinition | NodeDefinition[] {\n if (layout.length === 0) {\n return [];\n }\n if (layout.length === 1) {\n return layout[0] as NodeDefinition;\n }\n return layout;\n}\n\nexport function buildFragmentDataLoaders(\n composition: FragmentComposition,\n): FragmentDataLoaders {\n const loaders: FragmentDataLoaders = {};\n for (const entry of composition.data) {\n if (!entry?.loader) continue;\n loaders[entry.key] = {\n endpoint: entry.loader.endpoint,\n params: { ...(entry.loader.params ?? {}) },\n mode: entry.loader.mode ?? \"server\",\n };\n }\n return loaders;\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const bodyCopyFragment: FragmentDefinition = defineFragment({\n id: \"bodyCopy\",\n title: \"Body Copy\",\n description: \"Heading, rich text body, and alignment controls.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional heading displayed above the body copy.\",\n },\n {\n id: \"body\",\n type: \"richText\",\n label: \"Body\",\n required: true,\n },\n {\n id: \"alignment\",\n type: \"select\",\n label: \"Text alignment\",\n required: false,\n defaultValue: \"left\",\n options: [\n { value: \"left\", label: \"Left\" },\n { value: \"center\", label: \"Center\" },\n ],\n },\n ],\n layout: stack(\n {\n gap: \"md\",\n className: \"mx-auto max-w-3xl\",\n align: {\n $bind: {\n from: \"content.alignment\",\n transforms: [{ id: \"ui.stackAlignFromAlignment\" }],\n fallback: \"start\",\n },\n },\n },\n [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n // Only dynamic class here is for text alignment\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.headingClassFromAlignment\",\n options: {\n base: \"\",\n },\n },\n ],\n fallback: \"\",\n },\n },\n style: textColorStyle('neutral-900'),\n },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n richText(\n {\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.bodyClassFromAlignment\",\n options: {\n base: \"prose prose-lg max-w-none sm:prose-xl\",\n },\n },\n ],\n fallback:\n \"prose prose-lg max-w-none sm:prose-xl\",\n },\n style: textColorStyle('neutral-600'),\n },\n },\n bind(\"content.body\"),\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const heroCopyFragment: FragmentDefinition = defineFragment({\n id: \"heroCopy\",\n title: \"Hero Copy\",\n description: \"Eyebrow, headline, and subheadline copy for hero layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the headline\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"headline\",\n type: \"text\",\n label: \"Headline\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"subheadline\",\n type: \"text\",\n label: \"Subheadline\",\n multiline: true,\n maxLength: 280,\n },\n ],\n layout: [\n text(\n {\n as: \"p\",\n className: \"hero-eyebrow text-sm font-semibold tracking-wide\",\n style: textColorStyle('neutral-500'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h1\",\n // heading-display: uses fluid typography from theme (--fs-h1-display-fluid)\n // Removes hardcoded text-4xl/5xl/6xl - size now controlled by theme\n className: \"hero-headline heading-display\",\n style: textColorStyle('neutral-900'),\n },\n bind(\"content.headline\"),\n ),\n text(\n {\n as: \"p\",\n className: \"hero-subheadline text-lg sm:text-xl\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.subheadline\"),\n bind(\"content.subheadline\"),\n ),\n ],\n});\n","import type { FieldDefinition } from '../manifest/schema'\n\ntype ButtonOptions = {\n variants?: { value: string; label: string }[]\n showGroupLabel?: boolean\n groupId?: string\n groupLabel?: string\n flattenInRepeater?: boolean\n}\n\nexport function createButtonGroup(options: ButtonOptions = {}): FieldDefinition {\n const {\n variants = [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n ],\n showGroupLabel = false,\n groupId = 'button',\n groupLabel = 'Button',\n flattenInRepeater = true,\n } = options\n\n // Main button fields: label, variant, link\n const mainFields: FieldDefinition[] = [\n {\n id: 'label',\n type: 'text',\n label: 'Label',\n required: true,\n multiline: false,\n maxLength: 40,\n ui: { row: 'primary' },\n },\n {\n id: 'variant',\n type: 'select',\n label: 'Style',\n options: variants,\n required: false,\n multiple: false,\n ui: { row: 'primary' },\n },\n {\n id: 'link',\n type: 'link',\n label: 'Link',\n required: true,\n ui: { colSpan: 2 },\n },\n ]\n\n // Icons in collapsible disclosure section\n const iconsGroup: FieldDefinition = {\n id: 'icons',\n type: 'group',\n label: 'Icons',\n required: false,\n ui: { preset: 'disclosure', colSpan: 2 },\n schema: {\n fields: [\n { id: 'iconLeft', type: 'media', label: 'Left icon', required: false, mediaKinds: ['image'] },\n { id: 'iconRight', type: 'media', label: 'Right icon', required: false, mediaKinds: ['image'] },\n ],\n },\n } as FieldDefinition\n\n return {\n id: groupId,\n type: 'group',\n label: groupLabel,\n ui: { layout: 'grid', columns: 2, flattenInRepeater, hideLabel: !showGroupLabel },\n schema: { fields: [...mainFields, iconsGroup] },\n required: false,\n } as FieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createButtonGroup } from './button'\n\ntype CtasOptions = {\n id?: string\n label?: string\n itemLabel?: string\n minItems?: number\n maxItems?: number\n}\n\nexport function createCtasRepeater(options: CtasOptions = {}): FieldDefinition {\n const {\n id = 'ctas',\n label = 'Calls to action',\n itemLabel = 'CTA',\n minItems = 0,\n maxItems,\n } = options\n\n return {\n id,\n type: 'repeater',\n label,\n itemLabel,\n itemLabelSource: 'label',\n minItems,\n maxItems,\n schema: {\n fields: [createButtonGroup({ showGroupLabel: false, flattenInRepeater: true })],\n },\n } as FieldDefinition\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { ctaRow } from \"../../node/fragments\";\nimport { createCtasRepeater } from \"../../fields/ctas\";\n\nexport const ctaRowFragment: FragmentDefinition = defineFragment({\n id: \"ctaRow\",\n title: \"CTA Row\",\n description: \"Repeatable calls to action rendered inline.\",\n fields: [createCtasRepeater({ label: \"Calls to action\", itemLabel: \"CTA\", maxItems: 3 })],\n layout: [\n ctaRow({ collectionPath: \"content.ctas\", itemName: \"cta\", justify: \"center\" }),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { headingGroup } from \"../../node/fragments\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const ctaCopyFragment: FragmentDefinition = defineFragment({\n id: \"ctaCopy\",\n title: \"CTA Copy\",\n description: \"Eyebrow, title, and supporting rich text for CTA layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the title\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"content\",\n type: \"richText\",\n label: \"Copy\",\n description: \"Short paragraph of supporting copy.\",\n },\n ],\n layout: [\n headingGroup({ eyebrowPath: \"content.eyebrow\", titlePath: \"content.title\", className: \"cta-heading\" }),\n richText(\n {\n className: \"cta-content prose prose-lg mx-auto max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n when(\"content.content\"),\n bind(\"content.content\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsHeadingFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsHeading\",\n title: \"Testimonials Heading\",\n description: \"Heading and subheading copy for testimonials section.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional block heading displayed above the testimonials.\",\n },\n {\n id: \"subheading\",\n type: \"text\",\n label: \"Description\",\n multiline: true,\n description: \"Optional supporting copy shown below the heading.\",\n },\n ],\n layout: [\n stack(\n { gap: \"md\", className: \"mx-auto max-w-2xl text-center\" },\n [\n text(\n // h2 now gets size/weight from theme typography CSS\n { as: \"h2\", style: textColorStyle('neutral-900') },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n text(\n { as: \"p\", className: \"text-lg sm:text-xl\", style: textColorStyle('neutral-600') },\n when(\"content.subheading\"),\n bind(\"content.subheading\"),\n ),\n ],\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { carousel, stack, richText, bind, when, inline, media, repeat, text } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsCarouselFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsCarousel\",\n title: \"Testimonials Carousel\",\n description: \"Carousel layout for testimonial cards with data loader configuration.\",\n fields: [\n {\n id: \"slidesToShow\",\n type: \"select\",\n label: \"Testimonials per view\",\n defaultValue: \"1\",\n options: [\n { value: \"1\", label: \"One at a time\" },\n { value: \"2\", label: \"Two at a time\" },\n { value: \"3\", label: \"Three at a time\" },\n ],\n },\n {\n id: \"transition\",\n type: \"select\",\n label: \"Transition\",\n defaultValue: \"slide\",\n options: [\n { value: \"slide\", label: \"Slide\" },\n { value: \"fade\", label: \"Fade\" },\n ],\n },\n {\n id: \"maxEntries\",\n type: \"select\",\n label: \"Testimonials to load\",\n defaultValue: \"6\",\n options: [\n { value: \"3\", label: \"3 testimonials\" },\n { value: \"6\", label: \"6 testimonials\" },\n { value: \"9\", label: \"9 testimonials\" },\n ],\n },\n ],\n layout: [\n carousel(\n {\n className: \"mt-12\",\n slidesToShow: { $bind: { from: \"slidesToShow\", fallback: 1 } },\n transition: { $bind: { from: \"transition\", fallback: \"slide\" } },\n showControls: true,\n },\n [\n stack(\n {\n gap: \"lg\",\n className:\n \"h-full justify-between rounded-2xl border p-8 shadow-sm\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n richText(\n {\n className:\n \"prose prose-lg max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n bind(\"testimonial.content.body\"),\n when(\"testimonial.content.body\"),\n ),\n inline(\n { gap: \"md\", className: \"mt-6 items-center\" },\n [\n media(\n { className: \"h-12 w-12 shrink-0 rounded-full object-cover\" },\n bind(\"testimonial.content.headshot\", { transforms: [{ id: \"media.fromUrl\" }] }),\n when(\"testimonial.content.headshot\"),\n ),\n stack(\n { gap: \"xs\" },\n [\n text(\n { as: \"p\", className: \"font-semibold\", style: textColorStyle('neutral-900') },\n bind(\"testimonial.content.name\", { fallback: \"Anonymous\" }),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.jobTitle\"),\n bind(\"testimonial.content.jobTitle\"),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.company\"),\n bind(\"testimonial.content.company\"),\n ),\n ],\n ),\n ],\n ),\n ],\n repeat(\"data.entries\", \"testimonial\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"entries\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"testimonial\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"maxEntries\", fallback: \"6\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const formCopyFragment: FragmentDefinition = defineFragment({\n id: \"formCopy\",\n title: \"Form Copy\",\n description: \"Optional title and introduction content for form blocks.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n },\n {\n id: \"intro\",\n type: \"richText\",\n label: \"Intro\",\n description: \"Optional introduction above the form.\",\n },\n ],\n layout: [\n text(\n {\n as: \"h2\",\n className: \"text-2xl font-semibold\",\n style: textColorStyle('text'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className: \"text-base\",\n style: textColorStyle('text'),\n },\n when(\"content.intro\"),\n bind(\"content.intro\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { form, bind } from \"../../node/builder\";\n\nexport const formEmbedFragment: FragmentDefinition = defineFragment({\n id: \"formEmbed\",\n title: \"Form Embed\",\n description: \"Embeds a saved form with configurable submit button copy.\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Form\",\n description: \"Pick a saved form to render.\",\n required: true,\n referenceKind: \"form\",\n allowManualEntry: false,\n },\n {\n id: \"submitLabel\",\n type: \"text\",\n label: \"Submit button label\",\n defaultValue: \"Submit\",\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Shown after successful submit (handled by page or block).\",\n },\n ],\n layout: [\n form(\n {\n submitLabel: { $bind: { from: \"submitLabel\" } },\n successMessage: { $bind: { from: \"successMessage\" } },\n },\n [],\n bind(\"data.form\"),\n ),\n ],\n data: {\n key: \"form\",\n loader: {\n endpoint: \"getPublicFormById\",\n params: {\n formId: { $bind: { from: \"formId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerBottomTextFragment: FragmentDefinition = defineFragment({\n id: \"footerBottomText\",\n title: \"Footer Bottom Text\",\n description: \"Rich text content displayed at the bottom of the footer.\",\n fields: [\n {\n id: \"bottomText\",\n type: \"richText\",\n label: \"Bottom text\",\n description: \"Appears at the very bottom of the footer.\",\n ui: { variant: \"limited\" },\n },\n ],\n layout: [\n richText(\n {\n className: \"prose prose-sm mx-auto max-w-3xl text-center\",\n style: textColorStyle('text/80'),\n },\n when(\"bottomText\"),\n bind(\"bottomText\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, repeat, when, bind } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerLinkGroupsFragment: FragmentDefinition = defineFragment({\n id: \"footerLinkGroups\",\n title: \"Footer Link Groups\",\n description: \"Repeating columns of grouped footer links.\",\n fields: [\n {\n id: \"linkGroups\",\n type: \"repeater\",\n label: \"Link groups\",\n description: \"Organize footer links into columns.\",\n schema: {\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Group title\",\n },\n {\n id: \"links\",\n type: \"repeater\",\n label: \"Links\",\n schema: {\n fields: [\n {\n id: \"label\",\n type: \"text\",\n label: \"Label\",\n required: true,\n },\n {\n id: \"link\",\n type: \"link\",\n label: \"Link\",\n required: true,\n },\n ],\n },\n },\n ],\n },\n },\n ],\n layout: [\n stack(\n {\n gap: \"lg\",\n align: \"start\",\n className: \"grid gap-8 md:grid-cols-3\",\n },\n [\n stack(\n { gap: \"md\", align: \"start\", className: \"text-left\" },\n [\n text(\n {\n as: \"h3\",\n className: \"text-xs font-semibold uppercase tracking-wide\",\n style: textColorStyle('text/70'),\n },\n when(\"group.title\"),\n bind(\"group.title\"),\n ),\n stack(\n { gap: \"sm\", align: \"start\", className: \"space-y-2\" },\n [\n link(\n {\n className: \"block text-sm transition-theme hover:opacity-80\",\n style: textColorStyle('text'),\n href: {\n $bind: {\n from: \"entry.link\",\n transforms: [{ id: \"links.resolve\" }],\n fallback: \"#\",\n },\n },\n target: { $bind: { from: \"entry.target\" } },\n rel: { $bind: { from: \"entry.rel\" } },\n },\n [text({ as: \"span\" }, bind(\"entry.label\"))],\n repeat(\"group.links\", \"entry\"),\n ),\n ],\n ),\n ],\n repeat(\"linkGroups\", \"group\"), // Relative path\n ),\n ],\n when(\"linkGroups\"), // Relative path\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport { stack, text, link, media, when, bind, props as withProps } from \"../../node/builder\";\nimport {\n borderColorStyle,\n backgroundColorStyle,\n textColorStyle,\n mergeStyles,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const blogFeaturedPostFragment: FragmentDefinition = defineFragment({\n id: \"blogFeaturedPost\",\n title: \"Featured Blog Post\",\n description: \"Featured blog post card with title and preview content.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Block title\",\n description: \"Displayed above the featured blog post.\",\n defaultValue: \"Latest post\",\n maxLength: 120,\n },\n {\n id: \"postSlug\",\n type: \"reference\",\n label: \"Blog post\",\n description: \"Pick the blog post to feature in this block.\",\n required: true,\n referenceKind: \"post\",\n allowManualEntry: false,\n },\n ],\n layout: [\n sectionContainer(\n [\n stack({ gap: \"sm\", className: \"md:w-1/3\" }, [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"title\", { fallback: \"Latest post\" }), // Relative path\n ),\n ]),\n stack({ gap: \"md\", className: \"flex-1\" }, [\n stack({\n gap: \"md\",\n className: \"rounded-2xl border bg-white p-6 shadow-sm\",\n style: borderColorStyle(\"neutral-200\"),\n }, [\n link(\n {\n className: \"block overflow-hidden rounded-xl border\",\n style: borderColorStyle(\"neutral-100\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n { className: \"h-56 w-full object-cover\" },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n ),\n stack({ gap: \"sm\" }, [\n link(\n {\n className: \"block text-2xl font-semibold hover:opacity-80\",\n style: textColorStyle(\"neutral-900\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, bind(\"post.title\"))],\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle(\"neutral-500\") },\n when(\"post.publishedAt\"),\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n ),\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-600\") },\n bind(\"post.excerpt\", { fallback: \"Select a blog post to display its preview.\" }),\n ),\n link(\n {\n className: \"inline-flex items-center text-sm font-semibold hover:opacity-80\",\n style: textColorStyle(\"primary\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, withProps({ value: \"Read more →\" }))],\n ),\n ]),\n ], when(\"post\")),\n stack(\n {\n gap: \"sm\",\n className: \"rounded-xl border border-dashed p-6 text-sm\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n textColorStyle(\"neutral-500\"),\n ),\n },\n [text({ as: \"p\" }, withProps({ value: \"Select a blog post to display its preview.\" }))],\n when(\"post\", { not: true }),\n ),\n ]),\n ],\n { gap: \"lg\", className: \"w-full md:flex-row md:items-start md:gap-10\" },\n ),\n ],\n data: {\n key: \"post\",\n loader: {\n endpoint: \"getPublishedEntryPreview\",\n params: {\n type: \"post\",\n slug: { $bind: { from: \"postSlug\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, media, when, bind, el, repeat, button, type NodeModifier } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\n// Grid primitive helper\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<import(\"../../node\").NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el(\"grid\", props ?? undefined, children ?? undefined, ...mods);\n\nexport const blogListGridFragment: FragmentDefinition = defineFragment({\n id: \"blogListGrid\",\n title: \"Blog List Grid\",\n description: \"Grid layout for displaying blog posts as cards with images.\",\n fields: [\n {\n id: \"columns\",\n type: \"select\",\n label: \"Grid columns\",\n description: \"Number of columns in the grid layout.\",\n defaultValue: \"3\",\n options: [\n { value: \"2\", label: \"2 columns\" },\n { value: \"3\", label: \"3 columns\" },\n { value: \"4\", label: \"4 columns\" },\n ],\n },\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display featured images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Grid container\n grid(\n {\n className: \"grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3\",\n },\n [\n // Individual post card\n stack(\n {\n gap: \"md\",\n className: \"flex flex-col overflow-hidden rounded-xl border shadow-sm transition-shadow hover:shadow-md\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n // Featured image\n link(\n {\n className: \"block overflow-hidden\",\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n {\n className: \"h-56 w-full object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content\n stack({ gap: \"sm\", className: \"flex-1 p-6\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"mt-2 text-base line-clamp-3\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { bind, inline, link, media, repeat, stack, text, when, button } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\nimport { borderColorStyle, textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const blogListStackFragment: FragmentDefinition = defineFragment({\n id: \"blogListStack\",\n title: \"Blog List Stack\",\n description: \"Vertical list layout for displaying blog posts with optional thumbnails.\",\n fields: [\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display thumbnail images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Vertical stack container\n stack({ gap: \"lg\", className: \"mx-auto max-w-3xl\" }, [\n // Individual post row\n inline(\n {\n gap: \"md\",\n className: \"items-start border-b pb-6 last:border-b-0\",\n style: borderColorStyle('neutral-200'),\n },\n [\n // Optional thumbnail (left-aligned)\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"flex-shrink-0\",\n },\n [\n media(\n {\n className: \"h-24 w-24 rounded-lg object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content (grows to fill space)\n stack({ gap: \"sm\", className: \"flex-1 min-w-0\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"text-sm line-clamp-2\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ]),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const faqHeadingFragment: FragmentDefinition = defineFragment({\n id: \"faqHeading\",\n title: \"FAQ Heading\",\n description: \"Optional eyebrow, title, and description for FAQ sections.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Short label displayed above the title.\",\n visibleRoles: [\"designer\", \"admin\"],\n maxLength: 60,\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: false,\n maxLength: 120,\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n required: false,\n ui: { variant: \"limited\" },\n },\n ],\n layout: stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl text-center mb-4\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"faq-eyebrow text-sm font-semibold uppercase tracking-wide\",\n style: textColorStyle('primary'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n className: \"faq-title\",\n style: textColorStyle('neutral-900'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className:\n \"faq-description prose mx-auto max-w-none text-base sm:text-lg\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.description\"),\n bind(\"content.description\"),\n ),\n ],\n ),\n});\n","import { accordionList } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\n\nexport const faqAccordionFragment: FragmentDefinition = defineFragment({\n id: \"faqAccordion\",\n title: \"FAQ Accordion\",\n description: \"Expandable list of question and answer pairs.\",\n fields: [\n {\n id: \"items\",\n type: \"repeater\",\n label: \"FAQ items\",\n itemLabel: \"FAQ item\",\n itemLabelSource: \"question\",\n minItems: 1,\n maxItems: 30,\n schema: {\n fields: [\n {\n id: \"question\",\n type: \"text\",\n label: \"Question\",\n required: true,\n maxLength: 160,\n },\n {\n id: \"answer\",\n type: \"richText\",\n label: \"Answer\",\n required: true,\n ui: { variant: \"limited\" },\n },\n ],\n },\n },\n ],\n layout: accordionList({\n collection: \"content.items\",\n itemName: \"faqItem\",\n indexName: \"faqIndex\",\n accordionProps: {\n className: \"accordion-root\", // CSS-first: all styling handled by theme CSS\n type: \"single\",\n collapsible: true,\n },\n itemProps: {\n className: \"accordion-item\",\n iconStyle: { $bind: { from: \"theme.accordions.icon.style\" } }, // Pass icon style from theme\n },\n triggerFrom: \"faqItem.question\",\n contentFrom: \"faqItem.answer\",\n }),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, text, richText, media, bind, when } from '../../node/builder';\nimport { createCtasRepeater } from '../../fields/ctas';\nimport { ctaRow } from '../../node/fragments/ctaRow';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Card fragment - flexible content card with title, body, optional media, and action buttons\n *\n * Features:\n * - Featured media (image/video) with configurable aspect ratio\n * - Title and rich text body\n * - Call-to-action buttons (0-3)\n * - Variant-based styling from theme (background, spacing, elevation, rounded corners)\n *\n * Card styling is managed through CSS generation at build-time (generateCardCss).\n * Each card uses:\n * - .card-{variant} - Container styles (background, border, shadow, radius)\n * - .card-media - Media corners matching container\n * - .card-content - Padding based on variant spacing\n *\n * This CSS-first approach eliminates runtime transforms for styling.\n */\nexport const cardFragment: FragmentDefinition = defineFragment({\n id: 'card',\n title: 'Card',\n description: 'Content card with optional media, title, body, and action buttons',\n category: 'content',\n icon: 'LayoutCard',\n fields: [\n {\n id: 'media',\n type: 'media',\n label: 'Featured media',\n description: 'Image or video displayed at top of card',\n required: false,\n mediaKinds: ['image', 'video'],\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Media aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n condition: {\n field: 'media',\n operator: 'isNotEmpty',\n },\n },\n {\n id: 'title',\n type: 'text',\n label: 'Title',\n required: true,\n maxLength: 120,\n },\n {\n id: 'body',\n type: 'richText',\n label: 'Body',\n description: 'Main card content',\n format: 'markdown',\n },\n createCtasRepeater({\n id: 'ctas',\n label: 'Action buttons',\n itemLabel: 'Button',\n minItems: 0,\n maxItems: 3,\n }),\n {\n id: 'variant',\n type: 'select',\n label: 'Card variant',\n description: 'Choose a card style from your theme',\n required: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n ],\n layout: stack(\n {\n gap: 'none',\n className: {\n $bind: {\n from: 'variant',\n fallback: 'default',\n },\n $prepend: 'card-',\n },\n },\n [\n // Featured media at top (conditional) - full width, no padding\n // CSS handles corner radius via .card-{variant} .card-media selector\n media(\n {\n className: 'card-media w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n when('media'),\n bind('media')\n ),\n // Content wrapper with padding based on variant\n // CSS handles padding via .card-{variant} .card-content selector\n stack(\n {\n gap: 'sm',\n className: 'card-content',\n },\n [\n text(\n {\n as: 'h3',\n className: 'card-title text-xl font-semibold',\n },\n bind('title'),\n ),\n richText(\n {\n className: 'card-body text-base',\n style: textColorStyle('mutedText'),\n },\n when('body'),\n bind('body'),\n ),\n // Action buttons at bottom (conditional)\n ctaRow({\n collectionPath: 'ctas',\n itemName: 'cta',\n gap: 'sm',\n justify: 'start',\n containerClassName: 'mt-2',\n }),\n ]\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { text, bind } from '../../node/builder';\n\n/**\n * Heading fragment - simple text heading with configurable level\n */\nexport const headingFragment: FragmentDefinition = defineFragment({\n id: 'heading',\n title: 'Heading',\n description: 'Text heading',\n category: 'content',\n icon: 'Heading',\n fields: [\n {\n id: 'text',\n type: 'text',\n label: 'Heading text',\n required: true,\n maxLength: 200,\n },\n {\n id: 'level',\n type: 'select',\n label: 'Heading level',\n defaultValue: 'h2',\n options: [\n { value: 'h1', label: 'H1 (Large)' },\n { value: 'h2', label: 'H2 (Medium)' },\n { value: 'h3', label: 'H3 (Small)' },\n ],\n },\n ],\n layout: text(\n {\n as: { $bind: { from: 'level' } }, // Relative path - resolves to current scope\n className: 'fragment-heading font-bold',\n },\n bind('text'), // Relative path - resolves to current scope\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { richText, bind } from '../../node/builder';\n\n/**\n * Rich text fragment - formatted text content\n */\nexport const richTextFragment: FragmentDefinition = defineFragment({\n id: 'richText',\n title: 'Rich Text',\n description: 'Formatted text with markdown',\n category: 'content',\n icon: 'FileText',\n fields: [\n {\n id: 'content',\n type: 'richText',\n label: 'Content',\n required: true,\n format: 'markdown',\n },\n ],\n layout: richText(\n {\n className: 'fragment-richtext prose prose-neutral',\n },\n bind('content'), // Relative path - resolves to current scope\n ),\n});\n","import type { FragmentDefinition } from '../types';\nimport type { RepeaterFieldDefinition } from '../../manifest/schema';\n\n/**\n * Converts a record of fragments into a polymorphic repeater field definition.\n * This allows fragments to be used in blocks via repeaters with type selection.\n *\n * @example\n * ```typescript\n * const field = fragmentsToRepeaterField(\n * 'items',\n * 'Column content',\n * {\n * card: cardFragment,\n * quote: quoteFragment,\n * stat: statFragment\n * },\n * { minItems: 0, maxItems: 50 }\n * );\n * ```\n */\nexport function fragmentsToRepeaterField(\n id: string,\n label: string,\n fragments: Record<string, FragmentDefinition>,\n options: {\n minItems?: number;\n maxItems?: number;\n itemLabel?: string;\n description?: string;\n allowConversion?: boolean;\n } = {}\n): RepeaterFieldDefinition {\n return {\n id,\n type: 'repeater',\n label,\n description: options.description,\n polymorphic: true,\n itemLabel: options.itemLabel ?? 'Item',\n itemLabelSource: '_type',\n minItems: options.minItems ?? 0,\n maxItems: options.maxItems,\n allowConversion: options.allowConversion ?? true,\n required: false,\n itemTypes: Object.fromEntries(\n Object.entries(fragments).map(([typeId, fragment]) => [\n typeId,\n {\n label: fragment.title ?? typeId,\n icon: fragment.icon,\n fields: fragment.fields\n }\n ])\n )\n };\n}\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, media, text, bind, when } from '../../node/builder';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Image fragment - single image with optional caption and aspect ratio control\n */\nexport const imageFragment: FragmentDefinition = defineFragment({\n id: 'image',\n title: 'Image',\n description: 'Image with optional caption',\n category: 'content',\n icon: 'Image',\n fields: [\n {\n id: 'image',\n type: 'media',\n label: 'Image',\n required: true,\n mediaKinds: ['image'],\n },\n {\n id: 'caption',\n type: 'text',\n label: 'Caption',\n required: false,\n maxLength: 200,\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n },\n ],\n layout: stack({ gap: 'sm' }, [\n media(\n {\n className: 'fragment-image w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n bind('image')\n ),\n text(\n {\n as: 'p',\n className: 'image-caption text-sm text-center',\n style: textColorStyle('mutedText'),\n },\n when('caption'),\n bind('caption')\n ),\n ]),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack } from '../../node/builder';\nimport { fragmentsToRepeaterField } from '../utils/toRepeaterSchema';\nimport { imageFragment } from './image';\nimport { headingFragment } from './heading';\nimport { richTextFragment } from './richText';\nimport { typeBasedLayout } from '../../node';\n\n/**\n * Column content fragment - represents a single column with nested items.\n * Each column can contain a flexible stack of images, headings, and rich text.\n */\nexport const columnContentFragment: FragmentDefinition = defineFragment({\n id: 'columnContent',\n title: 'Column',\n description: 'A single column with customizable content',\n category: 'layout',\n icon: 'RectangleVertical',\n fields: [\n fragmentsToRepeaterField(\n 'items',\n 'Column items',\n {\n image: imageFragment,\n heading: headingFragment,\n richText: richTextFragment,\n },\n {\n minItems: 0,\n maxItems: 20,\n itemLabel: 'Item',\n description: 'Add content to this column',\n }\n ),\n ],\n layout: stack(\n { gap: 'md', className: 'h-full' },\n [\n {\n type: 'stack',\n gap: 'md',\n children: typeBasedLayout(\n {\n image: imageFragment.layout,\n heading: headingFragment.layout,\n richText: richTextFragment.layout,\n },\n { itemName: 'item' }\n ),\n $repeat: {\n collection: { from: 'items' },\n itemName: 'item',\n },\n },\n ]\n ),\n});\n","/**\n * @file Defines constants for the background field, ensuring a single source of truth\n * for presets used in both the field definition and the style transforms.\n */\n\nexport const BACKGROUND_POSITION_PRESETS = [\n { value: 'center', label: 'Center' },\n { value: 'top', label: 'Top' },\n { value: 'top left', label: 'Top Left' },\n { value: 'top right', label: 'Top Right' },\n { value: 'bottom', label: 'Bottom' },\n { value: 'bottom left', label: 'Bottom Left' },\n { value: 'bottom right', label: 'Bottom Right' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n // The following are valid keywords but are not included in the UI to reduce clutter.\n // They are included here to ensure the transform logic can correctly identify them as presets.\n { value: 'top center', label: 'Top Center' },\n { value: 'bottom center', label: 'Bottom Center' },\n { value: 'left center', label: 'Left Center' },\n { value: 'right center', label: 'Right Center' },\n { value: 'left top', label: 'Left Top' },\n { value: 'right top', label: 'Right Top' },\n { value: 'left bottom', label: 'Left Bottom' },\n { value: 'right bottom', label: 'Right Bottom' },\n] as const;\n\nexport const BACKGROUND_POSITION_PRESET_VALUES = BACKGROUND_POSITION_PRESETS.map((p) => p.value);\n\n/**\n * Maps position keywords to Tailwind anchor positioning classes.\n * Used for positioning scaled/overflow images within their containers.\n *\n * The keys are normalized (lowercase, trimmed) position keywords.\n * The values are Tailwind classes for position + translation.\n */\nexport const POSITION_TO_ANCHOR_CLASSES: Record<string, string> = {\n 'center': 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2',\n 'top': 'left-1/2 top-0 -translate-x-1/2',\n 'top center': 'left-1/2 top-0 -translate-x-1/2',\n 'bottom': 'left-1/2 bottom-0 -translate-x-1/2',\n 'bottom center': 'left-1/2 bottom-0 -translate-x-1/2',\n 'left': 'left-0 top-1/2 -translate-y-1/2',\n 'left center': 'left-0 top-1/2 -translate-y-1/2',\n 'right': 'right-0 top-1/2 -translate-y-1/2',\n 'right center': 'right-0 top-1/2 -translate-y-1/2',\n 'top left': 'left-0 top-0',\n 'left top': 'left-0 top-0',\n 'top right': 'right-0 top-0',\n 'right top': 'right-0 top-0',\n 'bottom left': 'left-0 bottom-0',\n 'left bottom': 'left-0 bottom-0',\n 'bottom right': 'right-0 bottom-0',\n 'right bottom': 'right-0 bottom-0',\n};\n\n/** Default anchor classes when position is null or unrecognized */\nexport const DEFAULT_ANCHOR_CLASSES = 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2';\n\n/**\n * Gets Tailwind anchor positioning classes for a position keyword.\n * Used for positioning scaled/overflow background images.\n *\n * @param position - Position keyword (e.g., \"center\", \"top\", \"bottom left\") or null\n * @returns Tailwind classes for positioning and translation\n */\nexport function getAnchorClasses(position: string | null): string {\n if (!position) return DEFAULT_ANCHOR_CLASSES;\n const normalized = position.toLowerCase().trim();\n return POSITION_TO_ANCHOR_CLASSES[normalized] ?? DEFAULT_ANCHOR_CLASSES;\n}\n","import { BACKGROUND_POSITION_PRESETS } from '../constants/background';\nimport type { FieldDefinition, TabDefinition, TabGroupFieldDefinition } from '../manifest/schema'\n\ntype BackgroundFieldOptions = {\n id?: string\n label?: string\n allowColor?: boolean\n allowGradient?: boolean\n allowImage?: boolean\n includeAdvanced?: boolean\n}\n\n/**\n * Creates a TabGroupField for background configuration\n * with Color/Gradient/Image tabs and advanced image options\n */\nexport function createBackgroundField(options: BackgroundFieldOptions = {}): TabGroupFieldDefinition {\n const {\n id = 'background',\n label = 'Background',\n allowColor = true,\n allowGradient = true,\n allowImage = true,\n includeAdvanced = false,\n } = options\n\n const tabs: TabDefinition[] = []\n\n // Color tab\n if (allowColor) {\n tabs.push({\n id: 'color',\n label: 'Color',\n description: 'Solid color background using theme tokens or custom colors',\n sdkSectionOption: 'backgroundColor',\n fields: [\n {\n id: 'color',\n type: 'text' as const,\n label: 'Color',\n description: 'Select a background color from the available options.',\n required: false,\n multiline: false,\n ui: {\n // Use BackgroundColorWidget via widget override\n widget: 'backgroundColor',\n },\n },\n ],\n })\n }\n\n // Gradient tab\n if (allowGradient) {\n tabs.push({\n id: 'gradient',\n label: 'Gradient',\n description: 'CSS gradient background',\n sdkSectionOption: 'backgroundGradient',\n fields: [\n {\n id: 'gradient',\n type: 'text' as const,\n label: 'Gradient',\n description: 'CSS gradient value (e.g., linear-gradient(to right, #ff0000, #00ff00)).',\n required: false,\n multiline: true,\n ui: {\n placeholder: 'linear-gradient(to right, #ff0000, #00ff00)',\n },\n },\n ],\n })\n }\n\n // Image tab\n if (allowImage) {\n const imageFields: FieldDefinition[] = [\n {\n id: 'image',\n type: 'media' as const,\n label: 'Image',\n description: 'Background image file',\n mediaKinds: ['image'],\n required: false,\n },\n ]\n\n // Advanced image options\n if (includeAdvanced) {\n const objectFitField: FieldDefinition = {\n id: 'objectFit',\n type: 'select',\n label: 'Image Sizing',\n description: 'How the image should be sized and positioned.',\n required: false,\n multiple: false,\n options: [\n { value: 'fill', label: 'Fill (cover)' },\n { value: 'fit', label: 'Fit (contain)' },\n { value: 'original', label: 'Original size' },\n { value: 'custom', label: 'Scale up' },\n ],\n }\n\n const scaleField: FieldDefinition = {\n id: 'scale',\n type: 'presetOrCustom',\n label: 'Scale',\n description: 'Image scale amount.',\n required: false,\n ui: {\n visibleWhen: {\n field: 'objectFit',\n equals: 'custom',\n },\n },\n presets: [\n { value: '125', label: '125%' },\n { value: '150', label: '150%' },\n { value: '175', label: '175%' },\n { value: '200', label: '200%' },\n ],\n customInput: {\n placeholder: 'e.g., 800px, 50vw, 175%',\n helpText: 'Enter a custom size using %, px, vh, vw, rem, or em units',\n },\n }\n\n const positionField: FieldDefinition = {\n id: 'position',\n type: 'presetOrCustom',\n label: 'Position',\n description: 'Anchor point for the image. Relevant for \"Fill\" and \"Custom size\" options.',\n required: false,\n presets: [...BACKGROUND_POSITION_PRESETS],\n customInput: {\n placeholder: 'e.g., 25% 75%, top 20px left 50px',\n helpText: 'Enter a custom CSS background-position value',\n },\n }\n\n const opacityField: FieldDefinition = {\n id: 'opacity',\n type: 'number',\n label: 'Opacity',\n description: 'Image opacity (0-100).',\n required: false,\n ui: {\n min: 0,\n max: 100,\n step: 5,\n },\n }\n\n imageFields.push(\n objectFitField,\n scaleField,\n positionField,\n opacityField\n )\n }\n\n tabs.push({\n id: 'image',\n label: 'Image',\n description: includeAdvanced\n ? 'Background image with advanced controls'\n : 'Background image',\n sdkSectionOption: 'backgroundImage',\n fields: imageFields,\n })\n }\n\n return {\n id,\n type: 'tabGroup' as const,\n label,\n required: false,\n tabs,\n activeTabField: 'type',\n ui: {\n hideLabel: false,\n },\n } satisfies TabGroupFieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createBackgroundField } from './background'\n\n/**\n * Options for customizing a section styles field.\n */\ntype SectionStylesOptions = {\n /** Field ID (default: '_sectionStyles') */\n id?: string\n /** Field label (default: 'Section styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a container styles field.\n */\ntype ContainerStylesOptions = {\n /** Field ID (default: '_containerStyles') */\n id?: string\n /** Field label (default: 'Container styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a card styles field.\n */\ntype CardStylesOptions = {\n /** Field ID (default: '_cardStyles') */\n id?: string\n /** Field label (default: 'Card styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Internal discriminator for box style types.\n * @internal\n */\ntype BoxStyleType = 'container' | 'card'\n\n/**\n * Internal helper to create box styles with depth (container or card).\n *\n * Both containers and cards support:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow)\n * - Rounded corners (border radius)\n *\n * This function is used internally by `containerStylesField()` and `cardStylesField()`\n * to avoid code duplication while maintaining separate public APIs.\n *\n * @internal\n * @param type - Box style type discriminator ('container' or 'card')\n * @param options - Customization options passed from public field helpers\n * @returns A modal FieldDefinition with depth-specific fields\n */\nfunction createBoxStylesFieldWithDepth(\n type: BoxStyleType,\n options: ContainerStylesOptions | CardStylesOptions = {}\n): FieldDefinition {\n const defaults = {\n container: {\n id: '_containerStyles',\n label: 'Container styles',\n contextName: 'container',\n },\n card: {\n id: '_cardStyles',\n label: 'Card styles',\n contextName: 'card',\n },\n }\n\n const {\n id = defaults[type].id,\n label = defaults[type].label,\n includeBackground = true,\n } = options\n\n const contextName = defaults[type].contextName\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Horizontal + vertical spacing\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: `Padding for the ${contextName}.`,\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n // Raised toggle (applies theme shadow)\n fields.push({\n id: 'raised',\n type: 'boolean',\n label: 'Raised',\n description: `Add shadow depth to the ${contextName}.`,\n required: false,\n })\n\n // Rounded corners\n fields.push({\n id: 'rounded',\n type: 'select',\n label: 'Rounded corners',\n description: 'Border radius size.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n { value: 'xl', label: 'Extra Large' },\n { value: '2xl', label: 'Extra Extra Large' },\n { value: 'full', label: 'Fully Rounded' },\n ],\n })\n\n // Full-width toggle (only for containers, not cards)\n if (type === 'container') {\n fields.push({\n id: 'fullWidth',\n type: 'boolean',\n label: 'Full width',\n description: 'Extend content edge-to-edge (removes container max-width and all horizontal padding).',\n required: false,\n defaultValue: false,\n })\n }\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: `Configure background, spacing, elevation, and rounded corners for the ${contextName}.`,\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling full-width sections.\n *\n * Section styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (vertical padding)\n *\n * Sections are full-width wrappers that span the entire viewport, so they don't\n * support rounded corners or elevation shadows (unlike containers and cards).\n *\n * Use with the `backgroundLayer()` helper to render backgrounds in the block layout.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_sectionStyles')\n * @param options.label - Field label (default: 'Section styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * sectionStylesField({\n * id: '_sectionStyles',\n * label: 'Section styles',\n * }),\n * ]\n *\n * @example\n * // In the layout, use backgroundLayer() to render\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n *\n * @see {@link containerStylesField} for constrained-width containers with elevation\n * @see {@link cardStylesField} for repeater items with elevation\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function sectionStylesField(options: SectionStylesOptions = {}): FieldDefinition {\n const {\n id = '_sectionStyles',\n label = 'Section styles',\n includeBackground = true,\n } = options\n\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Vertical spacing (maps to theme spacing tokens)\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: 'Vertical padding for the section.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: 'Configure background and spacing for this section.',\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling constrained-width containers.\n *\n * Container styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Containers have constrained width (max-w-*) and are centered within their parent.\n * Use for content areas that need visual separation or elevation from the page background.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_containerStyles')\n * @param options.label - Field label (default: 'Container styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * containerStylesField({\n * id: '_containerStyles',\n * label: 'Container styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link cardStylesField} for repeater items with the same styling options\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function containerStylesField(options: ContainerStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('container', options)\n}\n\n/**\n * Creates a modal field group for styling individual cards in repeaters.\n *\n * Card styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Cards are used in repeaters (e.g., columns, grids, carousels) and have the same\n * styling options as containers. Each card instance can be styled independently.\n *\n * **Important:** When used in fragments (not blocks), the field ID must start with\n * a letter (e.g., 'styles', 'cardStyles') - do NOT use a leading underscore like '_cardStyles'.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_cardStyles' for blocks, 'styles' recommended for fragments)\n * @param options.label - Field label (default: 'Card styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block or fragment's fields array\n *\n * @example\n * // In a fragment (e.g., card.ts)\n * const cardFragment = defineFragment({\n * id: 'card',\n * fields: [\n * { id: 'title', type: 'text', label: 'Title' },\n * { id: 'body', type: 'richText', label: 'Body' },\n * cardStylesField({\n * id: 'styles', // No leading underscore for fragments!\n * label: 'Card styles',\n * }),\n * ],\n * layout: stack({ gap: 'md' }, [\n * text({ as: 'h3' }, bind('title')),\n * richText({}, bind('body')),\n * ]),\n * })\n *\n * @example\n * // In a block\n * const fields = [\n * // ... other fields\n * cardStylesField({\n * id: '_cardStyles', // Can use underscore in blocks\n * label: 'Card styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link containerStylesField} for constrained-width containers\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function cardStylesField(options: CardStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('card', options)\n}\n","import type { BlockManifest, BlockCategory, FieldDefinition, StyleTokenConfig, BehaviourConfig } from './manifest/schema';\nimport { fieldSchema } from './manifest/schema';\nimport type { NodeDefinition } from './node';\nimport { composeFragments, type FragmentDefinition } from './fragments';\nimport { sectionStylesField } from './fields/boxStyles';\nimport { augmentManifest } from './manifest/augmentManifest';\n\n/**\n * Configuration for defining a block using the defineBlock helper.\n * Provides smart defaults and handles fragment composition automatically.\n */\nexport type BlockConfig = {\n // Required fields\n /** Block identifier (e.g., 'block.hero') */\n id: string;\n /** Human-readable title (e.g., 'Hero') */\n title: string;\n /** Block category for organization */\n category: BlockCategory;\n\n // Fragment composition (auto-handles field assembly)\n /** Fragments to compose into this block */\n fragments?: Array<{\n fragment: FragmentDefinition;\n fieldPriority?: number;\n scope?: string;\n dataKey?: string;\n }>;\n\n // Layout definition\n /** Block layout (NodeDefinition or array) */\n layout: NodeDefinition | NodeDefinition[];\n\n // Optional: variants\n /** Layout variants (e.g., { classic: layout1, minimal: layout2 }) */\n variants?: Record<string, NodeDefinition>;\n /** Default variant key */\n defaultVariant?: string;\n\n // Optional: additional fields beyond fragments\n /** Additional fields to include (fragments are added automatically) */\n additionalFields?: FieldDefinition[];\n\n // Optional: skip section styles field\n /** If true, don't automatically add sectionStylesField */\n skipSectionStyles?: boolean;\n\n // Optional: overrides for defaults\n /** Block description */\n description?: string;\n /** Field ID to use as block title in lists (e.g., 'headline') */\n titleSource?: string;\n /** Component name (auto-derived from id if not provided) */\n component?: string;\n /** Search/filter tags */\n tags?: string[];\n /** Icon name (Lucide icon) */\n icon?: string;\n /** Style token mappings */\n styleTokens?: StyleTokenConfig;\n /** Behavior flags */\n behaviours?: BehaviourConfig;\n /** Hide from block picker palettes */\n paletteHidden?: boolean;\n /** Content types this block is compatible with */\n contentTypes?: string[];\n};\n\n/**\n * Create a block manifest with smart defaults and automatic fragment composition.\n *\n * This helper reduces block definition boilerplate by:\n * - Composing fragments and managing field priorities automatically\n * - Adding section styles field by default\n * - Providing sensible defaults for manifest properties\n * - Auto-deriving component names from block IDs\n * - Handling manifest augmentation (variant selector, etc.)\n *\n * @example\n * ```typescript\n * export const heroManifest = createBlockManifest({\n * id: 'block.hero',\n * title: 'Hero',\n * category: 'layout',\n * fragments: [\n * { fragment: heroCopyFragment, priority: 0 },\n * { fragment: ctaRowFragment, priority: 2 },\n * ],\n * layout: styledSection({\n * children: sectionContainer(nodes, { gap: 'md' }),\n * }),\n * tags: ['header', 'banner', 'landing'],\n * icon: 'Sparkles',\n * });\n * ```\n */\nexport function createBlockManifest(config: BlockConfig): BlockManifest {\n // 1. Compose fragments + section styles\n const composition = config.fragments ? composeFragments(config.fragments) : { fields: [], layout: [], data: [], scopes: [] };\n\n const allFields: FieldDefinition[] = [\n ...composition.fields,\n ...(config.additionalFields ?? []),\n ];\n\n // Add section styles field unless explicitly skipped\n // This allows users to customize section spacing and background via the editor.\n // Even when auto-added, blocks get sensible defaults via the transform's defaultSpacing option.\n // The pattern:\n // 1. Block defines layout with styledSection({ spacing: 'medium' })\n // 2. createBlockManifest auto-adds _sectionStyles field (unless skipSectionStyles: true)\n // 3. Transform uses defaultSpacing when _sectionStyles.spacing is undefined\n // 4. Users can override spacing via the editor if needed\n if (!config.skipSectionStyles) {\n allFields.push(\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n );\n }\n\n const fields = fieldSchema.array().parse(allFields);\n\n // 2. Build layout (with variants if provided)\n const layout = config.layout;\n const variants = config.variants;\n\n // 3. Build behaviours object (from explicit config or paletteHidden flag)\n let behaviours: BehaviourConfig | undefined = config.behaviours;\n if (!behaviours && config.paletteHidden !== undefined) {\n behaviours = {\n supportsThemeSwitching: true,\n inlineEditing: true,\n animation: true,\n paletteHidden: config.paletteHidden,\n };\n }\n\n // 4. Apply defaults and create manifest\n const manifest: BlockManifest = {\n name: config.id,\n version: '0.1.0',\n title: config.title,\n titleSource: config.titleSource,\n description: config.description ?? '',\n component: config.component ?? deriveComponentName(config.id),\n fields,\n slots: [], // Always empty\n styleTokens: config.styleTokens,\n behaviours,\n category: config.category,\n contentTypes: config.contentTypes,\n tags: config.tags ?? [],\n icon: config.icon ?? 'Box',\n layout,\n variants,\n defaultVariant: config.defaultVariant,\n };\n\n // 5. Augment manifest (adds variant selector field, etc.)\n return augmentManifest(manifest);\n}\n\n/**\n * Derive component name from block ID.\n *\n * Converts block IDs to component names by:\n * 1. Removing the 'block.' prefix\n * 2. Converting camelCase to dot.notation\n * 3. Adding '.default' suffix\n *\n * Examples:\n * - 'block.hero' → 'hero.default'\n * - 'block.ctaFull' → 'cta.full.default'\n * - 'block.siteHeader' → 'site.header.default'\n */\nfunction deriveComponentName(id: string): string {\n // Remove 'block.' prefix\n const base = id.replace(/^block\\./, '');\n\n // Convert camelCase to dot.separated\n // ctaFull → cta.full\n // siteHeader → site.header\n const dotSeparated = base\n .replace(/([a-z])([A-Z])/g, '$1.$2')\n .toLowerCase();\n\n // Always add .default suffix for consistency\n return `${dotSeparated}.default`;\n}\n","import type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n heroCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst heroCopyAndCta = composeFragments([\n { fragment: heroCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nconst heroContentNodes = heroCopyAndCta.layout;\n\n// Variant: Classic (centered, full padding - current default)\nconst classicLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"md\",\n className: \"text-center\",\n }),\n});\n\n// Variant: Micro (compact with reduced padding)\nconst microLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"sm\",\n className: \"text-center\",\n }),\n spacing: \"compact\",\n});\n\n/**\n * Shared split layout for both split and splitReverse variants.\n * Both variants use the same structure (two-column grid with text on left).\n * The background image is rendered as an absolute-positioned layer,\n * so there's no visual difference between split/splitReverse currently.\n */\nconst splitLayoutBase: NodeDefinition = styledSection({\n children: {\n type: \"grid\",\n cols: 1,\n colsSm: 2,\n gap: \"lg\",\n className: \"mx-auto max-w-7xl items-center\",\n children: [\n {\n type: \"stack\",\n gap: \"md\",\n className: \"text-left\",\n children: heroContentNodes,\n },\n ],\n },\n});\n\n// Variant: Split (two-column with text on left)\n// Note: Currently identical to splitReverse since media is absolute-positioned\nconst splitLayout: NodeDefinition = splitLayoutBase;\n\n// Variant: Split-reverse (two-column with text on left)\n// Note: Currently identical to split since media is absolute-positioned\nconst splitReverseLayout: NodeDefinition = splitLayoutBase;\n\nexport const heroManifest: BlockManifest = createBlockManifest({\n id: \"block.hero\",\n title: \"Hero\",\n titleSource: \"headline\",\n category: \"layout\",\n\n fragments: [\n { fragment: heroCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: classicLayout,\n\n variants: {\n classic: classicLayout,\n micro: microLayout,\n split: splitLayout,\n splitReverse: splitReverseLayout,\n },\n defaultVariant: \"classic\",\n\n description: \"Hero section with headline, subtitle, and repeatable CTAs.\",\n tags: [\"header\", \"banner\", \"landing\", \"introduction\", \"welcome\", \"splash\", \"headline\"],\n icon: \"Sparkles\",\n styleTokens: {\n typography: \"display\",\n spacing: \"xl\",\n },\n});\n\nexport type HeroManifest = typeof heroManifest;\n\nexport type HeroCta = {\n label: string;\n href: string;\n variant?: 'primary' | 'secondary' | 'outline';\n iconLeft?: Media | null;\n iconRight?: Media | null;\n};\n\nexport type HeroCtaInput = Partial<HeroCta>;\n\nexport type HeroContent = {\n eyebrow?: string;\n headline: string;\n subheadline?: string;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: HeroMedia | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: HeroCtaInput[];\n};\n\nexport type HeroMedia = Media;\n\nexport const heroBlockDefinition: SystemBlockDefinition<HeroContent> = {\n manifest: heroManifest,\n};\n","import type { BlockManifest } from \"../manifest\";\nimport type { TipTapNode } from \"../manifest/richTextSchema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { bodyCopyFragment, composeFragments } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);\n\nexport const bodyTextManifest: BlockManifest = createBlockManifest({\n id: \"block.bodyText\",\n title: \"Body Text\",\n titleSource: \"heading\",\n category: \"content\",\n component: \"body.text.basic\",\n\n fragments: [\n { fragment: bodyCopyFragment, fieldPriority: 0 },\n ],\n\n layout: styledSection({\n children: bodyCopyComposition.layout,\n spacing: \"medium\",\n }),\n\n description: \"Simple text block with optional heading and alignment controls.\",\n tags: [\"text\", \"paragraph\", \"content\", \"copy\", \"article\", \"writing\", \"rich-text\"],\n icon: \"Type\",\n styleTokens: {\n spacing: \"md\",\n },\n});\n\nexport type BodyTextManifest = typeof bodyTextManifest;\n\nexport type BodyTextAlignment = \"left\" | \"center\";\n\nexport type BodyTextContent = {\n heading?: string | null;\n body: TipTapNode;\n alignment?: BodyTextAlignment | null;\n};\n\nexport const bodyTextBlockDefinition: SystemBlockDefinition<BodyTextContent> = {\n manifest: bodyTextManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogFeaturedPostFragment,\n} from \"../fragments\";\n\nconst composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);\nconst fields = fieldSchema.array().parse(composition.fields);\n\nconst blogPostLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12\" },\n [...composition.layout],\n);\n\nexport const blogPostManifest: BlockManifest = {\n name: \"block.blogPost\",\n version: \"0.1.0\",\n title: \"Blog post\",\n description: \"Highlights a single blog post with title, image, and excerpt.\",\n component: \"blog.post.highlight\",\n fields,\n slots: [],\n styleTokens: {\n background: \"surface\",\n typography: \"body\",\n spacing: \"md\",\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: false,\n paletteHidden: false,\n },\n category: \"blog\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"post\", \"featured\", \"highlight\", \"article\", \"single\"],\n icon: \"FileText\",\n layout: blogPostLayout,\n};\n\nexport type BlogPostContent = {\n title?: string | null;\n postSlug?: string | null;\n};\n\nexport const blogPostDataSchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n path: z.string(),\n excerpt: z.string().nullable().optional(),\n image: z\n .object({\n url: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n })\n .nullable()\n .optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport type BlogPostData = z.infer<typeof blogPostDataSchema>;\n\n// Component is provided by the default factory; view model is purely content + loader data\n\nexport const blogPostBlockDefinition: SystemBlockDefinition<BlogPostContent> = {\n manifest: blogPostManifest,\n dataSchemas: { post: blogPostDataSchema.optional() },\n dataLoaders: buildFragmentDataLoaders(composition),\n};\n","import { fieldSchema } from '../manifest/schema'\nimport type { BlockManifest } from '../manifest'\nimport type { NodeDefinition } from '../node'\nimport { el, section, stack, text, bind, repeat, type NodeModifier } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from '../../theme/utils/colorStyles'\n\ntype BlogPlaceholderCard = {\n title: string\n summary: string\n}\n\nexport type BlogPlaceholderContent = {\n eyebrow?: string | null\n heading?: string | null\n description?: string | null\n cards?: BlogPlaceholderCard[]\n note?: string | null\n}\n\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('grid', props ?? undefined, children ?? undefined, ...mods)\n\nconst blogPlaceholderLayout: NodeDefinition = section(\n { background: 'surface', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n stack(\n { gap: 'sm', align: 'center', className: 'mx-auto max-w-3xl text-center' },\n [\n text(\n { as: 'p', className: 'text-sm font-semibold uppercase tracking-wide', style: textColorStyle('mutedText') },\n bind('content.eyebrow'),\n ),\n text(\n { as: 'h2', className: 'text-3xl font-semibold tracking-tight sm:text-4xl', style: textColorStyle('text') },\n bind('content.heading'),\n ),\n text(\n { className: 'text-base leading-relaxed', style: textColorStyle('mutedText') },\n bind('content.description'),\n ),\n ],\n ),\n grid(\n { className: 'mt-10 gap-6 sm:grid-cols-2 lg:grid-cols-3' },\n [\n stack(\n {\n gap: 'sm',\n className: 'rounded-xl border p-6 text-left shadow-sm',\n style: mergeStyles(borderColorStyle('border/60'), backgroundColorStyle('background')),\n },\n [\n text(\n { as: 'h3', className: 'text-lg font-semibold', style: textColorStyle('text') },\n bind('item.title'),\n ),\n text(\n { className: 'text-sm leading-relaxed', style: textColorStyle('mutedText') },\n bind('item.summary'),\n ),\n ],\n repeat('content.cards', 'item', { limit: 6 }),\n ),\n ],\n ),\n stack(\n { gap: 'xs', align: 'center', className: 'mt-10 text-center' },\n [\n text({ className: 'text-sm', style: textColorStyle('mutedText') }, bind('content.note')),\n ],\n ),\n ],\n)\n\nexport const blogPlaceholderManifest: BlockManifest = createBlockManifest({\n id: 'block.blogPlaceholder',\n title: 'Blog placeholder',\n category: 'blog',\n component: 'blog.placeholder',\n\n // Skip section styles - this block has custom layout with fixed styling\n skipSectionStyles: true,\n\n // Custom fields for blog placeholder content\n additionalFields: [\n fieldSchema.parse({\n id: 'eyebrow',\n type: 'text',\n label: 'Eyebrow',\n description: 'Short label displayed above the heading.',\n }),\n fieldSchema.parse({\n id: 'heading',\n type: 'text',\n label: 'Heading',\n required: true,\n }),\n fieldSchema.parse({\n id: 'description',\n type: 'text',\n label: 'Description',\n multiline: true,\n }),\n fieldSchema.parse({\n id: 'cards',\n type: 'repeater',\n label: 'Placeholder cards',\n itemLabel: 'Placeholder',\n schema: {\n fields: [\n { id: 'title', type: 'text', label: 'Title', required: true },\n { id: 'summary', type: 'text', label: 'Summary', multiline: true, required: true },\n ],\n },\n }),\n fieldSchema.parse({\n id: 'note',\n type: 'text',\n label: 'Footer note',\n description: 'Optional helper text displayed below the cards.',\n }),\n ],\n\n layout: blogPlaceholderLayout,\n\n description: 'Starter layout shown until real blog content replaces it.',\n styleTokens: {\n background: 'surface',\n spacing: 'lg',\n },\n paletteHidden: true,\n})\n\nexport const blogPlaceholderBlockDefinition: SystemBlockDefinition<BlogPlaceholderContent> = {\n manifest: blogPlaceholderManifest,\n}\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section, stack, text, bind, when } from \"../node/builder\";\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from \"../../theme/utils/colorStyles\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogListGridFragment,\n blogListStackFragment,\n} from \"../fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\n\n// Compose both layout fragments WITHOUT scopes\nconst gridComposition = composeFragments([{ fragment: blogListGridFragment }]);\nconst stackComposition = composeFragments([{ fragment: blogListStackFragment }]);\n\n// Build unified field list\n// Combine fields from both fragments, removing duplicates\nconst fragmentFields = [...gridComposition.fields, ...stackComposition.fields];\nconst uniqueFields = fragmentFields.filter((field, index, self) =>\n index === self.findIndex((f) => f.id === field.id)\n);\n\n// Build layout with conditional rendering\nconst blogListingLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12 sm:py-16 md:py-20\" }, // Semantic: medium + extra md padding\n [\n // Grid layout (conditionally shown)\n ...gridComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"grid\",\n },\n })),\n\n // Stack layout (conditionally shown)\n ...stackComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"stack\",\n },\n })),\n\n // Empty state (shown when no posts)\n stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl rounded-xl border border-dashed p-12 text-center\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n ),\n },\n [\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-500\") },\n bind(\"content.emptyMessage\", { fallback: \"No posts published yet.\" }),\n ),\n ],\n when(\"data.posts\", { not: true }),\n ),\n ],\n);\n\nexport const blogListingManifest: BlockManifest = createBlockManifest({\n id: \"block.blogListing\",\n title: \"Blog listing\",\n category: \"blog\",\n component: \"blog.listing\",\n\n // Skip section styles - this block has layout-specific fields instead\n skipSectionStyles: true,\n\n // Custom fields for blog listing configuration\n additionalFields: [\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Choose how blog posts are displayed.\",\n defaultValue: \"grid\",\n options: [\n { value: \"grid\", label: \"Grid (cards)\" },\n { value: \"stack\", label: \"Stack (vertical list)\" },\n ],\n }),\n // Grid-specific column field (only visible when layout is grid)\n ...gridComposition.fields\n .filter((f) => f.id === \"columns\")\n .map((f) => ({\n ...f,\n ui: {\n ...f.ui,\n visibleWhen: { field: \"layout\", equals: \"grid\" },\n },\n })),\n fieldSchema.parse({\n id: \"postsPerPage\",\n type: \"select\",\n label: \"Posts to display\",\n description: \"Number of posts to show on this page.\",\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 posts\" },\n { value: \"12\", label: \"12 posts\" },\n { value: \"24\", label: \"24 posts\" },\n { value: \"48\", label: \"48 posts\" },\n ],\n }),\n // Shared toggle fields from fragments (now unscoped)\n ...uniqueFields.filter((f) => ['showImages', 'showExcerpts', 'showDates'].includes(f.id)),\n fieldSchema.parse({\n id: \"readMoreText\",\n type: \"text\",\n label: \"Read more text\",\n description: \"Text for the read more button/link.\",\n defaultValue: \"Read more →\",\n maxLength: 40,\n }),\n fieldSchema.parse({\n id: \"readMoreVariant\",\n type: \"select\",\n label: \"Read more style\",\n description: \"Visual style for the read more button.\",\n defaultValue: \"link\",\n options: [\n { value: \"link\", label: \"Link (minimal)\" },\n { value: \"primary\", label: \"Primary button\" },\n { value: \"secondary\", label: \"Secondary button\" },\n { value: \"outline\", label: \"Outline button\" },\n ],\n }),\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no posts are available.\",\n defaultValue: \"No posts published yet.\",\n maxLength: 200,\n }),\n ],\n\n layout: blogListingLayout,\n\n description: \"Display a collection of blog posts in grid or stack layout.\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"posts\", \"articles\", \"news\", \"archive\", \"listing\", \"feed\", \"index\"],\n icon: \"Newspaper\",\n styleTokens: {\n background: \"surface\",\n spacing: \"lg\",\n },\n});\n\nexport type BlogListingContent = {\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n postsPerPage?: \"6\" | \"12\" | \"24\" | \"48\" | null;\n showImages?: boolean | null;\n showExcerpts?: boolean | null;\n showDates?: boolean | null;\n readMoreText?: string | null;\n readMoreVariant?: \"link\" | \"primary\" | \"secondary\" | \"outline\" | null;\n emptyMessage?: string | null;\n};\n\nexport type BlogPostListEntry = {\n id: string;\n slug: string;\n path: string;\n title: string;\n excerpt: string | null;\n publishedAt: string | null;\n updatedAt: string;\n status: string;\n image?: {\n url: string;\n alt?: string;\n } | null;\n};\n\nconst blogPostListEntrySchema = z.object({\n id: z.string(),\n slug: z.string(),\n path: z.string(),\n title: z.string(),\n excerpt: z.string().nullable().optional(),\n publishedAt: z.string().nullable().optional(),\n updatedAt: z.string(),\n status: z.string(),\n image: z\n .object({\n url: z.string(),\n alt: z.string().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const blogListingBlockDefinition: SystemBlockDefinition<BlogListingContent> = {\n manifest: blogListingManifest,\n dataSchemas: {\n posts: z.array(blogPostListEntrySchema).optional(),\n },\n dataLoaders: buildFragmentDataLoaders(gridComposition), // Use grid composition for loader config (same for both)\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n ctaCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst ctaComposition = composeFragments([\n { fragment: ctaCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nexport const ctaFullManifest: BlockManifest = createBlockManifest({\n id: \"block.ctaFull\",\n title: \"Full-width CTA\",\n category: \"marketing\",\n\n fragments: [\n { fragment: ctaCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: styledSection({\n children: sectionContainer(ctaComposition.layout, {\n gap: \"md\",\n className: \"relative text-center\",\n }),\n }),\n\n description: \"Centered call to action with optional background image.\",\n tags: [\"cta\", \"call-to-action\", \"button\", \"conversion\", \"action\", \"sign-up\", \"get-started\"],\n icon: \"Target\",\n});\n\nexport type CtaFullContent = {\n eyebrow?: string | null;\n title: string;\n content?: unknown;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: Media | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: Array<{ label?: string | null; href?: string | null }>;\n};\n\nexport const ctaFullBlockDefinition: SystemBlockDefinition<CtaFullContent> = {\n manifest: ctaFullManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport { sectionContainer } from \"../node/fragments\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n formCopyFragment,\n formEmbedFragment,\n} from \"../fragments\";\n\nconst formComposition = composeFragments([\n { fragment: formCopyFragment },\n { fragment: formEmbedFragment },\n]);\n\nconst formLayout: NodeDefinition = section(\n { background: \"surface\", className: \"px-6 py-12\" },\n [sectionContainer(formComposition.layout, { gap: \"lg\" })],\n);\n\nconst fields = fieldSchema.array().parse(formComposition.fields);\nconst dataLoaders = buildFragmentDataLoaders(formComposition);\n\nexport const formManifest: BlockManifest = {\n name: \"block.form\",\n version: \"0.1.0\",\n title: \"Form\",\n titleSource: \"title\",\n description: \"Renders a saved form definition with server-side submit.\",\n component: \"form.block\",\n fields,\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"form\", \"contact\", \"input\", \"submit\", \"fields\", \"signup\", \"lead-capture\"],\n icon: \"FormInput\",\n layout: formLayout,\n};\n\n/**\n * Rich text document structure (ProseMirror format)\n */\nexport type RichTextDoc = {\n type: 'doc';\n content?: Array<{\n type: string;\n content?: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n [key: string]: unknown;\n }>;\n};\n\nexport type FormBlockContent = {\n title?: string | null;\n intro?: RichTextDoc | null;\n formId: string;\n submitLabel?: string | null;\n successMessage?: string | null;\n};\n\nexport const formDataSchema = z.object({\n id: z.string(),\n siteId: z.string(),\n userId: z.string(),\n name: z.string(),\n slug: z.string(),\n schemaJson: z.any(),\n settingsJson: z.any().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type FormData = z.infer<typeof formDataSchema>;\n\nexport const formBlockDefinition: SystemBlockDefinition<FormBlockContent> = {\n manifest: formManifest,\n dataSchemas: { form: formDataSchema.optional() },\n dataLoaders,\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { composeFragments, faqHeadingFragment, faqAccordionFragment } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst faqComposition = composeFragments([\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n]);\n\nexport const faqManifest: BlockManifest = createBlockManifest({\n id: \"block.faq\",\n title: \"FAQ\",\n titleSource: \"title\",\n category: \"content\",\n\n fragments: [\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n ],\n\n layout: styledSection({\n children: sectionContainer(faqComposition.layout, {\n gap: \"xl\",\n className: \"w-full\",\n }),\n }),\n\n description: \"Accordion of frequently asked questions and answers.\",\n tags: [\"faq\", \"questions\", \"answers\", \"help\", \"support\", \"accordion\", \"q&a\"],\n icon: \"HelpCircle\",\n});\n\nexport type FaqItem = {\n question: string;\n answer: unknown;\n};\n\nexport type FaqContent = {\n eyebrow?: string | null;\n title?: string | null;\n description?: unknown;\n items?: FaqItem[] | null;\n};\n\nexport const faqBlockDefinition: SystemBlockDefinition<FaqContent> = {\n manifest: faqManifest,\n};\n","import { z } from \"zod\";\nimport type { TransformDefinition } from \"./core\";\n\nexport const uppercaseTransform: TransformDefinition = {\n id: \"string.uppercase\",\n kind: \"string\",\n summary: \"Uppercase text\",\n run: (value) => (typeof value === \"string\" ? value.toUpperCase() : value),\n};\n\nexport const fallbackTransform: TransformDefinition<{ fallback: unknown }> = {\n id: \"value.fallback\",\n kind: \"formatter\",\n summary: \"Provide fallback when value is null or undefined\",\n schema: z.object({ fallback: z.unknown() }),\n run: (value, options) => (value === null || value === undefined || value === \"\" ? options.fallback : value),\n};\n\nexport const dateFormatShort: TransformDefinition = {\n id: \"date.formatShort\",\n kind: \"formatter\",\n summary: \"Format ISO date string into short human-readable label\",\n run: (value) => {\n if (typeof value !== \"string\" || !value) return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n try {\n return new Intl.DateTimeFormat(undefined, { month: \"short\", day: \"numeric\", year: \"numeric\" }).format(date);\n } catch {\n return null;\n }\n },\n};\n\nexport const arrayLengthTransform: TransformDefinition = {\n id: \"array.length\",\n kind: \"formatter\",\n summary: \"Get the length of an array\",\n run: (value) => (Array.isArray(value) ? value.length : 0),\n};\n\nexport const formattingTransforms = [\n uppercaseTransform,\n fallbackTransform,\n dateFormatShort,\n arrayLengthTransform,\n] satisfies ReadonlyArray<TransformDefinition<any>>;\n","import { z } from \"zod\";\nimport type { TransformDefinition } from \"./core\";\nimport type {\n HeaderNavStyle,\n ThemeHeader,\n} from \"../../../theme/schema\";\n\nconst joinClasses = (parts: Array<string | null | undefined>) =>\n parts\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\n/**\n * Get nav link classes based on nav style\n * Simplified version that reads navStyle enum from theme\n */\nfunction getNavStyleClasses(navStyle: HeaderNavStyle): string {\n const baseClasses = 'inline-flex items-center gap-2 px-3 py-2 transition-colors'\n\n switch (navStyle) {\n case 'minimal':\n return baseClasses\n\n case 'underline':\n return `${baseClasses} hover:underline underline-offset-4 data-[active=true]:underline data-[active=true]:underline-offset-4`\n\n case 'underline-grow':\n return `${baseClasses} nav-underline-grow nav-underline-active`\n\n case 'capsule':\n return `inline-flex items-center gap-2 transition-colors rounded-full px-3 py-1.5`\n\n case 'scale':\n return `${baseClasses} transform-gpu will-change-transform motion-safe:hover:scale-105`\n\n case 'frosted':\n return `inline-flex items-center gap-2 transition-colors rounded-lg px-3 py-1.5`\n\n case 'solid':\n return `${baseClasses} rounded-none`\n\n default:\n return baseClasses\n }\n}\n\nconst headerNavClassOptionsSchema = z.object({\n base: z.string().optional(),\n});\n\nexport const headerNavLinkClassTransform: TransformDefinition<z.infer<typeof headerNavClassOptionsSchema>> = {\n id: \"ui.headerNavLinkClass\",\n kind: \"string\",\n summary: \"Compose header navigation link classes from theme navStyle\",\n schema: headerNavClassOptionsSchema,\n run: (value, options) => {\n // Extract header from value if it's an object with header property\n const header = value && typeof value === 'object' && 'navStyle' in (value as Record<string, unknown>)\n ? (value as Partial<ThemeHeader>)\n : undefined\n\n // Get nav style from header or default to 'minimal'\n const navStyle = header?.navStyle ?? 'minimal'\n\n // Get base classes from nav style\n const styleClasses = getNavStyleClasses(navStyle)\n\n return joinClasses([styleClasses, options?.base])\n },\n};\n\nexport const headingClassFromAlignment: TransformDefinition<{ base: string }> = {\n id: \"ui.headingClassFromAlignment\",\n kind: \"string\",\n summary: \"Append text alignment class to a base heading class\",\n run: (value, options) => {\n const align = typeof value === \"string\" && value === \"center\" ? \"center\" : \"left\";\n const alignClass = align === \"center\" ? \"text-center\" : \"text-left\";\n return `${options.base} ${alignClass}`.trim();\n },\n};\n\nexport const bodyClassFromAlignment: TransformDefinition<{ base: string }> = {\n id: \"ui.bodyClassFromAlignment\",\n kind: \"string\",\n summary: \"Append body alignment helper classes to a base class\",\n run: (value, options) => {\n const align = typeof value === \"string\" && value === \"center\" ? \"center\" : \"left\";\n const extra = align === \"center\" ? \"mx-auto text-center\" : \"\";\n return `${options.base} ${extra}`.trim();\n },\n};\n\nexport const stackAlignFromAlignment: TransformDefinition = {\n id: \"ui.stackAlignFromAlignment\",\n kind: \"string\",\n summary: \"Map text alignment to stack alignment value\",\n run: (value) => (value === \"center\" ? \"center\" : \"start\"),\n};\n\nconst conditionalClassOptionsSchema = z.object({\n whenTrue: z.string(),\n whenFalse: z.string(),\n});\n\nexport const conditionalClassTransform: TransformDefinition<z.infer<typeof conditionalClassOptionsSchema>> = {\n id: \"ui.conditionalClass\",\n kind: \"string\",\n summary: \"Return different classes based on boolean value\",\n schema: conditionalClassOptionsSchema,\n run: (value, options) => {\n const isTrue = typeof value === 'boolean' ? value : Boolean(value);\n return isTrue ? options.whenTrue : options.whenFalse;\n },\n};\n\nexport const uiTransforms = [\n headerNavLinkClassTransform,\n headingClassFromAlignment,\n bodyClassFromAlignment,\n stackAlignFromAlignment,\n conditionalClassTransform,\n] satisfies ReadonlyArray<TransformDefinition<any>>;\n","import { z } from \"zod\";\nimport { featuresFromHex } from \"../../../theme/palette/utils/colorConversion\";\nimport type { ThemeFooter, ThemeHeader } from \"../../../theme/schema\";\nimport type { ThemeTokens } from \"../../theme\";\nimport type { TransformDefinition } from \"./core\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\nconst joinClasses = (parts: Array<string | null | undefined>) =>\n parts\n .filter((part): part is string => typeof part === \"string\" && part.trim().length > 0)\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\nconst maxWidthClassSchema = z.object({\n base: z.string().optional(),\n container: z.string().optional(),\n full: z.string().optional(),\n});\n\nexport const maxWidthClassTransform: TransformDefinition<z.infer<typeof maxWidthClassSchema>> = {\n id: \"layout.maxWidthClass\",\n kind: \"string\",\n summary: \"Resolve layout container width classes for site chrome blocks\",\n schema: maxWidthClassSchema,\n run: (value, options) => {\n const base = options.base ?? \"\";\n const variant = typeof value === \"string\" && value === \"full\" ? \"full\" : \"container\";\n const container = options.container ?? \"container mx-auto px-6\";\n const full = options.full ?? \"w-full px-6\";\n const chosen = variant === \"full\" ? full : container;\n return joinClasses([base, chosen]);\n },\n};\n\nconst headerRootClassSchema = z.object({\n base: z.string().optional(),\n sticky: z.string().optional(),\n stickyTransparent: z.string().optional(),\n invert: z.string().optional(),\n});\n\ntype HeaderRootOptions = z.infer<typeof headerRootClassSchema>;\n\nexport type HeaderVisualStyles = ReturnType<typeof resolveHeaderVisualStyles>;\n\nexport function resolveBackgroundVisualStyles(\n backgroundColor: string | undefined,\n tokens: ThemeTokens,\n defaultToken = \"surface\"\n) {\n const backgroundToken =\n typeof backgroundColor === \"string\" && backgroundColor.trim().length > 0\n ? backgroundColor\n : defaultToken;\n\n if (backgroundToken === \"transparent\") {\n return {\n backgroundToken,\n paletteHex: null as string | null,\n backgroundHex: null as string | null,\n isBackgroundDark: false,\n textColorToken: \"text\" as const,\n textColorOverride: null as string | null,\n isTransparent: true,\n };\n }\n\n const paletteHex = tokens.palette[backgroundToken];\n const fallbackHex =\n paletteHex ??\n tokens.palette.surface ??\n tokens.color[\"surface/base\"] ??\n tokens.color[\"background/base\"] ??\n \"#ffffff\";\n\n const baseBackgroundHex =\n tokens.color[\"background/base\"] ??\n tokens.palette.surface ??\n tokens.color[\"surface/base\"] ??\n \"#ffffff\";\n\n const backgroundTone = detectTone(fallbackHex);\n const baseTone = detectTone(baseBackgroundHex);\n\n const needsContrast = Boolean(backgroundTone && baseTone && backgroundTone !== baseTone);\n const textColorOverride = needsContrast\n ? backgroundTone === \"dark\"\n ? \"#ffffff\"\n : \"#000000\"\n : null;\n\n return {\n backgroundToken,\n paletteHex,\n backgroundHex: fallbackHex,\n isBackgroundDark: backgroundTone === \"dark\",\n textColorToken: needsContrast ? undefined : (\"text\" as const),\n textColorOverride,\n isTransparent: false,\n };\n}\n\nexport function resolveHeaderVisualStyles(\n header: Partial<ThemeHeader> | undefined,\n tokens: ThemeTokens\n) {\n const navContainerType = header?.navContainer?.type ?? 'none';\n const hasContainedNav = navContainerType === 'glass' || navContainerType === 'pill';\n\n if (hasContainedNav) {\n return {\n backgroundToken: 'transparent',\n paletteHex: null,\n backgroundHex: null,\n isBackgroundDark: false,\n textColorToken: 'text' as const,\n textColorOverride: null,\n isTransparent: true,\n } as const;\n }\n\n const background = header?.background;\n\n // Extract color token from background object\n let colorToken: string | undefined;\n if (!background || background.type === 'color') {\n colorToken = background?.color ?? 'surface';\n } else if (background.type === 'gradient' && background.gradient) {\n // For gradients, use first stop color for contrast calculation\n colorToken = background.gradient.stops[0]?.color ?? 'surface';\n } else if (background.type === 'image') {\n // For images, use a neutral default for contrast calculation\n colorToken = 'neutral-900'; // Assume dark background for images\n }\n\n const visuals = resolveBackgroundVisualStyles(colorToken, tokens);\n\n return visuals;\n}\n\nfunction detectTone(hex: string | null): \"light\" | \"dark\" | null {\n if (!hex) return null;\n try {\n return featuresFromHex(hex).Y < 0.5 ? \"dark\" : \"light\";\n } catch {\n return null;\n }\n}\n\nexport const headerRootClassTransform: TransformDefinition<HeaderRootOptions> = {\n id: \"layout.headerRootClass\",\n kind: \"string\",\n summary: \"Compose header root classes from positioning and shrink options\",\n schema: headerRootClassSchema,\n run: (value, options, context) => {\n const config = {\n base: \"z-40 w-full transition-theme\",\n baseWithBorder: \"z-40 w-full border-b transition-theme\",\n sticky: \"sticky top-0 shadow-sm\",\n stickyTransparent: \"sticky top-0\",\n fixed: \"fixed top-0 left-0 right-0\",\n shrink: \"transition-all duration-300 h-24 py-6 [&.header-scrolled]:h-16 [&.header-scrolled]:py-3\",\n blur: \"backdrop-blur\",\n blurSupport: \"supports-[backdrop-filter]:backdrop-blur\",\n ...options,\n };\n\n const content = value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n const positioning = typeof content.positioning === \"string\" ? content.positioning : \"static\";\n const shrinkOnScroll = Boolean((content as any).shrinkOnScroll);\n const header = value && typeof value === \"object\" ? (value as Partial<ThemeHeader>) : undefined;\n const visuals = resolveHeaderVisualStyles(header, context.theme);\n const navContainerType = header?.navContainer?.type ?? 'none';\n const hasContainedNav = navContainerType === 'glass' || navContainerType === 'pill';\n const backgroundClass = visuals.isTransparent || hasContainedNav ? 'bg-transparent' : null;\n\n const classes = [\n // Use base without border for transparent shells or when nav container handles visuals\n visuals.isTransparent || hasContainedNav ? config.base : config.baseWithBorder,\n backgroundClass,\n ];\n\n if (!hasContainedNav) {\n classes.push(config.blur);\n classes.push(config.blurSupport);\n }\n\n // Add positioning classes\n if (positioning === \"sticky\") {\n classes.push(visuals.isTransparent ? config.stickyTransparent : config.sticky);\n } else if (positioning === \"fixed\") {\n classes.push(config.fixed);\n }\n\n // Add shrink classes if enabled and positioning is sticky or fixed\n if (shrinkOnScroll && (positioning === \"sticky\" || positioning === \"fixed\")) {\n classes.push(config.shrink);\n }\n\n return joinClasses(classes);\n },\n};\n\nconst footerRootClassSchema = z.object({\n base: z.string().optional(),\n surface: z.string().optional(),\n tokenPrefix: z.string().optional(),\n transparent: z.string().optional(),\n});\n\nexport const footerRootClassTransform: TransformDefinition<z.infer<typeof footerRootClassSchema>> = {\n id: \"layout.footerRootClass\",\n kind: \"string\",\n summary: \"Compose footer root classes with optional inversion\",\n schema: footerRootClassSchema,\n run: (value, options, context) => {\n const config = {\n base: \"w-full border-t transition-theme\",\n transparent: \"bg-transparent\",\n ...options,\n };\n const footer = value && typeof value === \"object\" ? (value as Partial<ThemeFooter>) : undefined;\n const background = footer?.background;\n const colorToken = extractBackgroundColorToken(background, 'surface');\n\n const visuals = resolveBackgroundVisualStyles(colorToken, context.theme);\n const backgroundClass = visuals.isTransparent ? config.transparent : null;\n\n return joinClasses([config.base, backgroundClass]);\n },\n};\n\nexport const headerRootStyleTransform: TransformDefinition = {\n id: \"layout.headerRootStyle\",\n kind: \"formatter\",\n summary: \"Compose header root inline styles for dynamic colors\",\n run: (value, _options, context) => {\n const header = value && typeof value === \"object\" ? (value as Partial<ThemeHeader>) : undefined;\n const navContainerType = header?.navContainer?.type ?? 'none';\n const hasContainedNav = navContainerType === 'glass' || navContainerType === 'pill';\n const background = header?.background;\n const colorToken = extractBackgroundColorToken(background, 'surface');\n const visuals = resolveBackgroundVisualStyles(colorToken, context.theme);\n\n const styleParts = [];\n\n if (!hasContainedNav && !visuals.isTransparent) {\n if (!background || background.type === 'color') {\n const token = background?.color ?? 'surface/95';\n styleParts.push(backgroundColorStyle(token));\n }\n }\n\n if (visuals.textColorOverride) {\n styleParts.push({ color: visuals.textColorOverride });\n } else if (visuals.textColorToken) {\n styleParts.push(textColorStyle(visuals.textColorToken));\n }\n\n const borderColorToken = header?.border?.color ?? 'border';\n styleParts.push(borderColorStyle(borderColorToken));\n\n return mergeStyles(...styleParts);\n },\n};\n\nexport const footerRootStyleTransform: TransformDefinition = {\n id: \"layout.footerRootStyle\",\n kind: \"formatter\",\n summary: \"Compose footer root inline styles for dynamic colors\",\n run: (value, _options, context) => {\n const footer = value && typeof value === \"object\" ? (value as Partial<ThemeFooter>) : undefined;\n const background = footer?.background;\n const colorToken = extractBackgroundColorToken(background, 'surface');\n const visuals = resolveBackgroundVisualStyles(colorToken, context.theme);\n\n const styleParts = [];\n\n if (!visuals.isTransparent) {\n if (!background || background.type === 'color') {\n const token = background?.color ?? 'surface';\n styleParts.push(backgroundColorStyle(token));\n }\n }\n\n if (visuals.textColorOverride) {\n styleParts.push({ color: visuals.textColorOverride });\n } else if (visuals.textColorToken) {\n styleParts.push(textColorStyle(visuals.textColorToken));\n }\n\n styleParts.push(borderColorStyle('border'));\n\n return mergeStyles(...styleParts);\n },\n};\n\nfunction extractBackgroundColorToken(\n background: ThemeHeader[\"background\"] | ThemeFooter[\"background\"] | undefined,\n fallback: string\n) {\n if (!background || background.type === 'color') {\n return background?.color ?? fallback;\n }\n if (background.type === 'gradient' && background.gradient) {\n return background.gradient.stops[0]?.color ?? fallback;\n }\n if (background.type === 'image') {\n return 'neutral-900';\n }\n return fallback;\n}\n\nexport const layoutTransforms = [\n maxWidthClassTransform,\n headerRootClassTransform,\n footerRootClassTransform,\n headerRootStyleTransform,\n footerRootStyleTransform,\n] satisfies ReadonlyArray<TransformDefinition<any>>;\n","/* ============================================================================\n * Color conversion utilities - OKLCH, RGB, HSL, HEX\n * ========================================================================== */\n\n// Basic math utilities\nexport const clamp01 = (x: number) => Math.max(0, Math.min(1, x));\nexport const mod = (a: number, n: number) => ((a % n) + n) % n;\nexport const deg = (x: number) => mod(x, 360);\nexport const mix = (a: number, b: number, t: number) => a + (b - a) * clamp01(t);\n\n// sRGB & HEX helpers\nexport function hexToRgb(hex: string) {\n const h = hex.replace(/^#/, \"\");\n const m = h.length === 3 ? h.split(\"\").map(c => c + c).join(\"\") : h;\n if (m.length !== 6) throw new Error(\"Bad hex\");\n const int = parseInt(m, 16);\n return { r: (int >> 16) & 255, g: (int >> 8) & 255, b: int & 255 };\n}\n\nexport function rgbToHex(r: number, g: number, b: number) {\n const to = (n: number) => Math.round(n).toString(16).padStart(2, \"0\");\n return `#${to(r)}${to(g)}${to(b)}`;\n}\n\nexport function srgbToLinear(u: number) {\n const x = u / 255; \n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nexport function linearToSrgb(x: number) {\n const y = x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055; \n return clamp01(y) * 255;\n}\n\n// HSL helpers\nexport function rgbToHsl(r: number, g: number, b: number) {\n const R = r / 255, G = g / 255, B = b / 255;\n const max = Math.max(R, G, B), min = Math.min(R, G, B);\n const d = max - min; \n let h = 0;\n if (d !== 0) {\n switch (max) { \n case R: h = ((G - B) / d + (G < B ? 6 : 0)); break; \n case G: h = (B - R) / d + 2; break; \n case B: h = (R - G) / d + 4; break; \n }\n h *= 60;\n }\n const l = (max + min) / 2; \n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));\n return { h, s, l };\n}\n\n// OKLab / OKLCH conversion\nexport function srgbToOklab(r: number, g: number, b: number) {\n const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);\n const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;\n const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;\n const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;\n const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);\n const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\n const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\n const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\n return { L, a, b: b2 };\n}\n\nexport function oklabToSrgb(L: number, a: number, b: number) {\n const l_ = Math.pow(L + 0.3963377774 * a + 0.2158037573 * b, 3);\n const m_ = Math.pow(L - 0.1055613458 * a - 0.0638541728 * b, 3);\n const s_ = Math.pow(L - 0.0894841775 * a - 1.2914855480 * b, 3);\n const R = +4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_;\n const G = -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_;\n const B = -0.0041960863 * l_ - 0.7034186147 * m_ + 1.7076147010 * s_;\n return { r: linearToSrgb(R), g: linearToSrgb(G), b: linearToSrgb(B) };\n}\n\nexport function oklabToOklch(L: number, a: number, b: number) {\n const C = Math.sqrt(a * a + b * b);\n const h = C < 1e-7 ? 0 : deg((Math.atan2(b, a) * 180) / Math.PI);\n return { L, C, h };\n}\n\nexport function oklchToOklab(L: number, C: number, h: number) {\n const hr = (h * Math.PI) / 180; \n const a = C * Math.cos(hr); \n const b = C * Math.sin(hr); \n return { L, a, b };\n}\n\nexport function inSRGB(r: number, g: number, b: number) { \n return r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255; \n}\n\nexport function oklchToHexGamut(L: number, C: number, h: number): string {\n let lo = 0, hi = C, best = 0;\n for (let i = 0; i < 18; i++) {\n const mid = (lo + hi) / 2; \n const { a, b } = oklchToOklab(L, mid, h); \n const { r, g, b: bb } = oklabToSrgb(L, a, b);\n if (inSRGB(r, g, bb)) { \n best = mid; \n lo = mid; \n } else { \n hi = mid; \n }\n }\n const { a, b } = oklchToOklab(L, best, h); \n const { r, g, b: bb } = oklabToSrgb(L, a, b);\n return rgbToHex(r, g, bb);\n}\n\n// Color feature extraction from hex\nexport function featuresFromHex(hex: string) {\n const { r, g, b } = hexToRgb(hex);\n const { h, s, l } = rgbToHsl(r, g, b);\n const { L, a, b: b2 } = srgbToOklab(r, g, b);\n const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);\n const max = Math.max(r, g, b);\n const v = max / 255;\n const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);\n const chroma = s;\n return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };\n}\n\n// Color manipulation helpers\nexport function hueRotate(h: number, degrees: number) {\n return deg(h + degrees);\n}\n\nexport function setTone(L: number, target: number) {\n return clamp01(target);\n}\n","import type { TransformDefinition } from \"./core\";\n\nexport const mediaFromUrl: TransformDefinition = {\n id: \"media.fromUrl\",\n kind: \"formatter\",\n summary: \"Convert {url, alt} into Media image\",\n run: (value) => {\n if (!value || typeof value !== \"object\") return null;\n const url = (value as any).url;\n const alt = (value as any).alt;\n if (typeof url !== \"string\" || url.trim() === \"\") return null;\n return { type: \"image\", src: url, alt: typeof alt === \"string\" ? alt : \"\" };\n },\n};\n\nexport const mediaTransforms = [mediaFromUrl] satisfies ReadonlyArray<TransformDefinition<any>>;\n","import type { TransformDefinition } from \"./registry/core\";\nimport { uppercaseTransform, fallbackTransform, dateFormatShort } from \"./registry/formatting\";\nimport {\n headerNavLinkClassTransform,\n headingClassFromAlignment,\n bodyClassFromAlignment,\n stackAlignFromAlignment,\n conditionalClassTransform,\n} from \"./registry/ui\";\nimport {\n maxWidthClassTransform,\n headerRootClassTransform,\n footerRootClassTransform,\n headerRootStyleTransform,\n footerRootStyleTransform,\n} from \"./registry/layout\";\nimport { mediaFromUrl } from \"./registry/media\";\n\n// Canonical map of built-in transforms. Keys are the literal IDs.\n// Note: ui.buttonClass removed - styling now handled by CSS generation at build time\nexport const transformDefinitions = {\n \"string.uppercase\": uppercaseTransform,\n \"value.fallback\": fallbackTransform,\n \"ui.headerNavLinkClass\": headerNavLinkClassTransform,\n \"layout.maxWidthClass\": maxWidthClassTransform,\n \"layout.headerRootClass\": headerRootClassTransform,\n \"layout.footerRootClass\": footerRootClassTransform,\n \"layout.headerRootStyle\": headerRootStyleTransform,\n \"layout.footerRootStyle\": footerRootStyleTransform,\n \"ui.headingClassFromAlignment\": headingClassFromAlignment,\n \"ui.bodyClassFromAlignment\": bodyClassFromAlignment,\n \"ui.stackAlignFromAlignment\": stackAlignFromAlignment,\n \"ui.conditionalClass\": conditionalClassTransform,\n \"media.fromUrl\": mediaFromUrl,\n \"date.formatShort\": dateFormatShort,\n} as const;\n\nexport type TransformId = keyof typeof transformDefinitions;\n\ntype OptionsOf<T> = T extends TransformDefinition<infer O> ? O : never;\n\nexport type TransformOptionsById = {\n [K in TransformId]: OptionsOf<(typeof transformDefinitions)[K]>;\n};\n\nexport type TransformStep<K extends TransformId = TransformId> = {\n id: K;\n options?: TransformOptionsById[K];\n};\n\n// Convenience helpers for declaring transform pipelines in a type‑safe way.\nexport function tx<K extends TransformId>(id: K, options?: TransformOptionsById[K]): TransformStep<K> {\n return { id, options };\n}\n\nexport function pipe<T extends readonly TransformStep[]>(...steps: T): T {\n return steps;\n}\n\nexport function bindProp(\n from: string,\n opts?: { transforms?: readonly TransformStep[] | TransformStep[]; fallback?: unknown; pick?: \"value\" | \"collection\" | \"context\" }\n) {\n return {\n $bind: {\n from,\n ...(opts?.transforms ? { transforms: [...opts.transforms] } : {}),\n ...(opts?.fallback !== undefined ? { fallback: opts.fallback } : {}),\n ...(opts?.pick ? { pick: opts.pick } : {}),\n },\n } as const;\n}\n","import type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, headerSection, inline, link, media, stack, text, when, props as withProps } from '../node/builder'\nimport { navRow, ctaButton } from '../node/fragments'\nimport type { SystemBlockDefinition } from '../registry'\nimport { bindProp, pipe, tx } from '../transforms/typed'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, mergeStyles, textColorStyle } from '../../theme/utils/colorStyles'\n\nconst logoRow = link(\n { href: '/', className: 'header-logo flex min-w-0 items-center gap-3 no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-10 w-auto transition-all duration-300 [.header-scrolled_&]:h-8' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text truncate text-lg font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\nconst centeredLogoRow = link(\n { href: '/', className: 'header-logo flex items-center justify-center gap-3 text-center no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-12 w-auto transition-all duration-300 [.header-scrolled_&]:h-10' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text text-xl font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\n// Shared nav row configuration\nconst createNavRow = (className: string, align: 'start' | 'center' | 'end' = 'end') =>\n navRow({\n className: `${className} header-nav-row`,\n align,\n linkClassName: 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n })\n\nconst headerCta = ctaButton({\n basePath: 'menu.ctaItem',\n whenPath: 'menu.ctaItem.label',\n variantPath: 'menu.ctaItem.variant',\n linkPath: 'menu.ctaItem.link',\n className: 'header-cta btn-sm hidden md:inline-flex ml-6',\n})\n\n// Classic variant: logo left, nav right (horizontal inline layout)\nconst classicLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'classic' }),\n)\n\n// Centered variant: logo centered, nav below (vertical stack layout)\nconst centeredLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-5 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-5 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-6 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'centered' }),\n)\n\n// Transparent variant: logo left, nav right (horizontal inline, transparent bg)\nconst transparentLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'transparent' }),\n)\n\n// Floating variant: absolute positioned with padding + rounded container\nconst floatingLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3' })),\n fallback: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'floating' }),\n)\n\n// Editorial variant: centered logo with nav split left/right or large centered logo with nav below\nconst editorialLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-6 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-6 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-8 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'editorial' }),\n)\n\n// Root section contains all variant layouts\nconst headerLayout: NodeDefinition = headerSection(\n {\n background: 'background/base',\n className: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootClass')),\n fallback: 'header-root z-40 w-full border-b transition-theme backdrop-blur',\n }),\n style: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootStyle')),\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n }),\n },\n [\n classicLayout,\n centeredLayout,\n transparentLayout,\n floatingLayout,\n editorialLayout,\n ],\n withProps({\n 'data-site-header': 'true',\n }),\n)\n\nexport const siteHeaderManifest: BlockManifest = createBlockManifest({\n id: 'block.siteHeader',\n title: 'Site Header',\n category: 'layout',\n component: 'site.header.default',\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: headerLayout,\n\n description: 'Site-wide header with logo, navigation, and optional CTA.',\n styleTokens: {\n spacing: 'sm',\n },\n paletteHidden: true,\n})\n\nexport type SiteHeaderManifest = typeof siteHeaderManifest\n\nexport type SiteHeaderVariant = 'classic' | 'centered' | 'transparent' | 'floating' | 'editorial'\n\n// Header has no content fields - variant comes from theme.header.variant\n// CTA is handled via navigation items with is_cta flag\nexport type SiteHeaderContent = Record<string, never>\n\nexport const siteHeaderBlockDefinition: SystemBlockDefinition<SiteHeaderContent> = {\n manifest: siteHeaderManifest,\n}\n","import { navRow } from '../node/fragments'\nimport type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, inline, section, stack, text, when } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport type { LinkValue } from '../types/link'\nimport {\n composeFragments,\n materializeFragment,\n footerBottomTextFragment,\n footerLinkGroupsFragment,\n} from '../fragments'\nimport { createBlockManifest } from '../defineBlock'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../theme/utils/colorStyles'\n\nconst _footerFragments = composeFragments([\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n])\n\nconst linkGroupsLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerLinkGroupsFragment }).layout\n\nconst bottomTextLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerBottomTextFragment }).layout\n\nconst simpleFooterLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col items-center gap-4 py-10 text-center' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col items-center gap-4 px-6 py-10 text-center',\n },\n },\n },\n [\n navRow({\n align: 'center',\n className: 'flex flex-wrap justify-center gap-x-6 gap-y-3',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'simple' }),\n)\n\nconst columnsFooterLayout = stack(\n {\n gap: 'xl',\n align: 'start',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col gap-10 py-12' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col gap-10 px-6 py-12',\n },\n },\n },\n [\n ...linkGroupsLayout(),\n inline(\n { className: 'flex w-full flex-wrap items-center justify-between gap-4' },\n [\n text({ as: 'span', className: 'text-sm font-semibold', style: textColorStyle('text') }, bind('site.title', { fallback: 'Your Site' })),\n navRow({\n className: 'flex flex-wrap justify-end gap-x-6 gap-y-3',\n align: 'end',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ],\n ),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'columns' }),\n)\n\nconst footerLayout: NodeDefinition = section(\n {\n background: 'background/base',\n className: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootClass',\n },\n ],\n fallback: 'w-full border-t transition-theme',\n },\n },\n style: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootStyle',\n },\n ],\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n },\n },\n },\n [\n simpleFooterLayout,\n columnsFooterLayout,\n ],\n)\n\nexport const siteFooterManifest: BlockManifest = createBlockManifest({\n id: 'block.siteFooter',\n title: 'Site Footer',\n category: 'layout',\n component: 'site.footer.default',\n\n // Use fragments for link groups and bottom text\n fragments: [\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n ],\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: footerLayout,\n\n description: 'Site-wide footer with navigation links and optional columns.',\n styleTokens: {\n spacing: 'md',\n },\n paletteHidden: true,\n})\n\nexport type SiteFooterVariant = 'simple' | 'columns'\n\nexport type SiteFooterLink = {\n label: string\n link: LinkValue | null\n target?: string | null\n rel?: string | null\n}\n\nexport type SiteFooterLinkGroup = {\n title?: string | null\n links: SiteFooterLink[]\n}\n\nexport type SiteFooterContent = {\n bottomText?: unknown\n linkGroups?: SiteFooterLinkGroup[]\n}\n\nexport const siteFooterBlockDefinition: SystemBlockDefinition<SiteFooterContent> = {\n manifest: siteFooterManifest,\n}\n","import type { Media } from '../../lib/media'\nimport type { BlockManifest } from '../manifest/schema'\nimport { fieldSchema } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { section } from '../node/builder'\nimport { sectionContainer } from '../node/fragments'\nimport { backgroundLayer } from '../node/fragments/backgroundLayer'\nimport { sectionStylesField } from '../fields/boxStyles'\nimport type { SystemBlockDefinition } from '../registry'\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n testimonialsHeadingFragment,\n testimonialsCarouselFragment,\n} from '../fragments'\n\n// Background layer nodes (replaces testimonialsBackgroundFragment)\nconst testimonialsBackgroundNodes = backgroundLayer(\"_sectionStyles.background\", {\n imageClassName: \"absolute inset-0 -z-10 h-full w-full object-cover opacity-50\",\n})\n\nconst testimonialsContent = composeFragments([\n { fragment: testimonialsHeadingFragment },\n { fragment: testimonialsCarouselFragment },\n])\n\nconst testimonialsLayout: NodeDefinition = section(\n { background: 'background/base', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n ...testimonialsBackgroundNodes,\n sectionContainer(\n [...testimonialsContent.layout],\n { gap: 'xl', className: 'relative' },\n ),\n ],\n)\n\nconst fields = fieldSchema.array().parse([\n ...testimonialsContent.fields.filter((field) => field.id === 'heading' || field.id === 'subheading'),\n ...testimonialsContent.fields.filter(\n (field) => field.id === 'slidesToShow' || field.id === 'transition' || field.id === 'maxEntries',\n ),\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n])\n\nconst dataLoaders = buildFragmentDataLoaders(testimonialsContent)\n\nexport const testimonialsManifest: BlockManifest = {\n name: 'block.testimonials',\n version: '0.1.0',\n title: 'Testimonials',\n description: 'Carousel of customer testimonials with optional background styling.',\n component: 'testimonials.carousel',\n fields,\n slots: [],\n styleTokens: {\n background: 'surface',\n typography: 'body',\n spacing: 'lg',\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: true,\n paletteHidden: false,\n },\n category: 'marketing',\n tags: ['testimonials', 'reviews', 'quotes', 'feedback', 'social-proof', 'customers', 'carousel'],\n icon: 'MessageSquareQuote',\n layout: testimonialsLayout,\n}\n\nexport type TestimonialsBlockContent = {\n heading?: string | null\n subheading?: string | null\n slidesToShow?: number | string | null\n transition?: 'slide' | 'fade' | null\n maxEntries?: number | string | null\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image'\n color?: string | null\n gradient?: import('../../theme/gradients').GradientConfig | null\n image?: Media | null\n textColor?: string | null\n } | null\n spacing?: string | null\n } | null\n}\n\nexport type TestimonialEntryContent = {\n name?: string | null\n jobTitle?: string | null\n company?: string | null\n headshot?: {\n url?: string | null\n alt?: string | null\n } | null\n body?: unknown\n}\n\nexport type TestimonialEntry = {\n id: string\n slug: string | null\n path: string\n publishedAt: string | null\n status: string\n excerpt: string\n routeId: string | null\n content: TestimonialEntryContent\n}\n\nexport const testimonialsBlockDefinition: SystemBlockDefinition<TestimonialsBlockContent> = {\n manifest: testimonialsManifest,\n dataLoaders,\n}\n","import { cardFragment, columnContentFragment, fragmentsToRepeaterField } from '../fragments';\nimport { fieldSchema, type BlockManifest } from '../manifest/schema';\nimport type { SystemBlockDefinition } from '../registry';\nimport { createBlockManifest } from '../defineBlock';\nimport { typeBasedLayout } from '../node';\nimport { el } from '../node/builder';\nimport { styledSection, sectionContainer } from '../node/fragments';\n\nconst columnsLayout = styledSection({\n children: sectionContainer(\n [\n el('grid',\n {\n cols: {\n $bind: {\n from: 'content.columns',\n transforms: [{ id: 'array.length' }],\n },\n },\n gap: { $bind: { from: 'content.gap' } },\n },\n [\n {\n type: 'stack',\n props: { gap: 'md', className: 'h-full' },\n children: typeBasedLayout(\n {\n card: cardFragment.layout,\n columnContent: columnContentFragment.layout,\n },\n { itemName: 'column' }\n ),\n $repeat: {\n collection: { from: 'content.columns' },\n itemName: 'column',\n },\n },\n ]\n ),\n ],\n { gap: 'md' }\n ),\n spacing: 'medium',\n});\n\nexport const columnsManifest: BlockManifest = createBlockManifest({\n id: 'block.columns',\n title: 'Columns',\n category: 'layout',\n component: 'columns',\n\n // Custom fields for columns configuration\n additionalFields: [\n fieldSchema.parse({\n id: 'gap',\n type: 'select',\n label: 'Gap between columns',\n defaultValue: 'lg',\n options: [\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n ],\n }),\n fragmentsToRepeaterField(\n 'columns',\n 'Columns',\n {\n card: cardFragment,\n columnContent: columnContentFragment,\n },\n {\n minItems: 0,\n maxItems: 4,\n itemLabel: 'Column',\n description: 'Add or remove columns (up to 4)',\n }\n ),\n ],\n\n layout: columnsLayout,\n\n description: 'Multi-column layout with customizable content per column',\n tags: ['columns', 'grid', 'layout', 'flexible', 'multi-column'],\n icon: 'Columns',\n styleTokens: {\n spacing: 'lg',\n },\n});\n\nexport type ColumnsContent = {\n gap?: 'sm' | 'md' | 'lg';\n columns: Array<\n | {\n _type: 'card';\n media?: unknown;\n aspectRatio?: '16/9' | '4/3' | '1/1' | '3/4' | 'auto';\n title: string;\n body?: unknown;\n ctas?: Array<unknown>;\n variant?: string;\n }\n | {\n _type: 'columnContent';\n items: Array<{ _type: string; [key: string]: unknown }>;\n }\n >;\n};\n\nexport const columnsBlockDefinition: SystemBlockDefinition<ColumnsContent> = {\n manifest: columnsManifest,\n};\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, bookingForm } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n\n/**\n * Appointment Booking Block (v2.0.0)\n *\n * This block creates a multi-step booking flow that references a booking form\n * for customer information fields. The booking form determines which services\n * can be booked and contains all field customization.\n *\n * Flow:\n * 1. Service/Resource Selection (if form allows multiple services)\n * 2. Date & Time Slot Picker (hardcoded, not customizable)\n * 3. Customer Information (from booking form fields)\n * 4. Confirmation\n *\n * The block no longer uses fragment composition - instead it dynamically\n * loads the booking form definition and renders its fields.\n */\nexport const appointmentBookingManifest: BlockManifest = {\n name: \"block.appointment-booking\",\n version: \"2.0.0\", // Major version bump - breaking change from v1\n title: \"Appointment Booking\",\n titleSource: \"heading\",\n description: \"Multi-step appointment booking with customizable form fields\",\n component: \"appointment-booking.block\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Booking Form\",\n description: \"Select which booking form to use for collecting customer information\",\n required: true,\n referenceKind: \"bookingForm\",\n allowManualEntry: false,\n },\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading shown at the top of the booking flow\",\n required: false,\n multiline: false,\n defaultValue: \"Book an Appointment\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional description or instructions for users\",\n required: false,\n format: \"markdown\",\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"booking\", \"appointment\", \"calendar\", \"scheduling\", \"reservation\"],\n icon: \"Calendar\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // The booking form component - loads booking form by ID and renders multi-step flow\n bookingForm({\n siteId: { $bind: { from: \"$root.siteId\" } },\n formId: { $bind: { from: \"content.formId\" } },\n form: { $bind: { from: \"data.form\" } },\n services: { $bind: { from: \"data.services\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type AppointmentBookingContent = {\n formId: string; // NEW - reference to booking form\n heading?: string | null;\n description?: unknown; // Rich text\n // REMOVED: serviceId, resourceId, submitLabel, successMessage, timezone\n // These now come from the booking form settings\n};\n\nexport const availabilityDataSchema = z.object({\n slots: z.array(z.object({\n startAt: z.string(),\n endAt: z.string(),\n resourceId: z.string(),\n })),\n});\n\nexport type AvailabilityData = z.infer<typeof availabilityDataSchema>;\n\nexport const appointmentBookingBlockDefinition: SystemBlockDefinition<AppointmentBookingContent> = {\n manifest: appointmentBookingManifest,\n dataSchemas: { availability: availabilityDataSchema.optional() },\n dataLoaders: {\n form: {\n endpoint: 'getPublicFormById',\n params: {\n formId: { $bind: { from: 'content.formId' } },\n },\n mode: 'server',\n },\n services: {\n endpoint: 'getPublicBookingServices',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, eventRegistration } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n// Import shared event types\nimport { publicEventSchema, type PublicEvent } from \"./events/shared\";\n\n/**\n * Event Registration Block\n *\n * Multi-step registration form for events. Can be placed on event content type\n * templates or standalone pages.\n *\n * Features:\n * - Occurrence selection (if not pre-selected via URL)\n * - Ticket quantity selection\n * - Attendee information form\n * - Confirmation display\n *\n * Context:\n * - When placed on an event template with occurrence URL (/events/yoga/2025-01-15),\n * the occurrence is pre-selected from route context\n * - When on event template without occurrence, shows occurrence picker\n * - When standalone, shows full event + occurrence picker\n */\nexport const eventRegistrationManifest: BlockManifest = {\n name: \"block.event-registration\",\n version: \"1.0.0\",\n title: \"Event Registration\",\n titleSource: \"heading\",\n description: \"Multi-step event registration form\",\n component: \"event-registration.block\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading for the registration form\",\n required: false,\n multiline: false,\n defaultValue: \"Register for this event\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional introductory text\",\n required: false,\n format: \"markdown\",\n },\n {\n id: \"maxTickets\",\n type: \"select\",\n label: \"Max tickets per registration\",\n description: \"Maximum tickets a person can register for\",\n required: false,\n multiple: false,\n defaultValue: \"5\",\n options: [\n { value: \"1\", label: \"1 ticket\" },\n { value: \"2\", label: \"2 tickets\" },\n { value: \"3\", label: \"3 tickets\" },\n { value: \"5\", label: \"5 tickets\" },\n { value: \"10\", label: \"10 tickets\" },\n ],\n },\n {\n id: \"showVenue\",\n type: \"boolean\",\n label: \"Show venue\",\n description: \"Display venue information\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"showCapacity\",\n type: \"boolean\",\n label: \"Show available spots\",\n description: \"Display remaining capacity\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Message shown after successful registration\",\n required: false,\n multiline: true,\n defaultValue: \"Thank you for registering! Check your email for confirmation details.\",\n maxLength: 500,\n },\n {\n id: \"waitlistMessage\",\n type: \"text\",\n label: \"Waitlist message\",\n description: \"Message when added to waitlist\",\n required: false,\n multiline: true,\n defaultValue: \"You've been added to the waitlist. We'll notify you if a spot opens up.\",\n maxLength: 500,\n },\n {\n id: \"buttonText\",\n type: \"text\",\n label: \"Submit button text\",\n description: \"Text for the registration submit button\",\n required: false,\n multiline: false,\n defaultValue: \"Complete Registration\",\n maxLength: 40,\n },\n {\n id: \"buttonVariant\",\n type: \"select\",\n label: \"Button style\",\n description: \"Choose a button style from your theme\",\n required: false,\n multiple: false,\n defaultValue: \"primary\",\n options: [\n { value: \"primary\", label: \"Primary\" },\n { value: \"secondary\", label: \"Secondary\" },\n { value: \"outline\", label: \"Outline\" },\n ],\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"registration\", \"booking\", \"form\", \"signup\"],\n icon: \"ClipboardList\",\n layout: [\n styledSection({\n spacing: \"spacious\",\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event registration form component\n eventRegistration({\n // Site context for API calls\n siteId: { $bind: { from: \"$root.siteId\" } },\n // Pre-selected occurrence from route context (if available)\n occurrenceContext: { $bind: { from: \"$root.occurrenceContext\" } },\n // Event data from content entry context (if on event template)\n contentEntry: { $bind: { from: \"$root.contentEntry\" } },\n // Content configuration\n maxTickets: { $bind: { from: \"content.maxTickets\", fallback: \"5\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n successMessage: { $bind: { from: \"content.successMessage\" } },\n waitlistMessage: { $bind: { from: \"content.waitlistMessage\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"Complete Registration\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n // Event data from loader\n events: { $bind: { from: \"data.events\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n }),\n ],\n};\n\nexport type EventRegistrationContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxTickets?: \"1\" | \"2\" | \"3\" | \"5\" | \"10\" | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n successMessage?: string | null;\n waitlistMessage?: string | null;\n buttonText?: string | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | null;\n};\n\n// Re-export PublicEvent type for convenience\nexport type { PublicEvent };\n\n/**\n * Schema for occurrence context from route resolver\n *\n * Flat structure passed from PageRenderer.$root.occurrenceContext\n */\nexport const occurrenceContextSchema = z.object({\n /** Unique identifier for this occurrence */\n id: z.string(),\n /** The event series this occurrence belongs to */\n seriesId: z.string(),\n /** ISO 8601 datetime when the occurrence starts */\n startsAt: z.string(),\n /** ISO 8601 datetime when the occurrence ends */\n endsAt: z.string(),\n /** Override capacity for this specific occurrence (null = use series default) */\n capacityOverride: z.number().nullable().optional(),\n /** Field-level overrides: { title?, description?, venueId?, etc. } */\n overrides: z.record(z.string(), z.unknown()).nullable().optional(),\n}).nullable();\n\nexport type OccurrenceContext = z.infer<typeof occurrenceContextSchema>;\n\nexport const eventRegistrationBlockDefinition: SystemBlockDefinition<EventRegistrationContent> = {\n manifest: eventRegistrationManifest,\n dataSchemas: {\n events: z.array(publicEventSchema).optional(),\n occurrenceContext: occurrenceContextSchema.optional(),\n },\n dataLoaders: {\n // Load events for occurrence selection\n // This is needed when block is on a standalone page or event template without occurrence in URL\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: '50', // Get more events for selection\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from 'zod';\n\n/**\n * Zod schema for venue data\n */\nexport const eventVenueSchema = z.object({\n id: z.string(),\n name: z.string(),\n address: z.string().nullable(),\n});\n\n/**\n * Zod schema for public event data\n */\nexport const publicEventSchema = z.object({\n id: z.string(),\n seriesId: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n slug: z.string(),\n startsAt: z.string(),\n endsAt: z.string(),\n capacity: z.number().nullable(),\n registeredCount: z.number(),\n availableSpots: z.number().nullable(),\n venue: eventVenueSchema.nullable(),\n});\n\n/**\n * Schema for an array of public events\n */\nexport const publicEventsArraySchema = z.array(publicEventSchema);\n","import type { BlockManifest } from '../../../manifest/schema';\n\ntype ManifestField = BlockManifest['fields'][number];\n\n/**\n * Shared card styling fields for event blocks\n */\nexport const cardStylingFields: ManifestField[] = [\n {\n id: 'cardVariant',\n type: 'select',\n label: 'Card style',\n description: 'Choose a card style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n {\n id: 'buttonVariant',\n type: 'select',\n label: 'Button style',\n description: 'Choose a button style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'primary',\n options: [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n { value: 'link', label: 'Link' },\n ],\n },\n {\n id: 'buttonText',\n type: 'text',\n label: 'Button text',\n description: 'Text for the event action button',\n required: false,\n multiline: false,\n defaultValue: 'View event',\n maxLength: 40,\n },\n];\n\n/**\n * Shared event display option fields\n */\nexport const eventDisplayFields: ManifestField[] = [\n {\n id: 'showVenue',\n type: 'boolean',\n label: 'Show venue',\n description: 'Display venue name and address',\n required: false,\n defaultValue: true,\n },\n {\n id: 'showCapacity',\n type: 'boolean',\n label: 'Show available spots',\n description: 'Display remaining capacity',\n required: false,\n defaultValue: true,\n },\n];\n\n/**\n * Empty state field for when no events are available\n */\nexport const emptyStateField: ManifestField = {\n id: 'emptyMessage',\n type: 'text',\n label: 'Empty state message',\n description: 'Message when no upcoming events',\n required: false,\n multiline: false,\n defaultValue: 'No upcoming events scheduled.',\n maxLength: 200,\n};\n\n/**\n * Section heading and description fields\n */\nexport const sectionHeaderFields = (defaultHeading: string): ManifestField[] => [\n {\n id: 'heading',\n type: 'text',\n label: 'Heading',\n description: 'Main heading for the events section',\n required: false,\n multiline: false,\n defaultValue: defaultHeading,\n },\n {\n id: 'description',\n type: 'richText',\n label: 'Description',\n description: 'Optional introductory text',\n required: false,\n format: 'markdown',\n },\n];\n\n/**\n * Layout selection field with grid/stack options\n */\nexport const layoutField: ManifestField = {\n id: 'layout',\n type: 'select',\n label: 'Layout',\n description: 'Choose how events are displayed',\n required: false,\n multiple: false,\n defaultValue: 'grid',\n options: [\n { value: 'grid', label: 'Grid (cards)' },\n { value: 'stack', label: 'Stack (vertical list)' },\n ],\n};\n\n/**\n * Column count field for grid layouts (conditional on layout='grid')\n */\nexport const columnsField = (options: string[] = ['2', '3', '4']): ManifestField => ({\n id: 'columns',\n type: 'select',\n label: 'Columns',\n description: 'Number of columns in grid layout',\n required: false,\n multiple: false,\n defaultValue: '3',\n ui: {\n visibleWhen: { field: 'layout', equals: 'grid' },\n },\n options: options.map((n) => ({ value: n, label: `${n} columns` })),\n});\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Spotlight Block\n *\n * Displays a simple list of 1-6 featured upcoming events.\n * Ideal for homepages or landing pages to highlight upcoming events.\n *\n * Features:\n * - Server-side only (static, no interactivity)\n * - Grid or stack layout\n * - Configurable event count (1-6)\n * - Theme-aware card and button styling\n */\nexport const eventSpotlightManifest: BlockManifest = {\n name: \"block.event-spotlight\",\n version: \"1.0.0\",\n title: \"Event Spotlight\",\n titleSource: \"heading\",\n description: \"Feature a few upcoming events on your homepage\",\n component: \"event-spotlight.block\",\n fields: [\n ...sectionHeaderFields(\"Upcoming Events\"),\n {\n id: \"maxEvents\",\n type: \"select\",\n label: \"Events to display\",\n description: \"Number of events to show\",\n required: false,\n multiple: false,\n defaultValue: \"3\",\n options: [\n { value: \"1\", label: \"1 event\" },\n { value: \"2\", label: \"2 events\" },\n { value: \"3\", label: \"3 events\" },\n { value: \"4\", label: \"4 events\" },\n { value: \"5\", label: \"5 events\" },\n { value: \"6\", label: \"6 events\" },\n ],\n },\n layoutField,\n columnsField([\"2\", \"3\"]),\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"featured\", \"homepage\", \"spotlight\", \"upcoming\"],\n icon: \"Star\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event spotlight component\n el(\"event-spotlight\", {\n events: { $bind: { from: \"data.events\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventSpotlightContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxEvents?: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | null;\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventSpotlightBlockDefinition: SystemBlockDefinition<EventSpotlightContent> = {\n manifest: eventSpotlightManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.maxEvents', fallback: '3' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Listing Block\n *\n * Displays a paginated list of events with a \"load more\" button.\n * Ideal for dedicated events pages showing all upcoming events.\n *\n * Features:\n * - Server-side initial load\n * - Client-side \"load more\" pagination\n * - Grid or stack layout\n * - Configurable initial load and page sizes\n * - Theme-aware card and button styling\n */\nexport const eventListingManifest: BlockManifest = {\n name: \"block.event-listing\",\n version: \"1.0.0\",\n title: \"Event Listing\",\n titleSource: \"heading\",\n description: \"Paginated list of all upcoming events\",\n component: \"event-listing.block\",\n fields: [\n ...sectionHeaderFields(\"All Events\"),\n layoutField,\n columnsField([\"2\", \"3\", \"4\"]),\n {\n id: \"eventsPerPage\",\n type: \"select\",\n label: \"Events per page\",\n description: \"Number of events to load at a time\",\n required: false,\n multiple: false,\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 events\" },\n { value: \"12\", label: \"12 events\" },\n { value: \"24\", label: \"24 events\" },\n ],\n },\n {\n id: \"loadMoreText\",\n type: \"text\",\n label: \"Load more button text\",\n description: \"Text for the pagination button\",\n required: false,\n multiline: false,\n defaultValue: \"Load more events\",\n maxLength: 40,\n },\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"listing\", \"paginated\", \"archive\", \"all-events\"],\n icon: \"List\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event listing component with pagination\n el(\"event-listing\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n eventsPerPage: { $bind: { from: \"content.eventsPerPage\", fallback: \"12\" } },\n loadMoreText: { $bind: { from: \"content.loadMoreText\", fallback: \"Load more events\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventListingContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n eventsPerPage?: \"6\" | \"12\" | \"24\" | null;\n loadMoreText?: string | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventListingBlockDefinition: SystemBlockDefinition<EventListingContent> = {\n manifest: eventListingManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.eventsPerPage', fallback: '12' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n cardStylingFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Calendar Block\n *\n * Displays events in an interactive month or week calendar grid.\n * Users can navigate between time periods to view events.\n *\n * Features:\n * - Month and week calendar views\n * - Interactive navigation (prev/next/today)\n * - Pre-fetches 3 months for smooth navigation\n * - Configurable week start day\n * - Theme-aware styling\n */\nexport const eventCalendarManifest: BlockManifest = {\n name: \"block.event-calendar\",\n version: \"2.0.0\",\n title: \"Event Calendar\",\n titleSource: \"heading\",\n description: \"Interactive calendar showing events by month or week\",\n component: \"event-calendar.block\",\n fields: [\n ...sectionHeaderFields(\"Event Calendar\"),\n {\n id: \"calendarView\",\n type: \"select\",\n label: \"Default view\",\n description: \"Initial calendar view\",\n required: false,\n multiple: false,\n defaultValue: \"month\",\n options: [\n { value: \"month\", label: \"Month\" },\n { value: \"week\", label: \"Week\" },\n ],\n },\n {\n id: \"startOfWeek\",\n type: \"select\",\n label: \"Week starts on\",\n description: \"First day of the week\",\n required: false,\n multiple: false,\n defaultValue: \"monday\",\n options: [\n { value: \"sunday\", label: \"Sunday\" },\n { value: \"monday\", label: \"Monday\" },\n ],\n },\n ...cardStylingFields.filter(f => f.id === 'buttonVariant'), // Only button variant for calendar\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"calendar\", \"month\", \"week\", \"schedule\", \"interactive\"],\n icon: \"CalendarDays\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event calendar grid component\n el(\"event-calendar\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n calendarView: { $bind: { from: \"content.calendarView\", fallback: \"month\" } },\n startOfWeek: { $bind: { from: \"content.startOfWeek\", fallback: \"monday\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventCalendarContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n calendarView?: \"month\" | \"week\" | null;\n startOfWeek?: \"sunday\" | \"monday\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n emptyMessage?: string | null;\n};\n\nexport const eventCalendarBlockDefinition: SystemBlockDefinition<EventCalendarContent> = {\n manifest: eventCalendarManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n // Pre-fetch 3 months of events (server-side)\n // The client will use the same API to fetch more as user navigates\n limit: 100, // High limit for calendar view\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest, FieldDefinition } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { stack, text, bind, when, repeat, el } from \"../node/builder\";\nimport { styledSection, sectionContainer } from \"../node/fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { textColorStyle } from \"../../theme/utils/colorStyles\";\n\n/**\n * Embed block - enables embedding content entries from any content type.\n *\n * This block is designed to be overridden by SDK sites. The default layout\n * is a simple placeholder that shows basic entry information. Sites should\n * use blockOverrides to provide custom renderers based on content.layout.\n *\n * Example SDK usage:\n * ```tsx\n * <Page\n * {...pageData}\n * blockOverrides={{\n * embed: EmbedRenderer,\n * }}\n * />\n * ```\n *\n * The EmbedRenderer receives:\n * - content: EmbedContent with heading, layout, contentType, etc.\n * - data: { entries: ContentEntry[] }\n * - theme: Theme tokens\n */\n\n// Additional fields for the embed block\nconst embedFields: FieldDefinition[] = [\n // Section heading\n fieldSchema.parse({\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional section title displayed above the content.\",\n required: false,\n maxLength: 120,\n }),\n fieldSchema.parse({\n id: \"subheading\",\n type: \"richText\",\n label: \"Subheading\",\n description: \"Optional section description below the heading.\",\n required: false,\n format: \"markdown\",\n ui: { variant: \"limited\" },\n }),\n\n // Content source\n fieldSchema.parse({\n id: \"contentType\",\n type: \"contentTypeSelect\",\n label: \"Content type\",\n description: \"Select the content type to embed.\",\n required: true,\n filter: \"all\",\n }),\n fieldSchema.parse({\n id: \"mode\",\n type: \"select\",\n label: \"Selection mode\",\n description: \"How to select which entries to display.\",\n required: true,\n defaultValue: \"query\",\n options: [\n { value: \"query\", label: \"Query (automatic)\" },\n { value: \"manual\", label: \"Manual (pick entries)\" },\n ],\n }),\n\n // Query mode options\n fieldSchema.parse({\n id: \"limit\",\n type: \"select\",\n label: \"Limit\",\n description: \"Maximum number of entries to display.\",\n defaultValue: \"10\",\n options: [\n { value: \"3\", label: \"3 entries\" },\n { value: \"6\", label: \"6 entries\" },\n { value: \"10\", label: \"10 entries\" },\n { value: \"20\", label: \"20 entries\" },\n { value: \"50\", label: \"50 entries\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n fieldSchema.parse({\n id: \"orderBy\",\n type: \"select\",\n label: \"Order by\",\n description: \"How to sort the entries.\",\n defaultValue: \"order\",\n options: [\n { value: \"order\", label: \"Custom order field\" },\n { value: \"newest\", label: \"Newest first\" },\n { value: \"oldest\", label: \"Oldest first\" },\n { value: \"title\", label: \"Title (A-Z)\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n\n // Manual mode options - entry references\n fieldSchema.parse({\n id: \"entries\",\n type: \"repeater\",\n label: \"Entries\",\n description: \"Select specific entries to display.\",\n required: false,\n itemLabel: \"Entry\",\n minItems: 1,\n maxItems: 20,\n schema: {\n fields: [\n {\n id: \"entryId\",\n type: \"entryPicker\",\n label: \"Entry\",\n description: \"Select a content entry to embed.\",\n required: true,\n ui: {\n contentTypeField: \"contentType\",\n },\n },\n ],\n },\n ui: {\n visibleWhen: { field: \"mode\", equals: \"manual\" },\n },\n }),\n\n // Layout selection - SDK sites can provide custom options via blockFieldOptions\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Select a layout style for displaying the embedded content.\",\n defaultValue: \"list\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n { value: \"carousel\", label: \"Carousel\" },\n ],\n ui: {\n widget: \"sdkSelect\", // Use SDK-aware widget for site-specific options\n },\n }),\n\n // Empty state\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no entries are available.\",\n defaultValue: \"No entries found.\",\n maxLength: 200,\n }),\n];\n\n// Default layout - a simple placeholder that sites should override\nconst embedLayout = styledSection({\n children: sectionContainer([\n // Heading\n text(\n {\n as: \"h2\",\n className: \"text-3xl font-bold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"content.heading\"),\n when(\"content.heading\"),\n ),\n\n // Subheading\n el(\n \"richText\",\n {\n className: \"mt-2 text-lg\",\n style: textColorStyle(\"neutral-600\"),\n },\n undefined,\n bind(\"content.subheading\"),\n when(\"content.subheading\"),\n ),\n\n // Default entry rendering - a simple list\n // Sites should override this with custom layouts via blockOverrides\n // Outer stack provides gap between repeated entry cards\n stack(\n { gap: \"md\", className: \"mt-8\" },\n [\n // Entry card (repeated for each entry)\n stack(\n {\n gap: \"sm\",\n className: \"rounded-lg border border-neutral-200 bg-white p-4 shadow-sm\",\n },\n [\n text(\n {\n as: \"h3\",\n className: \"text-lg font-semibold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"entry.title\"),\n ),\n text(\n {\n as: \"p\",\n className: \"text-sm\",\n style: textColorStyle(\"neutral-500\"),\n },\n bind(\"entry.slug\"),\n when(\"entry.slug\"),\n ),\n ],\n repeat(\"data.entries\", \"entry\"),\n ),\n ],\n when(\"data.entries\"),\n ),\n\n // Empty state\n stack(\n {\n gap: \"sm\",\n className: \"py-12 text-center\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"text-base\",\n style: textColorStyle(\"neutral-400\"),\n },\n bind(\"content.emptyMessage\", { fallback: \"No entries found.\" }),\n ),\n ],\n when(\"data.entries\", { not: true }),\n ),\n ]),\n spacing: \"comfortable\",\n});\n\nexport const embedManifest: BlockManifest = createBlockManifest({\n id: \"block.embed\",\n title: \"Embed Content\",\n category: \"content\",\n titleSource: \"heading\",\n\n additionalFields: embedFields,\n layout: embedLayout,\n\n description:\n \"Embed content entries from any content type. Sites provide custom layouts via block overrides.\",\n tags: [\"embed\", \"content\", \"dynamic\", \"collection\", \"entries\", \"listing\"],\n icon: \"LayoutList\",\n styleTokens: {\n spacing: \"lg\",\n },\n});\n\nexport type EmbedContent = {\n // Section heading\n heading?: string | null;\n subheading?: unknown; // TipTap richText\n\n // Content source\n contentType: string;\n mode: \"query\" | \"manual\";\n\n // Query mode options\n limit?: string | null;\n orderBy?: \"order\" | \"newest\" | \"oldest\" | \"title\" | null;\n\n // Manual mode options\n entries?: Array<{ entryId: string }> | null;\n\n // Layout\n layout?: string | null;\n\n // Empty state\n emptyMessage?: string | null;\n};\n\nexport type EmbedEntry = {\n id: string;\n title: string;\n slug?: string | null;\n content?: Record<string, unknown>;\n publishedAt?: string | null;\n};\n\nconst embedEntrySchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string().nullable().optional(),\n content: z.record(z.string(), z.unknown()).optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport const embedBlockDefinition: SystemBlockDefinition<EmbedContent> = {\n manifest: embedManifest,\n dataSchemas: {\n entries: z.array(embedEntrySchema).optional(),\n },\n dataLoaders: {\n entries: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: { $bind: { from: \"contentType\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"limit\", fallback: \"10\" } },\n orderBy: { $bind: { from: \"orderBy\", fallback: \"order\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n // Manual mode entry IDs - loader should handle this\n entryIds: { $bind: { from: \"entries\" } },\n mode: { $bind: { from: \"mode\" } },\n },\n mode: \"server\",\n },\n },\n};\n","import { registerBlockDefinition, type SystemBlockDefinition } from \"../registry\";\nimport { heroBlockDefinition } from \"./hero\";\nimport { bodyTextBlockDefinition } from \"./body-text\";\nimport { blogPostBlockDefinition } from \"./blog-post\";\nimport { blogPlaceholderBlockDefinition } from \"./blog-placeholder\";\nimport { blogListingBlockDefinition } from \"./blog-listing\";\nimport { ctaFullBlockDefinition } from \"./cta-full\";\nimport { formBlockDefinition } from \"./form\";\nimport { faqBlockDefinition } from \"./faq\";\nimport { siteHeaderBlockDefinition } from \"./site-header\";\nimport { siteFooterBlockDefinition } from \"./site-footer\";\nimport { testimonialsBlockDefinition } from \"./testimonials\";\nimport { columnsBlockDefinition } from \"./columns\";\nimport { appointmentBookingBlockDefinition } from \"./appointment-booking\";\nimport { eventRegistrationBlockDefinition } from \"./event-registration\";\nimport {\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n} from \"./events\";\nimport { embedBlockDefinition } from \"./embed\";\n\nexport const systemBlockDefinitions: SystemBlockDefinition<any>[] = [\n heroBlockDefinition,\n bodyTextBlockDefinition,\n blogPostBlockDefinition,\n blogPlaceholderBlockDefinition,\n blogListingBlockDefinition,\n ctaFullBlockDefinition,\n formBlockDefinition,\n faqBlockDefinition,\n siteHeaderBlockDefinition,\n siteFooterBlockDefinition,\n testimonialsBlockDefinition,\n columnsBlockDefinition,\n appointmentBookingBlockDefinition,\n eventRegistrationBlockDefinition,\n // Event display blocks (3 specialized blocks)\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n // Content embedding\n embedBlockDefinition,\n];\n\nlet defaultsRegistered = false;\n\nexport function ensureSystemBlockDefinitionsRegistered(): void {\n if (defaultsRegistered) {\n return;\n }\n defaultsRegistered = true;\n for (const definition of systemBlockDefinitions) {\n registerBlockDefinition(definition);\n }\n}\n\nexport function resetSystemBlockDefinitionRegistration(): void {\n defaultsRegistered = false;\n}\n\nexport * from \"./hero\";\nexport * from \"./body-text\";\nexport * from \"./blog-post\";\nexport * from \"./blog-placeholder\";\nexport * from \"./blog-listing\";\nexport * from \"./cta-full\";\nexport * from \"./form\";\nexport * from \"./faq\";\nexport * from \"./site-header\";\nexport * from \"./site-footer\";\nexport * from \"./testimonials\";\nexport * from \"./columns\";\nexport * from \"./appointment-booking\";\nexport * from \"./event-registration\";\nexport * from \"./events\";\nexport * from \"./embed\";\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport type { BlockManifest } from \"./manifest\";\nimport { registerManifest } from \"./manifest\";\nimport { ensureSystemBlockDefinitionsRegistered, resetSystemBlockDefinitionRegistration } from \"./blocks\";\nimport type { ResolverContext } from \"./runtime\";\nimport type { ThemeTokens } from \"./theme\";\nimport type { TransformRegistry } from \"./transforms\";\nimport type { Theme } from \"../theme/schema\";\n\nexport type BlockRenderOptions = Omit<ResolverContext, \"viewModel\">;\n\n// Unified render options used by helpers (prefer this over per-block options)\nexport type RenderOptions = Partial<BlockRenderOptions> & {\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n themeConfig?: Theme;\n};\n\nexport type SystemBlockRenderer<TContent = Record<string, unknown>> = (\n content: TContent,\n options?: RenderOptions\n) => ReactNode;\n\n// Legacy loader cache types removed with new registry adoption\n\nexport type SystemBlockComponentProps<\n TContent = Record<string, unknown>\n> = {\n content: TContent;\n theme?: ThemeTokens;\n themeConfig?: Theme;\n registry?: ResolverContext[\"registry\"];\n transforms?: TransformRegistry;\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n // Optional base path for binding-derived editor paths, e.g., `blocks.<blockId>.`\n pathBase?: string;\n // Optional block metadata for editor-aware registries\n blockId?: string | null;\n blockKind?: string;\n // Optional template bindings for reverse field mapping (entry editing)\n blockBindings?: Record<string, unknown>;\n // Optional fragment registry for fragment renderer nodes\n fragmentRegistry?: ResolverContext[\"fragmentRegistry\"];\n};\n\nexport type SystemBlockComponent<\n TContent = Record<string, unknown>\n> = ComponentType<\n SystemBlockComponentProps<TContent>\n>;\n\nexport type BlockDataLoader = {\n endpoint: string;\n params: Record<string, unknown>;\n mode?: 'server' | 'client';\n};\n\nexport type SystemBlockDefinition<\n TContent = Record<string, unknown>\n> = {\n manifest: BlockManifest;\n normalizeContent?: (content: unknown) => TContent;\n dataSchemas?: Record<string, z.ZodTypeAny>;\n dataLoaders?: Record<string, BlockDataLoader>;\n};\n\ntype BlockDefinitionMap = Map<string, SystemBlockDefinition<any>>;\n\nexport type BlockDescriptor = {\n name: string;\n title: string;\n description?: string;\n category?: string;\n contentTypes?: string[];\n tags?: string[];\n icon?: string;\n definition: SystemBlockDefinition<any>;\n /** Where this block comes from: 'system' for built-in blocks, 'sdk' for custom SDK blocks */\n source?: 'system' | 'sdk';\n};\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/system/definitions\");\n\ninterface BlockRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: BlockDefinitionMap;\n}\n\nconst globalScope = globalThis as BlockRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst blockStore = globalScope[REGISTRY_SYMBOL]!;\n\nfunction ensureDefaults(): void {\n ensureSystemBlockDefinitionsRegistered();\n}\n\nexport function registerBlockDefinition<TContent>(\n definition: SystemBlockDefinition<TContent>,\n): SystemBlockDefinition<TContent> {\n registerManifest(definition.manifest);\n blockStore.set(definition.manifest.name, definition);\n return definition;\n}\n\nexport function getBlockDefinition(name: string): SystemBlockDefinition<any> | undefined {\n ensureDefaults();\n return blockStore.get(name);\n}\n\nexport function hasBlockDefinition(name: string): boolean {\n ensureDefaults();\n return blockStore.has(name);\n}\n\nexport function listBlockDefinitions(): SystemBlockDefinition<any>[] {\n ensureDefaults();\n return Array.from(blockStore.values());\n}\n\nexport function listBlockDescriptors(): BlockDescriptor[] {\n return listBlockDefinitions()\n .filter((d) => d.manifest.behaviours?.paletteHidden !== true)\n .map((definition) => ({\n name: definition.manifest.name,\n title: definition.manifest.title,\n description: definition.manifest.description,\n category: definition.manifest.category,\n contentTypes: definition.manifest.contentTypes,\n tags: definition.manifest.tags,\n icon: definition.manifest.icon,\n definition,\n source: 'system' as const,\n }));\n}\n\nexport function clearBlockDefinitions(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n blockStore.clear();\n resetSystemBlockDefinitionRegistration();\n}\n"],"mappings":"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","names":["z","z","z","props","props","mod","props","z","z","fields","repeat","fields","composition","props","fields","composition","fields","z","z","grid","props","z","z","z","fields","z","z","z","z","a","b","r","g","bb","joinClasses","z","classicLayout","fields","dataLoaders","z","z","z","z","z","z","z","REGISTRY_SYMBOL","globalScope"]}