@riverbankcms/sdk 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +84 -0
  2. package/dist/cli/index.js +3104 -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 +1357 -519
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +1357 -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-BafOS9UT.d.mts +6512 -0
  30. package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
  31. package/dist/client/usePage-DoPI6b8V.d.ts +6511 -0
  32. package/dist/client/usePage-QNWArrVO.d.ts +6670 -0
  33. package/dist/client/usePage-fBgPB6Oq.d.ts +6512 -0
  34. package/dist/server/{Layout-CXI_VkhN.d.ts → Layout-B-q2Py4v.d.ts} +4 -4
  35. package/dist/server/{Layout-p6f3TLw9.d.mts → Layout-Cc5HUXAH.d.mts} +4 -4
  36. package/dist/server/{chunk-6JBKKV3G.js → chunk-2KCF2DNK.js} +30 -10
  37. package/dist/server/chunk-2KCF2DNK.js.map +1 -0
  38. package/dist/server/{chunk-N3PX76AP.mjs → chunk-4HIRA33Z.mjs} +247 -135
  39. package/dist/server/chunk-4HIRA33Z.mjs.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-R5B6IOFQ.js → chunk-6OSNCH4F.js} +247 -135
  43. package/dist/server/chunk-6OSNCH4F.js.map +1 -0
  44. package/dist/server/{chunk-VHDDXCK6.js → chunk-7UPVCT3K.js} +1206 -496
  45. package/dist/server/chunk-7UPVCT3K.js.map +1 -0
  46. package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
  47. package/dist/server/chunk-AEFWG657.mjs.map +1 -0
  48. package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
  49. package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
  50. package/dist/server/{chunk-ES6QDZUX.mjs → chunk-C6FIJC7T.mjs} +2 -2
  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-KFLZGNPO.mjs +189 -0
  54. package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
  55. package/dist/server/chunk-L5EA4FXU.mjs +134 -0
  56. package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
  57. package/dist/server/{chunk-U2NI3TS3.mjs → chunk-LNOUXALA.mjs} +1135 -425
  58. package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
  59. package/dist/server/{chunk-24F6FTCI.mjs → chunk-OSF34JTQ.mjs} +4 -4
  60. package/dist/server/{chunk-G35R7N7B.js → chunk-P3NNN73G.js} +3 -3
  61. package/dist/server/{chunk-G35R7N7B.js.map → chunk-P3NNN73G.js.map} +1 -1
  62. package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
  63. package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
  64. package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
  65. package/dist/server/chunk-RVDS7VSP.js.map +1 -0
  66. package/dist/server/{chunk-2SSEBAHC.js → chunk-TT5JWA4X.js} +9 -9
  67. package/dist/server/{chunk-2SSEBAHC.js.map → chunk-TT5JWA4X.js.map} +1 -1
  68. package/dist/server/chunk-VSFQRHYZ.js +134 -0
  69. package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
  70. package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
  71. package/dist/server/chunk-YYO3RIFO.js.map +1 -0
  72. package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
  73. package/dist/server/{components-Dhiemsjd.d.ts → components-CU46ZkAv.d.mts} +20 -75
  74. package/dist/server/{components-C75e4poV.d.mts → components-DvozDwRN.d.ts} +20 -75
  75. package/dist/server/components.d.mts +11 -8
  76. package/dist/server/components.d.ts +11 -8
  77. package/dist/server/components.js +5 -4
  78. package/dist/server/components.js.map +1 -1
  79. package/dist/server/components.mjs +4 -3
  80. package/dist/server/config-validation.d.mts +3 -3
  81. package/dist/server/config-validation.d.ts +3 -3
  82. package/dist/server/config-validation.js +9 -5
  83. package/dist/server/config-validation.js.map +1 -1
  84. package/dist/server/config-validation.mjs +8 -4
  85. package/dist/server/config.d.mts +243 -5
  86. package/dist/server/config.d.ts +243 -5
  87. package/dist/server/config.js +72 -5
  88. package/dist/server/config.js.map +1 -1
  89. package/dist/server/config.mjs +72 -5
  90. package/dist/server/config.mjs.map +1 -1
  91. package/dist/server/core-DsNWrl3o.d.mts +44 -0
  92. package/dist/server/core-DsNWrl3o.d.ts +44 -0
  93. package/dist/server/data.d.mts +4 -3
  94. package/dist/server/data.d.ts +4 -3
  95. package/dist/server/data.js +3 -3
  96. package/dist/server/data.mjs +2 -2
  97. package/dist/server/{index-C6o9LPvq.d.mts → index-CJfMXZQr.d.ts} +2 -1
  98. package/dist/server/{index-CAwBj3-A.d.ts → index-Q7RLMAQ6.d.mts} +2 -1
  99. package/dist/server/index.d.mts +63 -6
  100. package/dist/server/index.d.ts +63 -6
  101. package/dist/server/index.js +91 -2
  102. package/dist/server/index.js.map +1 -1
  103. package/dist/server/index.mjs +90 -1
  104. package/dist/server/index.mjs.map +1 -1
  105. package/dist/server/link-DjxLyC82.d.mts +23 -0
  106. package/dist/server/link-DjxLyC82.d.ts +23 -0
  107. package/dist/server/{loadContent-CdXfuCuE.d.mts → loadContent-DgpSKWqY.d.mts} +4 -4
  108. package/dist/server/{loadContent-CsvQRoxb.d.ts → loadContent-GPvUI1bN.d.ts} +4 -4
  109. package/dist/server/{loadPage-p3AWwwrd.d.mts → loadPage-DGnIK7s4.d.mts} +5 -46
  110. package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
  111. package/dist/server/{loadPage-BA0HiT-6.d.ts → loadPage-DW9WB-u9.d.ts} +5 -46
  112. package/dist/server/loadPage-IDGVDFBB.js +11 -0
  113. package/dist/server/{loadPage-DLC7DJZP.js.map → loadPage-IDGVDFBB.js.map} +1 -1
  114. package/dist/server/metadata.d.mts +6 -4
  115. package/dist/server/metadata.d.ts +6 -4
  116. package/dist/server/navigation.d.mts +199 -29
  117. package/dist/server/navigation.d.ts +199 -29
  118. package/dist/server/navigation.js +27 -43
  119. package/dist/server/navigation.js.map +1 -1
  120. package/dist/server/navigation.mjs +20 -36
  121. package/dist/server/navigation.mjs.map +1 -1
  122. package/dist/server/rendering/server.d.mts +8 -6
  123. package/dist/server/rendering/server.d.ts +8 -6
  124. package/dist/server/rendering/server.js +7 -6
  125. package/dist/server/rendering/server.js.map +1 -1
  126. package/dist/server/rendering/server.mjs +6 -5
  127. package/dist/server/rendering.d.mts +14 -10
  128. package/dist/server/rendering.d.ts +14 -10
  129. package/dist/server/rendering.js +9 -8
  130. package/dist/server/rendering.js.map +1 -1
  131. package/dist/server/rendering.mjs +8 -7
  132. package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
  133. package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
  134. package/dist/server/routing.d.mts +178 -11
  135. package/dist/server/routing.d.ts +178 -11
  136. package/dist/server/routing.js +95 -2
  137. package/dist/server/routing.js.map +1 -1
  138. package/dist/server/routing.mjs +94 -1
  139. package/dist/server/routing.mjs.map +1 -1
  140. package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.mts} +1 -1
  141. package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.ts} +1 -1
  142. package/dist/server/server.d.mts +9 -7
  143. package/dist/server/server.d.ts +9 -7
  144. package/dist/server/server.js +6 -6
  145. package/dist/server/server.mjs +5 -5
  146. package/dist/server/theme-bridge.js +8 -8
  147. package/dist/server/theme-bridge.mjs +2 -2
  148. package/dist/server/{types-Dj8B3QRb.d.ts → types-0f4PIlgx.d.mts} +55 -2
  149. package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
  150. package/dist/server/{types-BWQ-TohG.d.ts → types-C28kMfa1.d.ts} +254 -82
  151. package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
  152. package/dist/server/{types-BLf-hE50.d.mts → types-DuzJZKJI.d.mts} +254 -82
  153. package/dist/server/{types-CdhKJrB0.d.mts → types-kOQyCFXO.d.ts} +55 -2
  154. package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
  155. package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
  156. package/package.json +3 -1
  157. package/dist/server/chunk-6JBKKV3G.js.map +0 -1
  158. package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
  159. package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
  160. package/dist/server/chunk-HOY77YBF.js.map +0 -1
  161. package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
  162. package/dist/server/chunk-LCYGQDAB.mjs +0 -835
  163. package/dist/server/chunk-LCYGQDAB.mjs.map +0 -1
  164. package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
  165. package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
  166. package/dist/server/chunk-TNYU5EIO.js +0 -835
  167. package/dist/server/chunk-TNYU5EIO.js.map +0 -1
  168. package/dist/server/chunk-U2NI3TS3.mjs.map +0 -1
  169. package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
  170. package/dist/server/chunk-VHDDXCK6.js.map +0 -1
  171. package/dist/server/loadPage-DLC7DJZP.js +0 -11
  172. package/dist/server/loadPage-GEGN4UAL.mjs +0 -11
  173. /package/dist/server/{chunk-ES6QDZUX.mjs.map → chunk-C6FIJC7T.mjs.map} +0 -0
  174. /package/dist/server/{chunk-24F6FTCI.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
  175. /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
  176. /package/dist/server/{loadPage-GEGN4UAL.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
@@ -1,44 +1,28 @@
1
+ import {
2
+ buildLogoViewModel,
3
+ buildMenuViewModel,
4
+ buildSimpleLogo,
5
+ buildSimpleMenu,
6
+ getNavItemsBySlug,
7
+ getNavigationBySlug,
8
+ getPrimaryNavItems,
9
+ getPrimaryNavigation,
10
+ selectPrimaryMenu,
11
+ transformNavItems,
12
+ transformToNavItems
13
+ } from "./chunk-KFLZGNPO.mjs";
1
14
  import "./chunk-BJTO5JO5.mjs";
2
-
3
- // src/navigation/index.ts
4
- function getPrimaryNavItems(navigation) {
5
- return transformNavItems(getPrimaryNavigation(navigation));
6
- }
7
- function getNavItemsBySlug(navigation, slug) {
8
- return transformNavItems(getNavigationBySlug(navigation, slug));
9
- }
10
- function getPrimaryNavigation(navigation) {
11
- if (!navigation || navigation.length === 0) return null;
12
- return navigation.find((menu) => menu.isPrimary) ?? navigation[0];
13
- }
14
- function getNavigationBySlug(navigation, slug) {
15
- if (!navigation || navigation.length === 0) return null;
16
- return navigation.find((menu) => menu.name === slug) ?? null;
17
- }
18
- function transformNavItems(menu) {
19
- if (!menu?.items || menu.items.length === 0) return [];
20
- const items = menu.items;
21
- return items.slice().sort((a, b) => (a.orderIndex ?? 0) - (b.orderIndex ?? 0)).map((item) => ({
22
- label: item.label,
23
- href: resolveItemHref(item),
24
- isExternal: isExternalLink(item)
25
- })).filter((item) => Boolean(item.href));
26
- }
27
- function resolveItemHref(item) {
28
- const link = item.url;
29
- if (!link || typeof link !== "object" || !("href" in link)) return "";
30
- return link.href;
31
- }
32
- function isExternalLink(item) {
33
- const link = item.url;
34
- if (!link || typeof link !== "object" || !("kind" in link)) return false;
35
- return link.kind === "external";
36
- }
37
15
  export {
16
+ buildLogoViewModel,
17
+ buildMenuViewModel,
18
+ buildSimpleLogo,
19
+ buildSimpleMenu,
38
20
  getNavItemsBySlug,
39
21
  getNavigationBySlug,
40
22
  getPrimaryNavItems,
41
23
  getPrimaryNavigation,
42
- transformNavItems
24
+ selectPrimaryMenu,
25
+ transformNavItems,
26
+ transformToNavItems
43
27
  };
44
28
  //# sourceMappingURL=navigation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/index.ts"],"sourcesContent":["/**\n * Navigation helper utilities for SDK sites.\n *\n * Provides simple helpers to transform CMS navigation data into\n * render-ready NavItem arrays.\n *\n * @example\n * ```ts\n * import { getPrimaryNavItems, getNavItemsBySlug } from '@riverbankcms/sdk/navigation';\n *\n * // Get header navigation (primary menu)\n * const headerNav = getPrimaryNavItems(siteData.navigation);\n *\n * // Get footer navigation by slug\n * const footerNav = getNavItemsBySlug(siteData.navigation, 'footer');\n *\n * // Result: [{ href: '/', label: 'Home', isExternal: false }, ...]\n * ```\n *\n * @packageDocumentation\n */\n\nimport type { NavigationMenuWithItems, NavigationItemRecord, LinkPayload } from '@riverbankcms/api';\n\n/**\n * A simplified navigation item structure for component rendering.\n */\nexport type NavItem = {\n /** The URL to navigate to */\n href: string;\n /** Display text for the navigation link */\n label: string;\n /** Whether link should open in new tab (external links) */\n isExternal: boolean;\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Primary API: Simple one-liner helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get nav items from the primary menu (marked isPrimary, or first menu).\n * Returns empty array if no navigation configured.\n *\n * @example\n * ```ts\n * const headerNav = getPrimaryNavItems(siteData.navigation);\n * // [{ href: '/', label: 'Home', isExternal: false }, ...]\n * ```\n */\nexport function getPrimaryNavItems(navigation: NavigationMenuWithItems[]): NavItem[] {\n return transformNavItems(getPrimaryNavigation(navigation));\n}\n\n/**\n * Get nav items from a specific menu by slug.\n * Useful for footer nav, secondary nav, etc.\n * Returns empty array if menu not found.\n *\n * @example\n * ```ts\n * const footerNav = getNavItemsBySlug(siteData.navigation, 'footer');\n * ```\n */\nexport function getNavItemsBySlug(navigation: NavigationMenuWithItems[], slug: string): NavItem[] {\n return transformNavItems(getNavigationBySlug(navigation, slug));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Building blocks for advanced use cases\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get the primary navigation menu object.\n * Returns menu marked as isPrimary, or first menu if none marked.\n *\n * @example\n * ```ts\n * const menu = getPrimaryNavigation(siteData.navigation);\n * console.log(menu?.title); // \"Main Navigation\"\n * console.log(menu?.slug); // \"main\"\n * ```\n */\nexport function getPrimaryNavigation(\n navigation: NavigationMenuWithItems[],\n): NavigationMenuWithItems | null {\n if (!navigation || navigation.length === 0) return null;\n return navigation.find((menu) => menu.isPrimary) ?? navigation[0];\n}\n\n/**\n * Get a navigation menu by name.\n *\n * @example\n * ```ts\n * const footerMenu = getNavigationBySlug(siteData.navigation, 'footer');\n * ```\n */\nexport function getNavigationBySlug(\n navigation: NavigationMenuWithItems[],\n slug: string,\n): NavigationMenuWithItems | null {\n if (!navigation || navigation.length === 0) return null;\n // Match by name (the database field) - function is named \"slug\" for API simplicity\n return navigation.find((menu) => menu.name === slug) ?? null;\n}\n\n/**\n * Transform a menu into NavItem array.\n * - Sorts by orderIndex\n * - Resolves link hrefs\n * - Identifies external links\n * - Filters out items without valid hrefs\n *\n * @example\n * ```ts\n * const menu = getNavigationBySlug(siteData.navigation, 'main');\n * const items = transformNavItems(menu);\n * ```\n */\nexport function transformNavItems(menu: NavigationMenuWithItems | null): NavItem[] {\n if (!menu?.items || menu.items.length === 0) return [];\n\n const items: NavigationItemRecord[] = menu.items;\n\n return items\n .slice()\n .sort((a: NavigationItemRecord, b: NavigationItemRecord) => (a.orderIndex ?? 0) - (b.orderIndex ?? 0))\n .map((item: NavigationItemRecord) => ({\n label: item.label,\n href: resolveItemHref(item),\n isExternal: isExternalLink(item),\n }))\n .filter((item): item is NavItem => Boolean(item.href));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extracts the href from a navigation item's url field.\n * The `url` field is a JSON column containing link data with { kind, href, ... } structure.\n * Gracefully returns empty string for malformed or missing link data.\n */\nfunction resolveItemHref(item: NavigationItemRecord): string {\n // The database field is `url` (JSON) which gets camelized to `url`\n const link = item.url as LinkPayload | null | undefined;\n if (!link || typeof link !== 'object' || !('href' in link)) return '';\n return link.href;\n}\n\n/**\n * Determines if a navigation item's link is external.\n * External links (kind: 'external') should typically open in a new tab.\n */\nfunction isExternalLink(item: NavigationItemRecord): boolean {\n const link = item.url as LinkPayload | null | undefined;\n if (!link || typeof link !== 'object' || !('kind' in link)) return false;\n return link.kind === 'external';\n}\n\n// Re-export types for convenience\nexport type { NavigationMenuWithItems, NavigationItemRecord, LinkPayload } from '@riverbankcms/api';\n"],"mappings":";;;AAkDO,SAAS,mBAAmB,YAAkD;AACnF,SAAO,kBAAkB,qBAAqB,UAAU,CAAC;AAC3D;AAYO,SAAS,kBAAkB,YAAuC,MAAyB;AAChG,SAAO,kBAAkB,oBAAoB,YAAY,IAAI,CAAC;AAChE;AAiBO,SAAS,qBACd,YACgC;AAChC,MAAI,CAAC,cAAc,WAAW,WAAW,EAAG,QAAO;AACnD,SAAO,WAAW,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,WAAW,CAAC;AAClE;AAUO,SAAS,oBACd,YACA,MACgC;AAChC,MAAI,CAAC,cAAc,WAAW,WAAW,EAAG,QAAO;AAEnD,SAAO,WAAW,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK;AAC1D;AAeO,SAAS,kBAAkB,MAAiD;AACjF,MAAI,CAAC,MAAM,SAAS,KAAK,MAAM,WAAW,EAAG,QAAO,CAAC;AAErD,QAAM,QAAgC,KAAK;AAE3C,SAAO,MACJ,MAAM,EACN,KAAK,CAAC,GAAyB,OAA6B,EAAE,cAAc,MAAM,EAAE,cAAc,EAAE,EACpG,IAAI,CAAC,UAAgC;AAAA,IACpC,OAAO,KAAK;AAAA,IACZ,MAAM,gBAAgB,IAAI;AAAA,IAC1B,YAAY,eAAe,IAAI;AAAA,EACjC,EAAE,EACD,OAAO,CAAC,SAA0B,QAAQ,KAAK,IAAI,CAAC;AACzD;AAWA,SAAS,gBAAgB,MAAoC;AAE3D,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,UAAU,MAAO,QAAO;AACnE,SAAO,KAAK;AACd;AAMA,SAAS,eAAe,MAAqC;AAC3D,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,UAAU,MAAO,QAAO;AACnE,SAAO,KAAK,SAAS;AACvB;","names":[]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,15 +1,17 @@
1
- export { b as Page, P as PageProps } from '../loadPage-p3AWwwrd.mjs';
2
- export { H as HeaderData, L as Layout, a as LayoutProps } from '../Layout-p6f3TLw9.mjs';
1
+ export { b as Page, P as PageProps } from '../loadPage-DGnIK7s4.mjs';
2
+ export { H as HeaderData, L as Layout, a as LayoutProps } from '../Layout-Cc5HUXAH.mjs';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as React from 'react';
5
- import { T as Theme } from '../types-BLf-hE50.mjs';
6
- import '../schema-Bpy9N5ZI.mjs';
7
- import { R as RiverbankClient } from '../types-CdhKJrB0.mjs';
5
+ import { T as Theme } from '../types-DuzJZKJI.mjs';
6
+ import '../schema-Z6-afHJG.mjs';
7
+ import { R as RiverbankClient } from '../types-0f4PIlgx.mjs';
8
8
  import { B as BlockKind } from '../blockKinds-B6MWzNWp.mjs';
9
+ import '../core-DsNWrl3o.mjs';
9
10
  import 'zod';
10
11
  import '../types-CbagRQ_7.mjs';
11
- import '@riverbankcms/site-renderer';
12
+ import '../navigation.mjs';
12
13
  import '@riverbankcms/ai';
14
+ import '../link-DjxLyC82.mjs';
13
15
  import '@riverbankcms/media-storage-supabase';
14
16
  import '@riverbankcms/db';
15
17
 
@@ -1,15 +1,17 @@
1
- export { b as Page, P as PageProps } from '../loadPage-BA0HiT-6.js';
2
- export { H as HeaderData, L as Layout, a as LayoutProps } from '../Layout-CXI_VkhN.js';
1
+ export { b as Page, P as PageProps } from '../loadPage-DW9WB-u9.js';
2
+ export { H as HeaderData, L as Layout, a as LayoutProps } from '../Layout-B-q2Py4v.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as React from 'react';
5
- import { T as Theme } from '../types-BWQ-TohG.js';
6
- import '../schema-Bpy9N5ZI.js';
7
- import { R as RiverbankClient } from '../types-Dj8B3QRb.js';
5
+ import { T as Theme } from '../types-C28kMfa1.js';
6
+ import '../schema-Z6-afHJG.js';
7
+ import { R as RiverbankClient } from '../types-kOQyCFXO.js';
8
8
  import { B as BlockKind } from '../blockKinds-B6MWzNWp.js';
9
+ import '../core-DsNWrl3o.js';
9
10
  import 'zod';
10
11
  import '../types-DuQCNVV0.js';
11
- import '@riverbankcms/site-renderer';
12
+ import '../navigation.js';
12
13
  import '@riverbankcms/ai';
14
+ import '../link-DjxLyC82.js';
13
15
  import '@riverbankcms/media-storage-supabase';
14
16
  import '@riverbankcms/db';
15
17
 
@@ -1,17 +1,18 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk2SSEBAHCjs = require('../chunk-2SSEBAHC.js');
3
+ var _chunkTT5JWA4Xjs = require('../chunk-TT5JWA4X.js');
4
4
 
5
5
 
6
6
 
7
- var _chunkTNYU5EIOjs = require('../chunk-TNYU5EIO.js');
8
- require('../chunk-VHDDXCK6.js');
9
- require('../chunk-HOY77YBF.js');
10
- require('../chunk-EGTDJ4PL.js');
7
+ var _chunkVSFQRHYZjs = require('../chunk-VSFQRHYZ.js');
8
+ require('../chunk-5STV4MWD.js');
9
+ require('../chunk-7UPVCT3K.js');
10
+ require('../chunk-RVDS7VSP.js');
11
+ require('../chunk-YYO3RIFO.js');
11
12
  require('../chunk-DGUM43GV.js');
12
13
 
13
14
 
14
15
 
15
16
 
16
- exports.Block = _chunk2SSEBAHCjs.Block; exports.Layout = _chunkTNYU5EIOjs.Layout; exports.Page = _chunkTNYU5EIOjs.Page;
17
+ exports.Block = _chunkTT5JWA4Xjs.Block; exports.Layout = _chunkVSFQRHYZjs.Layout; exports.Page = _chunkVSFQRHYZjs.Page;
17
18
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering/server.js"],"names":[],"mappings":"AAAA;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,uHAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering/server.js"}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering/server.js"],"names":[],"mappings":"AAAA;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,uHAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering/server.js"}
@@ -1,13 +1,14 @@
1
1
  import {
2
2
  Block
3
- } from "../chunk-24F6FTCI.mjs";
3
+ } from "../chunk-OSF34JTQ.mjs";
4
4
  import {
5
5
  Layout,
6
6
  Page
7
- } from "../chunk-LCYGQDAB.mjs";
8
- import "../chunk-U2NI3TS3.mjs";
9
- import "../chunk-7DS4Q3GA.mjs";
10
- import "../chunk-USQF2XTU.mjs";
7
+ } from "../chunk-L5EA4FXU.mjs";
8
+ import "../chunk-KFLZGNPO.mjs";
9
+ import "../chunk-LNOUXALA.mjs";
10
+ import "../chunk-AEFWG657.mjs";
11
+ import "../chunk-BYBJA6SP.mjs";
11
12
  import "../chunk-BJTO5JO5.mjs";
12
13
  export {
13
14
  Block,
@@ -1,19 +1,23 @@
1
- export { e as BlockOverrideComponent, f as BlockOverrideProps, B as BlockOverrides, L as LoadPageParams, a as LoadPageResult, b as Page, P as PageProps, c as PageRenderer, d as RouteMap, T as ThemeTokens, l as loadPage } from './loadPage-p3AWwwrd.mjs';
2
- export { H as HeaderData, L as Layout, a as LayoutProps } from './Layout-p6f3TLw9.mjs';
1
+ export { d as BlockOverrideComponent, e as BlockOverrideProps, B as BlockOverrides, L as LoadPageParams, a as LoadPageResult, b as Page, P as PageProps, c as PageRenderer, l as loadPage } from './loadPage-DGnIK7s4.mjs';
2
+ export { H as HeaderData, L as Layout, a as LayoutProps } from './Layout-Cc5HUXAH.mjs';
3
3
  export { Block, BlockProps } from './rendering/server.mjs';
4
- export { C as ContentEntryData, L as LoadContentParams, b as LoadContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-CdXfuCuE.mjs';
5
- export { C as CustomLinkValue, E as ExternalLinkValue, I as InternalLinkValue, d as LinkValue, c as SiteFooterContent, S as SiteHeaderContent, T as Theme } from './types-BLf-hE50.mjs';
6
- export { P as PageOutline } from './schema-Bpy9N5ZI.mjs';
7
- import { G as GradientConfig, M as Media } from './components-C75e4poV.mjs';
8
- export { f as BackgroundInput, B as BodyTextContent, H as HeroContent, a as HeroMedia, g as ResolvedBackground, R as RichText, c as RichTextPrimitiveProps, e as SectionBackground, h as SectionBackgroundProps, S as SystemBlockComponentProps, T as TipTapNode, b as buildThemeRuntime, d as resolveBackground, r as resolveImageUrl } from './components-C75e4poV.mjs';
9
- import './types-CdhKJrB0.mjs';
4
+ export { C as ContentEntryData, L as LoadContentParams, b as LoadContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-DgpSKWqY.mjs';
5
+ export { c as SiteFooterContent, S as SiteHeaderContent, T as Theme } from './types-DuzJZKJI.mjs';
6
+ export { P as PageOutline } from './schema-Z6-afHJG.mjs';
7
+ import { G as GradientConfig } from './components-CU46ZkAv.mjs';
8
+ export { f as BackgroundInput, B as BodyTextContent, H as HeroContent, a as HeroMedia, g as ResolvedBackground, R as RichText, c as RichTextPrimitiveProps, e as SectionBackground, h as SectionBackgroundProps, S as SystemBlockComponentProps, b as buildThemeRuntime, d as resolveBackground, r as resolveImageUrl } from './components-CU46ZkAv.mjs';
9
+ export { R as RouteMap, a as ThemeTokens } from './core-DsNWrl3o.mjs';
10
+ import { M as Media } from './richTextSchema-DURiozvD.mjs';
11
+ export { T as TipTapNode } from './richTextSchema-DURiozvD.mjs';
12
+ export { C as CustomLinkValue, E as ExternalLinkValue, I as InternalLinkValue, L as LinkValue } from './link-DjxLyC82.mjs';
13
+ import './types-0f4PIlgx.mjs';
10
14
  import 'react/jsx-runtime';
11
15
  import 'react';
12
- import 'zod';
13
16
  import './types-CbagRQ_7.mjs';
14
17
  import './blockKinds-B6MWzNWp.mjs';
15
- import '@riverbankcms/site-renderer';
18
+ import './navigation.mjs';
16
19
  import '@riverbankcms/ai';
20
+ import 'zod';
17
21
  import '@riverbankcms/media-storage-supabase';
18
22
  import '@riverbankcms/db';
19
23
 
@@ -1,19 +1,23 @@
1
- export { e as BlockOverrideComponent, f as BlockOverrideProps, B as BlockOverrides, L as LoadPageParams, a as LoadPageResult, b as Page, P as PageProps, c as PageRenderer, d as RouteMap, T as ThemeTokens, l as loadPage } from './loadPage-BA0HiT-6.js';
2
- export { H as HeaderData, L as Layout, a as LayoutProps } from './Layout-CXI_VkhN.js';
1
+ export { d as BlockOverrideComponent, e as BlockOverrideProps, B as BlockOverrides, L as LoadPageParams, a as LoadPageResult, b as Page, P as PageProps, c as PageRenderer, l as loadPage } from './loadPage-DW9WB-u9.js';
2
+ export { H as HeaderData, L as Layout, a as LayoutProps } from './Layout-B-q2Py4v.js';
3
3
  export { Block, BlockProps } from './rendering/server.js';
4
- export { C as ContentEntryData, L as LoadContentParams, b as LoadContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-CsvQRoxb.js';
5
- export { C as CustomLinkValue, E as ExternalLinkValue, I as InternalLinkValue, d as LinkValue, c as SiteFooterContent, S as SiteHeaderContent, T as Theme } from './types-BWQ-TohG.js';
6
- export { P as PageOutline } from './schema-Bpy9N5ZI.js';
7
- import { G as GradientConfig, M as Media } from './components-Dhiemsjd.js';
8
- export { f as BackgroundInput, B as BodyTextContent, H as HeroContent, a as HeroMedia, g as ResolvedBackground, R as RichText, c as RichTextPrimitiveProps, e as SectionBackground, h as SectionBackgroundProps, S as SystemBlockComponentProps, T as TipTapNode, b as buildThemeRuntime, d as resolveBackground, r as resolveImageUrl } from './components-Dhiemsjd.js';
9
- import './types-Dj8B3QRb.js';
4
+ export { C as ContentEntryData, L as LoadContentParams, b as LoadContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-GPvUI1bN.js';
5
+ export { c as SiteFooterContent, S as SiteHeaderContent, T as Theme } from './types-C28kMfa1.js';
6
+ export { P as PageOutline } from './schema-Z6-afHJG.js';
7
+ import { G as GradientConfig } from './components-DvozDwRN.js';
8
+ export { f as BackgroundInput, B as BodyTextContent, H as HeroContent, a as HeroMedia, g as ResolvedBackground, R as RichText, c as RichTextPrimitiveProps, e as SectionBackground, h as SectionBackgroundProps, S as SystemBlockComponentProps, b as buildThemeRuntime, d as resolveBackground, r as resolveImageUrl } from './components-DvozDwRN.js';
9
+ export { R as RouteMap, a as ThemeTokens } from './core-DsNWrl3o.js';
10
+ import { M as Media } from './richTextSchema-DURiozvD.js';
11
+ export { T as TipTapNode } from './richTextSchema-DURiozvD.js';
12
+ export { C as CustomLinkValue, E as ExternalLinkValue, I as InternalLinkValue, L as LinkValue } from './link-DjxLyC82.js';
13
+ import './types-kOQyCFXO.js';
10
14
  import 'react/jsx-runtime';
11
15
  import 'react';
12
- import 'zod';
13
16
  import './types-DuQCNVV0.js';
14
17
  import './blockKinds-B6MWzNWp.js';
15
- import '@riverbankcms/site-renderer';
18
+ import './navigation.js';
16
19
  import '@riverbankcms/ai';
20
+ import 'zod';
17
21
  import '@riverbankcms/media-storage-supabase';
18
22
  import '@riverbankcms/db';
19
23
 
@@ -2,17 +2,18 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkTO7FD6TQjs = require('./chunk-TO7FD6TQ.js');
5
+ var _chunkI2D7KOEAjs = require('./chunk-I2D7KOEA.js');
6
6
 
7
7
 
8
- var _chunkG35R7N7Bjs = require('./chunk-G35R7N7B.js');
8
+ var _chunkP3NNN73Gjs = require('./chunk-P3NNN73G.js');
9
9
 
10
10
 
11
- var _chunk2SSEBAHCjs = require('./chunk-2SSEBAHC.js');
11
+ var _chunkTT5JWA4Xjs = require('./chunk-TT5JWA4X.js');
12
12
 
13
13
 
14
14
 
15
- var _chunkTNYU5EIOjs = require('./chunk-TNYU5EIO.js');
15
+ var _chunkVSFQRHYZjs = require('./chunk-VSFQRHYZ.js');
16
+ require('./chunk-5STV4MWD.js');
16
17
 
17
18
 
18
19
 
@@ -20,10 +21,10 @@ var _chunkTNYU5EIOjs = require('./chunk-TNYU5EIO.js');
20
21
 
21
22
 
22
23
 
23
- var _chunkVHDDXCK6js = require('./chunk-VHDDXCK6.js');
24
+ var _chunk7UPVCT3Kjs = require('./chunk-7UPVCT3K.js');
24
25
  require('./chunk-Y7347JMZ.js');
25
- require('./chunk-HOY77YBF.js');
26
- require('./chunk-EGTDJ4PL.js');
26
+ require('./chunk-RVDS7VSP.js');
27
+ require('./chunk-YYO3RIFO.js');
27
28
  require('./chunk-DGUM43GV.js');
28
29
 
29
30
 
@@ -39,5 +40,5 @@ require('./chunk-DGUM43GV.js');
39
40
 
40
41
 
41
42
 
42
- exports.Block = _chunk2SSEBAHCjs.Block; exports.Layout = _chunkTNYU5EIOjs.Layout; exports.Page = _chunkTNYU5EIOjs.Page; exports.PageRenderer = _chunkVHDDXCK6js.PageRenderer; exports.RichText = _chunkVHDDXCK6js.RichText; exports.SectionBackground = _chunkVHDDXCK6js.SectionBackground; exports.buildThemeRuntime = _chunkVHDDXCK6js.buildThemeRuntime; exports.isEntryContent = _chunkTO7FD6TQjs.isEntryContent; exports.isPageContent = _chunkTO7FD6TQjs.isPageContent; exports.loadContent = _chunkTO7FD6TQjs.loadContent; exports.loadPage = _chunkG35R7N7Bjs.loadPage; exports.resolveBackground = _chunkVHDDXCK6js.resolveBackground; exports.resolveImageUrl = _chunkVHDDXCK6js.resolveImageUrl;
43
+ exports.Block = _chunkTT5JWA4Xjs.Block; exports.Layout = _chunkVSFQRHYZjs.Layout; exports.Page = _chunkVSFQRHYZjs.Page; exports.PageRenderer = _chunk7UPVCT3Kjs.PageRenderer; exports.RichText = _chunk7UPVCT3Kjs.RichText; exports.SectionBackground = _chunk7UPVCT3Kjs.SectionBackground; exports.buildThemeRuntime = _chunk7UPVCT3Kjs.buildThemeRuntime; exports.isEntryContent = _chunkI2D7KOEAjs.isEntryContent; exports.isPageContent = _chunkI2D7KOEAjs.isPageContent; exports.loadContent = _chunkI2D7KOEAjs.loadContent; exports.loadPage = _chunkP3NNN73Gjs.loadPage; exports.resolveBackground = _chunk7UPVCT3Kjs.resolveBackground; exports.resolveImageUrl = _chunk7UPVCT3Kjs.resolveImageUrl;
43
44
  //# sourceMappingURL=rendering.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2qBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering.js"}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2qBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/rendering.js"}
@@ -2,17 +2,18 @@ import {
2
2
  isEntryContent,
3
3
  isPageContent,
4
4
  loadContent
5
- } from "./chunk-OP2GHK27.mjs";
5
+ } from "./chunk-Z5ZA6Q4D.mjs";
6
6
  import {
7
7
  loadPage
8
- } from "./chunk-ES6QDZUX.mjs";
8
+ } from "./chunk-C6FIJC7T.mjs";
9
9
  import {
10
10
  Block
11
- } from "./chunk-24F6FTCI.mjs";
11
+ } from "./chunk-OSF34JTQ.mjs";
12
12
  import {
13
13
  Layout,
14
14
  Page
15
- } from "./chunk-LCYGQDAB.mjs";
15
+ } from "./chunk-L5EA4FXU.mjs";
16
+ import "./chunk-KFLZGNPO.mjs";
16
17
  import {
17
18
  PageRenderer,
18
19
  RichText,
@@ -20,10 +21,10 @@ import {
20
21
  buildThemeRuntime,
21
22
  resolveBackground,
22
23
  resolveImageUrl
23
- } from "./chunk-U2NI3TS3.mjs";
24
+ } from "./chunk-LNOUXALA.mjs";
24
25
  import "./chunk-A2FZMRDW.mjs";
25
- import "./chunk-7DS4Q3GA.mjs";
26
- import "./chunk-USQF2XTU.mjs";
26
+ import "./chunk-AEFWG657.mjs";
27
+ import "./chunk-BYBJA6SP.mjs";
27
28
  import "./chunk-BJTO5JO5.mjs";
28
29
  export {
29
30
  Block,
@@ -0,0 +1,62 @@
1
+ import z from 'zod';
2
+
3
+ declare const mediaSchema: z.ZodObject<{
4
+ type: z.ZodEnum<{
5
+ image: "image";
6
+ video: "video";
7
+ }>;
8
+ purpose: z.ZodOptional<z.ZodString>;
9
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
10
+ assetId: z.ZodOptional<z.ZodString>;
11
+ src: z.ZodOptional<z.ZodString>;
12
+ alt: z.ZodOptional<z.ZodString>;
13
+ width: z.ZodOptional<z.ZodNumber>;
14
+ height: z.ZodOptional<z.ZodNumber>;
15
+ storageBucket: z.ZodOptional<z.ZodString>;
16
+ storagePath: z.ZodOptional<z.ZodString>;
17
+ transform: z.ZodOptional<z.ZodObject<{
18
+ rect: z.ZodOptional<z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
19
+ hotspot: z.ZodOptional<z.ZodOptional<z.ZodObject<{
20
+ x: z.ZodNumber;
21
+ y: z.ZodNumber;
22
+ radius: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>>>;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>;
26
+ type Media = z.infer<typeof mediaSchema>;
27
+
28
+ /**
29
+ * Build Zod validation schema for rich text fields
30
+ *
31
+ * @param options - Optional configuration
32
+ * @param options.required - If true, validates that content is not empty
33
+ * @param options.label - Field label for error messages (defaults to 'This field')
34
+ * @returns Zod schema for rich text validation
35
+ *
36
+ * @example
37
+ * // Basic usage
38
+ * const schema = buildRichTextSchema()
39
+ *
40
+ * @example
41
+ * // Required field with custom label
42
+ * const schema = buildRichTextSchema({ required: true, label: 'Description' })
43
+ */
44
+ /**
45
+ * TypeScript type for a TipTap document node
46
+ *
47
+ * Use this type for rich text content fields in block definitions.
48
+ * Defined explicitly (rather than inferred) because recursive Zod schemas
49
+ * require `z.ZodType<any>` which loses type information.
50
+ */
51
+ type TipTapNode = {
52
+ type: string;
53
+ content?: TipTapNode[];
54
+ text?: string;
55
+ attrs?: Record<string, unknown>;
56
+ marks?: Array<{
57
+ type: string;
58
+ attrs?: Record<string, unknown>;
59
+ }>;
60
+ };
61
+
62
+ export type { Media as M, TipTapNode as T };
@@ -0,0 +1,62 @@
1
+ import z from 'zod';
2
+
3
+ declare const mediaSchema: z.ZodObject<{
4
+ type: z.ZodEnum<{
5
+ image: "image";
6
+ video: "video";
7
+ }>;
8
+ purpose: z.ZodOptional<z.ZodString>;
9
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
10
+ assetId: z.ZodOptional<z.ZodString>;
11
+ src: z.ZodOptional<z.ZodString>;
12
+ alt: z.ZodOptional<z.ZodString>;
13
+ width: z.ZodOptional<z.ZodNumber>;
14
+ height: z.ZodOptional<z.ZodNumber>;
15
+ storageBucket: z.ZodOptional<z.ZodString>;
16
+ storagePath: z.ZodOptional<z.ZodString>;
17
+ transform: z.ZodOptional<z.ZodObject<{
18
+ rect: z.ZodOptional<z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
19
+ hotspot: z.ZodOptional<z.ZodOptional<z.ZodObject<{
20
+ x: z.ZodNumber;
21
+ y: z.ZodNumber;
22
+ radius: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>>>;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>;
26
+ type Media = z.infer<typeof mediaSchema>;
27
+
28
+ /**
29
+ * Build Zod validation schema for rich text fields
30
+ *
31
+ * @param options - Optional configuration
32
+ * @param options.required - If true, validates that content is not empty
33
+ * @param options.label - Field label for error messages (defaults to 'This field')
34
+ * @returns Zod schema for rich text validation
35
+ *
36
+ * @example
37
+ * // Basic usage
38
+ * const schema = buildRichTextSchema()
39
+ *
40
+ * @example
41
+ * // Required field with custom label
42
+ * const schema = buildRichTextSchema({ required: true, label: 'Description' })
43
+ */
44
+ /**
45
+ * TypeScript type for a TipTap document node
46
+ *
47
+ * Use this type for rich text content fields in block definitions.
48
+ * Defined explicitly (rather than inferred) because recursive Zod schemas
49
+ * require `z.ZodType<any>` which loses type information.
50
+ */
51
+ type TipTapNode = {
52
+ type: string;
53
+ content?: TipTapNode[];
54
+ text?: string;
55
+ attrs?: Record<string, unknown>;
56
+ marks?: Array<{
57
+ type: string;
58
+ attrs?: Record<string, unknown>;
59
+ }>;
60
+ };
61
+
62
+ export type { Media as M, TipTapNode as T };