@acms-subir/core 0.3.3-next.20260929113209 → 0.3.4

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 (289) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/cli/common.mjs +2 -2
  3. package/cli/legacy.mjs +1 -1
  4. package/cli/main.mjs +82 -8
  5. package/cli/mobile-doctor.mjs +430 -0
  6. package/cli/mobile.mjs +315 -0
  7. package/cli/native-sections.mjs +168 -0
  8. package/cli/preview.mjs +8 -4
  9. package/cli/sections.mjs +188 -0
  10. package/cli/themes.mjs +52 -8
  11. package/docs/mobile.md +527 -0
  12. package/docs/sections.md +203 -0
  13. package/docs/theme-authoring.md +19 -3
  14. package/integration.mjs +76 -5
  15. package/mobile-template/client/AGENTS.md +97 -0
  16. package/mobile-template/client/README.md +65 -0
  17. package/mobile-template/client/app/_layout.tsx +56 -0
  18. package/mobile-template/client/app/index.tsx +21 -0
  19. package/mobile-template/client/app.json +21 -0
  20. package/mobile-template/client/components/LanguageSwitch.tsx +31 -0
  21. package/mobile-template/client/eas.json +21 -0
  22. package/mobile-template/client/env.example +3 -0
  23. package/mobile-template/client/gitignore +42 -0
  24. package/mobile-template/client/package.json +38 -0
  25. package/mobile-template/client/sections/index.ts +11 -0
  26. package/mobile-template/client/tsconfig.json +7 -0
  27. package/mobile-template/editor/AGENTS.md +66 -0
  28. package/mobile-template/editor/README.md +73 -0
  29. package/mobile-template/editor/app/_layout.tsx +76 -0
  30. package/mobile-template/editor/app/auth.tsx +13 -0
  31. package/mobile-template/editor/app/index.tsx +55 -0
  32. package/mobile-template/editor/app.json +21 -0
  33. package/mobile-template/editor/components/Screen.tsx +51 -0
  34. package/mobile-template/editor/components/SignIn.tsx +36 -0
  35. package/mobile-template/editor/components/TextTabs.tsx +27 -0
  36. package/mobile-template/editor/eas.json +21 -0
  37. package/mobile-template/editor/env.example +5 -0
  38. package/mobile-template/editor/gitignore +42 -0
  39. package/mobile-template/editor/lib/appearance.tsx +12 -0
  40. package/mobile-template/editor/lib/config.ts +17 -0
  41. package/mobile-template/editor/lib/format.ts +24 -0
  42. package/mobile-template/editor/lib/tools.ts +16 -0
  43. package/mobile-template/editor/package.json +40 -0
  44. package/mobile-template/editor/tools/README.md +2 -0
  45. package/mobile-template/editor/tsconfig.json +7 -0
  46. package/mobile-template/recipes/booking/files/app/book/[resource].tsx +57 -0
  47. package/mobile-template/recipes/booking/files/app/book/details.tsx +105 -0
  48. package/mobile-template/recipes/booking/files/app/book/index.tsx +38 -0
  49. package/mobile-template/recipes/booking/recipe.json +17 -0
  50. package/mobile-template/recipes/editor-bookings/files/app/bookings/index.tsx +113 -0
  51. package/mobile-template/recipes/editor-bookings/files/tools/bookings.ts +1 -0
  52. package/mobile-template/recipes/editor-bookings/recipe.json +8 -0
  53. package/mobile-template/recipes/editor-content/files/app/content/[kind]/[id].tsx +13 -0
  54. package/mobile-template/recipes/editor-content/files/app/content/index.tsx +76 -0
  55. package/mobile-template/recipes/editor-content/files/components/DocumentDetail.tsx +55 -0
  56. package/mobile-template/recipes/editor-content/files/tools/content.ts +1 -0
  57. package/mobile-template/recipes/editor-content/recipe.json +8 -0
  58. package/mobile-template/recipes/editor-media/files/app/media/index.tsx +73 -0
  59. package/mobile-template/recipes/editor-media/files/tools/media.ts +1 -0
  60. package/mobile-template/recipes/editor-media/recipe.json +8 -0
  61. package/mobile-template/recipes/editor-sections/files/app/sections/[pageId]/[sectionId].tsx +12 -0
  62. package/mobile-template/recipes/editor-sections/files/app/sections/index.tsx +48 -0
  63. package/mobile-template/recipes/editor-sections/files/components/SectionEditorPane.tsx +77 -0
  64. package/mobile-template/recipes/editor-sections/files/tools/sections.ts +1 -0
  65. package/mobile-template/recipes/editor-sections/recipe.json +8 -0
  66. package/mobile-template/recipes/editor-translations/files/app/translations/index.tsx +63 -0
  67. package/mobile-template/recipes/editor-translations/files/app/translations/review.tsx +14 -0
  68. package/mobile-template/recipes/editor-translations/files/components/ReviewPane.tsx +72 -0
  69. package/mobile-template/recipes/editor-translations/files/tools/translations.ts +1 -0
  70. package/mobile-template/recipes/editor-translations/recipe.json +8 -0
  71. package/mobile-template/recipes/editor-writer/files/app/write/[kind]/[id].tsx +132 -0
  72. package/mobile-template/recipes/editor-writer/files/app/write/new.tsx +61 -0
  73. package/mobile-template/recipes/editor-writer/files/tools/writer.ts +1 -0
  74. package/mobile-template/recipes/editor-writer/recipe.json +8 -0
  75. package/mobile-template/recipes/events/files/app/events/[slug].tsx +41 -0
  76. package/mobile-template/recipes/events/files/app/events/index.tsx +50 -0
  77. package/mobile-template/recipes/events/files/lib/addToCalendar.ts +27 -0
  78. package/mobile-template/recipes/events/recipe.json +15 -0
  79. package/mobile-template/recipes/news/files/app/news/[slug].tsx +25 -0
  80. package/mobile-template/recipes/news/files/app/news/index.tsx +50 -0
  81. package/mobile-template/recipes/news/recipe.json +13 -0
  82. package/mobile-template/recipes/push/files/app/notifications.tsx +64 -0
  83. package/mobile-template/recipes/push/files/components/PushSetup.tsx +15 -0
  84. package/mobile-template/recipes/push/files/lib/push.ts +15 -0
  85. package/mobile-template/recipes/push/recipe.json +20 -0
  86. package/package.json +17 -13
  87. package/section-library/README.md +16 -0
  88. package/section-library/contact/Contact.astro +49 -0
  89. package/section-library/contact/section.json +106 -0
  90. package/section-library/cta-band/CtaBand.astro +28 -0
  91. package/section-library/cta-band/section.json +51 -0
  92. package/section-library/feature-grid/FeatureGrid.astro +54 -0
  93. package/section-library/feature-grid/section.json +107 -0
  94. package/section-library/gallery/Gallery.astro +29 -0
  95. package/section-library/gallery/section.json +51 -0
  96. package/section-library/hero-banner/HeroBanner.astro +42 -0
  97. package/section-library/hero-banner/section.json +81 -0
  98. package/section-library/latest-posts/LatestPosts.astro +22 -0
  99. package/section-library/latest-posts/section.json +37 -0
  100. package/section-library/pricing/Pricing.astro +40 -0
  101. package/section-library/pricing/section.json +117 -0
  102. package/section-library/questions/Questions.astro +38 -0
  103. package/section-library/questions/section.json +69 -0
  104. package/section-library/service-times/ServiceTimes.astro +42 -0
  105. package/section-library/service-times/section.json +127 -0
  106. package/section-library/team/Team.astro +45 -0
  107. package/section-library/team/section.json +88 -0
  108. package/section-library/upcoming-events/UpcomingEvents.astro +54 -0
  109. package/section-library/upcoming-events/section.json +51 -0
  110. package/src/actions/index.ts +205 -174
  111. package/src/components/AiSettings.tsx +45 -5
  112. package/src/components/DesignManager.tsx +112 -16
  113. package/src/components/MobileApp.tsx +392 -0
  114. package/src/components/ThemeSections.astro +40 -21
  115. package/src/components/ThemeSectionsEditor.tsx +757 -229
  116. package/src/components/booking/BookingFlow.astro +6 -3
  117. package/src/components/calendar/BookingsHead.astro +51 -0
  118. package/src/components/calendar/CalendarBoard.tsx +618 -0
  119. package/src/components/calendar/MiniMonth.tsx +54 -0
  120. package/src/components/calendar/NewEventDialog.tsx +44 -0
  121. package/src/components/calendar/QuickAdd.tsx +263 -0
  122. package/src/components/calendar/RoomHolds.tsx +203 -0
  123. package/src/components/calendar/WhereItLands.tsx +51 -0
  124. package/src/components/editor/EventPanel.tsx +23 -2
  125. package/src/components/editor/PostEditor.tsx +206 -14
  126. package/src/components/import/ImportExport.tsx +4 -1
  127. package/src/components/import/runner.ts +1 -0
  128. package/src/components/sections/SectionFields.tsx +560 -0
  129. package/src/components/sections/SectionPicker.tsx +120 -0
  130. package/src/components/sections/TranslationPanel.tsx +143 -0
  131. package/src/components/sections/checks.ts +64 -0
  132. package/src/layouts/Admin.astro +11 -7
  133. package/src/layouts/Site.astro +136 -21
  134. package/src/lib/agent-discovery.ts +11 -7
  135. package/src/lib/agent.ts +35 -2
  136. package/src/lib/ai-schema.ts +5 -0
  137. package/src/lib/ai.ts +5 -0
  138. package/src/lib/api.ts +12 -0
  139. package/src/lib/backup/content.ts +6 -1
  140. package/src/lib/booking/agent.ts +3 -2
  141. package/src/lib/booking/approval.ts +70 -0
  142. package/src/lib/booking/holds.ts +120 -0
  143. package/src/lib/booking/service.ts +37 -3
  144. package/src/lib/calendar/agent-schema.ts +9 -1
  145. package/src/lib/calendar/agent.ts +16 -1
  146. package/src/lib/calendar/board.ts +171 -0
  147. package/src/lib/calendar/config.ts +3 -0
  148. package/src/lib/calendar/grid.ts +169 -0
  149. package/src/lib/calendar/migration.ts +16 -0
  150. package/src/lib/calendar/render.ts +9 -7
  151. package/src/lib/calendar/schedule.ts +166 -0
  152. package/src/lib/content-service.ts +203 -0
  153. package/src/lib/design-service.ts +153 -5
  154. package/src/lib/drafts.ts +3 -3
  155. package/src/lib/editor/auth.ts +264 -0
  156. package/src/lib/editor/bookings.ts +60 -0
  157. package/src/lib/editor/config.ts +25 -0
  158. package/src/lib/editor/documents.ts +227 -0
  159. package/src/lib/editor/http.ts +48 -0
  160. package/src/lib/editor/me.ts +30 -0
  161. package/src/lib/editor/migration.ts +57 -0
  162. package/src/lib/editor/next.ts +11 -0
  163. package/src/lib/editor/openapi.ts +124 -0
  164. package/src/lib/editor/schemas.ts +91 -0
  165. package/src/lib/editor/sections.ts +96 -0
  166. package/src/lib/editor/store.ts +184 -0
  167. package/src/lib/editor/token-route.ts +74 -0
  168. package/src/lib/editor/translations.ts +163 -0
  169. package/src/lib/email/accounts.ts +2 -1
  170. package/src/lib/email/types.ts +2 -1
  171. package/src/lib/home-source.ts +34 -0
  172. package/src/lib/i18n.ts +34 -0
  173. package/src/lib/import/apply.ts +31 -2
  174. package/src/lib/import/bundle.ts +4 -0
  175. package/src/lib/import/export.ts +1 -0
  176. package/src/lib/import/ghost.ts +1 -0
  177. package/src/lib/media/upload.ts +83 -0
  178. package/src/lib/mobile/associations.ts +25 -0
  179. package/src/lib/mobile/calendar.ts +26 -14
  180. package/src/lib/mobile/config.mjs +59 -0
  181. package/src/lib/mobile/content.ts +18 -13
  182. package/src/lib/mobile/embed.ts +83 -0
  183. package/src/lib/mobile/http.ts +14 -6
  184. package/src/lib/mobile/locale.ts +18 -0
  185. package/src/lib/mobile/openapi.ts +111 -0
  186. package/src/lib/mobile/pages.ts +71 -0
  187. package/src/lib/mobile/route.ts +3 -3
  188. package/src/lib/mobile/schemas.ts +60 -0
  189. package/src/lib/mobile/site.ts +41 -0
  190. package/src/lib/push/api.ts +158 -0
  191. package/src/lib/push/config.ts +20 -0
  192. package/src/lib/push/expo.ts +76 -0
  193. package/src/lib/push/migration.ts +60 -0
  194. package/src/lib/push/service.ts +302 -0
  195. package/src/lib/push/store.ts +144 -0
  196. package/src/lib/push/types.ts +43 -0
  197. package/src/lib/repo/migrations.ts +14 -0
  198. package/src/lib/repo/sql.ts +65 -20
  199. package/src/lib/repo/types.ts +10 -4
  200. package/src/lib/roles.ts +5 -0
  201. package/src/lib/scheduler.ts +6 -1
  202. package/src/lib/schema.ts +76 -1
  203. package/src/lib/section-ai.ts +55 -0
  204. package/src/lib/section-targets.ts +62 -0
  205. package/src/lib/sections-agent.ts +146 -0
  206. package/src/lib/sections.ts +242 -0
  207. package/src/lib/site-chrome.ts +34 -0
  208. package/src/lib/theme-assets.ts +16 -0
  209. package/src/lib/theme.ts +33 -4
  210. package/src/lib/translate.ts +97 -0
  211. package/src/lib/translations.ts +39 -0
  212. package/src/middleware.ts +38 -2
  213. package/src/pages/.well-known/apple-app-site-association.ts +6 -0
  214. package/src/pages/.well-known/assetlinks.json.ts +6 -0
  215. package/src/pages/[...slug].astro +8 -3
  216. package/src/pages/admin/app-auth.astro +159 -0
  217. package/src/pages/admin/c/[collection]/[id].astro +9 -0
  218. package/src/pages/admin/calendar/bookings.astro +32 -26
  219. package/src/pages/admin/calendar/calendars.astro +4 -263
  220. package/src/pages/admin/calendar/events/[id].astro +9 -0
  221. package/src/pages/admin/calendar/events/index.astro +41 -83
  222. package/src/pages/admin/calendar/index.astro +43 -0
  223. package/src/pages/admin/calendar/resources/[id].astro +27 -5
  224. package/src/pages/admin/calendar/resources/index.astro +16 -17
  225. package/src/pages/admin/calendar/resources/link.astro +52 -12
  226. package/src/pages/admin/calendar/settings.astro +458 -0
  227. package/src/pages/admin/integrations.astro +5 -11
  228. package/src/pages/admin/login.astro +6 -2
  229. package/src/pages/admin/logout.ts +5 -2
  230. package/src/pages/admin/mobile.astro +18 -0
  231. package/src/pages/admin/pages/[id].astro +62 -0
  232. package/src/pages/admin/section-preview.astro +61 -0
  233. package/src/pages/admin/users.astro +107 -11
  234. package/src/pages/api/agent/docs.ts +6 -2
  235. package/src/pages/api/agent/index.ts +1 -1
  236. package/src/pages/api/ai/settings.ts +7 -4
  237. package/src/pages/api/design/ai.ts +15 -0
  238. package/src/pages/api/design/index.ts +12 -42
  239. package/src/pages/api/design/translate.ts +15 -0
  240. package/src/pages/api/live/thumb.ts +1 -1
  241. package/src/pages/api/mcp.ts +2 -2
  242. package/src/pages/api/media/upload.ts +10 -78
  243. package/src/pages/api/push/admin.ts +27 -0
  244. package/src/pages/api/v1/admin/bookings/[id]/[action].ts +14 -0
  245. package/src/pages/api/v1/admin/bookings/index.ts +6 -0
  246. package/src/pages/api/v1/admin/documents/[kind]/[id]/[action].ts +17 -0
  247. package/src/pages/api/v1/admin/documents/[kind]/[id]/index.ts +20 -0
  248. package/src/pages/api/v1/admin/documents/[kind]/[id]/translations/[locale]/[action].ts +26 -0
  249. package/src/pages/api/v1/admin/documents/[kind]/[id]/translations/[locale]/index.ts +18 -0
  250. package/src/pages/api/v1/admin/documents/index.ts +13 -0
  251. package/src/pages/api/v1/admin/me.ts +6 -0
  252. package/src/pages/api/v1/admin/media/index.ts +32 -0
  253. package/src/pages/api/v1/admin/sections/[pageId]/[sectionId]/index.ts +14 -0
  254. package/src/pages/api/v1/admin/sections/[pageId]/[sectionId]/publish.ts +14 -0
  255. package/src/pages/api/v1/admin/sections/[pageId]/[sectionId]/translations/[locale]/[action].ts +22 -0
  256. package/src/pages/api/v1/admin/sections/[pageId]/[sectionId]/translations/[locale]/index.ts +14 -0
  257. package/src/pages/api/v1/admin/sections/index.ts +6 -0
  258. package/src/pages/api/v1/auth/revoke.ts +5 -0
  259. package/src/pages/api/v1/auth/token.ts +5 -0
  260. package/src/pages/api/v1/devices/[token].ts +20 -0
  261. package/src/pages/api/v1/devices/index.ts +17 -0
  262. package/src/pages/api/v1/openapi.json.ts +7 -0
  263. package/src/pages/api/v1/pages/[...slug].ts +7 -0
  264. package/src/pages/api/v1/pages/home.ts +7 -0
  265. package/src/pages/api/v1/push/topics.ts +7 -0
  266. package/src/pages/api/v1/site.ts +7 -0
  267. package/src/pages/api/v1/theme.ts +7 -0
  268. package/src/pages/blog/[slug].astro +8 -2
  269. package/src/pages/blog/index.astro +11 -4
  270. package/src/pages/book/[resource].ics.ts +7 -1
  271. package/src/pages/embed/section/[...path].astro +42 -0
  272. package/src/pages/events/[slug].astro +7 -2
  273. package/src/pages/index.astro +11 -5
  274. package/src/pages/sitemap.xml.ts +8 -0
  275. package/src/styles/admin.css +117 -0
  276. package/src/styles/cards.css +5 -1
  277. package/src/styles/editor.css +57 -0
  278. package/src/styles/mobile-app.css +151 -0
  279. package/src/styles/schedule.css +325 -0
  280. package/src/styles/sections.css +21 -12
  281. package/src/styles/theme-editor.css +255 -0
  282. package/src/theme-sdk/contract.d.mts +2193 -89
  283. package/src/theme-sdk/contract.mjs +77 -20
  284. package/src/theme-sdk/fields.d.mts +88 -0
  285. package/src/theme-sdk/fields.mjs +330 -0
  286. package/src/theme-sdk/index.ts +14 -2
  287. package/src/theme-sdk/tokens.d.mts +11 -0
  288. package/src/virtual.d.ts +4 -0
  289. package/src/pages/admin/calendar/index.ts +0 -4
@@ -1,16 +1,86 @@
1
1
  /** @param {Partial<import("zod").infer<typeof ThemeManifest>>} [manifest] */
2
2
  export function sectionDefinitions(manifest?: Partial<import("zod").infer<typeof ThemeManifest>>): {
3
3
  [x: string]: {
4
- name: string;
5
- version: number;
6
- variants: string[];
7
4
  fields: Record<string, {
5
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
8
6
  label: string;
9
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
10
7
  options?: string[] | undefined;
11
- default?: string | number | undefined;
8
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
9
+ placeholder?: string | undefined;
10
+ required?: boolean | undefined;
11
+ maxLength?: number | undefined;
12
+ aiHint?: string | undefined;
13
+ locked?: boolean | undefined;
14
+ translatable?: boolean | undefined;
15
+ help?: string | undefined;
16
+ visibleIf?: {
17
+ field: string;
18
+ equals?: string | number | boolean | undefined;
19
+ notEquals?: string | number | boolean | undefined;
20
+ in?: (string | number | boolean)[] | undefined;
21
+ } | undefined;
22
+ } | {
23
+ type: "list";
24
+ label: string;
25
+ fields: Record<string, {
26
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
27
+ label: string;
28
+ options?: string[] | undefined;
29
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
30
+ placeholder?: string | undefined;
31
+ required?: boolean | undefined;
32
+ maxLength?: number | undefined;
33
+ aiHint?: string | undefined;
34
+ locked?: boolean | undefined;
35
+ translatable?: boolean | undefined;
36
+ help?: string | undefined;
37
+ visibleIf?: {
38
+ field: string;
39
+ equals?: string | number | boolean | undefined;
40
+ notEquals?: string | number | boolean | undefined;
41
+ in?: (string | number | boolean)[] | undefined;
42
+ } | undefined;
43
+ }>;
44
+ max: number;
45
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
46
+ locked?: boolean | undefined;
47
+ help?: string | undefined;
48
+ visibleIf?: {
49
+ field: string;
50
+ equals?: string | number | boolean | undefined;
51
+ notEquals?: string | number | boolean | undefined;
52
+ in?: (string | number | boolean)[] | undefined;
53
+ } | undefined;
54
+ itemLabel?: string | undefined;
55
+ min?: number | undefined;
56
+ } | {
57
+ type: "source";
58
+ label: string;
59
+ source: "events" | "posts" | "bookings";
60
+ default?: Record<string, string | number | boolean> | undefined;
61
+ locked?: boolean | undefined;
62
+ help?: string | undefined;
63
+ visibleIf?: {
64
+ field: string;
65
+ equals?: string | number | boolean | undefined;
66
+ notEquals?: string | number | boolean | undefined;
67
+ in?: (string | number | boolean)[] | undefined;
68
+ } | undefined;
12
69
  }>;
70
+ name: string;
71
+ version: number;
72
+ variants: string[];
13
73
  component?: string | undefined;
74
+ description?: string | undefined;
75
+ category?: string | undefined;
76
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
77
+ limit?: number | undefined;
78
+ presets?: {
79
+ name: string;
80
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
81
+ description?: string | undefined;
82
+ variant?: string | undefined;
83
+ }[] | undefined;
14
84
  };
15
85
  };
16
86
  /** @param {import("zod").infer<typeof SectionLayout>} layout
@@ -19,92 +89,1245 @@ export function sectionIssues(layout: import("zod").infer<typeof SectionLayout>,
19
89
  id: string;
20
90
  message: string;
21
91
  }[];
92
+ export * from "./fields.mjs";
22
93
  export { ThemeTokens } from "./tokens.mjs";
23
94
  export const THEME_API_VERSION: 1;
24
95
  export const Slug: z.ZodString;
25
- export const Field: z.ZodObject<{
26
- label: z.ZodString;
27
- type: z.ZodEnum<["text", "textarea", "image", "url", "select", "number"]>;
28
- default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
96
+ export const FieldValue: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>;
97
+ /** show a field only when a sibling field matches: { field, equals | notEquals | in }; no operator = sibling is filled in */
98
+ export const VisibleIf: z.ZodObject<{
99
+ field: z.ZodString;
100
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
101
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
102
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
103
+ }, "strict", z.ZodTypeAny, {
104
+ field: string;
105
+ equals?: string | number | boolean | undefined;
106
+ notEquals?: string | number | boolean | undefined;
107
+ in?: (string | number | boolean)[] | undefined;
108
+ }, {
109
+ field: string;
110
+ equals?: string | number | boolean | undefined;
111
+ notEquals?: string | number | boolean | undefined;
112
+ in?: (string | number | boolean)[] | undefined;
113
+ }>;
114
+ export const ScalarField: z.ZodObject<{
115
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
116
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
29
117
  options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
118
+ placeholder: z.ZodOptional<z.ZodString>;
119
+ required: z.ZodOptional<z.ZodBoolean>;
120
+ maxLength: z.ZodOptional<z.ZodNumber>;
121
+ aiHint: z.ZodOptional<z.ZodString>;
122
+ locked: z.ZodOptional<z.ZodBoolean>;
123
+ translatable: z.ZodOptional<z.ZodBoolean>;
124
+ label: z.ZodString;
125
+ help: z.ZodOptional<z.ZodString>;
126
+ visibleIf: z.ZodOptional<z.ZodObject<{
127
+ field: z.ZodString;
128
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
129
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
130
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
131
+ }, "strict", z.ZodTypeAny, {
132
+ field: string;
133
+ equals?: string | number | boolean | undefined;
134
+ notEquals?: string | number | boolean | undefined;
135
+ in?: (string | number | boolean)[] | undefined;
136
+ }, {
137
+ field: string;
138
+ equals?: string | number | boolean | undefined;
139
+ notEquals?: string | number | boolean | undefined;
140
+ in?: (string | number | boolean)[] | undefined;
141
+ }>>;
30
142
  }, "strict", z.ZodTypeAny, {
143
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
31
144
  label: string;
32
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
33
145
  options?: string[] | undefined;
34
- default?: string | number | undefined;
146
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
147
+ placeholder?: string | undefined;
148
+ required?: boolean | undefined;
149
+ maxLength?: number | undefined;
150
+ aiHint?: string | undefined;
151
+ locked?: boolean | undefined;
152
+ translatable?: boolean | undefined;
153
+ help?: string | undefined;
154
+ visibleIf?: {
155
+ field: string;
156
+ equals?: string | number | boolean | undefined;
157
+ notEquals?: string | number | boolean | undefined;
158
+ in?: (string | number | boolean)[] | undefined;
159
+ } | undefined;
35
160
  }, {
161
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
36
162
  label: string;
37
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
38
163
  options?: string[] | undefined;
39
- default?: string | number | undefined;
164
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
165
+ placeholder?: string | undefined;
166
+ required?: boolean | undefined;
167
+ maxLength?: number | undefined;
168
+ aiHint?: string | undefined;
169
+ locked?: boolean | undefined;
170
+ translatable?: boolean | undefined;
171
+ help?: string | undefined;
172
+ visibleIf?: {
173
+ field: string;
174
+ equals?: string | number | boolean | undefined;
175
+ notEquals?: string | number | boolean | undefined;
176
+ in?: (string | number | boolean)[] | undefined;
177
+ } | undefined;
40
178
  }>;
179
+ /** repeater: rows of scalar sub-fields (one level — a list can't hold a list) */
180
+ export const ListField: z.ZodObject<{
181
+ type: z.ZodLiteral<"list">;
182
+ fields: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
183
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
184
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
185
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
186
+ placeholder: z.ZodOptional<z.ZodString>;
187
+ required: z.ZodOptional<z.ZodBoolean>;
188
+ maxLength: z.ZodOptional<z.ZodNumber>;
189
+ aiHint: z.ZodOptional<z.ZodString>;
190
+ locked: z.ZodOptional<z.ZodBoolean>;
191
+ translatable: z.ZodOptional<z.ZodBoolean>;
192
+ label: z.ZodString;
193
+ help: z.ZodOptional<z.ZodString>;
194
+ visibleIf: z.ZodOptional<z.ZodObject<{
195
+ field: z.ZodString;
196
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
197
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
198
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
199
+ }, "strict", z.ZodTypeAny, {
200
+ field: string;
201
+ equals?: string | number | boolean | undefined;
202
+ notEquals?: string | number | boolean | undefined;
203
+ in?: (string | number | boolean)[] | undefined;
204
+ }, {
205
+ field: string;
206
+ equals?: string | number | boolean | undefined;
207
+ notEquals?: string | number | boolean | undefined;
208
+ in?: (string | number | boolean)[] | undefined;
209
+ }>>;
210
+ }, "strict", z.ZodTypeAny, {
211
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
212
+ label: string;
213
+ options?: string[] | undefined;
214
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
215
+ placeholder?: string | undefined;
216
+ required?: boolean | undefined;
217
+ maxLength?: number | undefined;
218
+ aiHint?: string | undefined;
219
+ locked?: boolean | undefined;
220
+ translatable?: boolean | undefined;
221
+ help?: string | undefined;
222
+ visibleIf?: {
223
+ field: string;
224
+ equals?: string | number | boolean | undefined;
225
+ notEquals?: string | number | boolean | undefined;
226
+ in?: (string | number | boolean)[] | undefined;
227
+ } | undefined;
228
+ }, {
229
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
230
+ label: string;
231
+ options?: string[] | undefined;
232
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
233
+ placeholder?: string | undefined;
234
+ required?: boolean | undefined;
235
+ maxLength?: number | undefined;
236
+ aiHint?: string | undefined;
237
+ locked?: boolean | undefined;
238
+ translatable?: boolean | undefined;
239
+ help?: string | undefined;
240
+ visibleIf?: {
241
+ field: string;
242
+ equals?: string | number | boolean | undefined;
243
+ notEquals?: string | number | boolean | undefined;
244
+ in?: (string | number | boolean)[] | undefined;
245
+ } | undefined;
246
+ }>>, Record<string, {
247
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
248
+ label: string;
249
+ options?: string[] | undefined;
250
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
251
+ placeholder?: string | undefined;
252
+ required?: boolean | undefined;
253
+ maxLength?: number | undefined;
254
+ aiHint?: string | undefined;
255
+ locked?: boolean | undefined;
256
+ translatable?: boolean | undefined;
257
+ help?: string | undefined;
258
+ visibleIf?: {
259
+ field: string;
260
+ equals?: string | number | boolean | undefined;
261
+ notEquals?: string | number | boolean | undefined;
262
+ in?: (string | number | boolean)[] | undefined;
263
+ } | undefined;
264
+ }>, Record<string, {
265
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
266
+ label: string;
267
+ options?: string[] | undefined;
268
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
269
+ placeholder?: string | undefined;
270
+ required?: boolean | undefined;
271
+ maxLength?: number | undefined;
272
+ aiHint?: string | undefined;
273
+ locked?: boolean | undefined;
274
+ translatable?: boolean | undefined;
275
+ help?: string | undefined;
276
+ visibleIf?: {
277
+ field: string;
278
+ equals?: string | number | boolean | undefined;
279
+ notEquals?: string | number | boolean | undefined;
280
+ in?: (string | number | boolean)[] | undefined;
281
+ } | undefined;
282
+ }>>;
283
+ itemLabel: z.ZodOptional<z.ZodString>;
284
+ min: z.ZodOptional<z.ZodNumber>;
285
+ max: z.ZodDefault<z.ZodNumber>;
286
+ default: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">>;
287
+ locked: z.ZodOptional<z.ZodBoolean>;
288
+ label: z.ZodString;
289
+ help: z.ZodOptional<z.ZodString>;
290
+ visibleIf: z.ZodOptional<z.ZodObject<{
291
+ field: z.ZodString;
292
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
293
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
294
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
295
+ }, "strict", z.ZodTypeAny, {
296
+ field: string;
297
+ equals?: string | number | boolean | undefined;
298
+ notEquals?: string | number | boolean | undefined;
299
+ in?: (string | number | boolean)[] | undefined;
300
+ }, {
301
+ field: string;
302
+ equals?: string | number | boolean | undefined;
303
+ notEquals?: string | number | boolean | undefined;
304
+ in?: (string | number | boolean)[] | undefined;
305
+ }>>;
306
+ }, "strict", z.ZodTypeAny, {
307
+ type: "list";
308
+ label: string;
309
+ fields: Record<string, {
310
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
311
+ label: string;
312
+ options?: string[] | undefined;
313
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
314
+ placeholder?: string | undefined;
315
+ required?: boolean | undefined;
316
+ maxLength?: number | undefined;
317
+ aiHint?: string | undefined;
318
+ locked?: boolean | undefined;
319
+ translatable?: boolean | undefined;
320
+ help?: string | undefined;
321
+ visibleIf?: {
322
+ field: string;
323
+ equals?: string | number | boolean | undefined;
324
+ notEquals?: string | number | boolean | undefined;
325
+ in?: (string | number | boolean)[] | undefined;
326
+ } | undefined;
327
+ }>;
328
+ max: number;
329
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
330
+ locked?: boolean | undefined;
331
+ help?: string | undefined;
332
+ visibleIf?: {
333
+ field: string;
334
+ equals?: string | number | boolean | undefined;
335
+ notEquals?: string | number | boolean | undefined;
336
+ in?: (string | number | boolean)[] | undefined;
337
+ } | undefined;
338
+ itemLabel?: string | undefined;
339
+ min?: number | undefined;
340
+ }, {
341
+ type: "list";
342
+ label: string;
343
+ fields: Record<string, {
344
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
345
+ label: string;
346
+ options?: string[] | undefined;
347
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
348
+ placeholder?: string | undefined;
349
+ required?: boolean | undefined;
350
+ maxLength?: number | undefined;
351
+ aiHint?: string | undefined;
352
+ locked?: boolean | undefined;
353
+ translatable?: boolean | undefined;
354
+ help?: string | undefined;
355
+ visibleIf?: {
356
+ field: string;
357
+ equals?: string | number | boolean | undefined;
358
+ notEquals?: string | number | boolean | undefined;
359
+ in?: (string | number | boolean)[] | undefined;
360
+ } | undefined;
361
+ }>;
362
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
363
+ locked?: boolean | undefined;
364
+ help?: string | undefined;
365
+ visibleIf?: {
366
+ field: string;
367
+ equals?: string | number | boolean | undefined;
368
+ notEquals?: string | number | boolean | undefined;
369
+ in?: (string | number | boolean)[] | undefined;
370
+ } | undefined;
371
+ itemLabel?: string | undefined;
372
+ min?: number | undefined;
373
+ max?: number | undefined;
374
+ }>;
375
+ /** linked data: the owner picks what to show; items resolve fresh on every request */
376
+ export const SourceField: z.ZodObject<{
377
+ type: z.ZodLiteral<"source">;
378
+ source: z.ZodEnum<["events", "posts", "bookings"]>;
379
+ default: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
380
+ locked: z.ZodOptional<z.ZodBoolean>;
381
+ label: z.ZodString;
382
+ help: z.ZodOptional<z.ZodString>;
383
+ visibleIf: z.ZodOptional<z.ZodObject<{
384
+ field: z.ZodString;
385
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
386
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
387
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
388
+ }, "strict", z.ZodTypeAny, {
389
+ field: string;
390
+ equals?: string | number | boolean | undefined;
391
+ notEquals?: string | number | boolean | undefined;
392
+ in?: (string | number | boolean)[] | undefined;
393
+ }, {
394
+ field: string;
395
+ equals?: string | number | boolean | undefined;
396
+ notEquals?: string | number | boolean | undefined;
397
+ in?: (string | number | boolean)[] | undefined;
398
+ }>>;
399
+ }, "strict", z.ZodTypeAny, {
400
+ type: "source";
401
+ label: string;
402
+ source: "events" | "posts" | "bookings";
403
+ default?: Record<string, string | number | boolean> | undefined;
404
+ locked?: boolean | undefined;
405
+ help?: string | undefined;
406
+ visibleIf?: {
407
+ field: string;
408
+ equals?: string | number | boolean | undefined;
409
+ notEquals?: string | number | boolean | undefined;
410
+ in?: (string | number | boolean)[] | undefined;
411
+ } | undefined;
412
+ }, {
413
+ type: "source";
414
+ label: string;
415
+ source: "events" | "posts" | "bookings";
416
+ default?: Record<string, string | number | boolean> | undefined;
417
+ locked?: boolean | undefined;
418
+ help?: string | undefined;
419
+ visibleIf?: {
420
+ field: string;
421
+ equals?: string | number | boolean | undefined;
422
+ notEquals?: string | number | boolean | undefined;
423
+ in?: (string | number | boolean)[] | undefined;
424
+ } | undefined;
425
+ }>;
426
+ export const Field: z.ZodUnion<[z.ZodObject<{
427
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
428
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
429
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
430
+ placeholder: z.ZodOptional<z.ZodString>;
431
+ required: z.ZodOptional<z.ZodBoolean>;
432
+ maxLength: z.ZodOptional<z.ZodNumber>;
433
+ aiHint: z.ZodOptional<z.ZodString>;
434
+ locked: z.ZodOptional<z.ZodBoolean>;
435
+ translatable: z.ZodOptional<z.ZodBoolean>;
436
+ label: z.ZodString;
437
+ help: z.ZodOptional<z.ZodString>;
438
+ visibleIf: z.ZodOptional<z.ZodObject<{
439
+ field: z.ZodString;
440
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
441
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
442
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
443
+ }, "strict", z.ZodTypeAny, {
444
+ field: string;
445
+ equals?: string | number | boolean | undefined;
446
+ notEquals?: string | number | boolean | undefined;
447
+ in?: (string | number | boolean)[] | undefined;
448
+ }, {
449
+ field: string;
450
+ equals?: string | number | boolean | undefined;
451
+ notEquals?: string | number | boolean | undefined;
452
+ in?: (string | number | boolean)[] | undefined;
453
+ }>>;
454
+ }, "strict", z.ZodTypeAny, {
455
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
456
+ label: string;
457
+ options?: string[] | undefined;
458
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
459
+ placeholder?: string | undefined;
460
+ required?: boolean | undefined;
461
+ maxLength?: number | undefined;
462
+ aiHint?: string | undefined;
463
+ locked?: boolean | undefined;
464
+ translatable?: boolean | undefined;
465
+ help?: string | undefined;
466
+ visibleIf?: {
467
+ field: string;
468
+ equals?: string | number | boolean | undefined;
469
+ notEquals?: string | number | boolean | undefined;
470
+ in?: (string | number | boolean)[] | undefined;
471
+ } | undefined;
472
+ }, {
473
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
474
+ label: string;
475
+ options?: string[] | undefined;
476
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
477
+ placeholder?: string | undefined;
478
+ required?: boolean | undefined;
479
+ maxLength?: number | undefined;
480
+ aiHint?: string | undefined;
481
+ locked?: boolean | undefined;
482
+ translatable?: boolean | undefined;
483
+ help?: string | undefined;
484
+ visibleIf?: {
485
+ field: string;
486
+ equals?: string | number | boolean | undefined;
487
+ notEquals?: string | number | boolean | undefined;
488
+ in?: (string | number | boolean)[] | undefined;
489
+ } | undefined;
490
+ }>, z.ZodObject<{
491
+ type: z.ZodLiteral<"list">;
492
+ fields: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
493
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
494
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
495
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
496
+ placeholder: z.ZodOptional<z.ZodString>;
497
+ required: z.ZodOptional<z.ZodBoolean>;
498
+ maxLength: z.ZodOptional<z.ZodNumber>;
499
+ aiHint: z.ZodOptional<z.ZodString>;
500
+ locked: z.ZodOptional<z.ZodBoolean>;
501
+ translatable: z.ZodOptional<z.ZodBoolean>;
502
+ label: z.ZodString;
503
+ help: z.ZodOptional<z.ZodString>;
504
+ visibleIf: z.ZodOptional<z.ZodObject<{
505
+ field: z.ZodString;
506
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
507
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
508
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
509
+ }, "strict", z.ZodTypeAny, {
510
+ field: string;
511
+ equals?: string | number | boolean | undefined;
512
+ notEquals?: string | number | boolean | undefined;
513
+ in?: (string | number | boolean)[] | undefined;
514
+ }, {
515
+ field: string;
516
+ equals?: string | number | boolean | undefined;
517
+ notEquals?: string | number | boolean | undefined;
518
+ in?: (string | number | boolean)[] | undefined;
519
+ }>>;
520
+ }, "strict", z.ZodTypeAny, {
521
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
522
+ label: string;
523
+ options?: string[] | undefined;
524
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
525
+ placeholder?: string | undefined;
526
+ required?: boolean | undefined;
527
+ maxLength?: number | undefined;
528
+ aiHint?: string | undefined;
529
+ locked?: boolean | undefined;
530
+ translatable?: boolean | undefined;
531
+ help?: string | undefined;
532
+ visibleIf?: {
533
+ field: string;
534
+ equals?: string | number | boolean | undefined;
535
+ notEquals?: string | number | boolean | undefined;
536
+ in?: (string | number | boolean)[] | undefined;
537
+ } | undefined;
538
+ }, {
539
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
540
+ label: string;
541
+ options?: string[] | undefined;
542
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
543
+ placeholder?: string | undefined;
544
+ required?: boolean | undefined;
545
+ maxLength?: number | undefined;
546
+ aiHint?: string | undefined;
547
+ locked?: boolean | undefined;
548
+ translatable?: boolean | undefined;
549
+ help?: string | undefined;
550
+ visibleIf?: {
551
+ field: string;
552
+ equals?: string | number | boolean | undefined;
553
+ notEquals?: string | number | boolean | undefined;
554
+ in?: (string | number | boolean)[] | undefined;
555
+ } | undefined;
556
+ }>>, Record<string, {
557
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
558
+ label: string;
559
+ options?: string[] | undefined;
560
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
561
+ placeholder?: string | undefined;
562
+ required?: boolean | undefined;
563
+ maxLength?: number | undefined;
564
+ aiHint?: string | undefined;
565
+ locked?: boolean | undefined;
566
+ translatable?: boolean | undefined;
567
+ help?: string | undefined;
568
+ visibleIf?: {
569
+ field: string;
570
+ equals?: string | number | boolean | undefined;
571
+ notEquals?: string | number | boolean | undefined;
572
+ in?: (string | number | boolean)[] | undefined;
573
+ } | undefined;
574
+ }>, Record<string, {
575
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
576
+ label: string;
577
+ options?: string[] | undefined;
578
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
579
+ placeholder?: string | undefined;
580
+ required?: boolean | undefined;
581
+ maxLength?: number | undefined;
582
+ aiHint?: string | undefined;
583
+ locked?: boolean | undefined;
584
+ translatable?: boolean | undefined;
585
+ help?: string | undefined;
586
+ visibleIf?: {
587
+ field: string;
588
+ equals?: string | number | boolean | undefined;
589
+ notEquals?: string | number | boolean | undefined;
590
+ in?: (string | number | boolean)[] | undefined;
591
+ } | undefined;
592
+ }>>;
593
+ itemLabel: z.ZodOptional<z.ZodString>;
594
+ min: z.ZodOptional<z.ZodNumber>;
595
+ max: z.ZodDefault<z.ZodNumber>;
596
+ default: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">>;
597
+ locked: z.ZodOptional<z.ZodBoolean>;
598
+ label: z.ZodString;
599
+ help: z.ZodOptional<z.ZodString>;
600
+ visibleIf: z.ZodOptional<z.ZodObject<{
601
+ field: z.ZodString;
602
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
603
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
604
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
605
+ }, "strict", z.ZodTypeAny, {
606
+ field: string;
607
+ equals?: string | number | boolean | undefined;
608
+ notEquals?: string | number | boolean | undefined;
609
+ in?: (string | number | boolean)[] | undefined;
610
+ }, {
611
+ field: string;
612
+ equals?: string | number | boolean | undefined;
613
+ notEquals?: string | number | boolean | undefined;
614
+ in?: (string | number | boolean)[] | undefined;
615
+ }>>;
616
+ }, "strict", z.ZodTypeAny, {
617
+ type: "list";
618
+ label: string;
619
+ fields: Record<string, {
620
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
621
+ label: string;
622
+ options?: string[] | undefined;
623
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
624
+ placeholder?: string | undefined;
625
+ required?: boolean | undefined;
626
+ maxLength?: number | undefined;
627
+ aiHint?: string | undefined;
628
+ locked?: boolean | undefined;
629
+ translatable?: boolean | undefined;
630
+ help?: string | undefined;
631
+ visibleIf?: {
632
+ field: string;
633
+ equals?: string | number | boolean | undefined;
634
+ notEquals?: string | number | boolean | undefined;
635
+ in?: (string | number | boolean)[] | undefined;
636
+ } | undefined;
637
+ }>;
638
+ max: number;
639
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
640
+ locked?: boolean | undefined;
641
+ help?: string | undefined;
642
+ visibleIf?: {
643
+ field: string;
644
+ equals?: string | number | boolean | undefined;
645
+ notEquals?: string | number | boolean | undefined;
646
+ in?: (string | number | boolean)[] | undefined;
647
+ } | undefined;
648
+ itemLabel?: string | undefined;
649
+ min?: number | undefined;
650
+ }, {
651
+ type: "list";
652
+ label: string;
653
+ fields: Record<string, {
654
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
655
+ label: string;
656
+ options?: string[] | undefined;
657
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
658
+ placeholder?: string | undefined;
659
+ required?: boolean | undefined;
660
+ maxLength?: number | undefined;
661
+ aiHint?: string | undefined;
662
+ locked?: boolean | undefined;
663
+ translatable?: boolean | undefined;
664
+ help?: string | undefined;
665
+ visibleIf?: {
666
+ field: string;
667
+ equals?: string | number | boolean | undefined;
668
+ notEquals?: string | number | boolean | undefined;
669
+ in?: (string | number | boolean)[] | undefined;
670
+ } | undefined;
671
+ }>;
672
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
673
+ locked?: boolean | undefined;
674
+ help?: string | undefined;
675
+ visibleIf?: {
676
+ field: string;
677
+ equals?: string | number | boolean | undefined;
678
+ notEquals?: string | number | boolean | undefined;
679
+ in?: (string | number | boolean)[] | undefined;
680
+ } | undefined;
681
+ itemLabel?: string | undefined;
682
+ min?: number | undefined;
683
+ max?: number | undefined;
684
+ }>, z.ZodObject<{
685
+ type: z.ZodLiteral<"source">;
686
+ source: z.ZodEnum<["events", "posts", "bookings"]>;
687
+ default: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
688
+ locked: z.ZodOptional<z.ZodBoolean>;
689
+ label: z.ZodString;
690
+ help: z.ZodOptional<z.ZodString>;
691
+ visibleIf: z.ZodOptional<z.ZodObject<{
692
+ field: z.ZodString;
693
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
694
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
695
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
696
+ }, "strict", z.ZodTypeAny, {
697
+ field: string;
698
+ equals?: string | number | boolean | undefined;
699
+ notEquals?: string | number | boolean | undefined;
700
+ in?: (string | number | boolean)[] | undefined;
701
+ }, {
702
+ field: string;
703
+ equals?: string | number | boolean | undefined;
704
+ notEquals?: string | number | boolean | undefined;
705
+ in?: (string | number | boolean)[] | undefined;
706
+ }>>;
707
+ }, "strict", z.ZodTypeAny, {
708
+ type: "source";
709
+ label: string;
710
+ source: "events" | "posts" | "bookings";
711
+ default?: Record<string, string | number | boolean> | undefined;
712
+ locked?: boolean | undefined;
713
+ help?: string | undefined;
714
+ visibleIf?: {
715
+ field: string;
716
+ equals?: string | number | boolean | undefined;
717
+ notEquals?: string | number | boolean | undefined;
718
+ in?: (string | number | boolean)[] | undefined;
719
+ } | undefined;
720
+ }, {
721
+ type: "source";
722
+ label: string;
723
+ source: "events" | "posts" | "bookings";
724
+ default?: Record<string, string | number | boolean> | undefined;
725
+ locked?: boolean | undefined;
726
+ help?: string | undefined;
727
+ visibleIf?: {
728
+ field: string;
729
+ equals?: string | number | boolean | undefined;
730
+ notEquals?: string | number | boolean | undefined;
731
+ in?: (string | number | boolean)[] | undefined;
732
+ } | undefined;
733
+ }>]>;
41
734
  export const SectionDefinition: z.ZodObject<{
42
735
  name: z.ZodString;
43
736
  version: z.ZodDefault<z.ZodNumber>;
44
737
  component: z.ZodOptional<z.ZodString>;
45
738
  variants: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
46
- fields: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
47
- label: z.ZodString;
48
- type: z.ZodEnum<["text", "textarea", "image", "url", "select", "number"]>;
49
- default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
739
+ fields: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
740
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
741
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
50
742
  options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
743
+ placeholder: z.ZodOptional<z.ZodString>;
744
+ required: z.ZodOptional<z.ZodBoolean>;
745
+ maxLength: z.ZodOptional<z.ZodNumber>;
746
+ aiHint: z.ZodOptional<z.ZodString>;
747
+ locked: z.ZodOptional<z.ZodBoolean>;
748
+ translatable: z.ZodOptional<z.ZodBoolean>;
749
+ label: z.ZodString;
750
+ help: z.ZodOptional<z.ZodString>;
751
+ visibleIf: z.ZodOptional<z.ZodObject<{
752
+ field: z.ZodString;
753
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
754
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
755
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
756
+ }, "strict", z.ZodTypeAny, {
757
+ field: string;
758
+ equals?: string | number | boolean | undefined;
759
+ notEquals?: string | number | boolean | undefined;
760
+ in?: (string | number | boolean)[] | undefined;
761
+ }, {
762
+ field: string;
763
+ equals?: string | number | boolean | undefined;
764
+ notEquals?: string | number | boolean | undefined;
765
+ in?: (string | number | boolean)[] | undefined;
766
+ }>>;
51
767
  }, "strict", z.ZodTypeAny, {
768
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
52
769
  label: string;
53
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
54
770
  options?: string[] | undefined;
55
- default?: string | number | undefined;
771
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
772
+ placeholder?: string | undefined;
773
+ required?: boolean | undefined;
774
+ maxLength?: number | undefined;
775
+ aiHint?: string | undefined;
776
+ locked?: boolean | undefined;
777
+ translatable?: boolean | undefined;
778
+ help?: string | undefined;
779
+ visibleIf?: {
780
+ field: string;
781
+ equals?: string | number | boolean | undefined;
782
+ notEquals?: string | number | boolean | undefined;
783
+ in?: (string | number | boolean)[] | undefined;
784
+ } | undefined;
56
785
  }, {
786
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
57
787
  label: string;
58
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
59
788
  options?: string[] | undefined;
60
- default?: string | number | undefined;
61
- }>>>;
789
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
790
+ placeholder?: string | undefined;
791
+ required?: boolean | undefined;
792
+ maxLength?: number | undefined;
793
+ aiHint?: string | undefined;
794
+ locked?: boolean | undefined;
795
+ translatable?: boolean | undefined;
796
+ help?: string | undefined;
797
+ visibleIf?: {
798
+ field: string;
799
+ equals?: string | number | boolean | undefined;
800
+ notEquals?: string | number | boolean | undefined;
801
+ in?: (string | number | boolean)[] | undefined;
802
+ } | undefined;
803
+ }>, z.ZodObject<{
804
+ type: z.ZodLiteral<"list">;
805
+ fields: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
806
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
807
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
808
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
809
+ placeholder: z.ZodOptional<z.ZodString>;
810
+ required: z.ZodOptional<z.ZodBoolean>;
811
+ maxLength: z.ZodOptional<z.ZodNumber>;
812
+ aiHint: z.ZodOptional<z.ZodString>;
813
+ locked: z.ZodOptional<z.ZodBoolean>;
814
+ translatable: z.ZodOptional<z.ZodBoolean>;
815
+ label: z.ZodString;
816
+ help: z.ZodOptional<z.ZodString>;
817
+ visibleIf: z.ZodOptional<z.ZodObject<{
818
+ field: z.ZodString;
819
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
820
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
821
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
822
+ }, "strict", z.ZodTypeAny, {
823
+ field: string;
824
+ equals?: string | number | boolean | undefined;
825
+ notEquals?: string | number | boolean | undefined;
826
+ in?: (string | number | boolean)[] | undefined;
827
+ }, {
828
+ field: string;
829
+ equals?: string | number | boolean | undefined;
830
+ notEquals?: string | number | boolean | undefined;
831
+ in?: (string | number | boolean)[] | undefined;
832
+ }>>;
833
+ }, "strict", z.ZodTypeAny, {
834
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
835
+ label: string;
836
+ options?: string[] | undefined;
837
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
838
+ placeholder?: string | undefined;
839
+ required?: boolean | undefined;
840
+ maxLength?: number | undefined;
841
+ aiHint?: string | undefined;
842
+ locked?: boolean | undefined;
843
+ translatable?: boolean | undefined;
844
+ help?: string | undefined;
845
+ visibleIf?: {
846
+ field: string;
847
+ equals?: string | number | boolean | undefined;
848
+ notEquals?: string | number | boolean | undefined;
849
+ in?: (string | number | boolean)[] | undefined;
850
+ } | undefined;
851
+ }, {
852
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
853
+ label: string;
854
+ options?: string[] | undefined;
855
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
856
+ placeholder?: string | undefined;
857
+ required?: boolean | undefined;
858
+ maxLength?: number | undefined;
859
+ aiHint?: string | undefined;
860
+ locked?: boolean | undefined;
861
+ translatable?: boolean | undefined;
862
+ help?: string | undefined;
863
+ visibleIf?: {
864
+ field: string;
865
+ equals?: string | number | boolean | undefined;
866
+ notEquals?: string | number | boolean | undefined;
867
+ in?: (string | number | boolean)[] | undefined;
868
+ } | undefined;
869
+ }>>, Record<string, {
870
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
871
+ label: string;
872
+ options?: string[] | undefined;
873
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
874
+ placeholder?: string | undefined;
875
+ required?: boolean | undefined;
876
+ maxLength?: number | undefined;
877
+ aiHint?: string | undefined;
878
+ locked?: boolean | undefined;
879
+ translatable?: boolean | undefined;
880
+ help?: string | undefined;
881
+ visibleIf?: {
882
+ field: string;
883
+ equals?: string | number | boolean | undefined;
884
+ notEquals?: string | number | boolean | undefined;
885
+ in?: (string | number | boolean)[] | undefined;
886
+ } | undefined;
887
+ }>, Record<string, {
888
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
889
+ label: string;
890
+ options?: string[] | undefined;
891
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
892
+ placeholder?: string | undefined;
893
+ required?: boolean | undefined;
894
+ maxLength?: number | undefined;
895
+ aiHint?: string | undefined;
896
+ locked?: boolean | undefined;
897
+ translatable?: boolean | undefined;
898
+ help?: string | undefined;
899
+ visibleIf?: {
900
+ field: string;
901
+ equals?: string | number | boolean | undefined;
902
+ notEquals?: string | number | boolean | undefined;
903
+ in?: (string | number | boolean)[] | undefined;
904
+ } | undefined;
905
+ }>>;
906
+ itemLabel: z.ZodOptional<z.ZodString>;
907
+ min: z.ZodOptional<z.ZodNumber>;
908
+ max: z.ZodDefault<z.ZodNumber>;
909
+ default: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">>;
910
+ locked: z.ZodOptional<z.ZodBoolean>;
911
+ label: z.ZodString;
912
+ help: z.ZodOptional<z.ZodString>;
913
+ visibleIf: z.ZodOptional<z.ZodObject<{
914
+ field: z.ZodString;
915
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
916
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
917
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
918
+ }, "strict", z.ZodTypeAny, {
919
+ field: string;
920
+ equals?: string | number | boolean | undefined;
921
+ notEquals?: string | number | boolean | undefined;
922
+ in?: (string | number | boolean)[] | undefined;
923
+ }, {
924
+ field: string;
925
+ equals?: string | number | boolean | undefined;
926
+ notEquals?: string | number | boolean | undefined;
927
+ in?: (string | number | boolean)[] | undefined;
928
+ }>>;
929
+ }, "strict", z.ZodTypeAny, {
930
+ type: "list";
931
+ label: string;
932
+ fields: Record<string, {
933
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
934
+ label: string;
935
+ options?: string[] | undefined;
936
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
937
+ placeholder?: string | undefined;
938
+ required?: boolean | undefined;
939
+ maxLength?: number | undefined;
940
+ aiHint?: string | undefined;
941
+ locked?: boolean | undefined;
942
+ translatable?: boolean | undefined;
943
+ help?: string | undefined;
944
+ visibleIf?: {
945
+ field: string;
946
+ equals?: string | number | boolean | undefined;
947
+ notEquals?: string | number | boolean | undefined;
948
+ in?: (string | number | boolean)[] | undefined;
949
+ } | undefined;
950
+ }>;
951
+ max: number;
952
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
953
+ locked?: boolean | undefined;
954
+ help?: string | undefined;
955
+ visibleIf?: {
956
+ field: string;
957
+ equals?: string | number | boolean | undefined;
958
+ notEquals?: string | number | boolean | undefined;
959
+ in?: (string | number | boolean)[] | undefined;
960
+ } | undefined;
961
+ itemLabel?: string | undefined;
962
+ min?: number | undefined;
963
+ }, {
964
+ type: "list";
965
+ label: string;
966
+ fields: Record<string, {
967
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
968
+ label: string;
969
+ options?: string[] | undefined;
970
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
971
+ placeholder?: string | undefined;
972
+ required?: boolean | undefined;
973
+ maxLength?: number | undefined;
974
+ aiHint?: string | undefined;
975
+ locked?: boolean | undefined;
976
+ translatable?: boolean | undefined;
977
+ help?: string | undefined;
978
+ visibleIf?: {
979
+ field: string;
980
+ equals?: string | number | boolean | undefined;
981
+ notEquals?: string | number | boolean | undefined;
982
+ in?: (string | number | boolean)[] | undefined;
983
+ } | undefined;
984
+ }>;
985
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
986
+ locked?: boolean | undefined;
987
+ help?: string | undefined;
988
+ visibleIf?: {
989
+ field: string;
990
+ equals?: string | number | boolean | undefined;
991
+ notEquals?: string | number | boolean | undefined;
992
+ in?: (string | number | boolean)[] | undefined;
993
+ } | undefined;
994
+ itemLabel?: string | undefined;
995
+ min?: number | undefined;
996
+ max?: number | undefined;
997
+ }>, z.ZodObject<{
998
+ type: z.ZodLiteral<"source">;
999
+ source: z.ZodEnum<["events", "posts", "bookings"]>;
1000
+ default: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
1001
+ locked: z.ZodOptional<z.ZodBoolean>;
1002
+ label: z.ZodString;
1003
+ help: z.ZodOptional<z.ZodString>;
1004
+ visibleIf: z.ZodOptional<z.ZodObject<{
1005
+ field: z.ZodString;
1006
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1007
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1008
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
1009
+ }, "strict", z.ZodTypeAny, {
1010
+ field: string;
1011
+ equals?: string | number | boolean | undefined;
1012
+ notEquals?: string | number | boolean | undefined;
1013
+ in?: (string | number | boolean)[] | undefined;
1014
+ }, {
1015
+ field: string;
1016
+ equals?: string | number | boolean | undefined;
1017
+ notEquals?: string | number | boolean | undefined;
1018
+ in?: (string | number | boolean)[] | undefined;
1019
+ }>>;
1020
+ }, "strict", z.ZodTypeAny, {
1021
+ type: "source";
1022
+ label: string;
1023
+ source: "events" | "posts" | "bookings";
1024
+ default?: Record<string, string | number | boolean> | undefined;
1025
+ locked?: boolean | undefined;
1026
+ help?: string | undefined;
1027
+ visibleIf?: {
1028
+ field: string;
1029
+ equals?: string | number | boolean | undefined;
1030
+ notEquals?: string | number | boolean | undefined;
1031
+ in?: (string | number | boolean)[] | undefined;
1032
+ } | undefined;
1033
+ }, {
1034
+ type: "source";
1035
+ label: string;
1036
+ source: "events" | "posts" | "bookings";
1037
+ default?: Record<string, string | number | boolean> | undefined;
1038
+ locked?: boolean | undefined;
1039
+ help?: string | undefined;
1040
+ visibleIf?: {
1041
+ field: string;
1042
+ equals?: string | number | boolean | undefined;
1043
+ notEquals?: string | number | boolean | undefined;
1044
+ in?: (string | number | boolean)[] | undefined;
1045
+ } | undefined;
1046
+ }>]>>>;
1047
+ description: z.ZodOptional<z.ZodString>;
1048
+ /** picker group: "Intro", "Events & times", "People", "Info", "Calls to action"… */
1049
+ category: z.ZodOptional<z.ZodString>;
1050
+ /** sample content: picker previews and empty fields in the admin preview (never saved) */
1051
+ example: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
1052
+ /** at most this many per page */
1053
+ limit: z.ZodOptional<z.ZodNumber>;
1054
+ /** ready-filled picker entries ("Service times: holiday") */
1055
+ presets: z.ZodOptional<z.ZodArray<z.ZodObject<{
1056
+ name: z.ZodString;
1057
+ description: z.ZodOptional<z.ZodString>;
1058
+ variant: z.ZodOptional<z.ZodString>;
1059
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
1060
+ }, "strict", z.ZodTypeAny, {
1061
+ name: string;
1062
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1063
+ description?: string | undefined;
1064
+ variant?: string | undefined;
1065
+ }, {
1066
+ name: string;
1067
+ description?: string | undefined;
1068
+ variant?: string | undefined;
1069
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1070
+ }>, "many">>;
62
1071
  }, "strict", z.ZodTypeAny, {
63
- name: string;
64
- version: number;
65
- variants: string[];
66
1072
  fields: Record<string, {
1073
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
67
1074
  label: string;
68
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
69
1075
  options?: string[] | undefined;
70
- default?: string | number | undefined;
1076
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1077
+ placeholder?: string | undefined;
1078
+ required?: boolean | undefined;
1079
+ maxLength?: number | undefined;
1080
+ aiHint?: string | undefined;
1081
+ locked?: boolean | undefined;
1082
+ translatable?: boolean | undefined;
1083
+ help?: string | undefined;
1084
+ visibleIf?: {
1085
+ field: string;
1086
+ equals?: string | number | boolean | undefined;
1087
+ notEquals?: string | number | boolean | undefined;
1088
+ in?: (string | number | boolean)[] | undefined;
1089
+ } | undefined;
1090
+ } | {
1091
+ type: "list";
1092
+ label: string;
1093
+ fields: Record<string, {
1094
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
1095
+ label: string;
1096
+ options?: string[] | undefined;
1097
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1098
+ placeholder?: string | undefined;
1099
+ required?: boolean | undefined;
1100
+ maxLength?: number | undefined;
1101
+ aiHint?: string | undefined;
1102
+ locked?: boolean | undefined;
1103
+ translatable?: boolean | undefined;
1104
+ help?: string | undefined;
1105
+ visibleIf?: {
1106
+ field: string;
1107
+ equals?: string | number | boolean | undefined;
1108
+ notEquals?: string | number | boolean | undefined;
1109
+ in?: (string | number | boolean)[] | undefined;
1110
+ } | undefined;
1111
+ }>;
1112
+ max: number;
1113
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
1114
+ locked?: boolean | undefined;
1115
+ help?: string | undefined;
1116
+ visibleIf?: {
1117
+ field: string;
1118
+ equals?: string | number | boolean | undefined;
1119
+ notEquals?: string | number | boolean | undefined;
1120
+ in?: (string | number | boolean)[] | undefined;
1121
+ } | undefined;
1122
+ itemLabel?: string | undefined;
1123
+ min?: number | undefined;
1124
+ } | {
1125
+ type: "source";
1126
+ label: string;
1127
+ source: "events" | "posts" | "bookings";
1128
+ default?: Record<string, string | number | boolean> | undefined;
1129
+ locked?: boolean | undefined;
1130
+ help?: string | undefined;
1131
+ visibleIf?: {
1132
+ field: string;
1133
+ equals?: string | number | boolean | undefined;
1134
+ notEquals?: string | number | boolean | undefined;
1135
+ in?: (string | number | boolean)[] | undefined;
1136
+ } | undefined;
71
1137
  }>;
1138
+ name: string;
1139
+ version: number;
1140
+ variants: string[];
72
1141
  component?: string | undefined;
1142
+ description?: string | undefined;
1143
+ category?: string | undefined;
1144
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1145
+ limit?: number | undefined;
1146
+ presets?: {
1147
+ name: string;
1148
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1149
+ description?: string | undefined;
1150
+ variant?: string | undefined;
1151
+ }[] | undefined;
73
1152
  }, {
74
1153
  name: string;
75
- version?: number | undefined;
76
- component?: string | undefined;
77
- variants?: string[] | undefined;
78
1154
  fields?: Record<string, {
1155
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
79
1156
  label: string;
80
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
81
1157
  options?: string[] | undefined;
82
- default?: string | number | undefined;
1158
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1159
+ placeholder?: string | undefined;
1160
+ required?: boolean | undefined;
1161
+ maxLength?: number | undefined;
1162
+ aiHint?: string | undefined;
1163
+ locked?: boolean | undefined;
1164
+ translatable?: boolean | undefined;
1165
+ help?: string | undefined;
1166
+ visibleIf?: {
1167
+ field: string;
1168
+ equals?: string | number | boolean | undefined;
1169
+ notEquals?: string | number | boolean | undefined;
1170
+ in?: (string | number | boolean)[] | undefined;
1171
+ } | undefined;
1172
+ } | {
1173
+ type: "list";
1174
+ label: string;
1175
+ fields: Record<string, {
1176
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
1177
+ label: string;
1178
+ options?: string[] | undefined;
1179
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1180
+ placeholder?: string | undefined;
1181
+ required?: boolean | undefined;
1182
+ maxLength?: number | undefined;
1183
+ aiHint?: string | undefined;
1184
+ locked?: boolean | undefined;
1185
+ translatable?: boolean | undefined;
1186
+ help?: string | undefined;
1187
+ visibleIf?: {
1188
+ field: string;
1189
+ equals?: string | number | boolean | undefined;
1190
+ notEquals?: string | number | boolean | undefined;
1191
+ in?: (string | number | boolean)[] | undefined;
1192
+ } | undefined;
1193
+ }>;
1194
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
1195
+ locked?: boolean | undefined;
1196
+ help?: string | undefined;
1197
+ visibleIf?: {
1198
+ field: string;
1199
+ equals?: string | number | boolean | undefined;
1200
+ notEquals?: string | number | boolean | undefined;
1201
+ in?: (string | number | boolean)[] | undefined;
1202
+ } | undefined;
1203
+ itemLabel?: string | undefined;
1204
+ min?: number | undefined;
1205
+ max?: number | undefined;
1206
+ } | {
1207
+ type: "source";
1208
+ label: string;
1209
+ source: "events" | "posts" | "bookings";
1210
+ default?: Record<string, string | number | boolean> | undefined;
1211
+ locked?: boolean | undefined;
1212
+ help?: string | undefined;
1213
+ visibleIf?: {
1214
+ field: string;
1215
+ equals?: string | number | boolean | undefined;
1216
+ notEquals?: string | number | boolean | undefined;
1217
+ in?: (string | number | boolean)[] | undefined;
1218
+ } | undefined;
83
1219
  }> | undefined;
1220
+ version?: number | undefined;
1221
+ component?: string | undefined;
1222
+ variants?: string[] | undefined;
1223
+ description?: string | undefined;
1224
+ category?: string | undefined;
1225
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1226
+ limit?: number | undefined;
1227
+ presets?: {
1228
+ name: string;
1229
+ description?: string | undefined;
1230
+ variant?: string | undefined;
1231
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1232
+ }[] | undefined;
84
1233
  }>;
85
1234
  /** @type {Record<string, import("zod").infer<typeof SectionDefinition>>} */
86
1235
  export const BUILTIN_SECTIONS: Record<string, import("zod").infer<typeof SectionDefinition>>;
1236
+ /** one language's words for a section: values by path + review state per path */
1237
+ export const SectionTranslation: z.ZodObject<{
1238
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
1239
+ meta: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1240
+ state: z.ZodEnum<["ai", "reviewed"]>;
1241
+ src: z.ZodString;
1242
+ }, "strict", z.ZodTypeAny, {
1243
+ state: "ai" | "reviewed";
1244
+ src: string;
1245
+ }, {
1246
+ state: "ai" | "reviewed";
1247
+ src: string;
1248
+ }>>>;
1249
+ }, "strict", z.ZodTypeAny, {
1250
+ data: Record<string, string | number | boolean>;
1251
+ meta: Record<string, {
1252
+ state: "ai" | "reviewed";
1253
+ src: string;
1254
+ }>;
1255
+ }, {
1256
+ data?: Record<string, string | number | boolean> | undefined;
1257
+ meta?: Record<string, {
1258
+ state: "ai" | "reviewed";
1259
+ src: string;
1260
+ }> | undefined;
1261
+ }>;
87
1262
  export const SectionInstance: z.ZodObject<{
88
1263
  id: z.ZodString;
89
1264
  type: z.ZodString;
90
1265
  version: z.ZodDefault<z.ZodNumber>;
91
1266
  variant: z.ZodDefault<z.ZodString>;
92
1267
  hidden: z.ZodDefault<z.ZodBoolean>;
93
- data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber]>>>;
1268
+ showFrom: z.ZodOptional<z.ZodString>;
1269
+ showUntil: z.ZodOptional<z.ZodString>;
1270
+ locked: z.ZodOptional<z.ZodBoolean>;
1271
+ translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1272
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
1273
+ meta: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1274
+ state: z.ZodEnum<["ai", "reviewed"]>;
1275
+ src: z.ZodString;
1276
+ }, "strict", z.ZodTypeAny, {
1277
+ state: "ai" | "reviewed";
1278
+ src: string;
1279
+ }, {
1280
+ state: "ai" | "reviewed";
1281
+ src: string;
1282
+ }>>>;
1283
+ }, "strict", z.ZodTypeAny, {
1284
+ data: Record<string, string | number | boolean>;
1285
+ meta: Record<string, {
1286
+ state: "ai" | "reviewed";
1287
+ src: string;
1288
+ }>;
1289
+ }, {
1290
+ data?: Record<string, string | number | boolean> | undefined;
1291
+ meta?: Record<string, {
1292
+ state: "ai" | "reviewed";
1293
+ src: string;
1294
+ }> | undefined;
1295
+ }>>>;
1296
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
94
1297
  }, "strict", z.ZodTypeAny, {
95
1298
  type: string;
96
1299
  version: number;
97
- id: string;
98
1300
  variant: string;
1301
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1302
+ id: string;
99
1303
  hidden: boolean;
100
- data: Record<string, string | number>;
1304
+ locked?: boolean | undefined;
1305
+ showFrom?: string | undefined;
1306
+ showUntil?: string | undefined;
1307
+ translations?: Record<string, {
1308
+ data: Record<string, string | number | boolean>;
1309
+ meta: Record<string, {
1310
+ state: "ai" | "reviewed";
1311
+ src: string;
1312
+ }>;
1313
+ }> | undefined;
101
1314
  }, {
102
1315
  type: string;
103
1316
  id: string;
1317
+ locked?: boolean | undefined;
104
1318
  version?: number | undefined;
105
1319
  variant?: string | undefined;
1320
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
106
1321
  hidden?: boolean | undefined;
107
- data?: Record<string, string | number> | undefined;
1322
+ showFrom?: string | undefined;
1323
+ showUntil?: string | undefined;
1324
+ translations?: Record<string, {
1325
+ data?: Record<string, string | number | boolean> | undefined;
1326
+ meta?: Record<string, {
1327
+ state: "ai" | "reviewed";
1328
+ src: string;
1329
+ }> | undefined;
1330
+ }> | undefined;
108
1331
  }>;
109
1332
  export const SectionLayout: z.ZodEffects<z.ZodObject<{
110
1333
  mode: z.ZodDefault<z.ZodEnum<["content", "sections"]>>;
@@ -114,60 +1337,148 @@ export const SectionLayout: z.ZodEffects<z.ZodObject<{
114
1337
  version: z.ZodDefault<z.ZodNumber>;
115
1338
  variant: z.ZodDefault<z.ZodString>;
116
1339
  hidden: z.ZodDefault<z.ZodBoolean>;
117
- data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber]>>>;
1340
+ showFrom: z.ZodOptional<z.ZodString>;
1341
+ showUntil: z.ZodOptional<z.ZodString>;
1342
+ locked: z.ZodOptional<z.ZodBoolean>;
1343
+ translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1344
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
1345
+ meta: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1346
+ state: z.ZodEnum<["ai", "reviewed"]>;
1347
+ src: z.ZodString;
1348
+ }, "strict", z.ZodTypeAny, {
1349
+ state: "ai" | "reviewed";
1350
+ src: string;
1351
+ }, {
1352
+ state: "ai" | "reviewed";
1353
+ src: string;
1354
+ }>>>;
1355
+ }, "strict", z.ZodTypeAny, {
1356
+ data: Record<string, string | number | boolean>;
1357
+ meta: Record<string, {
1358
+ state: "ai" | "reviewed";
1359
+ src: string;
1360
+ }>;
1361
+ }, {
1362
+ data?: Record<string, string | number | boolean> | undefined;
1363
+ meta?: Record<string, {
1364
+ state: "ai" | "reviewed";
1365
+ src: string;
1366
+ }> | undefined;
1367
+ }>>>;
1368
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
118
1369
  }, "strict", z.ZodTypeAny, {
119
1370
  type: string;
120
1371
  version: number;
121
- id: string;
122
1372
  variant: string;
1373
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1374
+ id: string;
123
1375
  hidden: boolean;
124
- data: Record<string, string | number>;
1376
+ locked?: boolean | undefined;
1377
+ showFrom?: string | undefined;
1378
+ showUntil?: string | undefined;
1379
+ translations?: Record<string, {
1380
+ data: Record<string, string | number | boolean>;
1381
+ meta: Record<string, {
1382
+ state: "ai" | "reviewed";
1383
+ src: string;
1384
+ }>;
1385
+ }> | undefined;
125
1386
  }, {
126
1387
  type: string;
127
1388
  id: string;
1389
+ locked?: boolean | undefined;
128
1390
  version?: number | undefined;
129
1391
  variant?: string | undefined;
1392
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
130
1393
  hidden?: boolean | undefined;
131
- data?: Record<string, string | number> | undefined;
1394
+ showFrom?: string | undefined;
1395
+ showUntil?: string | undefined;
1396
+ translations?: Record<string, {
1397
+ data?: Record<string, string | number | boolean> | undefined;
1398
+ meta?: Record<string, {
1399
+ state: "ai" | "reviewed";
1400
+ src: string;
1401
+ }> | undefined;
1402
+ }> | undefined;
132
1403
  }>, "many">;
133
1404
  }, "strict", z.ZodTypeAny, {
134
1405
  sections: {
135
1406
  type: string;
136
1407
  version: number;
137
- id: string;
138
1408
  variant: string;
1409
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1410
+ id: string;
139
1411
  hidden: boolean;
140
- data: Record<string, string | number>;
1412
+ locked?: boolean | undefined;
1413
+ showFrom?: string | undefined;
1414
+ showUntil?: string | undefined;
1415
+ translations?: Record<string, {
1416
+ data: Record<string, string | number | boolean>;
1417
+ meta: Record<string, {
1418
+ state: "ai" | "reviewed";
1419
+ src: string;
1420
+ }>;
1421
+ }> | undefined;
141
1422
  }[];
142
1423
  mode: "content" | "sections";
143
1424
  }, {
144
1425
  sections: {
145
1426
  type: string;
146
1427
  id: string;
1428
+ locked?: boolean | undefined;
147
1429
  version?: number | undefined;
148
1430
  variant?: string | undefined;
1431
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
149
1432
  hidden?: boolean | undefined;
150
- data?: Record<string, string | number> | undefined;
1433
+ showFrom?: string | undefined;
1434
+ showUntil?: string | undefined;
1435
+ translations?: Record<string, {
1436
+ data?: Record<string, string | number | boolean> | undefined;
1437
+ meta?: Record<string, {
1438
+ state: "ai" | "reviewed";
1439
+ src: string;
1440
+ }> | undefined;
1441
+ }> | undefined;
151
1442
  }[];
152
1443
  mode?: "content" | "sections" | undefined;
153
1444
  }>, {
154
1445
  sections: {
155
1446
  type: string;
156
1447
  version: number;
157
- id: string;
158
1448
  variant: string;
1449
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1450
+ id: string;
159
1451
  hidden: boolean;
160
- data: Record<string, string | number>;
1452
+ locked?: boolean | undefined;
1453
+ showFrom?: string | undefined;
1454
+ showUntil?: string | undefined;
1455
+ translations?: Record<string, {
1456
+ data: Record<string, string | number | boolean>;
1457
+ meta: Record<string, {
1458
+ state: "ai" | "reviewed";
1459
+ src: string;
1460
+ }>;
1461
+ }> | undefined;
161
1462
  }[];
162
1463
  mode: "content" | "sections";
163
1464
  }, {
164
1465
  sections: {
165
1466
  type: string;
166
1467
  id: string;
1468
+ locked?: boolean | undefined;
167
1469
  version?: number | undefined;
168
1470
  variant?: string | undefined;
1471
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
169
1472
  hidden?: boolean | undefined;
170
- data?: Record<string, string | number> | undefined;
1473
+ showFrom?: string | undefined;
1474
+ showUntil?: string | undefined;
1475
+ translations?: Record<string, {
1476
+ data?: Record<string, string | number | boolean> | undefined;
1477
+ meta?: Record<string, {
1478
+ state: "ai" | "reviewed";
1479
+ src: string;
1480
+ }> | undefined;
1481
+ }> | undefined;
171
1482
  }[];
172
1483
  mode?: "content" | "sections" | undefined;
173
1484
  }>;
@@ -179,60 +1490,148 @@ export const SectionPages: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
179
1490
  version: z.ZodDefault<z.ZodNumber>;
180
1491
  variant: z.ZodDefault<z.ZodString>;
181
1492
  hidden: z.ZodDefault<z.ZodBoolean>;
182
- data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber]>>>;
1493
+ showFrom: z.ZodOptional<z.ZodString>;
1494
+ showUntil: z.ZodOptional<z.ZodString>;
1495
+ locked: z.ZodOptional<z.ZodBoolean>;
1496
+ translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1497
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
1498
+ meta: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1499
+ state: z.ZodEnum<["ai", "reviewed"]>;
1500
+ src: z.ZodString;
1501
+ }, "strict", z.ZodTypeAny, {
1502
+ state: "ai" | "reviewed";
1503
+ src: string;
1504
+ }, {
1505
+ state: "ai" | "reviewed";
1506
+ src: string;
1507
+ }>>>;
1508
+ }, "strict", z.ZodTypeAny, {
1509
+ data: Record<string, string | number | boolean>;
1510
+ meta: Record<string, {
1511
+ state: "ai" | "reviewed";
1512
+ src: string;
1513
+ }>;
1514
+ }, {
1515
+ data?: Record<string, string | number | boolean> | undefined;
1516
+ meta?: Record<string, {
1517
+ state: "ai" | "reviewed";
1518
+ src: string;
1519
+ }> | undefined;
1520
+ }>>>;
1521
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
183
1522
  }, "strict", z.ZodTypeAny, {
184
1523
  type: string;
185
1524
  version: number;
186
- id: string;
187
1525
  variant: string;
1526
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1527
+ id: string;
188
1528
  hidden: boolean;
189
- data: Record<string, string | number>;
1529
+ locked?: boolean | undefined;
1530
+ showFrom?: string | undefined;
1531
+ showUntil?: string | undefined;
1532
+ translations?: Record<string, {
1533
+ data: Record<string, string | number | boolean>;
1534
+ meta: Record<string, {
1535
+ state: "ai" | "reviewed";
1536
+ src: string;
1537
+ }>;
1538
+ }> | undefined;
190
1539
  }, {
191
1540
  type: string;
192
1541
  id: string;
1542
+ locked?: boolean | undefined;
193
1543
  version?: number | undefined;
194
1544
  variant?: string | undefined;
1545
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
195
1546
  hidden?: boolean | undefined;
196
- data?: Record<string, string | number> | undefined;
1547
+ showFrom?: string | undefined;
1548
+ showUntil?: string | undefined;
1549
+ translations?: Record<string, {
1550
+ data?: Record<string, string | number | boolean> | undefined;
1551
+ meta?: Record<string, {
1552
+ state: "ai" | "reviewed";
1553
+ src: string;
1554
+ }> | undefined;
1555
+ }> | undefined;
197
1556
  }>, "many">;
198
1557
  }, "strict", z.ZodTypeAny, {
199
1558
  sections: {
200
1559
  type: string;
201
1560
  version: number;
202
- id: string;
203
1561
  variant: string;
1562
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1563
+ id: string;
204
1564
  hidden: boolean;
205
- data: Record<string, string | number>;
1565
+ locked?: boolean | undefined;
1566
+ showFrom?: string | undefined;
1567
+ showUntil?: string | undefined;
1568
+ translations?: Record<string, {
1569
+ data: Record<string, string | number | boolean>;
1570
+ meta: Record<string, {
1571
+ state: "ai" | "reviewed";
1572
+ src: string;
1573
+ }>;
1574
+ }> | undefined;
206
1575
  }[];
207
1576
  mode: "content" | "sections";
208
1577
  }, {
209
1578
  sections: {
210
1579
  type: string;
211
1580
  id: string;
1581
+ locked?: boolean | undefined;
212
1582
  version?: number | undefined;
213
1583
  variant?: string | undefined;
1584
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
214
1585
  hidden?: boolean | undefined;
215
- data?: Record<string, string | number> | undefined;
1586
+ showFrom?: string | undefined;
1587
+ showUntil?: string | undefined;
1588
+ translations?: Record<string, {
1589
+ data?: Record<string, string | number | boolean> | undefined;
1590
+ meta?: Record<string, {
1591
+ state: "ai" | "reviewed";
1592
+ src: string;
1593
+ }> | undefined;
1594
+ }> | undefined;
216
1595
  }[];
217
1596
  mode?: "content" | "sections" | undefined;
218
1597
  }>, {
219
1598
  sections: {
220
1599
  type: string;
221
1600
  version: number;
222
- id: string;
223
1601
  variant: string;
1602
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1603
+ id: string;
224
1604
  hidden: boolean;
225
- data: Record<string, string | number>;
1605
+ locked?: boolean | undefined;
1606
+ showFrom?: string | undefined;
1607
+ showUntil?: string | undefined;
1608
+ translations?: Record<string, {
1609
+ data: Record<string, string | number | boolean>;
1610
+ meta: Record<string, {
1611
+ state: "ai" | "reviewed";
1612
+ src: string;
1613
+ }>;
1614
+ }> | undefined;
226
1615
  }[];
227
1616
  mode: "content" | "sections";
228
1617
  }, {
229
1618
  sections: {
230
1619
  type: string;
231
1620
  id: string;
1621
+ locked?: boolean | undefined;
232
1622
  version?: number | undefined;
233
1623
  variant?: string | undefined;
1624
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
234
1625
  hidden?: boolean | undefined;
235
- data?: Record<string, string | number> | undefined;
1626
+ showFrom?: string | undefined;
1627
+ showUntil?: string | undefined;
1628
+ translations?: Record<string, {
1629
+ data?: Record<string, string | number | boolean> | undefined;
1630
+ meta?: Record<string, {
1631
+ state: "ai" | "reviewed";
1632
+ src: string;
1633
+ }> | undefined;
1634
+ }> | undefined;
236
1635
  }[];
237
1636
  mode?: "content" | "sections" | undefined;
238
1637
  }>>;
@@ -267,6 +1666,45 @@ export const PostOptions: z.ZodObject<{
267
1666
  progress?: boolean | undefined;
268
1667
  toc?: boolean | undefined;
269
1668
  }>;
1669
+ /** starting layouts a theme offers ("Start from Church home"); the owner's copy is theirs to edit */
1670
+ export const PagePreset: z.ZodObject<{
1671
+ name: z.ZodString;
1672
+ description: z.ZodOptional<z.ZodString>;
1673
+ sections: z.ZodArray<z.ZodObject<{
1674
+ type: z.ZodString;
1675
+ variant: z.ZodOptional<z.ZodString>;
1676
+ hidden: z.ZodOptional<z.ZodBoolean>;
1677
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
1678
+ }, "strict", z.ZodTypeAny, {
1679
+ type: string;
1680
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1681
+ variant?: string | undefined;
1682
+ hidden?: boolean | undefined;
1683
+ }, {
1684
+ type: string;
1685
+ variant?: string | undefined;
1686
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1687
+ hidden?: boolean | undefined;
1688
+ }>, "many">;
1689
+ }, "strict", z.ZodTypeAny, {
1690
+ name: string;
1691
+ sections: {
1692
+ type: string;
1693
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
1694
+ variant?: string | undefined;
1695
+ hidden?: boolean | undefined;
1696
+ }[];
1697
+ description?: string | undefined;
1698
+ }, {
1699
+ name: string;
1700
+ sections: {
1701
+ type: string;
1702
+ variant?: string | undefined;
1703
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
1704
+ hidden?: boolean | undefined;
1705
+ }[];
1706
+ description?: string | undefined;
1707
+ }>;
270
1708
  export const ThemeManifest: z.ZodObject<{
271
1709
  name: z.ZodString;
272
1710
  description: z.ZodDefault<z.ZodString>;
@@ -285,6 +1723,7 @@ export const ThemeManifest: z.ZodObject<{
285
1723
  panel: z.ZodDefault<z.ZodString>;
286
1724
  soft: z.ZodDefault<z.ZodString>;
287
1725
  accentInk: z.ZodDefault<z.ZodString>;
1726
+ live: z.ZodDefault<z.ZodString>;
288
1727
  button: z.ZodDefault<z.ZodEnum<["ink", "accent"]>>;
289
1728
  dark: z.ZodDefault<z.ZodObject<{
290
1729
  bg: z.ZodOptional<z.ZodString>;
@@ -294,7 +1733,9 @@ export const ThemeManifest: z.ZodObject<{
294
1733
  accent: z.ZodOptional<z.ZodString>;
295
1734
  panel: z.ZodOptional<z.ZodString>;
296
1735
  soft: z.ZodOptional<z.ZodString>;
1736
+ live: z.ZodOptional<z.ZodString>;
297
1737
  }, "strip", z.ZodTypeAny, {
1738
+ live?: string | undefined;
298
1739
  panel?: string | undefined;
299
1740
  bg?: string | undefined;
300
1741
  ink?: string | undefined;
@@ -303,6 +1744,7 @@ export const ThemeManifest: z.ZodObject<{
303
1744
  accent?: string | undefined;
304
1745
  soft?: string | undefined;
305
1746
  }, {
1747
+ live?: string | undefined;
306
1748
  panel?: string | undefined;
307
1749
  bg?: string | undefined;
308
1750
  ink?: string | undefined;
@@ -328,6 +1770,7 @@ export const ThemeManifest: z.ZodObject<{
328
1770
  footer: z.ZodDefault<z.ZodEnum<["columns", "simple"]>>;
329
1771
  blogLayout: z.ZodDefault<z.ZodEnum<["auto", "cards", "list"]>>;
330
1772
  }, "strip", z.ZodTypeAny, {
1773
+ live: string;
331
1774
  panel: string;
332
1775
  bg: string;
333
1776
  ink: string;
@@ -338,9 +1781,10 @@ export const ThemeManifest: z.ZodObject<{
338
1781
  accentInk: string;
339
1782
  button: "ink" | "accent";
340
1783
  dark: {
1784
+ live?: string | undefined;
341
1785
  panel?: string | undefined;
342
1786
  bg?: string | undefined;
343
- ink?: string | undefined;
1787
+ ink? /** at most this many per page */: string | undefined;
344
1788
  muted?: string | undefined;
345
1789
  line?: string | undefined;
346
1790
  accent?: string | undefined;
@@ -363,6 +1807,7 @@ export const ThemeManifest: z.ZodObject<{
363
1807
  footer: "columns" | "simple";
364
1808
  blogLayout: "list" | "auto" | "cards";
365
1809
  }, {
1810
+ live?: string | undefined;
366
1811
  panel?: string | undefined;
367
1812
  bg?: string | undefined;
368
1813
  ink?: string | undefined;
@@ -373,6 +1818,7 @@ export const ThemeManifest: z.ZodObject<{
373
1818
  accentInk?: string | undefined;
374
1819
  button?: "ink" | "accent" | undefined;
375
1820
  dark?: {
1821
+ live?: string | undefined;
376
1822
  panel?: string | undefined;
377
1823
  bg?: string | undefined;
378
1824
  ink?: string | undefined;
@@ -435,65 +1881,640 @@ export const ThemeManifest: z.ZodObject<{
435
1881
  version: z.ZodDefault<z.ZodNumber>;
436
1882
  component: z.ZodOptional<z.ZodString>;
437
1883
  variants: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
438
- fields: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
439
- label: z.ZodString;
440
- type: z.ZodEnum<["text", "textarea", "image", "url", "select", "number"]>;
441
- default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
1884
+ fields: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
1885
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
1886
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
442
1887
  options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1888
+ placeholder: z.ZodOptional<z.ZodString>;
1889
+ required: z.ZodOptional<z.ZodBoolean>;
1890
+ maxLength: z.ZodOptional<z.ZodNumber>;
1891
+ aiHint: z.ZodOptional<z.ZodString>;
1892
+ locked: z.ZodOptional<z.ZodBoolean>;
1893
+ translatable: z.ZodOptional<z.ZodBoolean>;
1894
+ label: z.ZodString;
1895
+ help: z.ZodOptional<z.ZodString>;
1896
+ visibleIf: z.ZodOptional<z.ZodObject<{
1897
+ field: z.ZodString;
1898
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1899
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1900
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
1901
+ }, "strict", z.ZodTypeAny, {
1902
+ field: string;
1903
+ equals?: string | number | boolean | undefined;
1904
+ notEquals?: string | number | boolean | undefined;
1905
+ in?: (string | number | boolean)[] | undefined;
1906
+ }, {
1907
+ field: string;
1908
+ equals?: string | number | boolean | undefined;
1909
+ notEquals?: string | number | boolean | undefined;
1910
+ in?: (string | number | boolean)[] | undefined;
1911
+ }>>;
443
1912
  }, "strict", z.ZodTypeAny, {
1913
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
444
1914
  label: string;
445
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
446
1915
  options?: string[] | undefined;
447
- default?: string | number | undefined;
1916
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1917
+ placeholder?: string | undefined;
1918
+ required?: boolean | undefined;
1919
+ maxLength?: number | undefined;
1920
+ aiHint?: string | undefined;
1921
+ locked?: boolean | undefined;
1922
+ translatable?: boolean | undefined;
1923
+ help?: string | undefined;
1924
+ visibleIf?: {
1925
+ field: string;
1926
+ equals?: string | number | boolean | undefined;
1927
+ notEquals?: string | number | boolean | undefined;
1928
+ in?: (string | number | boolean)[] | undefined;
1929
+ } | undefined;
448
1930
  }, {
1931
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
449
1932
  label: string;
450
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
451
1933
  options?: string[] | undefined;
452
- default?: string | number | undefined;
453
- }>>>;
1934
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1935
+ placeholder?: string | undefined;
1936
+ required?: boolean | undefined;
1937
+ maxLength?: number | undefined;
1938
+ aiHint?: string | undefined;
1939
+ locked?: boolean | undefined;
1940
+ translatable?: boolean | undefined;
1941
+ help?: string | undefined;
1942
+ visibleIf?: {
1943
+ field: string;
1944
+ equals?: string | number | boolean | undefined;
1945
+ notEquals?: string | number | boolean | undefined;
1946
+ in?: (string | number | boolean)[] | undefined;
1947
+ } | undefined;
1948
+ }>, z.ZodObject<{
1949
+ type: z.ZodLiteral<"list">;
1950
+ fields: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
1951
+ type: z.ZodEnum<["text", "textarea", "richtext", "image", "url", "link", "select", "number", "toggle", "date", "time"]>;
1952
+ default: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>;
1953
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1954
+ placeholder: z.ZodOptional<z.ZodString>;
1955
+ required: z.ZodOptional<z.ZodBoolean>;
1956
+ maxLength: z.ZodOptional<z.ZodNumber>;
1957
+ aiHint: z.ZodOptional<z.ZodString>;
1958
+ locked: z.ZodOptional<z.ZodBoolean>;
1959
+ translatable: z.ZodOptional<z.ZodBoolean>;
1960
+ label: z.ZodString;
1961
+ help: z.ZodOptional<z.ZodString>;
1962
+ visibleIf: z.ZodOptional<z.ZodObject<{
1963
+ field: z.ZodString;
1964
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1965
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1966
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
1967
+ }, "strict", z.ZodTypeAny, {
1968
+ field: string;
1969
+ equals?: string | number | boolean | undefined;
1970
+ notEquals?: string | number | boolean | undefined;
1971
+ in?: (string | number | boolean)[] | undefined;
1972
+ }, {
1973
+ field: string;
1974
+ equals?: string | number | boolean | undefined;
1975
+ notEquals?: string | number | boolean | undefined;
1976
+ in?: (string | number | boolean)[] | undefined;
1977
+ }>>;
1978
+ }, "strict", z.ZodTypeAny, {
1979
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
1980
+ label: string;
1981
+ options?: string[] | undefined;
1982
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
1983
+ placeholder?: string | undefined;
1984
+ required?: boolean | undefined;
1985
+ maxLength?: number | undefined;
1986
+ aiHint?: string | undefined;
1987
+ locked?: boolean | undefined;
1988
+ translatable?: boolean | undefined;
1989
+ help?: string | undefined;
1990
+ visibleIf?: {
1991
+ field: string;
1992
+ equals?: string | number | boolean | undefined;
1993
+ notEquals?: string | number | boolean | undefined;
1994
+ in?: (string | number | boolean)[] | undefined;
1995
+ } | undefined;
1996
+ }, {
1997
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
1998
+ label: string;
1999
+ options?: string[] | undefined;
2000
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2001
+ placeholder?: string | undefined;
2002
+ required?: boolean | undefined;
2003
+ maxLength?: number | undefined;
2004
+ aiHint?: string | undefined;
2005
+ locked?: boolean | undefined;
2006
+ translatable?: boolean | undefined;
2007
+ help?: string | undefined;
2008
+ visibleIf?: {
2009
+ field: string;
2010
+ equals?: string | number | boolean | undefined;
2011
+ notEquals?: string | number | boolean | undefined;
2012
+ in?: (string | number | boolean)[] | undefined;
2013
+ } | undefined;
2014
+ }>>, Record<string, {
2015
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2016
+ label: string;
2017
+ options?: string[] | undefined;
2018
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2019
+ placeholder?: string | undefined;
2020
+ required?: boolean | undefined;
2021
+ maxLength?: number | undefined;
2022
+ aiHint?: string | undefined;
2023
+ locked?: boolean | undefined;
2024
+ translatable?: boolean | undefined;
2025
+ help?: string | undefined;
2026
+ visibleIf?: {
2027
+ field: string;
2028
+ equals?: string | number | boolean | undefined;
2029
+ notEquals?: string | number | boolean | undefined;
2030
+ in?: (string | number | boolean)[] | undefined;
2031
+ } | undefined;
2032
+ }>, Record<string, {
2033
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2034
+ label: string;
2035
+ options?: string[] | undefined;
2036
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2037
+ placeholder?: string | undefined;
2038
+ required?: boolean | undefined;
2039
+ maxLength?: number | undefined;
2040
+ aiHint?: string | undefined;
2041
+ locked?: boolean | undefined;
2042
+ translatable?: boolean | undefined;
2043
+ help?: string | undefined;
2044
+ visibleIf?: {
2045
+ field: string;
2046
+ equals?: string | number | boolean | undefined;
2047
+ notEquals?: string | number | boolean | undefined;
2048
+ in?: (string | number | boolean)[] | undefined;
2049
+ } | undefined;
2050
+ }>>;
2051
+ itemLabel: z.ZodOptional<z.ZodString>;
2052
+ min: z.ZodOptional<z.ZodNumber>;
2053
+ max: z.ZodDefault<z.ZodNumber>;
2054
+ default: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">>;
2055
+ locked: z.ZodOptional<z.ZodBoolean>;
2056
+ label: z.ZodString;
2057
+ help: z.ZodOptional<z.ZodString>;
2058
+ visibleIf: z.ZodOptional<z.ZodObject<{
2059
+ field: z.ZodString;
2060
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
2061
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
2062
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
2063
+ }, "strict", z.ZodTypeAny, {
2064
+ field: string;
2065
+ equals?: string | number | boolean | undefined;
2066
+ notEquals?: string | number | boolean | undefined;
2067
+ in?: (string | number | boolean)[] | undefined;
2068
+ }, {
2069
+ field: string;
2070
+ equals?: string | number | boolean | undefined;
2071
+ notEquals?: string | number | boolean | undefined;
2072
+ in?: (string | number | boolean)[] | undefined;
2073
+ }>>;
2074
+ }, "strict", z.ZodTypeAny, {
2075
+ type: "list";
2076
+ label: string;
2077
+ fields: Record<string, {
2078
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2079
+ label: string;
2080
+ options?: string[] | undefined;
2081
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2082
+ placeholder?: string | undefined;
2083
+ required?: boolean | undefined;
2084
+ maxLength?: number | undefined;
2085
+ aiHint?: string | undefined;
2086
+ locked?: boolean | undefined;
2087
+ translatable?: boolean | undefined;
2088
+ help?: string | undefined;
2089
+ visibleIf?: {
2090
+ field: string;
2091
+ equals?: string | number | boolean | undefined;
2092
+ notEquals?: string | number | boolean | undefined;
2093
+ in?: (string | number | boolean)[] | undefined;
2094
+ } | undefined;
2095
+ }>;
2096
+ max: number;
2097
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2098
+ locked?: boolean | undefined;
2099
+ help?: string | undefined;
2100
+ visibleIf?: {
2101
+ field: string;
2102
+ equals?: string | number | boolean | undefined;
2103
+ notEquals?: string | number | boolean | undefined;
2104
+ in?: (string | number | boolean)[] | undefined;
2105
+ } | undefined;
2106
+ itemLabel?: string | undefined;
2107
+ min?: number | undefined;
2108
+ }, {
2109
+ type: "list";
2110
+ label: string;
2111
+ fields: Record<string, {
2112
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2113
+ label: string;
2114
+ options?: string[] | undefined;
2115
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2116
+ placeholder?: string | undefined;
2117
+ required?: boolean | undefined;
2118
+ maxLength?: number | undefined;
2119
+ aiHint?: string | undefined;
2120
+ locked?: boolean | undefined;
2121
+ translatable?: boolean | undefined;
2122
+ help?: string | undefined;
2123
+ visibleIf?: {
2124
+ field: string;
2125
+ equals?: string | number | boolean | undefined;
2126
+ notEquals?: string | number | boolean | undefined;
2127
+ in?: (string | number | boolean)[] | undefined;
2128
+ } | undefined;
2129
+ }>;
2130
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2131
+ locked?: boolean | undefined;
2132
+ help?: string | undefined;
2133
+ visibleIf?: {
2134
+ field: string;
2135
+ equals?: string | number | boolean | undefined;
2136
+ notEquals?: string | number | boolean | undefined;
2137
+ in?: (string | number | boolean)[] | undefined;
2138
+ } | undefined;
2139
+ itemLabel?: string | undefined;
2140
+ min?: number | undefined;
2141
+ max?: number | undefined;
2142
+ }>, z.ZodObject<{
2143
+ type: z.ZodLiteral<"source">;
2144
+ source: z.ZodEnum<["events", "posts", "bookings"]>;
2145
+ default: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
2146
+ locked: z.ZodOptional<z.ZodBoolean>;
2147
+ label: z.ZodString;
2148
+ help: z.ZodOptional<z.ZodString>;
2149
+ visibleIf: z.ZodOptional<z.ZodObject<{
2150
+ field: z.ZodString;
2151
+ equals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
2152
+ notEquals: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
2153
+ in: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
2154
+ }, "strict", z.ZodTypeAny, {
2155
+ field: string;
2156
+ equals?: string | number | boolean | undefined;
2157
+ notEquals?: string | number | boolean | undefined;
2158
+ in?: (string | number | boolean)[] | undefined;
2159
+ }, {
2160
+ field: string;
2161
+ equals?: string | number | boolean | undefined;
2162
+ notEquals?: string | number | boolean | undefined;
2163
+ in?: (string | number | boolean)[] | undefined;
2164
+ }>>;
2165
+ }, "strict", z.ZodTypeAny, {
2166
+ type: "source";
2167
+ label: string;
2168
+ source: "events" | "posts" | "bookings";
2169
+ default?: Record<string, string | number | boolean> | undefined;
2170
+ locked?: boolean | undefined;
2171
+ help?: string | undefined;
2172
+ visibleIf?: {
2173
+ field: string;
2174
+ equals?: string | number | boolean | undefined;
2175
+ notEquals?: string | number | boolean | undefined;
2176
+ in?: (string | number | boolean)[] | undefined;
2177
+ } | undefined;
2178
+ }, {
2179
+ type: "source";
2180
+ label: string;
2181
+ source: "events" | "posts" | "bookings";
2182
+ default?: Record<string, string | number | boolean> | undefined;
2183
+ locked?: boolean | undefined;
2184
+ help?: string | undefined;
2185
+ visibleIf?: {
2186
+ field: string;
2187
+ equals?: string | number | boolean | undefined;
2188
+ notEquals?: string | number | boolean | undefined;
2189
+ in?: (string | number | boolean)[] | undefined;
2190
+ } | undefined;
2191
+ }>]>>>;
2192
+ description: z.ZodOptional<z.ZodString>;
2193
+ /** picker group: "Intro", "Events & times", "People", "Info", "Calls to action"… */
2194
+ category: z.ZodOptional<z.ZodString>;
2195
+ /** sample content: picker previews and empty fields in the admin preview (never saved) */
2196
+ example: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
2197
+ /** at most this many per page */
2198
+ limit: z.ZodOptional<z.ZodNumber>;
2199
+ /** ready-filled picker entries ("Service times: holiday") */
2200
+ presets: z.ZodOptional<z.ZodArray<z.ZodObject<{
2201
+ name: z.ZodString;
2202
+ description: z.ZodOptional<z.ZodString>;
2203
+ variant: z.ZodOptional<z.ZodString>;
2204
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
2205
+ }, "strict", z.ZodTypeAny, {
2206
+ name: string;
2207
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2208
+ description?: string | undefined;
2209
+ variant?: string | undefined;
2210
+ }, {
2211
+ name: string;
2212
+ description?: string | undefined;
2213
+ variant?: string | undefined;
2214
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2215
+ }>, "many">>;
454
2216
  }, "strict", z.ZodTypeAny, {
455
- name: string;
456
- version: number;
457
- variants: string[];
458
2217
  fields: Record<string, {
2218
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
459
2219
  label: string;
460
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
461
2220
  options?: string[] | undefined;
462
- default?: string | number | undefined;
2221
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2222
+ placeholder?: string | undefined;
2223
+ required?: boolean | undefined;
2224
+ maxLength?: number | undefined;
2225
+ aiHint?: string | undefined;
2226
+ locked?: boolean | undefined;
2227
+ translatable?: boolean | undefined;
2228
+ help?: string | undefined;
2229
+ visibleIf?: {
2230
+ field: string;
2231
+ equals?: string | number | boolean | undefined;
2232
+ notEquals?: string | number | boolean | undefined;
2233
+ in?: (string | number | boolean)[] | undefined;
2234
+ } | undefined;
2235
+ } | {
2236
+ type: "list";
2237
+ label: string;
2238
+ fields: Record<string, {
2239
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2240
+ label: string;
2241
+ options?: string[] | undefined;
2242
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2243
+ placeholder?: string | undefined;
2244
+ required?: boolean | undefined;
2245
+ maxLength?: number | undefined;
2246
+ aiHint?: string | undefined;
2247
+ locked?: boolean | undefined;
2248
+ translatable?: boolean | undefined;
2249
+ help?: string | undefined;
2250
+ visibleIf?: {
2251
+ field: string;
2252
+ equals?: string | number | boolean | undefined;
2253
+ notEquals?: string | number | boolean | undefined;
2254
+ in?: (string | number | boolean)[] | undefined;
2255
+ } | undefined;
2256
+ }>;
2257
+ max: number;
2258
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2259
+ locked?: boolean | undefined;
2260
+ help?: string | undefined;
2261
+ visibleIf?: {
2262
+ field: string;
2263
+ equals?: string | number | boolean | undefined;
2264
+ notEquals?: string | number | boolean | undefined;
2265
+ in?: (string | number | boolean)[] | undefined;
2266
+ } | undefined;
2267
+ itemLabel?: string | undefined;
2268
+ min?: number | undefined;
2269
+ } | {
2270
+ type: "source";
2271
+ label: string;
2272
+ source: "events" | "posts" | "bookings";
2273
+ default?: Record<string, string | number | boolean> | undefined;
2274
+ locked?: boolean | undefined;
2275
+ help?: string | undefined;
2276
+ visibleIf?: {
2277
+ field: string;
2278
+ equals?: string | number | boolean | undefined;
2279
+ notEquals?: string | number | boolean | undefined;
2280
+ in?: (string | number | boolean)[] | undefined;
2281
+ } | undefined;
463
2282
  }>;
2283
+ name: string;
2284
+ version: number;
2285
+ variants: string[];
464
2286
  component?: string | undefined;
2287
+ description?: string | undefined;
2288
+ category?: string | undefined;
2289
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2290
+ limit?: number | undefined;
2291
+ presets?: {
2292
+ name: string;
2293
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2294
+ description?: string | undefined;
2295
+ variant?: string | undefined;
2296
+ }[] | undefined;
465
2297
  }, {
466
2298
  name: string;
467
- version?: number | undefined;
468
- component?: string | undefined;
469
- variants?: string[] | undefined;
470
2299
  fields?: Record<string, {
2300
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
471
2301
  label: string;
472
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
473
2302
  options?: string[] | undefined;
474
- default?: string | number | undefined;
2303
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2304
+ placeholder?: string | undefined;
2305
+ required?: boolean | undefined;
2306
+ maxLength?: number | undefined;
2307
+ aiHint?: string | undefined;
2308
+ locked?: boolean | undefined;
2309
+ translatable?: boolean | undefined;
2310
+ help?: string | undefined;
2311
+ visibleIf?: {
2312
+ field: string;
2313
+ equals?: string | number | boolean | undefined;
2314
+ notEquals?: string | number | boolean | undefined;
2315
+ in?: (string | number | boolean)[] | undefined;
2316
+ } | undefined;
2317
+ } | {
2318
+ type: "list";
2319
+ label: string;
2320
+ fields: Record<string, {
2321
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2322
+ label: string;
2323
+ options?: string[] | undefined;
2324
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2325
+ placeholder?: string | undefined;
2326
+ required?: boolean | undefined;
2327
+ maxLength?: number | undefined;
2328
+ aiHint?: string | undefined;
2329
+ locked?: boolean | undefined;
2330
+ translatable?: boolean | undefined;
2331
+ help?: string | undefined;
2332
+ visibleIf?: {
2333
+ field: string;
2334
+ equals?: string | number | boolean | undefined;
2335
+ notEquals?: string | number | boolean | undefined;
2336
+ in?: (string | number | boolean)[] | undefined;
2337
+ } | undefined;
2338
+ }>;
2339
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2340
+ locked?: boolean | undefined;
2341
+ help?: string | undefined;
2342
+ visibleIf?: {
2343
+ field: string;
2344
+ equals?: string | number | boolean | undefined;
2345
+ notEquals?: string | number | boolean | undefined;
2346
+ in?: (string | number | boolean)[] | undefined;
2347
+ } | undefined;
2348
+ itemLabel?: string | undefined;
2349
+ min?: number | undefined;
2350
+ max?: number | undefined;
2351
+ } | {
2352
+ type: "source";
2353
+ label: string;
2354
+ source: "events" | "posts" | "bookings";
2355
+ default?: Record<string, string | number | boolean> | undefined;
2356
+ locked?: boolean | undefined;
2357
+ help?: string | undefined;
2358
+ visibleIf?: {
2359
+ field: string;
2360
+ equals?: string | number | boolean | undefined;
2361
+ notEquals?: string | number | boolean | undefined;
2362
+ in?: (string | number | boolean)[] | undefined;
2363
+ } | undefined;
475
2364
  }> | undefined;
2365
+ version?: number | undefined;
2366
+ component?: string | undefined;
2367
+ variants?: string[] | undefined;
2368
+ description?: string | undefined;
2369
+ category?: string | undefined;
2370
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2371
+ limit?: number | undefined;
2372
+ presets?: {
2373
+ name: string;
2374
+ description?: string | undefined;
2375
+ variant?: string | undefined;
2376
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2377
+ }[] | undefined;
476
2378
  }>>>;
477
2379
  assets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2380
+ presets: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2381
+ name: z.ZodString;
2382
+ description: z.ZodOptional<z.ZodString>;
2383
+ sections: z.ZodArray<z.ZodObject<{
2384
+ type: z.ZodString;
2385
+ variant: z.ZodOptional<z.ZodString>;
2386
+ hidden: z.ZodOptional<z.ZodBoolean>;
2387
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>]>>, "many">]>>>;
2388
+ }, "strict", z.ZodTypeAny, {
2389
+ type: string;
2390
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2391
+ variant?: string | undefined;
2392
+ hidden?: boolean | undefined;
2393
+ }, {
2394
+ type: string;
2395
+ variant?: string | undefined;
2396
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2397
+ hidden?: boolean | undefined;
2398
+ }>, "many">;
2399
+ }, "strict", z.ZodTypeAny, {
2400
+ name: string;
2401
+ sections: {
2402
+ type: string;
2403
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2404
+ variant?: string | undefined;
2405
+ hidden?: boolean | undefined;
2406
+ }[];
2407
+ description?: string | undefined;
2408
+ }, {
2409
+ name: string;
2410
+ sections: {
2411
+ type: string;
2412
+ variant?: string | undefined;
2413
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2414
+ hidden?: boolean | undefined;
2415
+ }[];
2416
+ description?: string | undefined;
2417
+ }>>>;
478
2418
  }, "strict", z.ZodTypeAny, {
479
2419
  name: string;
480
2420
  version: string;
481
- sections: Record<string, {
2421
+ description: string;
2422
+ presets: Record<string, {
482
2423
  name: string;
483
- version: number;
484
- variants: string[];
2424
+ sections: {
2425
+ type: string;
2426
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2427
+ variant?: string | undefined;
2428
+ hidden?: boolean | undefined;
2429
+ }[];
2430
+ description?: string | undefined;
2431
+ }>;
2432
+ sections: Record<string, {
485
2433
  fields: Record<string, {
2434
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
486
2435
  label: string;
487
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
488
2436
  options?: string[] | undefined;
489
- default?: string | number | undefined;
2437
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2438
+ placeholder?: string | undefined;
2439
+ required?: boolean | undefined;
2440
+ maxLength?: number | undefined;
2441
+ aiHint?: string | undefined;
2442
+ locked?: boolean | undefined;
2443
+ translatable?: boolean | undefined;
2444
+ help?: string | undefined;
2445
+ visibleIf?: {
2446
+ field: string;
2447
+ equals?: string | number | boolean | undefined;
2448
+ notEquals?: string | number | boolean | undefined;
2449
+ in?: (string | number | boolean)[] | undefined;
2450
+ } | undefined;
2451
+ } | {
2452
+ type: "list";
2453
+ label: string;
2454
+ fields: Record<string, {
2455
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2456
+ label: string;
2457
+ options?: string[] | undefined;
2458
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2459
+ placeholder?: string | undefined;
2460
+ required?: boolean | undefined;
2461
+ maxLength?: number | undefined;
2462
+ aiHint?: string | undefined;
2463
+ locked?: boolean | undefined;
2464
+ translatable?: boolean | undefined;
2465
+ help?: string | undefined;
2466
+ visibleIf?: {
2467
+ field: string;
2468
+ equals?: string | number | boolean | undefined;
2469
+ notEquals?: string | number | boolean | undefined;
2470
+ in?: (string | number | boolean)[] | undefined;
2471
+ } | undefined;
2472
+ }>;
2473
+ max: number;
2474
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2475
+ locked?: boolean | undefined;
2476
+ help?: string | undefined;
2477
+ visibleIf?: {
2478
+ field: string;
2479
+ equals?: string | number | boolean | undefined;
2480
+ notEquals?: string | number | boolean | undefined;
2481
+ in?: (string | number | boolean)[] | undefined;
2482
+ } | undefined;
2483
+ itemLabel?: string | undefined;
2484
+ min?: number | undefined;
2485
+ } | {
2486
+ type: "source";
2487
+ label: string;
2488
+ source: "events" | "posts" | "bookings";
2489
+ default?: Record<string, string | number | boolean> | undefined;
2490
+ locked?: boolean | undefined;
2491
+ help?: string | undefined;
2492
+ visibleIf?: {
2493
+ field: string;
2494
+ equals?: string | number | boolean | undefined;
2495
+ notEquals?: string | number | boolean | undefined;
2496
+ in?: (string | number | boolean)[] | undefined;
2497
+ } | undefined;
490
2498
  }>;
2499
+ name: string;
2500
+ version: number;
2501
+ variants: string[];
491
2502
  component?: string | undefined;
2503
+ description?: string | undefined;
2504
+ category?: string | undefined;
2505
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2506
+ limit?: number | undefined;
2507
+ presets?: {
2508
+ name: string;
2509
+ data: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]>;
2510
+ description?: string | undefined;
2511
+ variant?: string | undefined;
2512
+ }[] | undefined;
492
2513
  }>;
493
- description: string;
494
2514
  apiVersion: 1;
495
2515
  core: string;
496
2516
  tokens: {
2517
+ live: string;
497
2518
  panel: string;
498
2519
  bg: string;
499
2520
  ink: string;
@@ -504,9 +2525,10 @@ export const ThemeManifest: z.ZodObject<{
504
2525
  accentInk: string;
505
2526
  button: "ink" | "accent";
506
2527
  dark: {
2528
+ live?: string | undefined;
507
2529
  panel?: string | undefined;
508
2530
  bg?: string | undefined;
509
- ink?: string | undefined;
2531
+ ink? /** at most this many per page */: string | undefined;
510
2532
  muted?: string | undefined;
511
2533
  line?: string | undefined;
512
2534
  accent?: string | undefined;
@@ -548,25 +2570,106 @@ export const ThemeManifest: z.ZodObject<{
548
2570
  }, {
549
2571
  name: string;
550
2572
  version?: string | undefined;
2573
+ description?: string | undefined;
2574
+ presets?: Record<string, {
2575
+ name: string;
2576
+ sections: {
2577
+ type: string;
2578
+ variant?: string | undefined;
2579
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2580
+ hidden?: boolean | undefined;
2581
+ }[];
2582
+ description?: string | undefined;
2583
+ }> | undefined;
551
2584
  sections?: Record<string, {
552
2585
  name: string;
553
- version?: number | undefined;
554
- component?: string | undefined;
555
- variants?: string[] | undefined;
556
2586
  fields?: Record<string, {
2587
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
557
2588
  label: string;
558
- type: "number" | "text" | "textarea" | "image" | "url" | "select";
559
2589
  options?: string[] | undefined;
560
- default?: string | number | undefined;
2590
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2591
+ placeholder?: string | undefined;
2592
+ required?: boolean | undefined;
2593
+ maxLength?: number | undefined;
2594
+ aiHint?: string | undefined;
2595
+ locked?: boolean | undefined;
2596
+ translatable?: boolean | undefined;
2597
+ help?: string | undefined;
2598
+ visibleIf?: {
2599
+ field: string;
2600
+ equals?: string | number | boolean | undefined;
2601
+ notEquals?: string | number | boolean | undefined;
2602
+ in?: (string | number | boolean)[] | undefined;
2603
+ } | undefined;
2604
+ } | {
2605
+ type: "list";
2606
+ label: string;
2607
+ fields: Record<string, {
2608
+ type: "number" | "date" | "text" | "textarea" | "richtext" | "image" | "url" | "link" | "select" | "toggle" | "time";
2609
+ label: string;
2610
+ options?: string[] | undefined;
2611
+ default?: string | number | boolean | Record<string, string | number | boolean> | undefined;
2612
+ placeholder?: string | undefined;
2613
+ required?: boolean | undefined;
2614
+ maxLength?: number | undefined;
2615
+ aiHint?: string | undefined;
2616
+ locked?: boolean | undefined;
2617
+ translatable?: boolean | undefined;
2618
+ help?: string | undefined;
2619
+ visibleIf?: {
2620
+ field: string;
2621
+ equals?: string | number | boolean | undefined;
2622
+ notEquals?: string | number | boolean | undefined;
2623
+ in?: (string | number | boolean)[] | undefined;
2624
+ } | undefined;
2625
+ }>;
2626
+ default?: Record<string, string | number | boolean | Record<string, string | number | boolean>>[] | undefined;
2627
+ locked?: boolean | undefined;
2628
+ help?: string | undefined;
2629
+ visibleIf?: {
2630
+ field: string;
2631
+ equals?: string | number | boolean | undefined;
2632
+ notEquals?: string | number | boolean | undefined;
2633
+ in?: (string | number | boolean)[] | undefined;
2634
+ } | undefined;
2635
+ itemLabel?: string | undefined;
2636
+ min?: number | undefined;
2637
+ max?: number | undefined;
2638
+ } | {
2639
+ type: "source";
2640
+ label: string;
2641
+ source: "events" | "posts" | "bookings";
2642
+ default?: Record<string, string | number | boolean> | undefined;
2643
+ locked?: boolean | undefined;
2644
+ help?: string | undefined;
2645
+ visibleIf?: {
2646
+ field: string;
2647
+ equals?: string | number | boolean | undefined;
2648
+ notEquals?: string | number | boolean | undefined;
2649
+ in?: (string | number | boolean)[] | undefined;
2650
+ } | undefined;
561
2651
  }> | undefined;
2652
+ version?: number | undefined;
2653
+ component?: string | undefined;
2654
+ variants?: string[] | undefined;
2655
+ description?: string | undefined;
2656
+ category?: string | undefined;
2657
+ example?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2658
+ limit?: number | undefined;
2659
+ presets?: {
2660
+ name: string;
2661
+ description?: string | undefined;
2662
+ variant?: string | undefined;
2663
+ data?: Record<string, string | number | boolean | Record<string, string | number | boolean> | Record<string, string | number | boolean | Record<string, string | number | boolean>>[]> | undefined;
2664
+ }[] | undefined;
562
2665
  }> | undefined;
563
- description?: string | undefined;
564
2666
  slug?: string | undefined;
565
2667
  apiVersion?: 1 | undefined;
566
2668
  core?: string | undefined;
567
2669
  author?: string | undefined;
568
2670
  license?: string | undefined;
569
2671
  tokens?: {
2672
+ live?: string | undefined;
570
2673
  panel?: string | undefined;
571
2674
  bg?: string | undefined;
572
2675
  ink?: string | undefined;
@@ -577,6 +2680,7 @@ export const ThemeManifest: z.ZodObject<{
577
2680
  accentInk?: string | undefined;
578
2681
  button?: "ink" | "accent" | undefined;
579
2682
  dark?: {
2683
+ live?: string | undefined;
580
2684
  panel?: string | undefined;
581
2685
  bg?: string | undefined;
582
2686
  ink?: string | undefined;