@riverbankcms/sdk 0.4.2 → 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 (180) 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 +1368 -520
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +1368 -520
  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 +24 -14
  25. package/dist/client/rendering/client.js.map +1 -1
  26. package/dist/client/rendering/client.mjs +24 -14
  27. package/dist/client/rendering/client.mjs.map +1 -1
  28. package/dist/client/usePage--fGlyrgj.d.mts +6439 -0
  29. package/dist/client/usePage-BTPnCuWC.d.mts +6511 -0
  30. package/dist/client/usePage-BafOS9UT.d.mts +6512 -0
  31. package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
  32. package/dist/client/usePage-CE7X5NcN.d.ts +6439 -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-kRv5sU81.d.ts → Layout-B-q2Py4v.d.ts} +4 -4
  37. package/dist/server/{Layout-ByUnm35V.d.mts → Layout-Cc5HUXAH.d.mts} +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-N3PX76AP.mjs → chunk-4HIRA33Z.mjs} +247 -135
  41. package/dist/server/chunk-4HIRA33Z.mjs.map +1 -0
  42. package/dist/server/chunk-5STV4MWD.js +189 -0
  43. package/dist/server/chunk-5STV4MWD.js.map +1 -0
  44. package/dist/server/{chunk-R5B6IOFQ.js → chunk-6OSNCH4F.js} +247 -135
  45. package/dist/server/chunk-6OSNCH4F.js.map +1 -0
  46. package/dist/server/{chunk-TKMA6D6U.js → chunk-7UPVCT3K.js} +1215 -497
  47. package/dist/server/chunk-7UPVCT3K.js.map +1 -0
  48. package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
  49. package/dist/server/chunk-AEFWG657.mjs.map +1 -0
  50. package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
  51. package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
  52. package/dist/server/{chunk-ZEAJW6T3.mjs → chunk-C6FIJC7T.mjs} +4 -3
  53. package/dist/server/chunk-C6FIJC7T.mjs.map +1 -0
  54. package/dist/server/{chunk-TO7FD6TQ.js → chunk-I2D7KOEA.js} +4 -4
  55. package/dist/server/{chunk-TO7FD6TQ.js.map → chunk-I2D7KOEA.js.map} +1 -1
  56. package/dist/server/chunk-KFLZGNPO.mjs +189 -0
  57. package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
  58. package/dist/server/chunk-L5EA4FXU.mjs +134 -0
  59. package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
  60. package/dist/server/{chunk-TNRADRPH.mjs → chunk-LNOUXALA.mjs} +1137 -419
  61. package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
  62. package/dist/server/{chunk-SPXMMX3C.mjs → chunk-OSF34JTQ.mjs} +4 -4
  63. package/dist/server/{chunk-SWPHIUVE.js → chunk-P3NNN73G.js} +5 -4
  64. package/dist/server/chunk-P3NNN73G.js.map +1 -0
  65. package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
  66. package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
  67. package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
  68. package/dist/server/chunk-RVDS7VSP.js.map +1 -0
  69. package/dist/server/{chunk-NW5KHH4A.js → chunk-TT5JWA4X.js} +9 -9
  70. package/dist/server/{chunk-NW5KHH4A.js.map → chunk-TT5JWA4X.js.map} +1 -1
  71. package/dist/server/chunk-VSFQRHYZ.js +134 -0
  72. package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
  73. package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
  74. package/dist/server/chunk-YYO3RIFO.js.map +1 -0
  75. package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
  76. package/dist/server/{components-D1Z2mSDr.d.ts → components-CU46ZkAv.d.mts} +20 -75
  77. package/dist/server/{components-CY8jDQjv.d.mts → components-DvozDwRN.d.ts} +20 -75
  78. package/dist/server/components.d.mts +11 -8
  79. package/dist/server/components.d.ts +11 -8
  80. package/dist/server/components.js +5 -4
  81. package/dist/server/components.js.map +1 -1
  82. package/dist/server/components.mjs +4 -3
  83. package/dist/server/config-validation.d.mts +3 -3
  84. package/dist/server/config-validation.d.ts +3 -3
  85. package/dist/server/config-validation.js +9 -5
  86. package/dist/server/config-validation.js.map +1 -1
  87. package/dist/server/config-validation.mjs +8 -4
  88. package/dist/server/config.d.mts +243 -5
  89. package/dist/server/config.d.ts +243 -5
  90. package/dist/server/config.js +72 -5
  91. package/dist/server/config.js.map +1 -1
  92. package/dist/server/config.mjs +72 -5
  93. package/dist/server/config.mjs.map +1 -1
  94. package/dist/server/core-DsNWrl3o.d.mts +44 -0
  95. package/dist/server/core-DsNWrl3o.d.ts +44 -0
  96. package/dist/server/data.d.mts +4 -3
  97. package/dist/server/data.d.ts +4 -3
  98. package/dist/server/data.js +3 -3
  99. package/dist/server/data.mjs +2 -2
  100. package/dist/server/{index-DCIz9Ptv.d.ts → index-CJfMXZQr.d.ts} +2 -1
  101. package/dist/server/{index-DFQwtj3J.d.mts → index-Q7RLMAQ6.d.mts} +2 -1
  102. package/dist/server/index.d.mts +63 -6
  103. package/dist/server/index.d.ts +63 -6
  104. package/dist/server/index.js +91 -2
  105. package/dist/server/index.js.map +1 -1
  106. package/dist/server/index.mjs +90 -1
  107. package/dist/server/index.mjs.map +1 -1
  108. package/dist/server/link-DjxLyC82.d.mts +23 -0
  109. package/dist/server/link-DjxLyC82.d.ts +23 -0
  110. package/dist/server/{loadContent-CWuE8FCx.d.mts → loadContent-DgpSKWqY.d.mts} +4 -4
  111. package/dist/server/{loadContent-DynBuR5f.d.ts → loadContent-GPvUI1bN.d.ts} +4 -4
  112. package/dist/server/{loadPage-B8RmlYgV.d.mts → loadPage-DGnIK7s4.d.mts} +17 -47
  113. package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
  114. package/dist/server/{loadPage-BTkKpizX.d.ts → loadPage-DW9WB-u9.d.ts} +17 -47
  115. package/dist/server/loadPage-IDGVDFBB.js +11 -0
  116. package/dist/server/{loadPage-DUHBXDEW.js.map → loadPage-IDGVDFBB.js.map} +1 -1
  117. package/dist/server/metadata.d.mts +6 -4
  118. package/dist/server/metadata.d.ts +6 -4
  119. package/dist/server/navigation.d.mts +199 -29
  120. package/dist/server/navigation.d.ts +199 -29
  121. package/dist/server/navigation.js +27 -43
  122. package/dist/server/navigation.js.map +1 -1
  123. package/dist/server/navigation.mjs +20 -36
  124. package/dist/server/navigation.mjs.map +1 -1
  125. package/dist/server/rendering/server.d.mts +8 -6
  126. package/dist/server/rendering/server.d.ts +8 -6
  127. package/dist/server/rendering/server.js +7 -6
  128. package/dist/server/rendering/server.js.map +1 -1
  129. package/dist/server/rendering/server.mjs +6 -5
  130. package/dist/server/rendering.d.mts +14 -10
  131. package/dist/server/rendering.d.ts +14 -10
  132. package/dist/server/rendering.js +9 -8
  133. package/dist/server/rendering.js.map +1 -1
  134. package/dist/server/rendering.mjs +8 -7
  135. package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
  136. package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
  137. package/dist/server/routing.d.mts +178 -11
  138. package/dist/server/routing.d.ts +178 -11
  139. package/dist/server/routing.js +95 -2
  140. package/dist/server/routing.js.map +1 -1
  141. package/dist/server/routing.mjs +94 -1
  142. package/dist/server/routing.mjs.map +1 -1
  143. package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.mts} +1 -1
  144. package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.ts} +1 -1
  145. package/dist/server/server.d.mts +9 -7
  146. package/dist/server/server.d.ts +9 -7
  147. package/dist/server/server.js +6 -6
  148. package/dist/server/server.mjs +5 -5
  149. package/dist/server/theme-bridge.js +8 -8
  150. package/dist/server/theme-bridge.mjs +2 -2
  151. package/dist/server/{types-oCM-fw4O.d.ts → types-0f4PIlgx.d.mts} +55 -2
  152. package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
  153. package/dist/server/{types-BiRZnxDx.d.ts → types-C28kMfa1.d.ts} +256 -82
  154. package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
  155. package/dist/server/{types-CdrJqlKx.d.mts → types-DuzJZKJI.d.mts} +256 -82
  156. package/dist/server/{types-DkKEctWn.d.mts → types-kOQyCFXO.d.ts} +55 -2
  157. package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
  158. package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
  159. package/package.json +5 -3
  160. package/dist/server/chunk-6JBKKV3G.js.map +0 -1
  161. package/dist/server/chunk-7BOIO2S7.mjs +0 -833
  162. package/dist/server/chunk-7BOIO2S7.mjs.map +0 -1
  163. package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
  164. package/dist/server/chunk-BLKVTULP.js +0 -833
  165. package/dist/server/chunk-BLKVTULP.js.map +0 -1
  166. package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
  167. package/dist/server/chunk-HOY77YBF.js.map +0 -1
  168. package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
  169. package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
  170. package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
  171. package/dist/server/chunk-SWPHIUVE.js.map +0 -1
  172. package/dist/server/chunk-TKMA6D6U.js.map +0 -1
  173. package/dist/server/chunk-TNRADRPH.mjs.map +0 -1
  174. package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
  175. package/dist/server/chunk-ZEAJW6T3.mjs.map +0 -1
  176. package/dist/server/loadPage-DUHBXDEW.js +0 -11
  177. package/dist/server/loadPage-LYVKY3WZ.mjs +0 -11
  178. /package/dist/server/{chunk-SPXMMX3C.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
  179. /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
  180. /package/dist/server/{loadPage-LYVKY3WZ.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
@@ -1,833 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
-
3
-
4
-
5
-
6
- var _chunkTKMA6D6Ujs = require('./chunk-TKMA6D6U.js');
7
-
8
-
9
-
10
- var _chunkEGTDJ4PLjs = require('./chunk-EGTDJ4PL.js');
11
-
12
-
13
- var _chunkDGUM43GVjs = require('./chunk-DGUM43GV.js');
14
-
15
- // src/rendering/components/Page.tsx
16
- var _jsxruntime = require('react/jsx-runtime');
17
- function Page({
18
- page,
19
- theme,
20
- themeTokens: providedTokens,
21
- siteId,
22
- resolvedData,
23
- routeMap,
24
- wrapBlock,
25
- registry,
26
- usePlaceholders = false,
27
- blockOverrides,
28
- sdkConfig,
29
- dataContext
30
- }) {
31
- const baseTokens = _nullishCoalesce(providedTokens, () => ( _chunkTKMA6D6Ujs.buildThemeRuntime.call(void 0, theme).tokens));
32
- const themeTokens = _optionalChain([sdkConfig, 'optionalAccess', _ => _.theme, 'optionalAccess', _2 => _2.palette]) ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } } : baseTokens;
33
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
34
- _chunkTKMA6D6Ujs.PageRenderer,
35
- {
36
- theme,
37
- page,
38
- themeTokens,
39
- usePlaceholders,
40
- dataContext: {
41
- siteId,
42
- resolvedData,
43
- routes: routeMap,
44
- occurrenceContext: _nullishCoalesce(_optionalChain([dataContext, 'optionalAccess', _3 => _3.occurrenceContext]), () => ( null)),
45
- contentEntry: _nullishCoalesce(_optionalChain([dataContext, 'optionalAccess', _4 => _4.contentEntry]), () => ( null))
46
- },
47
- routeMap,
48
- wrapBlock,
49
- registry,
50
- blockOverrides,
51
- sdkConfig
52
- }
53
- );
54
- }
55
-
56
- // ../block-form/dist/server/index.mjs
57
- var _zod = require('zod');
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
- var __require2 = /* @__PURE__ */ ((x) => typeof _chunkDGUM43GVjs.__require !== "undefined" ? _chunkDGUM43GVjs.__require : typeof Proxy !== "undefined" ? new Proxy(x, {
76
- get: (a, b) => (typeof _chunkDGUM43GVjs.__require !== "undefined" ? _chunkDGUM43GVjs.__require : a)[b]
77
- }) : x)(function(x) {
78
- if (typeof _chunkDGUM43GVjs.__require !== "undefined") return _chunkDGUM43GVjs.__require.apply(this, arguments);
79
- throw Error('Dynamic require of "' + x + '" is not supported');
80
- });
81
- function buildTextFieldSchema(field) {
82
- const ui = _nullishCoalesce(_optionalChain([field, 'optionalAccess', _5 => _5.ui]), () => ( {}));
83
- const inputType = _optionalChain([ui, 'optionalAccess', _6 => _6.inputType]);
84
- if (inputType === "email") {
85
- let s2 = _zod.z.string().email("Enter a valid email");
86
- if (typeof field.maxLength === "number") {
87
- s2 = s2.max(field.maxLength);
88
- }
89
- if (field.required) {
90
- return s2.min(1, "This field is required");
91
- }
92
- return s2.optional().nullable().or(_zod.z.literal(""));
93
- }
94
- if (inputType === "tel") {
95
- let s2 = _zod.z.string().regex(/^[+()0-9\s\-]{3,}$/, "Enter a valid phone number");
96
- if (typeof field.maxLength === "number") {
97
- s2 = s2.max(field.maxLength);
98
- }
99
- if (field.required) {
100
- return s2.min(1, "This field is required");
101
- }
102
- return s2.optional().nullable().or(_zod.z.literal(""));
103
- }
104
- let s = _zod.z.string();
105
- if (typeof field.maxLength === "number") {
106
- s = s.max(field.maxLength);
107
- }
108
- if (_optionalChain([ui, 'optionalAccess', _7 => _7.pattern])) {
109
- try {
110
- const re = new RegExp(ui.pattern);
111
- s = s.regex(re);
112
- } catch (e) {
113
- }
114
- }
115
- if (field.required) {
116
- return s.min(1, "This field is required");
117
- }
118
- return s.optional().nullable().or(_zod.z.literal(""));
119
- }
120
- function getTextFieldDefault(field) {
121
- if (field.defaultValue !== void 0 && field.defaultValue !== null) {
122
- return String(field.defaultValue);
123
- }
124
- if (field.required) {
125
- return field.label;
126
- }
127
- return "";
128
- }
129
- function buildNumberFieldSchema(field) {
130
- const ui = _nullishCoalesce(_optionalChain([field, 'optionalAccess', _8 => _8.ui]), () => ( {}));
131
- let s = _zod.z.coerce.number();
132
- if (typeof _optionalChain([ui, 'optionalAccess', _9 => _9.min]) === "number") {
133
- s = s.min(ui.min);
134
- }
135
- if (typeof _optionalChain([ui, 'optionalAccess', _10 => _10.max]) === "number") {
136
- s = s.max(ui.max);
137
- }
138
- if (!field.required) {
139
- s = s.optional().nullable();
140
- }
141
- return s;
142
- }
143
- function getNumberFieldDefault(field) {
144
- if (field.defaultValue !== void 0) {
145
- return typeof field.defaultValue === "number" ? field.defaultValue : null;
146
- }
147
- return null;
148
- }
149
- function buildSelectFieldSchema(field) {
150
- const validValues = _nullishCoalesce(_optionalChain([field, 'access', _11 => _11.options, 'optionalAccess', _12 => _12.map, 'call', _13 => _13((opt) => opt.value)]), () => ( []));
151
- if (validValues.length === 0) {
152
- return field.required ? _zod.z.string().min(1) : _zod.z.string().optional();
153
- }
154
- let schema = _zod.z.enum(validValues);
155
- if (!field.required) {
156
- schema = schema.optional();
157
- }
158
- return schema;
159
- }
160
- function getSelectFieldDefault(field) {
161
- if (field.defaultValue !== void 0 && field.defaultValue !== null) {
162
- return String(field.defaultValue);
163
- }
164
- return _nullishCoalesce(_optionalChain([field, 'access', _14 => _14.options, 'optionalAccess', _15 => _15[0], 'optionalAccess', _16 => _16.value]), () => ( ""));
165
- }
166
- function buildBooleanFieldSchema(field) {
167
- return _zod.z.boolean();
168
- }
169
- function getBooleanFieldDefault(field) {
170
- if (field.defaultValue !== void 0) {
171
- return Boolean(field.defaultValue);
172
- }
173
- return false;
174
- }
175
- function buildGroupFieldSchema(field, ctx) {
176
- const shape = {};
177
- for (const child of field.fields) {
178
- shape[child.id] = ctx.getFieldSchema(child);
179
- }
180
- return _zod.z.object(shape).catchall(_zod.z.unknown()).passthrough();
181
- }
182
- function getGroupFieldDefault(field, ctx) {
183
- const obj = {};
184
- for (const child of field.fields) {
185
- obj[child.id] = ctx.resolve(child);
186
- }
187
- return obj;
188
- }
189
- function buildModalFieldSchema(field, ctx) {
190
- const shape = {};
191
- const fields = _nullishCoalesce(_nullishCoalesce(_optionalChain([field, 'access', _17 => _17.schema, 'optionalAccess', _18 => _18.fields]), () => ( field.fields)), () => ( []));
192
- for (const child of fields) {
193
- shape[child.id] = ctx.getFieldSchema(child);
194
- }
195
- return _zod.z.object(shape).catchall(_zod.z.unknown()).passthrough();
196
- }
197
- function getModalFieldDefault(field, ctx) {
198
- const obj = {};
199
- const fields = _nullishCoalesce(_nullishCoalesce(_optionalChain([field, 'access', _19 => _19.schema, 'optionalAccess', _20 => _20.fields]), () => ( field.fields)), () => ( []));
200
- for (const child of fields) {
201
- obj[child.id] = ctx.resolve(child);
202
- }
203
- return obj;
204
- }
205
- function buildRepeaterFieldSchema(field, ctx) {
206
- let itemSchema;
207
- if (field.polymorphic && field.itemTypes) {
208
- const itemTypeSchemas = [];
209
- for (const [typeKey, itemType] of Object.entries(field.itemTypes)) {
210
- const childShape = {
211
- _type: _zod.z.literal(typeKey)
212
- };
213
- for (const childField of itemType.fields) {
214
- childShape[childField.id] = ctx.getFieldSchema(childField);
215
- }
216
- itemTypeSchemas.push(_zod.z.object(childShape).catchall(_zod.z.unknown()).passthrough());
217
- }
218
- itemSchema = itemTypeSchemas.length > 1 ? _zod.z.discriminatedUnion("_type", itemTypeSchemas) : _nullishCoalesce(itemTypeSchemas[0], () => ( _zod.z.object({ _type: _zod.z.string() }).passthrough()));
219
- } else if (!field.polymorphic && field.fields) {
220
- const childShape = {};
221
- for (const childField of field.fields) {
222
- childShape[childField.id] = ctx.getFieldSchema(childField);
223
- }
224
- itemSchema = _zod.z.object(childShape).catchall(_zod.z.unknown()).passthrough();
225
- } else {
226
- itemSchema = _zod.z.any();
227
- }
228
- if (field.validation) {
229
- const customValidation = field.validation;
230
- if (field.required) {
231
- return customValidation;
232
- }
233
- return customValidation.optional();
234
- }
235
- let schema = _zod.z.array(itemSchema);
236
- const minItems = _nullishCoalesce(field.minItems, () => ( 0));
237
- if (minItems > 0) {
238
- schema = schema.min(minItems, `Must have at least ${minItems} item(s)`);
239
- }
240
- if (field.maxItems !== void 0) {
241
- schema = schema.max(field.maxItems, `Must have at most ${field.maxItems} item(s)`);
242
- }
243
- if (field.required) {
244
- return schema;
245
- }
246
- return schema.optional();
247
- }
248
- function getRepeaterFieldDefault(field, ctx) {
249
- if (field.defaultValue !== void 0) {
250
- return Array.isArray(field.defaultValue) ? field.defaultValue : [];
251
- }
252
- const minItems = _nullishCoalesce(field.minItems, () => ( 0));
253
- if (minItems > 0) {
254
- const items = [];
255
- for (let i = 0; i < minItems; i++) {
256
- const item = {};
257
- if (field.polymorphic && field.itemTypes) {
258
- const firstType = Object.keys(field.itemTypes)[0];
259
- if (firstType) {
260
- item._type = firstType;
261
- const typeSchema = field.itemTypes[firstType];
262
- if (typeSchema) {
263
- for (const childField of typeSchema.fields) {
264
- item[childField.id] = ctx.resolve(childField);
265
- }
266
- }
267
- }
268
- } else if (field.fields) {
269
- for (const childField of field.fields) {
270
- item[childField.id] = ctx.resolve(childField);
271
- }
272
- }
273
- items.push(item);
274
- }
275
- return items;
276
- }
277
- return [];
278
- }
279
- var ALLOWED_PROTOCOLS = ["http:", "https:"];
280
- function buildUrlFieldSchema(field) {
281
- const message = `${field.label} must be a valid URL`;
282
- const validator = (value) => {
283
- if (!value) {
284
- return !field.required;
285
- }
286
- if (field.allowRelative && value.startsWith("/")) {
287
- return true;
288
- }
289
- try {
290
- const parsed = new URL(value);
291
- return ALLOWED_PROTOCOLS.includes(parsed.protocol);
292
- } catch (e2) {
293
- return false;
294
- }
295
- };
296
- const base = _zod.z.string().trim().refine(validator, message);
297
- if (field.required) {
298
- return base.min(1, { message: `${field.label} is required` });
299
- }
300
- return _zod.z.union([base, _zod.z.literal("")]).optional().nullable();
301
- }
302
- function getUrlFieldDefault(field) {
303
- return _nullishCoalesce(field.defaultValue, () => ( ""));
304
- }
305
- function buildTimeFieldSchema(field) {
306
- const base = _zod.z.string();
307
- if (field.required) {
308
- return base.min(1, { message: `${field.label} is required` });
309
- }
310
- return _zod.z.union([base, _zod.z.literal(""), _zod.z.null()]).optional().nullable();
311
- }
312
- function getTimeFieldDefault(field) {
313
- return _nullishCoalesce(field.defaultValue, () => ( null));
314
- }
315
- function buildDateFieldSchema(field) {
316
- const base = _zod.z.string();
317
- if (field.required) {
318
- return base.min(1, { message: `${field.label} is required` });
319
- }
320
- return _zod.z.union([base, _zod.z.literal(""), _zod.z.null()]).optional().nullable();
321
- }
322
- function getDateFieldDefault(field) {
323
- return _nullishCoalesce(field.defaultValue, () => ( null));
324
- }
325
- function buildDateTimeFieldSchema(field) {
326
- const base = _zod.z.string().refine(
327
- (val) => {
328
- if (!val) return true;
329
- const date = new Date(val);
330
- return !isNaN(date.getTime());
331
- },
332
- { message: `${field.label} must be a valid date-time` }
333
- );
334
- if (field.required) {
335
- return base.min(1, { message: `${field.label} is required` });
336
- }
337
- return _zod.z.union([base, _zod.z.literal(""), _zod.z.null()]).optional().nullable();
338
- }
339
- function getDateTimeFieldDefault(field) {
340
- return _nullishCoalesce(field.defaultValue, () => ( null));
341
- }
342
- var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
343
- function buildSlugFieldSchema(field) {
344
- const base = _zod.z.string().regex(SLUG_PATTERN, `${field.label} must use lowercase letters, numbers, and dashes`);
345
- const withLength = field.maxLength ? base.max(field.maxLength, { message: `${field.label} must be at most ${field.maxLength} characters` }) : base;
346
- if (field.required) {
347
- return withLength.min(1, { message: `${field.label} is required` });
348
- }
349
- return _zod.z.union([withLength, _zod.z.literal("")]).optional().nullable();
350
- }
351
- function getSlugFieldDefault(field) {
352
- return _nullishCoalesce(field.defaultValue, () => ( ""));
353
- }
354
- function buildLinkFieldSchema(field) {
355
- const nullableString = _zod.z.union([_zod.z.string().min(1), _zod.z.null()]);
356
- const internal = _zod.z.object({
357
- kind: _zod.z.literal("internal"),
358
- routeId: _zod.z.string().min(1),
359
- entityId: _zod.z.string().min(1).optional(),
360
- entityType: _zod.z.enum(["page", "content"]).optional(),
361
- href: nullableString.optional(),
362
- title: nullableString.optional(),
363
- typeLabel: nullableString.optional(),
364
- contentTypeKey: nullableString.optional(),
365
- contentTypeName: nullableString.optional(),
366
- updatedAt: nullableString.optional()
367
- }).passthrough();
368
- const external = _zod.z.object({
369
- kind: _zod.z.literal("external"),
370
- href: _zod.z.string().min(1)
371
- }).passthrough();
372
- const custom = _zod.z.object({
373
- kind: _zod.z.literal("url"),
374
- href: _zod.z.string().min(1)
375
- }).passthrough();
376
- const linkSchema = _zod.z.union([internal, external, custom]);
377
- if (field.required) {
378
- return linkSchema;
379
- }
380
- return _zod.z.union([linkSchema, _zod.z.null()]).optional();
381
- }
382
- function getLinkFieldDefault(_field) {
383
- return null;
384
- }
385
- function buildRichTextFieldSchema(config) {
386
- return _chunkTKMA6D6Ujs.buildRichTextSchema.call(void 0, {
387
- required: config.required,
388
- label: config.label
389
- });
390
- }
391
- var EMPTY_RICH_TEXT_DOC = {
392
- type: "doc",
393
- content: [
394
- {
395
- type: "paragraph"
396
- }
397
- ]
398
- };
399
- function getRichTextFieldDefaultValue(_config) {
400
- return EMPTY_RICH_TEXT_DOC;
401
- }
402
- var MediaValueSchema = _zod.z.object({
403
- kind: _zod.z.enum(["image", "video"]),
404
- url: _zod.z.string().url(),
405
- alt: _zod.z.string().optional(),
406
- caption: _zod.z.string().optional(),
407
- credit: _zod.z.string().optional(),
408
- width: _zod.z.number().optional(),
409
- height: _zod.z.number().optional(),
410
- size: _zod.z.number().optional(),
411
- mimeType: _zod.z.string().optional()
412
- });
413
- function buildMediaFieldSchema(config) {
414
- let schema = MediaValueSchema.nullable();
415
- if (config.required) {
416
- schema = schema.refine((val) => val !== null, {
417
- message: `${config.label} is required`
418
- });
419
- }
420
- return schema;
421
- }
422
- function getMediaFieldDefaultValue(_config) {
423
- return null;
424
- }
425
- function buildTabGroupFieldSchema(field, ctx) {
426
- const shape = {};
427
- for (const tab of field.tabs) {
428
- for (const child of tab.fields) {
429
- shape[child.id] = ctx.getFieldSchema(child);
430
- }
431
- }
432
- if (field.activeTabField) {
433
- const tabIds = field.tabs.map((t) => t.id);
434
- if (tabIds.length > 0) {
435
- shape[field.activeTabField] = _zod.z.enum(tabIds);
436
- }
437
- }
438
- return _zod.z.object(shape).catchall(_zod.z.unknown()).passthrough();
439
- }
440
- function getTabGroupFieldDefault(field, ctx) {
441
- const defaults = {};
442
- for (const tab of field.tabs) {
443
- for (const child of tab.fields) {
444
- defaults[child.id] = ctx.resolve(child);
445
- }
446
- }
447
- if (field.activeTabField && field.tabs.length > 0) {
448
- defaults[field.activeTabField] = field.tabs[0].id;
449
- }
450
- return defaults;
451
- }
452
- function buildPresetOrCustomFieldSchema(field, _ctx) {
453
- const presetValues = field.presets.map((p) => p.value);
454
- return _zod.z.string();
455
- }
456
- function getPresetOrCustomFieldDefault(field, _ctx) {
457
- if (field.defaultValue !== void 0 && field.defaultValue !== null) {
458
- return String(field.defaultValue);
459
- }
460
- return _nullishCoalesce(_optionalChain([field, 'access', _21 => _21.presets, 'access', _22 => _22[0], 'optionalAccess', _23 => _23.value]), () => ( ""));
461
- }
462
- function buildReferenceFieldSchema(field, _ctx) {
463
- return _zod.z.string();
464
- }
465
- function getReferenceFieldDefault(field, _ctx) {
466
- if (field.defaultValue !== void 0 && field.defaultValue !== null) {
467
- return String(field.defaultValue);
468
- }
469
- if (field.required) {
470
- return `placeholder-${field.id}`;
471
- }
472
- return "";
473
- }
474
- var SCHEMA_BUILDERS = {
475
- text: buildTextFieldSchema,
476
- number: buildNumberFieldSchema,
477
- select: buildSelectFieldSchema,
478
- boolean: buildBooleanFieldSchema,
479
- group: buildGroupFieldSchema,
480
- modal: buildModalFieldSchema,
481
- repeater: buildRepeaterFieldSchema,
482
- url: buildUrlFieldSchema,
483
- time: buildTimeFieldSchema,
484
- date: buildDateFieldSchema,
485
- datetime: buildDateTimeFieldSchema,
486
- slug: buildSlugFieldSchema,
487
- link: buildLinkFieldSchema,
488
- richText: buildRichTextFieldSchema,
489
- media: buildMediaFieldSchema,
490
- tabGroup: buildTabGroupFieldSchema,
491
- presetOrCustom: buildPresetOrCustomFieldSchema,
492
- reference: buildReferenceFieldSchema
493
- };
494
- var DEFAULT_VALUE_BUILDERS = {
495
- text: getTextFieldDefault,
496
- number: getNumberFieldDefault,
497
- select: getSelectFieldDefault,
498
- boolean: getBooleanFieldDefault,
499
- group: getGroupFieldDefault,
500
- modal: getModalFieldDefault,
501
- repeater: getRepeaterFieldDefault,
502
- url: getUrlFieldDefault,
503
- time: getTimeFieldDefault,
504
- date: getDateFieldDefault,
505
- datetime: getDateTimeFieldDefault,
506
- slug: getSlugFieldDefault,
507
- link: getLinkFieldDefault,
508
- richText: getRichTextFieldDefaultValue,
509
- media: getMediaFieldDefaultValue,
510
- tabGroup: getTabGroupFieldDefault,
511
- presetOrCustom: getPresetOrCustomFieldDefault,
512
- reference: getReferenceFieldDefault
513
- };
514
- function buildFieldSchema(field, ctx) {
515
- const builder = SCHEMA_BUILDERS[field.type];
516
- if (!builder) {
517
- console.warn(`No schema builder registered for field type: ${field.type}`);
518
- return __require2("zod").z.any();
519
- }
520
- return builder(field, ctx);
521
- }
522
- function getFieldDefault(field, ctx) {
523
- const getDefault = DEFAULT_VALUE_BUILDERS[field.type];
524
- if (!getDefault) {
525
- console.warn(`No default value builder registered for field type: ${field.type}`);
526
- return field.defaultValue;
527
- }
528
- return getDefault(field, ctx);
529
- }
530
- var DEFAULT_ROLE = "author";
531
- var rolePriority = {
532
- author: 0,
533
- designer: 1,
534
- admin: 2
535
- };
536
- function createManifestFormAdapter(manifest, options) {
537
- const role = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _24 => _24.role]), () => ( DEFAULT_ROLE));
538
- const fields = (_nullishCoalesce(manifest.fields, () => ( []))).map((field) => transformField(field, role)).filter(Boolean);
539
- const schema = buildValidationSchema(fields);
540
- return { fields, schema };
541
- }
542
- function transformField(field, role) {
543
- if (!isFieldVisible(field, role)) {
544
- return void 0;
545
- }
546
- if (field.type !== "group" && field.type !== "repeater") {
547
- return field;
548
- }
549
- if (field.type === "group") {
550
- const children = (_nullishCoalesce(_optionalChain([field, 'access', _25 => _25.schema, 'optionalAccess', _26 => _26.fields]), () => ( []))).map((child) => transformField(child, role)).filter(Boolean);
551
- if (!children.length) {
552
- return void 0;
553
- }
554
- const { schema: _schema, ...rest } = field;
555
- return { ...rest, fields: children };
556
- }
557
- if (field.type === "repeater") {
558
- if (field.polymorphic && field.itemTypes) {
559
- const itemTypes = {};
560
- for (const [typeKey, itemType] of Object.entries(field.itemTypes)) {
561
- const children2 = (_nullishCoalesce(itemType.fields, () => ( []))).map((child) => transformField(child, role)).filter(Boolean);
562
- if (children2.length > 0) {
563
- itemTypes[typeKey] = {
564
- label: itemType.label,
565
- icon: itemType.icon,
566
- fields: children2
567
- };
568
- }
569
- }
570
- if (Object.keys(itemTypes).length === 0) {
571
- return void 0;
572
- }
573
- const { schema: _schema2, ...rest2 } = field;
574
- return { ...rest2, itemTypes };
575
- }
576
- const children = (_nullishCoalesce(_optionalChain([field, 'access', _27 => _27.schema, 'optionalAccess', _28 => _28.fields]), () => ( []))).map((child) => transformField(child, role)).filter(Boolean);
577
- if (!children.length) {
578
- return void 0;
579
- }
580
- const { schema: _schema3, polymorphic: _polymorphic, itemTypes: _itemTypes, ...rest } = field;
581
- return { ...rest, fields: children };
582
- }
583
- return void 0;
584
- }
585
- function isFieldVisible(field, role) {
586
- if (role === "admin") {
587
- return true;
588
- }
589
- const allowed = field.visibleRoles;
590
- if (!allowed || allowed.length === 0) {
591
- return true;
592
- }
593
- return allowed.some((visibility) => rolePriority[role] >= rolePriority[visibility]);
594
- }
595
- function buildValidationSchema(fields) {
596
- const shape = {};
597
- const ctx = {
598
- getFieldSchema: (field) => buildFieldSchema(field, ctx)
599
- };
600
- for (const field of fields) {
601
- shape[field.id] = buildFieldSchema(field, ctx);
602
- }
603
- return _zod.z.object(shape).catchall(_zod.z.unknown()).passthrough();
604
- }
605
- function createManifestDefaultValues(manifest, data = {}, options = {}) {
606
- const { fields } = createManifestFormAdapter(manifest, {
607
- role: options.role,
608
- ...options.adapterOptions
609
- });
610
- const ctx = {
611
- resolve: (field) => getFieldDefault(field, ctx)
612
- };
613
- const result = {};
614
- for (const field of fields) {
615
- const rawValue = data[field.id];
616
- result[field.id] = ensureFieldValue(field, rawValue, ctx);
617
- }
618
- return result;
619
- }
620
- function ensureFieldValue(field, rawValue, ctx) {
621
- if (field.type === "repeater") {
622
- if (rawValue === void 0) {
623
- rawValue = getFieldDefault(field, ctx);
624
- }
625
- const items = Array.isArray(rawValue) ? rawValue : [];
626
- return items.map((item) => ensureRepeaterItem(field, item, ctx));
627
- }
628
- if (rawValue === void 0) {
629
- return getFieldDefault(field, ctx);
630
- }
631
- return rawValue;
632
- }
633
- function ensureRepeaterItem(field, value, ctx) {
634
- const itemData = typeof value === "object" && value !== null ? { ...value } : {};
635
- if (field.polymorphic && field.itemTypes) {
636
- const itemType = typeof itemData._type === "string" ? itemData._type : Object.keys(field.itemTypes)[0];
637
- const typeSchema = field.itemTypes[itemType];
638
- if (!typeSchema) return itemData;
639
- for (const child of typeSchema.fields) {
640
- if (child.type === "group" && _optionalChain([child, 'optionalAccess', _29 => _29.ui, 'optionalAccess', _30 => _30.flattenInRepeater])) {
641
- const group = child;
642
- for (const gc of group.fields) {
643
- itemData[gc.id] = ensureFieldValue(gc, itemData[gc.id], ctx);
644
- }
645
- } else {
646
- itemData[child.id] = ensureFieldValue(child, itemData[child.id], ctx);
647
- }
648
- }
649
- return itemData;
650
- }
651
- if (!field.polymorphic && field.fields) {
652
- for (const child of field.fields) {
653
- if (child.type === "group" && _optionalChain([child, 'optionalAccess', _31 => _31.ui, 'optionalAccess', _32 => _32.flattenInRepeater])) {
654
- const group = child;
655
- for (const gc of group.fields) {
656
- itemData[gc.id] = ensureFieldValue(gc, itemData[gc.id], ctx);
657
- }
658
- } else {
659
- itemData[child.id] = ensureFieldValue(child, itemData[child.id], ctx);
660
- }
661
- }
662
- }
663
- return itemData;
664
- }
665
-
666
- // ../site-renderer/dist/index.mjs
667
- function selectPrimaryMenu(menus) {
668
- if (!menus.length) {
669
- return null;
670
- }
671
- const primary = menus.find((menu) => menu.isPrimary);
672
- return _nullishCoalesce(_nullishCoalesce(primary, () => ( menus[0])), () => ( null));
673
- }
674
- function buildMenuViewModel(menu) {
675
- if (!menu) {
676
- return { items: [], ctaItem: null };
677
- }
678
- const flatItems = menu.items.filter((item) => item.parentId === null && item.urlType !== "dropdown").sort((a, b) => a.orderIndex - b.orderIndex);
679
- const items = [];
680
- let ctaItem = null;
681
- for (const item of flatItems) {
682
- const viewItem = {
683
- id: item.id,
684
- label: item.label,
685
- link: convertNavigationLink(item),
686
- target: null,
687
- rel: null,
688
- active: false
689
- // TODO: Compute active state based on current route
690
- };
691
- if (!ctaItem && Boolean(item.isCta)) {
692
- ctaItem = { ...viewItem, variant: "primary" };
693
- continue;
694
- }
695
- items.push(viewItem);
696
- }
697
- return { items, ctaItem };
698
- }
699
- function buildLogoViewModel(logo, fallbackTitle) {
700
- if (!logo) {
701
- return null;
702
- }
703
- if (!logo.url && !logo.storagePath) {
704
- return null;
705
- }
706
- const alt = logo.alt && logo.alt.trim().length > 0 ? logo.alt : _nullishCoalesce(fallbackTitle, () => ( "Site logo"));
707
- const viewModel = {
708
- type: "image",
709
- src: _nullishCoalesce(logo.url, () => ( "")),
710
- // Empty when using storagePath - MediaNode builds direct URL
711
- alt,
712
- assetId: _nullishCoalesce(logo.assetId, () => ( void 0)),
713
- width: _nullishCoalesce(logo.width, () => ( void 0)),
714
- height: _nullishCoalesce(logo.height, () => ( void 0)),
715
- storagePath: _nullishCoalesce(logo.storagePath, () => ( void 0)),
716
- storageBucket: _nullishCoalesce(logo.storageBucket, () => ( void 0))
717
- };
718
- return viewModel;
719
- }
720
- function convertNavigationLink(item) {
721
- const payload = _nullishCoalesce(item.url, () => ( null));
722
- if (!payload) return null;
723
- const kind = typeof payload.kind === "string" ? payload.kind : null;
724
- if (kind === "external" || kind === "url") {
725
- const href = typeof payload.href === "string" ? payload.href : null;
726
- return href ? { kind, href } : null;
727
- }
728
- if (kind === "internal") {
729
- const routeId = typeof payload.routeId === "string" ? payload.routeId : null;
730
- const entityId = typeof payload.entityId === "string" ? payload.entityId : null;
731
- const entityType = typeof payload.entityType === "string" && (payload.entityType === "page" || payload.entityType === "content") ? payload.entityType : null;
732
- const href = typeof payload.href === "string" ? payload.href : null;
733
- const title = typeof payload.title === "string" ? payload.title : null;
734
- const typeLabel = typeof payload.typeLabel === "string" ? payload.typeLabel : null;
735
- if (!routeId || !entityId || !entityType || !href || !title || !typeLabel) {
736
- return null;
737
- }
738
- return {
739
- kind: "internal",
740
- routeId,
741
- entityId,
742
- entityType,
743
- href,
744
- title,
745
- typeLabel,
746
- contentTypeKey: typeof payload.contentTypeKey === "string" ? payload.contentTypeKey : null,
747
- contentTypeName: typeof payload.contentTypeName === "string" ? payload.contentTypeName : null,
748
- updatedAt: typeof payload.updatedAt === "string" ? payload.updatedAt : null
749
- };
750
- }
751
- return null;
752
- }
753
- var HEADER_DEFAULTS = createManifestDefaultValues(_chunkEGTDJ4PLjs.siteHeaderManifest);
754
- var FOOTER_DEFAULTS = createManifestDefaultValues(_chunkEGTDJ4PLjs.siteFooterManifest);
755
-
756
- // src/rendering/components/Layout.tsx
757
-
758
- async function Layout({
759
- siteData: providedSiteData,
760
- client,
761
- siteId,
762
- slug,
763
- domain,
764
- children,
765
- header = true,
766
- footer = true,
767
- headerVariant
768
- }) {
769
- let siteData = providedSiteData;
770
- if (!siteData) {
771
- if (!client) {
772
- throw new Error("Layout: must provide either siteData or client");
773
- }
774
- if (!siteId && !slug && !domain) {
775
- throw new Error("Layout: must provide siteId, slug, or domain when using client");
776
- }
777
- siteData = await client.getSite({ id: siteId, slug, domain });
778
- }
779
- const { site, theme, navigation, layout, routes } = siteData;
780
- const themeRuntime = _chunkTKMA6D6Ujs.buildThemeRuntime.call(void 0, theme);
781
- const menu = selectPrimaryMenu(navigation);
782
- const menuViewModel = buildMenuViewModel(menu);
783
- const logoViewModel = buildLogoViewModel(_nullishCoalesce(layout.logo, () => ( null)), site.title);
784
- const headerData = {
785
- menu: menuViewModel,
786
- logo: logoViewModel,
787
- site,
788
- theme,
789
- routes
790
- };
791
- const headerContent = headerVariant ? { ...layout.header, variant: headerVariant } : layout.header;
792
- const themeWithVariant = headerVariant ? {
793
- ...theme,
794
- header: { ...theme.header, variant: headerVariant }
795
- } : theme;
796
- const viewModelOverrides = {
797
- $root: {
798
- siteId: site.id,
799
- routes,
800
- theme: themeWithVariant
801
- },
802
- site,
803
- menu: menuViewModel,
804
- content: {
805
- logo: logoViewModel
806
- }
807
- };
808
- let headerElement = null;
809
- if (header === true) {
810
- headerElement = _chunkTKMA6D6Ujs.renderBlock.call(void 0, _chunkEGTDJ4PLjs.siteHeaderManifest, headerContent, {
811
- theme: themeRuntime.tokens,
812
- themeConfig: themeWithVariant,
813
- viewModelOverrides
814
- });
815
- } else if (typeof header === "function") {
816
- headerElement = header(headerData);
817
- }
818
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
819
- headerElement,
820
- children,
821
- footer && _chunkTKMA6D6Ujs.renderBlock.call(void 0, _chunkEGTDJ4PLjs.siteFooterManifest, layout.footer, {
822
- theme: themeRuntime.tokens,
823
- themeConfig: theme,
824
- viewModelOverrides
825
- })
826
- ] });
827
- }
828
-
829
-
830
-
831
-
832
- exports.Page = Page; exports.Layout = Layout;
833
- //# sourceMappingURL=chunk-BLKVTULP.js.map