@riverbankcms/sdk 0.128.0 → 0.129.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +52 -256
  2. package/dist/{PreviewEditorSidebar-Dbvb7GIr.mjs → PreviewEditorSidebar-DceRseRV.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-e9O9l20X.mjs → PreviewEditorUI-BNunq3kk.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-BZHt6e9w.mjs → SdkPreviewModeRuntime-Bt87-62u.mjs} +495 -292
  5. package/dist/{SiteChromeCustomizeContext-CvuGbHJX.mjs → SiteChromeCustomizeContext-BLl-OlL4.mjs} +600 -533
  6. package/dist/_dts/ai/src/contracts/commandExposure.d.ts +1 -1
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +4897 -4897
  8. package/dist/_dts/api/src/index.d.ts +2 -1
  9. package/dist/_dts/api/src/sdk-event-management.d.ts +53 -0
  10. package/dist/_dts/api/src/sdk-event-schedule.d.ts +3 -6
  11. package/dist/_dts/api/src/sdkContracts.d.ts +37 -50
  12. package/dist/_dts/api/src/sdkThemeWire.d.ts +2595 -0
  13. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +13 -29
  14. package/dist/_dts/blocks/src/PageRenderer.d.ts +20 -10
  15. package/dist/_dts/blocks/src/index.d.ts +2 -1
  16. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +30 -0
  17. package/dist/_dts/blocks/src/pageRenderingMode.d.ts +37 -0
  18. package/dist/_dts/blocks/src/server.d.ts +1 -1
  19. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +14 -0
  20. package/dist/_dts/media-core/src/index.d.ts +1 -0
  21. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +2 -0
  22. package/dist/_dts/preview-next/src/client/index.d.ts +47 -47
  23. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +18 -6
  24. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +30 -21
  25. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -5
  26. package/dist/_dts/preview-next/src/client/preview/themeRuntime.d.ts +9 -0
  27. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewMode.d.ts +21 -6
  28. package/dist/_dts/preview-next/src/client/sdk-runtime.d.ts +8 -8
  29. package/dist/_dts/sdk/src/config/types.d.ts +4 -4
  30. package/dist/_dts/sdk/src/next/catch-all.d.ts +6 -0
  31. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  32. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +33 -0
  33. package/dist/_dts/sdk/src/next/types.d.ts +23 -9
  34. package/dist/_dts/sdk/src/preview-next/before-render.d.ts +4 -6
  35. package/dist/_dts/sdk/src/preview-next/client/index.d.ts +3 -3
  36. package/dist/_dts/sdk/src/preview-next/client/runtime.d.ts +1 -1
  37. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +25 -3
  38. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +13 -2
  39. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +31 -18
  40. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +20 -9
  41. package/dist/_dts/sdk/src/rendering/index.d.ts +4 -2
  42. package/dist/_dts/sdk/src/rendering/renderingMode.d.ts +23 -0
  43. package/dist/_dts/sdk/src/rendering/server.d.ts +5 -3
  44. package/dist/_dts/sdk/src/rendering/themeRuntime.d.ts +6 -0
  45. package/dist/_dts/sdk/src/version.d.ts +1 -1
  46. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  47. package/dist/_dts/theme-core/src/palette/index.d.ts +1 -0
  48. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyleCatalog.d.ts +254 -0
  49. package/dist/_dts/theme-core/src/site-styles/headerLegacyLooks.d.ts +372 -0
  50. package/dist/_dts/theme-core/src/site-styles/headerLookBranding.d.ts +106 -0
  51. package/dist/_dts/theme-core/src/site-styles/headerLookSelection.d.ts +2 -0
  52. package/dist/_dts/theme-core/src/site-styles/headerLookTypes.d.ts +212 -0
  53. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +7 -841
  54. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +3 -0
  55. package/dist/_dts/theme-core/src/site-styles/headerStyleCompilerPrimitives.d.ts +23 -0
  56. package/dist/client/client.mjs +911 -762
  57. package/dist/client/hooks.mjs +59 -36
  58. package/dist/client/rendering/client.mjs +593 -547
  59. package/dist/client/rendering.mjs +994 -783
  60. package/dist/preview-next/before-render.mjs +10 -3
  61. package/dist/preview-next/client/runtime.mjs +3 -3
  62. package/dist/{sdk-runtime-Cn_QSCOg.mjs → sdk-runtime-C20CVWbb.mjs} +1 -1
  63. package/dist/{separator-CEoGABRc.mjs → separator-BE3NCquy.mjs} +1 -1
  64. package/dist/server/components.mjs +549 -399
  65. package/dist/server/config-validation.mjs +59 -36
  66. package/dist/server/config.mjs +59 -36
  67. package/dist/server/data.mjs +59 -36
  68. package/dist/server/index.mjs +1 -1
  69. package/dist/server/manifest.mjs +4966 -0
  70. package/dist/server/next.mjs +700 -537
  71. package/dist/server/page-converter.mjs +40 -36
  72. package/dist/server/prebuild.mjs +1 -1
  73. package/dist/server/rendering/server.mjs +571 -404
  74. package/dist/server/rendering.mjs +571 -404
  75. package/dist/server/routing.mjs +472 -402
  76. package/dist/server/server.mjs +60 -37
  77. package/dist/server/theme-bridge.mjs +70 -66
  78. package/package.json +9 -12
  79. package/dist/_dts/api/src/event-presentation.d.ts +0 -14
  80. package/dist/_dts/blocks/src/definitions.d.ts +0 -14
  81. package/dist/_dts/sdk/src/cli/canonical-entry-policy.d.ts +0 -53
  82. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +0 -101
  83. package/dist/_dts/sdk/src/cli/commands/block.d.ts +0 -24
  84. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +0 -62
  85. package/dist/_dts/sdk/src/cli/commands/content-type.d.ts +0 -10
  86. package/dist/_dts/sdk/src/cli/commands/content.d.ts +0 -56
  87. package/dist/_dts/sdk/src/cli/commands/delete.d.ts +0 -14
  88. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +0 -43
  89. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +0 -18
  90. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +0 -55
  91. package/dist/_dts/sdk/src/cli/commands/env.d.ts +0 -31
  92. package/dist/_dts/sdk/src/cli/commands/event.d.ts +0 -23
  93. package/dist/_dts/sdk/src/cli/commands/eventOccurrenceSchedule.d.ts +0 -12
  94. package/dist/_dts/sdk/src/cli/commands/identifiers.d.ts +0 -10
  95. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +0 -13
  96. package/dist/_dts/sdk/src/cli/commands/manifest.d.ts +0 -10
  97. package/dist/_dts/sdk/src/cli/commands/media-validation.d.ts +0 -3
  98. package/dist/_dts/sdk/src/cli/commands/migrate.d.ts +0 -11
  99. package/dist/_dts/sdk/src/cli/commands/navigation.d.ts +0 -12
  100. package/dist/_dts/sdk/src/cli/commands/page.d.ts +0 -14
  101. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +0 -50
  102. package/dist/_dts/sdk/src/cli/commands/pull-dated-offering-scope.d.ts +0 -10
  103. package/dist/_dts/sdk/src/cli/commands/pull-dry-run.d.ts +0 -70
  104. package/dist/_dts/sdk/src/cli/commands/pull-scope-diff.d.ts +0 -8
  105. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +0 -43
  106. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +0 -3
  107. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +0 -19
  108. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +0 -42
  109. package/dist/_dts/sdk/src/cli/commands/push/execute/localMediaReporting.d.ts +0 -23
  110. package/dist/_dts/sdk/src/cli/commands/push/execute/media.d.ts +0 -22
  111. package/dist/_dts/sdk/src/cli/commands/push/execute/metadata.d.ts +0 -1
  112. package/dist/_dts/sdk/src/cli/commands/push/execute/reporting.d.ts +0 -7
  113. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +0 -63
  114. package/dist/_dts/sdk/src/cli/commands/push/filter.d.ts +0 -15
  115. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +0 -29
  116. package/dist/_dts/sdk/src/cli/commands/push/normalizeLocalContent.d.ts +0 -2
  117. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +0 -32
  118. package/dist/_dts/sdk/src/cli/commands/push/publishGuidance.d.ts +0 -15
  119. package/dist/_dts/sdk/src/cli/commands/push/pushAllExtras.d.ts +0 -25
  120. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +0 -83
  121. package/dist/_dts/sdk/src/cli/commands/push/scopes/eventCategories.d.ts +0 -4
  122. package/dist/_dts/sdk/src/cli/commands/push/scopes/events.d.ts +0 -4
  123. package/dist/_dts/sdk/src/cli/commands/push/scopes/mediaPrep.d.ts +0 -14
  124. package/dist/_dts/sdk/src/cli/commands/push/scopes/pushScopeGeneric.d.ts +0 -6
  125. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +0 -87
  126. package/dist/_dts/sdk/src/cli/commands/push/scopes/venues.d.ts +0 -4
  127. package/dist/_dts/sdk/src/cli/commands/push/stale-resolution.d.ts +0 -48
  128. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +0 -17
  129. package/dist/_dts/sdk/src/cli/commands/push/verification.d.ts +0 -56
  130. package/dist/_dts/sdk/src/cli/commands/push/workflowPlan.d.ts +0 -34
  131. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +0 -54
  132. package/dist/_dts/sdk/src/cli/commands/push.d.ts +0 -40
  133. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +0 -3
  134. package/dist/_dts/sdk/src/cli/commands/style.d.ts +0 -60
  135. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +0 -11
  136. package/dist/_dts/sdk/src/cli/commands/webhooks.d.ts +0 -44
  137. package/dist/_dts/sdk/src/cli/config-loader.d.ts +0 -47
  138. package/dist/_dts/sdk/src/cli/content/collectionWriters.d.ts +0 -23
  139. package/dist/_dts/sdk/src/cli/content/edit/format.d.ts +0 -2
  140. package/dist/_dts/sdk/src/cli/content/edit/path.d.ts +0 -14
  141. package/dist/_dts/sdk/src/cli/content/edit/planner.d.ts +0 -46
  142. package/dist/_dts/sdk/src/cli/content/entryPaths.d.ts +0 -6
  143. package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +0 -10
  144. package/dist/_dts/sdk/src/cli/content/fs-utils.d.ts +0 -39
  145. package/dist/_dts/sdk/src/cli/content/legacyEventScheduleShapeError.d.ts +0 -5
  146. package/dist/_dts/sdk/src/cli/content/localEventSchedule.d.ts +0 -17
  147. package/dist/_dts/sdk/src/cli/content/media-manifest.d.ts +0 -13
  148. package/dist/_dts/sdk/src/cli/content/metadataAfterPush.d.ts +0 -25
  149. package/dist/_dts/sdk/src/cli/content/metadataStore.d.ts +0 -29
  150. package/dist/_dts/sdk/src/cli/content/reader.d.ts +0 -488
  151. package/dist/_dts/sdk/src/cli/content/writer.d.ts +0 -142
  152. package/dist/_dts/sdk/src/cli/env-scope.d.ts +0 -2
  153. package/dist/_dts/sdk/src/cli/env.d.ts +0 -71
  154. package/dist/_dts/sdk/src/cli/errors.d.ts +0 -62
  155. package/dist/_dts/sdk/src/cli/helpers/ai-runtime.d.ts +0 -2
  156. package/dist/_dts/sdk/src/cli/helpers.d.ts +0 -399
  157. package/dist/_dts/sdk/src/cli/index.d.ts +0 -11
  158. package/dist/_dts/sdk/src/cli/init-docs/constants.d.ts +0 -16
  159. package/dist/_dts/sdk/src/cli/init-docs/index.d.ts +0 -12
  160. package/dist/_dts/sdk/src/cli/init-docs/templates.d.ts +0 -18
  161. package/dist/_dts/sdk/src/cli/init-docs/zod-to-markdown.d.ts +0 -28
  162. package/dist/_dts/sdk/src/cli/load-config.d.ts +0 -14
  163. package/dist/_dts/sdk/src/cli/media/identifiers.d.ts +0 -18
  164. package/dist/_dts/sdk/src/cli/media/local-media.d.ts +0 -14
  165. package/dist/_dts/sdk/src/cli/media/local-sync.d.ts +0 -91
  166. package/dist/_dts/sdk/src/cli/media/portable.d.ts +0 -11
  167. package/dist/_dts/sdk/src/cli/media/rich-text.d.ts +0 -12
  168. package/dist/_dts/sdk/src/cli/media/value-utils.d.ts +0 -15
  169. package/dist/_dts/sdk/src/cli/media/write-guard.d.ts +0 -52
  170. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +0 -3
  171. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +0 -78
  172. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePlan.d.ts +0 -45
  173. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +0 -24
  174. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +0 -18
  175. package/dist/_dts/sdk/src/cli/merge-remote/entryRemote.d.ts +0 -9
  176. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +0 -48
  177. package/dist/_dts/sdk/src/cli/merge-remote/mergeFieldChanges.d.ts +0 -22
  178. package/dist/_dts/sdk/src/cli/merge-remote/pageLocal.d.ts +0 -3
  179. package/dist/_dts/sdk/src/cli/merge-remote/pageMerge.d.ts +0 -78
  180. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePlan.d.ts +0 -36
  181. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +0 -23
  182. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +0 -17
  183. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +0 -46
  184. package/dist/_dts/sdk/src/cli/merge-remote/sharedBaseSnapshots.d.ts +0 -32
  185. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergePlan.d.ts +0 -27
  186. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergeReport.d.ts +0 -63
  187. package/dist/_dts/sdk/src/cli/migrations/entries.d.ts +0 -28
  188. package/dist/_dts/sdk/src/cli/migrations/events.d.ts +0 -73
  189. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +0 -11
  190. package/dist/_dts/sdk/src/cli/output.d.ts +0 -133
  191. package/dist/_dts/sdk/src/cli/program.d.ts +0 -29
  192. package/dist/_dts/sdk/src/cli/push-config.d.ts +0 -49
  193. package/dist/_dts/sdk/src/cli/setup/setupPlan.d.ts +0 -51
  194. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +0 -13
  195. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +0 -170
  196. package/dist/_dts/sdk/src/cli/site-commands/commandRuntimeCompat.d.ts +0 -21
  197. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +0 -32
  198. package/dist/_dts/sdk/src/cli/site-commands/datedOfferingCommands.d.ts +0 -53
  199. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +0 -65
  200. package/dist/_dts/sdk/src/cli/site-commands/eventScheduleCompiler.d.ts +0 -24
  201. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +0 -68
  202. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +0 -53
  203. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +0 -8
  204. package/dist/_dts/sdk/src/cli/site-commands/localBlockManifestResolver.d.ts +0 -31
  205. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +0 -57
  206. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +0 -82
  207. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +0 -84
  208. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +0 -39
  209. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionPlan.d.ts +0 -8
  210. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +0 -97
  211. package/dist/_dts/sdk/src/cli/site-commands/residualSettingsTrimming.d.ts +0 -15
  212. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +0 -222
  213. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +0 -84
  214. package/dist/_dts/sdk/src/cli/sync/field-diff.d.ts +0 -39
  215. package/dist/_dts/sdk/src/cli/sync/index.d.ts +0 -10
  216. package/dist/_dts/sdk/src/cli/sync/mapper.d.ts +0 -41
  217. package/dist/_dts/sdk/src/cli/sync/media-sync.d.ts +0 -15
  218. package/dist/_dts/sdk/src/cli/sync/media.d.ts +0 -158
  219. package/dist/_dts/sdk/src/cli/sync/syncResultAggregation.d.ts +0 -4
  220. package/dist/_dts/sdk/src/cli/sync/validation.d.ts +0 -68
  221. package/dist/_dts/sdk/src/cli/utils/checksum.d.ts +0 -1
  222. package/dist/_dts/sdk/src/client/management/blocks.d.ts +0 -19
  223. package/dist/_dts/sdk/src/client/management/catalog.d.ts +0 -10
  224. package/dist/_dts/sdk/src/client/management/entries.d.ts +0 -6
  225. package/dist/_dts/sdk/src/client/management/eventCategories.d.ts +0 -6
  226. package/dist/_dts/sdk/src/client/management/events.d.ts +0 -7
  227. package/dist/_dts/sdk/src/client/management/footer.d.ts +0 -9
  228. package/dist/_dts/sdk/src/client/management/forms.d.ts +0 -6
  229. package/dist/_dts/sdk/src/client/management/http.d.ts +0 -79
  230. package/dist/_dts/sdk/src/client/management/identifiers.d.ts +0 -11
  231. package/dist/_dts/sdk/src/client/management/index.d.ts +0 -41
  232. package/dist/_dts/sdk/src/client/management/media.d.ts +0 -72
  233. package/dist/_dts/sdk/src/client/management/navigation.d.ts +0 -6
  234. package/dist/_dts/sdk/src/client/management/pages.d.ts +0 -6
  235. package/dist/_dts/sdk/src/client/management/pull.d.ts +0 -6
  236. package/dist/_dts/sdk/src/client/management/settings-branding.d.ts +0 -32
  237. package/dist/_dts/sdk/src/client/management/settings.d.ts +0 -6
  238. package/dist/_dts/sdk/src/client/management/theme.d.ts +0 -8
  239. package/dist/_dts/sdk/src/client/management/types.d.ts +0 -1069
  240. package/dist/_dts/sdk/src/client/management/venues.d.ts +0 -6
  241. package/dist/_dts/sdk/src/client/management/webhooks.d.ts +0 -3
  242. package/dist/_dts/sdk/src/test/env.d.ts +0 -4
  243. package/dist/_dts/site-commands/src/adapter.d.ts +0 -23
  244. package/dist/_dts/site-commands/src/appointmentCommandSchemas.d.ts +0 -100
  245. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +0 -8
  246. package/dist/_dts/site-commands/src/commandContract.d.ts +0 -1277
  247. package/dist/_dts/site-commands/src/commandDomain.d.ts +0 -20
  248. package/dist/_dts/site-commands/src/commandIdentifiers.d.ts +0 -7
  249. package/dist/_dts/site-commands/src/commandValidation.d.ts +0 -10
  250. package/dist/_dts/site-commands/src/commands.d.ts +0 -1983
  251. package/dist/_dts/site-commands/src/domain.d.ts +0 -104
  252. package/dist/_dts/site-commands/src/eventCommandContent.d.ts +0 -11
  253. package/dist/_dts/site-commands/src/exposure.d.ts +0 -41
  254. package/dist/_dts/site-commands/src/guards.d.ts +0 -1
  255. package/dist/_dts/site-commands/src/index.d.ts +0 -18
  256. package/dist/_dts/site-commands/src/metadata.d.ts +0 -555
  257. package/dist/_dts/site-commands/src/pagePaths.d.ts +0 -6
  258. package/dist/_dts/site-commands/src/planner.d.ts +0 -58
  259. package/dist/_dts/site-commands/src/refContributions.d.ts +0 -11
  260. package/dist/_dts/site-commands/src/refs.d.ts +0 -90
  261. package/dist/_dts/site-commands/src/siteStyleCommandSchema.d.ts +0 -405
  262. package/dist/_dts/site-commands/src/siteStyleSelectionSchemaBuilder.d.ts +0 -46
  263. package/dist/_dts/site-commands/src/stableJson.d.ts +0 -5
  264. package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +0 -10
  265. package/dist/_dts/site-commands/src/venueCommandMapping.d.ts +0 -21
  266. package/dist/_dts/theme-core/src/data.d.ts +0 -12
  267. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +0 -4
  268. package/dist/cli/index.mjs +0 -162962
  269. package/dist/cli/init-docs/content/agents-section.md +0 -67
  270. package/dist/cli/init-docs/content/cli-reference.md +0 -1238
  271. package/dist/cli/init-docs/content/content-management.md +0 -792
  272. package/dist/cli/init-docs/content/context-brand.md +0 -125
  273. package/dist/cli/init-docs/content/context-brief.md +0 -77
  274. package/dist/cli/init-docs/content/context-knowledge.md +0 -111
  275. package/dist/cli/init-docs/content/getting-started.md +0 -171
  276. package/dist/cli/init-docs/content/site-workflows-readme.md +0 -96
  277. package/dist/cli/init-docs/content/workflow-add-block.md +0 -299
  278. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +0 -83
  279. package/dist/cli/init-docs/content/workflow-block-extensions.md +0 -370
  280. package/dist/cli/init-docs/content/workflow-cmsify-page.md +0 -357
  281. package/dist/cli/init-docs/content/workflow-content-types.md +0 -330
  282. package/dist/cli/init-docs/content/workflow-create-page.md +0 -212
  283. package/dist/cli/init-docs/content/workflow-custom-block.md +0 -470
  284. package/dist/cli/init-docs/content/workflow-editor-workflows.md +0 -130
  285. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +0 -158
  286. package/dist/cli/init-docs/content/workflow-preview-mode.md +0 -239
  287. package/dist/cli/init-docs/content/workflow-publish.md +0 -285
  288. package/dist/cli/init-docs/content/workflow-remote-setup.md +0 -51
  289. package/dist/cli/init-docs/content/workflow-templates.md +0 -381
  290. /package/dist/_dts/{sdk/src/cli/utils/mime.d.ts → media-core/src/mimeType.d.ts} +0 -0
@@ -8723,32 +8723,15 @@ function parseBackgroundAppearanceColorToken(value) {
8723
8723
  function uniqueStrings(values) {
8724
8724
  return Array.from(new Set(values));
8725
8725
  }
8726
- const headerInteractionPaletteSchema = z$1.enum([
8727
- "primary",
8728
- "secondary",
8729
- "accent"
8730
- ]);
8731
- //#endregion
8732
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
8733
- const clearSplitInteractionPalette = defineLookOptionGroup({
8734
- id: "interaction-palette",
8735
- label: "Hover colour",
8736
- defaultOptionId: "accent",
8737
- options: [
8738
- {
8739
- id: "accent",
8740
- label: "Accent"
8741
- },
8742
- {
8743
- id: "primary",
8744
- label: "Primary"
8745
- },
8746
- {
8747
- id: "secondary",
8748
- label: "Secondary"
8749
- }
8750
- ]
8751
- });
8726
+ function asHeaderLookId(value) {
8727
+ return value;
8728
+ }
8729
+ function asHeaderLayoutId(value) {
8730
+ return value;
8731
+ }
8732
+ function asHeaderStyleId(value) {
8733
+ return value;
8734
+ }
8752
8735
  //#endregion
8753
8736
  //#region ../theme-core/src/site-styles/logoBranding.ts
8754
8737
  const logoTextConfidenceValues = [
@@ -8839,15 +8822,8 @@ const logoSizePolicyValues = [
8839
8822
  "generous",
8840
8823
  "display"
8841
8824
  ];
8842
- function asHeaderLookId(value) {
8843
- return value;
8844
- }
8845
- function asHeaderLayoutId(value) {
8846
- return value;
8847
- }
8848
- function asHeaderStyleId(value) {
8849
- return value;
8850
- }
8825
+ //#endregion
8826
+ //#region ../theme-core/src/site-styles/headerLookBranding.ts
8851
8827
  const titleOnlyLogoAccommodation = {
8852
8828
  pattern: "title-only",
8853
8829
  supportedShapes: [
@@ -8966,21 +8942,34 @@ const overlayLogoAccommodations = [
8966
8942
  inlineMarkWithTitleLogoAccommodation,
8967
8943
  unbackedOverlayLogoAccommodation
8968
8944
  ];
8969
- /**
8970
- * Starts every Look from the generated theme's header branch, then clears
8971
- * optional nested styling fields that would otherwise leak from another Look.
8972
- */
8973
- function baseHeader(theme) {
8974
- const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
8975
- return {
8976
- ...header,
8977
- navContainer: {
8978
- type: "none",
8979
- tint: null,
8980
- opacity: .15
8945
+ const headerInteractionPaletteSchema = z$1.enum([
8946
+ "primary",
8947
+ "secondary",
8948
+ "accent"
8949
+ ]);
8950
+ //#endregion
8951
+ //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
8952
+ const clearSplitInteractionPalette = defineLookOptionGroup({
8953
+ id: "interaction-palette",
8954
+ label: "Hover colour",
8955
+ defaultOptionId: "accent",
8956
+ options: [
8957
+ {
8958
+ id: "accent",
8959
+ label: "Accent"
8960
+ },
8961
+ {
8962
+ id: "primary",
8963
+ label: "Primary"
8964
+ },
8965
+ {
8966
+ id: "secondary",
8967
+ label: "Secondary"
8981
8968
  }
8982
- };
8983
- }
8969
+ ]
8970
+ });
8971
+ //#endregion
8972
+ //#region ../theme-core/src/site-styles/headerLayoutStyleCatalog.ts
8984
8973
  const headerLayoutCatalog = defineExactCatalog()([
8985
8974
  {
8986
8975
  id: asHeaderLayoutId("classic"),
@@ -9385,6 +9374,19 @@ function getCompatibleHeaderStyleIds(layoutId) {
9385
9374
  return isHeaderStyleCompatibleWithLayout(getHeaderStyleOrThrow(styleId), layoutId);
9386
9375
  });
9387
9376
  }
9377
+ //#endregion
9378
+ //#region ../theme-core/src/site-styles/headerStyleCompilerPrimitives.ts
9379
+ function baseHeader(theme) {
9380
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
9381
+ return {
9382
+ ...header,
9383
+ navContainer: {
9384
+ type: "none",
9385
+ tint: null,
9386
+ opacity: .15
9387
+ }
9388
+ };
9389
+ }
9388
9390
  function applyNavTypography(style, typography) {
9389
9391
  switch (typography) {
9390
9392
  case "plain": return style;
@@ -9438,6 +9440,8 @@ function themedHeaderShadow(theme) {
9438
9440
  default: return assertNever$15(theme.shadow.elevation, "Unhandled theme shadow elevation");
9439
9441
  }
9440
9442
  }
9443
+ //#endregion
9444
+ //#region ../theme-core/src/site-styles/headerLegacyLooks.ts
9441
9445
  function solidBrandHeader(theme) {
9442
9446
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
9443
9447
  return {
@@ -51671,6 +51675,213 @@ function collectConstrainedVideoMediaValues(options) {
51671
51675
  return values;
51672
51676
  }
51673
51677
  //#endregion
51678
+ //#region ../blocks/src/system/manifest/hydrateLinks.ts
51679
+ /**
51680
+ * Hydrates link objects within block content using the provided route map. Returns
51681
+ * the original content reference when no mutations are required to avoid unnecessary renders.
51682
+ */
51683
+ function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
51684
+ if (!routes || !manifest?.fields?.length) return content;
51685
+ return hydrateValue(content, {
51686
+ routes,
51687
+ pagesByIdentifier,
51688
+ entriesByIdentifier
51689
+ });
51690
+ }
51691
+ function hydrateValue(value, context) {
51692
+ try {
51693
+ if (Array.isArray(value)) {
51694
+ const resolvedItems = value.map((item) => hydrateValue(item, context));
51695
+ return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
51696
+ }
51697
+ if (isRecord$27(value)) {
51698
+ if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
51699
+ if (isPageLink$1(value)) return hydratePageLink(value, context);
51700
+ if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
51701
+ const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
51702
+ return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
51703
+ }
51704
+ return value;
51705
+ } catch (err) {
51706
+ console.error("[hydrateLinks] Error hydrating value:", err, value);
51707
+ return value;
51708
+ }
51709
+ }
51710
+ function hydrateInternalLink(link, routes) {
51711
+ const resolved = resolveRouteTarget(link.routeId, routes);
51712
+ if (!resolved) return link;
51713
+ const nextHref = resolved.href;
51714
+ const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
51715
+ const nextUpdatedAt = resolved.updatedAt;
51716
+ const updates = {};
51717
+ if (nextHref && nextHref !== currentHref) updates.href = nextHref;
51718
+ if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
51719
+ return Object.keys(updates).length > 0 ? {
51720
+ ...link,
51721
+ ...updates
51722
+ } : link;
51723
+ }
51724
+ function isInternalLink$1(value) {
51725
+ if (value.kind !== "internal") return false;
51726
+ if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
51727
+ return true;
51728
+ }
51729
+ function isPageLink$1(value) {
51730
+ if (value.kind !== "page") return false;
51731
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
51732
+ return true;
51733
+ }
51734
+ function hydratePageLink(link, context) {
51735
+ const resolved = resolvePageRouteTarget(link, context);
51736
+ if (!resolved) return link;
51737
+ return {
51738
+ ...link,
51739
+ href: resolved.href,
51740
+ routeId: resolved.routeId
51741
+ };
51742
+ }
51743
+ function isEntryLink$1(value) {
51744
+ if (value.kind !== "entry") return false;
51745
+ if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
51746
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
51747
+ return true;
51748
+ }
51749
+ function hydrateEntryLink(link, context) {
51750
+ const resolved = resolveEntryRouteTarget(link, context);
51751
+ if (!resolved) return link;
51752
+ return {
51753
+ ...link,
51754
+ href: resolved.href,
51755
+ routeId: resolved.routeId
51756
+ };
51757
+ }
51758
+ //#endregion
51759
+ //#region ../blocks/src/sdkBlockTransform.ts
51760
+ /**
51761
+ * Transforms an SDK custom block into a BlockManifest.
51762
+ *
51763
+ * If the block has a `layout`, it can be rendered declaratively without React code.
51764
+ * If no layout, the block MUST use blockOverrides for rendering.
51765
+ */
51766
+ function transformSdkBlockToManifest(sdkBlock) {
51767
+ const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
51768
+ return augmentManifest({
51769
+ name: sdkBlock.id,
51770
+ version: "1.0.0",
51771
+ title: sdkBlock.title,
51772
+ titleSource: sdkBlock.titleSource,
51773
+ description: sdkBlock.description,
51774
+ component: sdkBlock.id,
51775
+ fields: sdkBlock.fields,
51776
+ slots: [],
51777
+ category: sdkBlock.category,
51778
+ tags: sdkBlock.tags,
51779
+ icon: sdkBlock.icon,
51780
+ layout: sdkBlock.layout,
51781
+ variants: sdkBlock.variants,
51782
+ defaultVariant: sdkBlock.defaultVariant,
51783
+ variantOptions: sdkBlock.variantOptions,
51784
+ previewCustomize: sdkBlock.previewCustomize,
51785
+ behaviours: {
51786
+ supportsThemeSwitching: true,
51787
+ inlineEditing: hasLayout,
51788
+ animation: hasLayout,
51789
+ paletteHidden: false
51790
+ }
51791
+ });
51792
+ }
51793
+ /**
51794
+ * Transforms an SDK custom block into a SystemBlockDefinition.
51795
+ *
51796
+ * This creates a minimal definition with just the manifest - no data loaders
51797
+ * or content normalizers since SDK blocks handle their own rendering.
51798
+ */
51799
+ function transformSdkBlockToDefinition(sdkBlock) {
51800
+ return {
51801
+ manifest: transformSdkBlockToManifest(sdkBlock),
51802
+ dataLoaders: sdkBlock.dataLoaders
51803
+ };
51804
+ }
51805
+ //#endregion
51806
+ //#region ../blocks/src/customBlockRegistry.ts
51807
+ const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
51808
+ function isCustomBlockKind(blockKind) {
51809
+ return blockKind.startsWith("custom.");
51810
+ }
51811
+ function transformToBlockDescriptor(sdkBlock, source = "sdk") {
51812
+ return {
51813
+ name: sdkBlock.id,
51814
+ title: sdkBlock.title,
51815
+ description: sdkBlock.description,
51816
+ category: sdkBlock.category,
51817
+ tags: sdkBlock.tags,
51818
+ icon: sdkBlock.icon,
51819
+ definition: transformSdkBlockToDefinition(sdkBlock),
51820
+ source
51821
+ };
51822
+ }
51823
+ function toResolvedCustomBlock(manifest, source) {
51824
+ return {
51825
+ blockKind: manifest.id,
51826
+ manifest: transformSdkBlockToManifest(manifest),
51827
+ source,
51828
+ descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
51829
+ };
51830
+ }
51831
+ function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
51832
+ switch (policy.kind) {
51833
+ case "canonical-db-fallback-sdk": {
51834
+ const entriesByKind = /* @__PURE__ */ new Map();
51835
+ const conflicts = [];
51836
+ for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
51837
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
51838
+ const existing = entriesByKind.get(sdkBlock.id);
51839
+ if (existing) {
51840
+ conflicts.push({
51841
+ kind: "conflict",
51842
+ blockKind: existing.blockKind,
51843
+ winner: existing.source,
51844
+ loser: { kind: "sdk-config" },
51845
+ reason: "db-canonical-sdk-fallback"
51846
+ });
51847
+ continue;
51848
+ }
51849
+ entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
51850
+ }
51851
+ return {
51852
+ policy,
51853
+ entries: Array.from(entriesByKind.values()),
51854
+ conflicts
51855
+ };
51856
+ }
51857
+ }
51858
+ }
51859
+ function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
51860
+ const plan = planCustomBlockRegistryResolution({
51861
+ sdkConfig,
51862
+ customBlocks,
51863
+ policy
51864
+ });
51865
+ const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
51866
+ for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
51867
+ return {
51868
+ entries: plan.entries,
51869
+ conflicts: plan.conflicts,
51870
+ findManifest: (blockKind) => {
51871
+ if (!isCustomBlockKind(blockKind)) return void 0;
51872
+ return entriesByKind.get(blockKind);
51873
+ }
51874
+ };
51875
+ }
51876
+ function sourceLabel(source) {
51877
+ switch (source.kind) {
51878
+ case "managed-database": return "DB";
51879
+ case "sdk-synced": return "SDK-synced DB";
51880
+ case "sdk-config": return "SDK config";
51881
+ default: return assertNever$24(source);
51882
+ }
51883
+ }
51884
+ //#endregion
51674
51885
  //#region ../theme-core/src/runtime/fontFamily.ts
51675
51886
  /**
51676
51887
  * Font Family Formatting Utilities
@@ -55408,215 +55619,115 @@ function mapFontStyle(italic) {
55408
55619
  return italic ? "italic" : "normal";
55409
55620
  }
55410
55621
  //#endregion
55411
- //#region ../blocks/src/system/manifest/hydrateLinks.ts
55412
- /**
55413
- * Hydrates link objects within block content using the provided route map. Returns
55414
- * the original content reference when no mutations are required to avoid unnecessary renders.
55415
- */
55416
- function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
55417
- if (!routes || !manifest?.fields?.length) return content;
55418
- return hydrateValue(content, {
55419
- routes,
55420
- pagesByIdentifier,
55421
- entriesByIdentifier
55422
- });
55423
- }
55424
- function hydrateValue(value, context) {
55425
- try {
55426
- if (Array.isArray(value)) {
55427
- const resolvedItems = value.map((item) => hydrateValue(item, context));
55428
- return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
55429
- }
55430
- if (isRecord$27(value)) {
55431
- if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
55432
- if (isPageLink$1(value)) return hydratePageLink(value, context);
55433
- if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
55434
- const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
55435
- return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
55436
- }
55437
- return value;
55438
- } catch (err) {
55439
- console.error("[hydrateLinks] Error hydrating value:", err, value);
55440
- return value;
55622
+ //#region ../blocks/src/pageRenderingMode.ts
55623
+ var MissingBlockOverrideError$1 = class extends Error {
55624
+ constructor(blockKind) {
55625
+ super(`Override-only rendering requires an override for block kind "${blockKind}".`);
55626
+ this.blockKind = blockKind;
55627
+ this.code = "missing_block_override";
55628
+ this.name = "MissingBlockOverrideError";
55441
55629
  }
55630
+ };
55631
+ function isOverrideOnlyResourceInput(props) {
55632
+ return props.rendering?.kind === "overrides-only";
55442
55633
  }
55443
- function hydrateInternalLink(link, routes) {
55444
- const resolved = resolveRouteTarget(link.routeId, routes);
55445
- if (!resolved) return link;
55446
- const nextHref = resolved.href;
55447
- const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
55448
- const nextUpdatedAt = resolved.updatedAt;
55449
- const updates = {};
55450
- if (nextHref && nextHref !== currentHref) updates.href = nextHref;
55451
- if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
55452
- return Object.keys(updates).length > 0 ? {
55453
- ...link,
55454
- ...updates
55455
- } : link;
55456
- }
55457
- function isInternalLink$1(value) {
55458
- if (value.kind !== "internal") return false;
55459
- if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
55460
- return true;
55461
- }
55462
- function isPageLink$1(value) {
55463
- if (value.kind !== "page") return false;
55464
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
55465
- return true;
55466
- }
55467
- function hydratePageLink(link, context) {
55468
- const resolved = resolvePageRouteTarget(link, context);
55469
- if (!resolved) return link;
55634
+ function resolvePageThemeResources(props) {
55635
+ if (isOverrideOnlyResourceInput(props)) return { kind: "unavailable" };
55470
55636
  return {
55471
- ...link,
55472
- href: resolved.href,
55473
- routeId: resolved.routeId
55637
+ kind: "available",
55638
+ tokens: props.themeTokens ?? buildThemeRuntime$1(props.theme).tokens,
55639
+ config: props.theme
55474
55640
  };
55475
55641
  }
55476
- function isEntryLink$1(value) {
55477
- if (value.kind !== "entry") return false;
55478
- if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
55479
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
55480
- return true;
55642
+ function requireBlockOverride(resources, override, blockKind) {
55643
+ if (resources.kind === "unavailable" && !override) throw new MissingBlockOverrideError$1(blockKind);
55481
55644
  }
55482
- function hydrateEntryLink(link, context) {
55483
- const resolved = resolveEntryRouteTarget(link, context);
55484
- if (!resolved) return link;
55485
- return {
55486
- ...link,
55487
- href: resolved.href,
55488
- routeId: resolved.routeId
55489
- };
55645
+ function overrideThemeProps(resources) {
55646
+ return resources.kind === "available" ? {
55647
+ theme: resources.tokens,
55648
+ themeConfig: resources.config
55649
+ } : {};
55650
+ }
55651
+ function requireThemeResources(resources, blockKind) {
55652
+ if (resources.kind === "unavailable") throw new MissingBlockOverrideError$1(blockKind);
55653
+ return resources;
55490
55654
  }
55491
55655
  //#endregion
55492
- //#region ../blocks/src/sdkBlockTransform.ts
55493
- /**
55494
- * Transforms an SDK custom block into a BlockManifest.
55495
- *
55496
- * If the block has a `layout`, it can be rendered declaratively without React code.
55497
- * If no layout, the block MUST use blockOverrides for rendering.
55498
- */
55499
- function transformSdkBlockToManifest(sdkBlock) {
55500
- const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
55501
- return augmentManifest({
55502
- name: sdkBlock.id,
55503
- version: "1.0.0",
55504
- title: sdkBlock.title,
55505
- titleSource: sdkBlock.titleSource,
55506
- description: sdkBlock.description,
55507
- component: sdkBlock.id,
55508
- fields: sdkBlock.fields,
55509
- slots: [],
55510
- category: sdkBlock.category,
55511
- tags: sdkBlock.tags,
55512
- icon: sdkBlock.icon,
55513
- layout: sdkBlock.layout,
55514
- variants: sdkBlock.variants,
55515
- defaultVariant: sdkBlock.defaultVariant,
55516
- variantOptions: sdkBlock.variantOptions,
55517
- previewCustomize: sdkBlock.previewCustomize,
55518
- behaviours: {
55519
- supportsThemeSwitching: true,
55520
- inlineEditing: hasLayout,
55521
- animation: hasLayout,
55522
- paletteHidden: false
55523
- }
55524
- });
55656
+ //#region ../blocks/src/pageRendererBoundaries.tsx
55657
+ const boundaryKey = (previousBlockId, nextBlockId) => `${previousBlockId}\u0000${nextBlockId}`;
55658
+ function isSiteStyleTransitionStyleGroup(value) {
55659
+ return value?.startsWith("site-style-transition-") === true;
55525
55660
  }
55526
- /**
55527
- * Transforms an SDK custom block into a SystemBlockDefinition.
55528
- *
55529
- * This creates a minimal definition with just the manifest - no data loaders
55530
- * or content normalizers since SDK blocks handle their own rendering.
55531
- */
55532
- function transformSdkBlockToDefinition(sdkBlock) {
55533
- return {
55534
- manifest: transformSdkBlockToManifest(sdkBlock),
55535
- dataLoaders: sdkBlock.dataLoaders
55536
- };
55661
+ function boundaryMapForAdjacentBlockIds(boundaries) {
55662
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
55537
55663
  }
55538
- //#endregion
55539
- //#region ../blocks/src/customBlockRegistry.ts
55540
- const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
55541
- function isCustomBlockKind(blockKind) {
55542
- return blockKind.startsWith("custom.");
55664
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaries) {
55665
+ const previousBlockId = previousBlock?.id ?? null;
55666
+ const nextBlockId = nextBlock?.id ?? null;
55667
+ if (!previousBlockId || !nextBlockId) return null;
55668
+ return boundaries.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
55543
55669
  }
55544
- function transformToBlockDescriptor(sdkBlock, source = "sdk") {
55670
+ function renderBoundaryAfterBlock(input) {
55671
+ const previousBlockId = input.block.id;
55672
+ const nextBlockId = input.nextBlock?.id ?? null;
55673
+ if (!previousBlockId || !nextBlockId) return null;
55674
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
55675
+ if (!boundary) return null;
55676
+ const rendered = /* @__PURE__ */ jsx("div", {
55677
+ "aria-hidden": "true",
55678
+ "data-block-boundary": "",
55679
+ "data-boundary-id": boundary.boundaryId,
55680
+ "data-boundary-previous-block-id": boundary.previousBlockId,
55681
+ "data-boundary-next-block-id": boundary.nextBlockId,
55682
+ "data-style-group": boundary.styleGroup,
55683
+ style: boundaryCssVarsStyle(boundary)
55684
+ }, `${input.blockKey}:boundary`);
55685
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
55686
+ }
55687
+ function boundaryCssVarsStyle(boundary) {
55545
55688
  return {
55546
- name: sdkBlock.id,
55547
- title: sdkBlock.title,
55548
- description: sdkBlock.description,
55549
- category: sdkBlock.category,
55550
- tags: sdkBlock.tags,
55551
- icon: sdkBlock.icon,
55552
- definition: transformSdkBlockToDefinition(sdkBlock),
55553
- source
55689
+ "--site-style-transition-from": boundary.cssVars.from,
55690
+ "--site-style-transition-to": boundary.cssVars.to
55554
55691
  };
55555
55692
  }
55556
- function toResolvedCustomBlock(manifest, source) {
55693
+ function boundaryReserveCssVarsStyle(input) {
55694
+ const before = input.before?.metrics.reserveCss ?? null;
55695
+ const after = input.after?.metrics.reserveCss ?? null;
55696
+ if (!before && !after) return void 0;
55557
55697
  return {
55558
- blockKind: manifest.id,
55559
- manifest: transformSdkBlockToManifest(manifest),
55560
- source,
55561
- descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
55698
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
55699
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
55562
55700
  };
55563
55701
  }
55564
- function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
55565
- switch (policy.kind) {
55566
- case "canonical-db-fallback-sdk": {
55567
- const entriesByKind = /* @__PURE__ */ new Map();
55568
- const conflicts = [];
55569
- for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
55570
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
55571
- const existing = entriesByKind.get(sdkBlock.id);
55572
- if (existing) {
55573
- conflicts.push({
55574
- kind: "conflict",
55575
- blockKind: existing.blockKind,
55576
- winner: existing.source,
55577
- loser: { kind: "sdk-config" },
55578
- reason: "db-canonical-sdk-fallback"
55579
- });
55580
- continue;
55581
- }
55582
- entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
55583
- }
55584
- return {
55585
- policy,
55586
- entries: Array.from(entriesByKind.values()),
55587
- conflicts
55588
- };
55589
- }
55590
- }
55702
+ function transitionCssVarsStyle(content) {
55703
+ const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
55704
+ const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
55705
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
55706
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
55707
+ if (!from && !to) return void 0;
55708
+ return {
55709
+ ...from ? { "--site-style-transition-from": from } : {},
55710
+ ...to ? { "--site-style-transition-to": to } : {}
55711
+ };
55591
55712
  }
55592
- function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
55593
- const plan = planCustomBlockRegistryResolution({
55594
- sdkConfig,
55595
- customBlocks,
55596
- policy
55597
- });
55598
- const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
55599
- for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
55713
+ function mergeStyleObjects(left, right) {
55714
+ if (!left) return right;
55715
+ if (!right) return left;
55600
55716
  return {
55601
- entries: plan.entries,
55602
- conflicts: plan.conflicts,
55603
- findManifest: (blockKind) => {
55604
- if (!isCustomBlockKind(blockKind)) return void 0;
55605
- return entriesByKind.get(blockKind);
55606
- }
55717
+ ...left,
55718
+ ...right
55607
55719
  };
55608
55720
  }
55609
- function sourceLabel(source) {
55610
- switch (source.kind) {
55611
- case "managed-database": return "DB";
55612
- case "sdk-synced": return "SDK-synced DB";
55613
- case "sdk-config": return "SDK config";
55614
- default: return assertNever$24(source);
55615
- }
55721
+ function pageBlockPosition(index, blockCount) {
55722
+ if (blockCount <= 1) return "only";
55723
+ if (index === 0) return "first";
55724
+ if (index === blockCount - 1) return "last";
55725
+ return "middle";
55616
55726
  }
55617
55727
  //#endregion
55618
55728
  //#region ../blocks/src/PageRenderer.tsx
55619
- function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
55729
+ function PageRenderer$1(props) {
55730
+ const { page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring } = props;
55620
55731
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
55621
55732
  dataContext?.imageResolveContext,
55622
55733
  dataContext?.mediaAssets,
@@ -55625,12 +55736,16 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
55625
55736
  ]);
55626
55737
  const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
55627
55738
  const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
55739
+ const themeResources = React$1.useMemo(() => resolvePageThemeResources(props), [
55740
+ props.rendering,
55741
+ props.theme,
55742
+ props.themeTokens
55743
+ ]);
55628
55744
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
55629
55745
  className: "rb-p-6 rb-caption",
55630
55746
  style: textColorStyle("mutedText"),
55631
55747
  children: "No blocks found."
55632
55748
  });
55633
- const themeTokens = providedThemeTokens ?? buildThemeRuntime$1(theme).tokens;
55634
55749
  const resolvedRegistry = registry ?? getDefaultComponentRegistry();
55635
55750
  setContextResolveImageUrlContext(imageResolveContext);
55636
55751
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
@@ -55653,22 +55768,14 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
55653
55768
  const renderableContent = getRenderableContent(block, dataContext?.previewStage);
55654
55769
  const variantKey = definition?.manifest ? resolveVariantKey(definition.manifest, renderableContent) : null;
55655
55770
  const shouldUseWrapper = !managesOwnWrapper || Boolean(wrapBlock);
55656
- const blockSectionProps = {
55657
- themeTokens,
55658
- themeConfig: theme,
55771
+ const blockSectionProps = buildBlockSectionProps({
55772
+ props,
55773
+ themeResources,
55659
55774
  block,
55660
- usePlaceholders,
55661
- dataContext,
55662
55775
  blockKey,
55663
- registry: resolvedRegistry,
55664
- routeMap,
55665
- wrapBlock,
55666
- blockOverrides,
55667
- sdkConfig,
55668
- customBlocks,
55669
55776
  imageResolveContext,
55670
- previewAuthoring
55671
- };
55777
+ registry: resolvedRegistry
55778
+ });
55672
55779
  if (!shouldUseWrapper) {
55673
55780
  const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
55674
55781
  return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
@@ -55710,81 +55817,6 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
55710
55817
  })] }, blockKey);
55711
55818
  }) });
55712
55819
  }
55713
- function isSiteStyleTransitionStyleGroup(value) {
55714
- return value?.startsWith("site-style-transition-") === true;
55715
- }
55716
- function boundaryMapForAdjacentBlockIds(boundaries) {
55717
- return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
55718
- }
55719
- function boundaryKey(previousBlockId, nextBlockId) {
55720
- return `${previousBlockId}\u0000${nextBlockId}`;
55721
- }
55722
- function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
55723
- const previousBlockId = previousBlock?.id ?? null;
55724
- const nextBlockId = nextBlock?.id ?? null;
55725
- if (!previousBlockId || !nextBlockId) return null;
55726
- return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
55727
- }
55728
- function renderBoundaryAfterBlock(input) {
55729
- const previousBlockId = input.block.id;
55730
- const nextBlockId = input.nextBlock?.id ?? null;
55731
- if (!previousBlockId || !nextBlockId) return null;
55732
- const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
55733
- if (!boundary) return null;
55734
- const rendered = /* @__PURE__ */ jsx("div", {
55735
- "aria-hidden": "true",
55736
- "data-block-boundary": "",
55737
- "data-boundary-id": boundary.boundaryId,
55738
- "data-boundary-previous-block-id": boundary.previousBlockId,
55739
- "data-boundary-next-block-id": boundary.nextBlockId,
55740
- "data-style-group": boundary.styleGroup,
55741
- style: boundaryCssVarsStyle(boundary)
55742
- }, `${input.blockKey}:boundary`);
55743
- return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
55744
- }
55745
- function boundaryCssVarsStyle(boundary) {
55746
- return {
55747
- "--site-style-transition-from": boundary.cssVars.from,
55748
- "--site-style-transition-to": boundary.cssVars.to
55749
- };
55750
- }
55751
- function boundaryReserveCssVarsStyle(input) {
55752
- const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
55753
- const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
55754
- if (!before && !after) return void 0;
55755
- return {
55756
- ...before ? { "--site-style-boundary-before-reserve": before } : {},
55757
- ...after ? { "--site-style-boundary-after-reserve": after } : {}
55758
- };
55759
- }
55760
- function boundaryReserveValueForTreatment(boundary) {
55761
- return boundary.metrics.reserveCss;
55762
- }
55763
- function transitionCssVarsStyle(content) {
55764
- const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
55765
- const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
55766
- const from = typeof cssVars?.from === "string" ? cssVars.from : null;
55767
- const to = typeof cssVars?.to === "string" ? cssVars.to : null;
55768
- if (!from && !to) return void 0;
55769
- return {
55770
- ...from ? { "--site-style-transition-from": from } : {},
55771
- ...to ? { "--site-style-transition-to": to } : {}
55772
- };
55773
- }
55774
- function mergeStyleObjects(left, right) {
55775
- if (!left) return right;
55776
- if (!right) return left;
55777
- return {
55778
- ...left,
55779
- ...right
55780
- };
55781
- }
55782
- function pageBlockPosition(index, blockCount) {
55783
- if (blockCount <= 1) return "only";
55784
- if (index === 0) return "first";
55785
- if (index === blockCount - 1) return "last";
55786
- return "middle";
55787
- }
55788
55820
  function resolvePageRendererImageResolveContext(dataContext) {
55789
55821
  const input = dataContext?.imageResolveContext;
55790
55822
  return buildResolveImageUrlContext({
@@ -55794,6 +55826,23 @@ function resolvePageRendererImageResolveContext(dataContext) {
55794
55826
  mediaAssets: input?.mediaAssets ?? dataContext?.mediaAssets
55795
55827
  });
55796
55828
  }
55829
+ function buildBlockSectionProps(input) {
55830
+ return {
55831
+ themeResources: input.themeResources,
55832
+ block: input.block,
55833
+ usePlaceholders: input.props.usePlaceholders ?? false,
55834
+ dataContext: input.props.dataContext,
55835
+ blockKey: input.blockKey,
55836
+ registry: input.registry,
55837
+ routeMap: input.props.routeMap,
55838
+ wrapBlock: input.props.wrapBlock,
55839
+ blockOverrides: input.props.blockOverrides,
55840
+ sdkConfig: input.props.sdkConfig,
55841
+ customBlocks: input.props.customBlocks,
55842
+ imageResolveContext: input.imageResolveContext,
55843
+ previewAuthoring: input.props.previewAuthoring
55844
+ };
55845
+ }
55797
55846
  /**
55798
55847
  * Look up a block override component by block kind.
55799
55848
  * Supports both full ("block.hero") and short ("hero") keys.
@@ -55860,7 +55909,7 @@ function getCachedValidator(manifest, flavour) {
55860
55909
  * referential equality of all props that affect rendering. Standard React.memo
55861
55910
  * wouldn't catch all the render triggers from the editor store.
55862
55911
  */
55863
- const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, themeConfig, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
55912
+ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
55864
55913
  const perfStart = globalThis.process?.env?.DEBUG_PERF === "1" && typeof window === "undefined" ? Date.now() : 0;
55865
55914
  const fallbackImageResolveContext = getCurrentResolveImageUrlContext();
55866
55915
  const resolvedImageResolveContext = imageResolveContext ?? fallbackImageResolveContext;
@@ -55881,6 +55930,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
55881
55930
  return node;
55882
55931
  }
55883
55932
  const OverrideComponent = getBlockOverride(block.kind, blockOverrides);
55933
+ requireBlockOverride(themeResources, OverrideComponent, block.kind);
55884
55934
  let definition = getBlockDefinition(block.kind);
55885
55935
  if (!definition && block.kind.startsWith("custom.")) definition = createCustomBlockRegistry({
55886
55936
  sdkConfig,
@@ -55893,8 +55943,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
55893
55943
  if (OverrideComponent) {
55894
55944
  const rendered = /* @__PURE__ */ jsx(OverrideComponent, {
55895
55945
  content: getRenderableContent(block, dataContext?.previewStage),
55896
- theme: themeTokens,
55897
- themeConfig,
55946
+ ...overrideThemeProps(themeResources),
55898
55947
  data: void 0,
55899
55948
  siteId: dataContext?.siteId,
55900
55949
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -55993,8 +56042,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
55993
56042
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
55994
56043
  const baseProps = {
55995
56044
  content: hydratedContent,
55996
- theme: themeTokens,
55997
- themeConfig,
56045
+ ...overrideThemeProps(themeResources),
55998
56046
  data: resolved,
55999
56047
  siteId: dataContext?.siteId,
56000
56048
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -56014,6 +56062,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56014
56062
  let rendered;
56015
56063
  if (OverrideComponent) rendered = /* @__PURE__ */ jsx(OverrideComponent, { ...baseProps });
56016
56064
  else {
56065
+ requireThemeResources(themeResources, block.kind);
56017
56066
  const BlockComponent = getCachedBlockComponent(definition.manifest);
56018
56067
  const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
56019
56068
  const rootContext = { $root: {
@@ -56063,7 +56112,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56063
56112
  });
56064
56113
  }
56065
56114
  }, (prev, next) => {
56066
- return prev.block === next.block && prev.registry === next.registry && prev.dataContext === next.dataContext && prev.themeTokens === next.themeTokens && prev.themeConfig === next.themeConfig && prev.routeMap === next.routeMap && prev.usePlaceholders === next.usePlaceholders && prev.wrapBlock === next.wrapBlock && prev.blockOverrides === next.blockOverrides && prev.sdkConfig === next.sdkConfig && prev.customBlocks === next.customBlocks && prev.imageResolveContext === next.imageResolveContext && prev.previewAuthoring === next.previewAuthoring;
56115
+ return prev.block === next.block && prev.registry === next.registry && prev.dataContext === next.dataContext && prev.themeResources === next.themeResources && prev.routeMap === next.routeMap && prev.usePlaceholders === next.usePlaceholders && prev.wrapBlock === next.wrapBlock && prev.blockOverrides === next.blockOverrides && prev.sdkConfig === next.sdkConfig && prev.customBlocks === next.customBlocks && prev.imageResolveContext === next.imageResolveContext && prev.previewAuthoring === next.previewAuthoring;
56067
56116
  });
56068
56117
  function fallback(message) {
56069
56118
  return /* @__PURE__ */ jsx("div", {
@@ -69278,8 +69327,9 @@ function toBlocksImageResolveContextInput(context) {
69278
69327
  mediaAssets: toBlocksMediaAssets(context.mediaAssets)
69279
69328
  };
69280
69329
  }
69281
- //#endregion
69282
- //#region src/rendering/blocks-page-renderer.ts
69330
+ function isOverrideOnlyPageRenderer(props) {
69331
+ return props.rendering?.kind === "overrides-only";
69332
+ }
69283
69333
  function normalizeSdkCustomBlocks(customBlocks) {
69284
69334
  if (!customBlocks) return void 0;
69285
69335
  return customBlocks.map((block) => {
@@ -69310,15 +69360,23 @@ function toBlocksPageRendererDataContext(dataContext) {
69310
69360
  }
69311
69361
  function PageRenderer(props) {
69312
69362
  const blocksSdkConfig = props.sdkConfig ? { customBlocks: normalizeSdkCustomBlocks(props.sdkConfig.customBlocks) } : props.sdkConfig;
69313
- const blocksTheme = parseBlocksTheme(props.theme);
69314
- const blocksProps = {
69315
- ...props,
69316
- theme: blocksTheme,
69363
+ const { rendering: _rendering, theme: _theme, themeTokens: _themeTokens, ...commonProps } = props;
69364
+ const commonBlocksProps = {
69365
+ ...commonProps,
69317
69366
  dataContext: props.dataContext ? toBlocksPageRendererDataContext(props.dataContext) : void 0,
69318
69367
  blockOverrides: toBlocksBlockOverrides(props.blockOverrides),
69319
69368
  sdkConfig: blocksSdkConfig,
69320
69369
  customBlocks: normalizeSdkCustomBlocks(props.customBlocks)
69321
69370
  };
69371
+ const blocksProps = isOverrideOnlyPageRenderer(props) ? {
69372
+ ...commonBlocksProps,
69373
+ rendering: { kind: "overrides-only" },
69374
+ blockOverrides: toBlocksBlockOverrides(props.blockOverrides) ?? {}
69375
+ } : {
69376
+ ...commonBlocksProps,
69377
+ theme: parseBlocksTheme(props.theme),
69378
+ themeTokens: props.themeTokens
69379
+ };
69322
69380
  return React$1.createElement(PageRenderer$1, blocksProps);
69323
69381
  }
69324
69382
  //#endregion
@@ -69360,8 +69418,31 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
69360
69418
  default: return assertNever$24(themeRuntime);
69361
69419
  }
69362
69420
  }
69421
+ function renderWithOverrideOnlyRuntime({ runtime, children }) {
69422
+ switch (runtime.kind) {
69423
+ case "responsive-only": return /* @__PURE__ */ jsx(ResponsiveScope, {
69424
+ responsiveMode: runtime.responsiveMode,
69425
+ children
69426
+ });
69427
+ case "none": return /* @__PURE__ */ jsx(Fragment, { children });
69428
+ default: return assertNever$24(runtime);
69429
+ }
69430
+ }
69363
69431
  //#endregion
69364
69432
  //#region src/rendering/components/pageShared.tsx
69433
+ function isOverrideOnlyPage(props) {
69434
+ return props.rendering?.kind === "overrides-only";
69435
+ }
69436
+ function resolvePageThemeTokens(props) {
69437
+ const baseTokens = props.themeTokens ?? buildThemeRuntime(props.theme).tokens;
69438
+ return props.sdkConfig?.theme?.palette ? {
69439
+ ...baseTokens,
69440
+ palette: {
69441
+ ...baseTokens.palette,
69442
+ ...props.sdkConfig.theme.palette
69443
+ }
69444
+ } : baseTokens;
69445
+ }
69365
69446
  function toPageHydrationBootstrapConfig(props) {
69366
69447
  return {
69367
69448
  siteId: props.siteId,
@@ -69369,55 +69450,60 @@ function toPageHydrationBootstrapConfig(props) {
69369
69450
  mediaAssets: props.mediaAssets
69370
69451
  };
69371
69452
  }
69372
- function PageContent({ page, runtimeBoundaries, theme, themeTokens: providedTokens, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext, themeRuntime = defaultPageThemeRuntime }) {
69373
- const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
69374
- return renderWithSdkThemeRuntime({
69375
- themeRuntime,
69376
- theme,
69377
- children: /* @__PURE__ */ jsx(PageRenderer, {
69378
- theme,
69379
- page,
69380
- runtimeBoundaries,
69381
- themeTokens: sdkConfig?.theme?.palette ? {
69382
- ...baseTokens,
69383
- palette: {
69384
- ...baseTokens.palette,
69385
- ...sdkConfig.theme.palette
69386
- }
69387
- } : baseTokens,
69388
- usePlaceholders,
69389
- dataContext: {
69453
+ function PageContent(props) {
69454
+ const { page, runtimeBoundaries, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext } = props;
69455
+ const rendererCommonProps = {
69456
+ page,
69457
+ runtimeBoundaries,
69458
+ usePlaceholders,
69459
+ dataContext: {
69460
+ siteId,
69461
+ apiBaseUrl,
69462
+ portalToken,
69463
+ previewToken,
69464
+ resolvedData,
69465
+ bookingOfferingPresets: bookingOfferingPresets ?? [],
69466
+ routes: routeMap,
69467
+ pagesByIdentifier,
69468
+ entriesByIdentifier,
69469
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
69470
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
69471
+ contentEntry: dataContext?.contentEntry ?? null,
69472
+ pageSurface: dataContext?.pageSurface ?? null,
69473
+ subject: dataContext?.subject ?? null,
69474
+ editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
69475
+ previewStage: dataContext?.previewStage,
69476
+ supabaseUrl,
69477
+ mediaAssets,
69478
+ imageResolveContext: {
69390
69479
  siteId,
69391
- apiBaseUrl,
69392
- portalToken,
69393
- previewToken,
69394
- resolvedData,
69395
- bookingOfferingPresets: bookingOfferingPresets ?? [],
69396
- routes: routeMap,
69397
- pagesByIdentifier,
69398
- entriesByIdentifier,
69399
- occurrenceContext: dataContext?.occurrenceContext ?? null,
69400
- entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
69401
- contentEntry: dataContext?.contentEntry ?? null,
69402
- pageSurface: dataContext?.pageSurface ?? null,
69403
- subject: dataContext?.subject ?? null,
69404
- editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
69405
- previewStage: dataContext?.previewStage,
69406
69480
  supabaseUrl,
69407
- mediaAssets,
69408
- imageResolveContext: {
69409
- siteId,
69410
- supabaseUrl,
69411
- mediaAssets
69412
- }
69413
- },
69414
- routeMap,
69415
- wrapBlock,
69416
- registry,
69417
- blockOverrides,
69418
- sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
69419
- customBlocks
69420
- })
69481
+ mediaAssets
69482
+ }
69483
+ },
69484
+ routeMap,
69485
+ wrapBlock,
69486
+ registry,
69487
+ sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
69488
+ customBlocks
69489
+ };
69490
+ const content = isOverrideOnlyPage(props) ? /* @__PURE__ */ jsx(PageRenderer, {
69491
+ ...rendererCommonProps,
69492
+ rendering: { kind: "overrides-only" },
69493
+ blockOverrides: props.blockOverrides
69494
+ }) : /* @__PURE__ */ jsx(PageRenderer, {
69495
+ ...rendererCommonProps,
69496
+ theme: props.theme,
69497
+ themeTokens: resolvePageThemeTokens(props),
69498
+ blockOverrides
69499
+ });
69500
+ return isOverrideOnlyPage(props) ? renderWithOverrideOnlyRuntime({
69501
+ runtime: props.rendering.runtime,
69502
+ children: content
69503
+ }) : renderWithSdkThemeRuntime({
69504
+ themeRuntime: props.themeRuntime ?? defaultPageThemeRuntime,
69505
+ theme: props.theme,
69506
+ children: content
69421
69507
  });
69422
69508
  }
69423
69509
  //#endregion
@@ -69940,12 +70026,48 @@ function buildLogo(logo, fallbackAlt) {
69940
70026
  return result;
69941
70027
  }
69942
70028
  //#endregion
70029
+ //#region src/rendering/renderingMode.ts
70030
+ const defaultOverrideOnlyRuntime = { kind: "responsive-only" };
70031
+ //#endregion
69943
70032
  //#region src/rendering/components/Layout.tsx
69944
70033
  /**
69945
70034
  * Layout component with header and footer
69946
70035
  *
69947
70036
  * Renders site header and footer around content. Fetches site data if not provided.
69948
70037
  */
70038
+ function isOverrideOnlyLayout(props) {
70039
+ return props.rendering?.kind === "overrides-only";
70040
+ }
70041
+ var UnsupportedOverrideOnlyLayoutChromeError = class extends Error {
70042
+ constructor(surface) {
70043
+ super(`Override-only Layout requires a custom or disabled ${surface}; SDK default chrome is unavailable.`);
70044
+ this.surface = surface;
70045
+ this.code = "unsupported_override_only_layout_chrome";
70046
+ this.name = "UnsupportedOverrideOnlyLayoutChromeError";
70047
+ }
70048
+ };
70049
+ async function resolveLayoutSiteData(props) {
70050
+ if (props.siteData) return props.siteData;
70051
+ if (!props.client) throw new Error("Layout: must provide either siteData or client");
70052
+ if (!props.siteId && !props.slug && !props.domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
70053
+ return props.client.getSite({
70054
+ id: props.siteId,
70055
+ slug: props.slug,
70056
+ domain: props.domain
70057
+ });
70058
+ }
70059
+ function renderOverrideOnlyLayout(props, data) {
70060
+ if (data.header === true) throw new UnsupportedOverrideOnlyLayoutChromeError("header");
70061
+ if (data.footer === true) throw new UnsupportedOverrideOnlyLayoutChromeError("footer");
70062
+ return renderWithOverrideOnlyRuntime({
70063
+ runtime: props.rendering.runtime ?? defaultOverrideOnlyRuntime,
70064
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
70065
+ typeof props.header === "function" ? props.header(data.headerData) : null,
70066
+ props.children,
70067
+ typeof props.footer === "function" ? props.footer(data.footerData) : null
70068
+ ] })
70069
+ });
70070
+ }
69949
70071
  /**
69950
70072
  * Layout component that wraps content with site header and footer.
69951
70073
  *
@@ -69981,20 +70103,13 @@ function buildLogo(logo, fallbackAlt) {
69981
70103
  * </Layout>
69982
70104
  * ```
69983
70105
  */
69984
- async function Layout({ siteData: providedSiteData, client, siteId, slug, domain, children, header = true, footer = true, headerVariant, hasPortalSession = false, previewStage = "published", themeRuntime }) {
69985
- let siteData = providedSiteData;
69986
- if (!siteData) {
69987
- if (!client) throw new Error("Layout: must provide either siteData or client");
69988
- if (!siteId && !slug && !domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
69989
- siteData = await client.getSite({
69990
- id: siteId,
69991
- slug,
69992
- domain
69993
- });
69994
- }
69995
- const { site, theme, navigation, layout, routes } = siteData;
70106
+ async function Layout(props) {
70107
+ const { children, hasPortalSession = false, previewStage = "published" } = props;
70108
+ const header = props.header ?? true;
70109
+ const footer = props.footer ?? true;
70110
+ const siteData = await resolveLayoutSiteData(props);
70111
+ const { site, navigation, layout, routes } = siteData;
69996
70112
  const footerBlocks = siteData.footerBlocks ?? [];
69997
- const builtThemeRuntime = buildThemeRuntime(theme);
69998
70113
  const navigationOptions = {
69999
70114
  hasPortalSession,
70000
70115
  previewStage,
@@ -70008,22 +70123,38 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
70008
70123
  const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
70009
70124
  const legalFooterMenuViewModel = buildFooterMenuForRole(navigation, routes, "legal-policy", navigationOptions);
70010
70125
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
70011
- const headerData = {
70126
+ const customHeaderData = {
70012
70127
  menu: menuViewModel,
70013
70128
  logo: logoViewModel,
70014
70129
  site,
70015
- theme,
70016
70130
  routes
70017
70131
  };
70018
- const footerData = {
70132
+ const customFooterData = {
70019
70133
  menu: menuViewModel,
70020
70134
  footerMenu: footerMenuViewModel,
70021
70135
  legalFooterMenu: legalFooterMenuViewModel,
70022
70136
  logo: logoViewModel,
70023
70137
  site,
70024
- theme,
70025
70138
  routes
70026
70139
  };
70140
+ if (isOverrideOnlyLayout(props)) return renderOverrideOnlyLayout(props, {
70141
+ header: props.header ?? true,
70142
+ footer: props.footer ?? true,
70143
+ headerData: customHeaderData,
70144
+ footerData: customFooterData
70145
+ });
70146
+ const { theme } = siteData;
70147
+ const builtThemeRuntime = buildThemeRuntime(theme);
70148
+ const headerVariant = props.headerVariant;
70149
+ const themeRuntime = props.themeRuntime;
70150
+ const headerData = {
70151
+ ...customHeaderData,
70152
+ theme
70153
+ };
70154
+ const footerData = {
70155
+ ...customFooterData,
70156
+ theme
70157
+ };
70027
70158
  const headerContent = headerVariant ? {
70028
70159
  ...layout.header,
70029
70160
  variant: headerVariant
@@ -72125,6 +72256,25 @@ z$1.object({
72125
72256
  mode: z$1.enum(["apply", "preview"]).optional()
72126
72257
  }).strict();
72127
72258
  //#endregion
72259
+ //#region ../api/src/sdkThemeWire.ts
72260
+ /**
72261
+ * Validate a wire value without replacing it with the schema's parsed output.
72262
+ * The returned type is deliberately the schema input, not its canonical output.
72263
+ */
72264
+ function losslessValidatedSchema(schema) {
72265
+ return z$1.unknown().superRefine((value, ctx) => {
72266
+ const parsed = schema.safeParse(value);
72267
+ if (parsed.success) return;
72268
+ for (const issue of parsed.error.issues) ctx.addIssue({
72269
+ code: "custom",
72270
+ path: issue.path,
72271
+ message: issue.message,
72272
+ params: { validationCode: issue.code }
72273
+ });
72274
+ }).transform((value) => value);
72275
+ }
72276
+ losslessValidatedSchema(themeSchema);
72277
+ //#endregion
72128
72278
  //#region ../api/src/siteOnboarding.ts
72129
72279
  const LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = { configure_appointments: {
72130
72280
  requirementId: "configure_appointments",