@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 {
@@ -52051,6 +52055,213 @@ function collectConstrainedVideoMediaValues(options) {
52051
52055
  return values;
52052
52056
  }
52053
52057
  //#endregion
52058
+ //#region ../blocks/src/system/manifest/hydrateLinks.ts
52059
+ /**
52060
+ * Hydrates link objects within block content using the provided route map. Returns
52061
+ * the original content reference when no mutations are required to avoid unnecessary renders.
52062
+ */
52063
+ function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
52064
+ if (!routes || !manifest?.fields?.length) return content;
52065
+ return hydrateValue(content, {
52066
+ routes,
52067
+ pagesByIdentifier,
52068
+ entriesByIdentifier
52069
+ });
52070
+ }
52071
+ function hydrateValue(value, context) {
52072
+ try {
52073
+ if (Array.isArray(value)) {
52074
+ const resolvedItems = value.map((item) => hydrateValue(item, context));
52075
+ return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
52076
+ }
52077
+ if (isRecord$27(value)) {
52078
+ if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
52079
+ if (isPageLink$1(value)) return hydratePageLink(value, context);
52080
+ if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
52081
+ const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
52082
+ return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
52083
+ }
52084
+ return value;
52085
+ } catch (err) {
52086
+ console.error("[hydrateLinks] Error hydrating value:", err, value);
52087
+ return value;
52088
+ }
52089
+ }
52090
+ function hydrateInternalLink(link, routes) {
52091
+ const resolved = resolveRouteTarget(link.routeId, routes);
52092
+ if (!resolved) return link;
52093
+ const nextHref = resolved.href;
52094
+ const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
52095
+ const nextUpdatedAt = resolved.updatedAt;
52096
+ const updates = {};
52097
+ if (nextHref && nextHref !== currentHref) updates.href = nextHref;
52098
+ if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
52099
+ return Object.keys(updates).length > 0 ? {
52100
+ ...link,
52101
+ ...updates
52102
+ } : link;
52103
+ }
52104
+ function isInternalLink$1(value) {
52105
+ if (value.kind !== "internal") return false;
52106
+ if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
52107
+ return true;
52108
+ }
52109
+ function isPageLink$1(value) {
52110
+ if (value.kind !== "page") return false;
52111
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
52112
+ return true;
52113
+ }
52114
+ function hydratePageLink(link, context) {
52115
+ const resolved = resolvePageRouteTarget(link, context);
52116
+ if (!resolved) return link;
52117
+ return {
52118
+ ...link,
52119
+ href: resolved.href,
52120
+ routeId: resolved.routeId
52121
+ };
52122
+ }
52123
+ function isEntryLink$1(value) {
52124
+ if (value.kind !== "entry") return false;
52125
+ if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
52126
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
52127
+ return true;
52128
+ }
52129
+ function hydrateEntryLink(link, context) {
52130
+ const resolved = resolveEntryRouteTarget(link, context);
52131
+ if (!resolved) return link;
52132
+ return {
52133
+ ...link,
52134
+ href: resolved.href,
52135
+ routeId: resolved.routeId
52136
+ };
52137
+ }
52138
+ //#endregion
52139
+ //#region ../blocks/src/sdkBlockTransform.ts
52140
+ /**
52141
+ * Transforms an SDK custom block into a BlockManifest.
52142
+ *
52143
+ * If the block has a `layout`, it can be rendered declaratively without React code.
52144
+ * If no layout, the block MUST use blockOverrides for rendering.
52145
+ */
52146
+ function transformSdkBlockToManifest(sdkBlock) {
52147
+ const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
52148
+ return augmentManifest({
52149
+ name: sdkBlock.id,
52150
+ version: "1.0.0",
52151
+ title: sdkBlock.title,
52152
+ titleSource: sdkBlock.titleSource,
52153
+ description: sdkBlock.description,
52154
+ component: sdkBlock.id,
52155
+ fields: sdkBlock.fields,
52156
+ slots: [],
52157
+ category: sdkBlock.category,
52158
+ tags: sdkBlock.tags,
52159
+ icon: sdkBlock.icon,
52160
+ layout: sdkBlock.layout,
52161
+ variants: sdkBlock.variants,
52162
+ defaultVariant: sdkBlock.defaultVariant,
52163
+ variantOptions: sdkBlock.variantOptions,
52164
+ previewCustomize: sdkBlock.previewCustomize,
52165
+ behaviours: {
52166
+ supportsThemeSwitching: true,
52167
+ inlineEditing: hasLayout,
52168
+ animation: hasLayout,
52169
+ paletteHidden: false
52170
+ }
52171
+ });
52172
+ }
52173
+ /**
52174
+ * Transforms an SDK custom block into a SystemBlockDefinition.
52175
+ *
52176
+ * This creates a minimal definition with just the manifest - no data loaders
52177
+ * or content normalizers since SDK blocks handle their own rendering.
52178
+ */
52179
+ function transformSdkBlockToDefinition(sdkBlock) {
52180
+ return {
52181
+ manifest: transformSdkBlockToManifest(sdkBlock),
52182
+ dataLoaders: sdkBlock.dataLoaders
52183
+ };
52184
+ }
52185
+ //#endregion
52186
+ //#region ../blocks/src/customBlockRegistry.ts
52187
+ const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
52188
+ function isCustomBlockKind(blockKind) {
52189
+ return blockKind.startsWith("custom.");
52190
+ }
52191
+ function transformToBlockDescriptor(sdkBlock, source = "sdk") {
52192
+ return {
52193
+ name: sdkBlock.id,
52194
+ title: sdkBlock.title,
52195
+ description: sdkBlock.description,
52196
+ category: sdkBlock.category,
52197
+ tags: sdkBlock.tags,
52198
+ icon: sdkBlock.icon,
52199
+ definition: transformSdkBlockToDefinition(sdkBlock),
52200
+ source
52201
+ };
52202
+ }
52203
+ function toResolvedCustomBlock(manifest, source) {
52204
+ return {
52205
+ blockKind: manifest.id,
52206
+ manifest: transformSdkBlockToManifest(manifest),
52207
+ source,
52208
+ descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
52209
+ };
52210
+ }
52211
+ function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
52212
+ switch (policy.kind) {
52213
+ case "canonical-db-fallback-sdk": {
52214
+ const entriesByKind = /* @__PURE__ */ new Map();
52215
+ const conflicts = [];
52216
+ for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
52217
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
52218
+ const existing = entriesByKind.get(sdkBlock.id);
52219
+ if (existing) {
52220
+ conflicts.push({
52221
+ kind: "conflict",
52222
+ blockKind: existing.blockKind,
52223
+ winner: existing.source,
52224
+ loser: { kind: "sdk-config" },
52225
+ reason: "db-canonical-sdk-fallback"
52226
+ });
52227
+ continue;
52228
+ }
52229
+ entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
52230
+ }
52231
+ return {
52232
+ policy,
52233
+ entries: Array.from(entriesByKind.values()),
52234
+ conflicts
52235
+ };
52236
+ }
52237
+ }
52238
+ }
52239
+ function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
52240
+ const plan = planCustomBlockRegistryResolution({
52241
+ sdkConfig,
52242
+ customBlocks,
52243
+ policy
52244
+ });
52245
+ const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
52246
+ for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
52247
+ return {
52248
+ entries: plan.entries,
52249
+ conflicts: plan.conflicts,
52250
+ findManifest: (blockKind) => {
52251
+ if (!isCustomBlockKind(blockKind)) return void 0;
52252
+ return entriesByKind.get(blockKind);
52253
+ }
52254
+ };
52255
+ }
52256
+ function sourceLabel(source) {
52257
+ switch (source.kind) {
52258
+ case "managed-database": return "DB";
52259
+ case "sdk-synced": return "SDK-synced DB";
52260
+ case "sdk-config": return "SDK config";
52261
+ default: return assertNever$24(source);
52262
+ }
52263
+ }
52264
+ //#endregion
52054
52265
  //#region ../theme-core/src/runtime/fontFamily.ts
52055
52266
  /**
52056
52267
  * Font Family Formatting Utilities
@@ -55788,215 +55999,115 @@ function mapFontStyle(italic) {
55788
55999
  return italic ? "italic" : "normal";
55789
56000
  }
55790
56001
  //#endregion
55791
- //#region ../blocks/src/system/manifest/hydrateLinks.ts
55792
- /**
55793
- * Hydrates link objects within block content using the provided route map. Returns
55794
- * the original content reference when no mutations are required to avoid unnecessary renders.
55795
- */
55796
- function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
55797
- if (!routes || !manifest?.fields?.length) return content;
55798
- return hydrateValue(content, {
55799
- routes,
55800
- pagesByIdentifier,
55801
- entriesByIdentifier
55802
- });
55803
- }
55804
- function hydrateValue(value, context) {
55805
- try {
55806
- if (Array.isArray(value)) {
55807
- const resolvedItems = value.map((item) => hydrateValue(item, context));
55808
- return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
55809
- }
55810
- if (isRecord$27(value)) {
55811
- if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
55812
- if (isPageLink$1(value)) return hydratePageLink(value, context);
55813
- if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
55814
- const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
55815
- return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
55816
- }
55817
- return value;
55818
- } catch (err) {
55819
- console.error("[hydrateLinks] Error hydrating value:", err, value);
55820
- return value;
56002
+ //#region ../blocks/src/pageRenderingMode.ts
56003
+ var MissingBlockOverrideError$1 = class extends Error {
56004
+ constructor(blockKind) {
56005
+ super(`Override-only rendering requires an override for block kind "${blockKind}".`);
56006
+ this.blockKind = blockKind;
56007
+ this.code = "missing_block_override";
56008
+ this.name = "MissingBlockOverrideError";
55821
56009
  }
56010
+ };
56011
+ function isOverrideOnlyResourceInput(props) {
56012
+ return props.rendering?.kind === "overrides-only";
55822
56013
  }
55823
- function hydrateInternalLink(link, routes) {
55824
- const resolved = resolveRouteTarget(link.routeId, routes);
55825
- if (!resolved) return link;
55826
- const nextHref = resolved.href;
55827
- const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
55828
- const nextUpdatedAt = resolved.updatedAt;
55829
- const updates = {};
55830
- if (nextHref && nextHref !== currentHref) updates.href = nextHref;
55831
- if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
55832
- return Object.keys(updates).length > 0 ? {
55833
- ...link,
55834
- ...updates
55835
- } : link;
55836
- }
55837
- function isInternalLink$1(value) {
55838
- if (value.kind !== "internal") return false;
55839
- if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
55840
- return true;
55841
- }
55842
- function isPageLink$1(value) {
55843
- if (value.kind !== "page") return false;
55844
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
55845
- return true;
55846
- }
55847
- function hydratePageLink(link, context) {
55848
- const resolved = resolvePageRouteTarget(link, context);
55849
- if (!resolved) return link;
56014
+ function resolvePageThemeResources(props) {
56015
+ if (isOverrideOnlyResourceInput(props)) return { kind: "unavailable" };
55850
56016
  return {
55851
- ...link,
55852
- href: resolved.href,
55853
- routeId: resolved.routeId
56017
+ kind: "available",
56018
+ tokens: props.themeTokens ?? buildThemeRuntime$1(props.theme).tokens,
56019
+ config: props.theme
55854
56020
  };
55855
56021
  }
55856
- function isEntryLink$1(value) {
55857
- if (value.kind !== "entry") return false;
55858
- if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
55859
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
55860
- return true;
56022
+ function requireBlockOverride(resources, override, blockKind) {
56023
+ if (resources.kind === "unavailable" && !override) throw new MissingBlockOverrideError$1(blockKind);
55861
56024
  }
55862
- function hydrateEntryLink(link, context) {
55863
- const resolved = resolveEntryRouteTarget(link, context);
55864
- if (!resolved) return link;
55865
- return {
55866
- ...link,
55867
- href: resolved.href,
55868
- routeId: resolved.routeId
55869
- };
56025
+ function overrideThemeProps(resources) {
56026
+ return resources.kind === "available" ? {
56027
+ theme: resources.tokens,
56028
+ themeConfig: resources.config
56029
+ } : {};
56030
+ }
56031
+ function requireThemeResources(resources, blockKind) {
56032
+ if (resources.kind === "unavailable") throw new MissingBlockOverrideError$1(blockKind);
56033
+ return resources;
55870
56034
  }
55871
56035
  //#endregion
55872
- //#region ../blocks/src/sdkBlockTransform.ts
55873
- /**
55874
- * Transforms an SDK custom block into a BlockManifest.
55875
- *
55876
- * If the block has a `layout`, it can be rendered declaratively without React code.
55877
- * If no layout, the block MUST use blockOverrides for rendering.
55878
- */
55879
- function transformSdkBlockToManifest(sdkBlock) {
55880
- const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
55881
- return augmentManifest({
55882
- name: sdkBlock.id,
55883
- version: "1.0.0",
55884
- title: sdkBlock.title,
55885
- titleSource: sdkBlock.titleSource,
55886
- description: sdkBlock.description,
55887
- component: sdkBlock.id,
55888
- fields: sdkBlock.fields,
55889
- slots: [],
55890
- category: sdkBlock.category,
55891
- tags: sdkBlock.tags,
55892
- icon: sdkBlock.icon,
55893
- layout: sdkBlock.layout,
55894
- variants: sdkBlock.variants,
55895
- defaultVariant: sdkBlock.defaultVariant,
55896
- variantOptions: sdkBlock.variantOptions,
55897
- previewCustomize: sdkBlock.previewCustomize,
55898
- behaviours: {
55899
- supportsThemeSwitching: true,
55900
- inlineEditing: hasLayout,
55901
- animation: hasLayout,
55902
- paletteHidden: false
55903
- }
55904
- });
56036
+ //#region ../blocks/src/pageRendererBoundaries.tsx
56037
+ const boundaryKey = (previousBlockId, nextBlockId) => `${previousBlockId}\u0000${nextBlockId}`;
56038
+ function isSiteStyleTransitionStyleGroup(value) {
56039
+ return value?.startsWith("site-style-transition-") === true;
55905
56040
  }
55906
- /**
55907
- * Transforms an SDK custom block into a SystemBlockDefinition.
55908
- *
55909
- * This creates a minimal definition with just the manifest - no data loaders
55910
- * or content normalizers since SDK blocks handle their own rendering.
55911
- */
55912
- function transformSdkBlockToDefinition(sdkBlock) {
55913
- return {
55914
- manifest: transformSdkBlockToManifest(sdkBlock),
55915
- dataLoaders: sdkBlock.dataLoaders
55916
- };
56041
+ function boundaryMapForAdjacentBlockIds(boundaries) {
56042
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
55917
56043
  }
55918
- //#endregion
55919
- //#region ../blocks/src/customBlockRegistry.ts
55920
- const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
55921
- function isCustomBlockKind(blockKind) {
55922
- return blockKind.startsWith("custom.");
56044
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaries) {
56045
+ const previousBlockId = previousBlock?.id ?? null;
56046
+ const nextBlockId = nextBlock?.id ?? null;
56047
+ if (!previousBlockId || !nextBlockId) return null;
56048
+ return boundaries.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
55923
56049
  }
55924
- function transformToBlockDescriptor(sdkBlock, source = "sdk") {
56050
+ function renderBoundaryAfterBlock(input) {
56051
+ const previousBlockId = input.block.id;
56052
+ const nextBlockId = input.nextBlock?.id ?? null;
56053
+ if (!previousBlockId || !nextBlockId) return null;
56054
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
56055
+ if (!boundary) return null;
56056
+ const rendered = /* @__PURE__ */ jsx("div", {
56057
+ "aria-hidden": "true",
56058
+ "data-block-boundary": "",
56059
+ "data-boundary-id": boundary.boundaryId,
56060
+ "data-boundary-previous-block-id": boundary.previousBlockId,
56061
+ "data-boundary-next-block-id": boundary.nextBlockId,
56062
+ "data-style-group": boundary.styleGroup,
56063
+ style: boundaryCssVarsStyle(boundary)
56064
+ }, `${input.blockKey}:boundary`);
56065
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
56066
+ }
56067
+ function boundaryCssVarsStyle(boundary) {
55925
56068
  return {
55926
- name: sdkBlock.id,
55927
- title: sdkBlock.title,
55928
- description: sdkBlock.description,
55929
- category: sdkBlock.category,
55930
- tags: sdkBlock.tags,
55931
- icon: sdkBlock.icon,
55932
- definition: transformSdkBlockToDefinition(sdkBlock),
55933
- source
56069
+ "--site-style-transition-from": boundary.cssVars.from,
56070
+ "--site-style-transition-to": boundary.cssVars.to
55934
56071
  };
55935
56072
  }
55936
- function toResolvedCustomBlock(manifest, source) {
56073
+ function boundaryReserveCssVarsStyle(input) {
56074
+ const before = input.before?.metrics.reserveCss ?? null;
56075
+ const after = input.after?.metrics.reserveCss ?? null;
56076
+ if (!before && !after) return void 0;
55937
56077
  return {
55938
- blockKind: manifest.id,
55939
- manifest: transformSdkBlockToManifest(manifest),
55940
- source,
55941
- descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
56078
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
56079
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
55942
56080
  };
55943
56081
  }
55944
- function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
55945
- switch (policy.kind) {
55946
- case "canonical-db-fallback-sdk": {
55947
- const entriesByKind = /* @__PURE__ */ new Map();
55948
- const conflicts = [];
55949
- for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
55950
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
55951
- const existing = entriesByKind.get(sdkBlock.id);
55952
- if (existing) {
55953
- conflicts.push({
55954
- kind: "conflict",
55955
- blockKind: existing.blockKind,
55956
- winner: existing.source,
55957
- loser: { kind: "sdk-config" },
55958
- reason: "db-canonical-sdk-fallback"
55959
- });
55960
- continue;
55961
- }
55962
- entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
55963
- }
55964
- return {
55965
- policy,
55966
- entries: Array.from(entriesByKind.values()),
55967
- conflicts
55968
- };
55969
- }
55970
- }
56082
+ function transitionCssVarsStyle(content) {
56083
+ const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
56084
+ const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
56085
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
56086
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
56087
+ if (!from && !to) return void 0;
56088
+ return {
56089
+ ...from ? { "--site-style-transition-from": from } : {},
56090
+ ...to ? { "--site-style-transition-to": to } : {}
56091
+ };
55971
56092
  }
55972
- function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
55973
- const plan = planCustomBlockRegistryResolution({
55974
- sdkConfig,
55975
- customBlocks,
55976
- policy
55977
- });
55978
- const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
55979
- for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
56093
+ function mergeStyleObjects(left, right) {
56094
+ if (!left) return right;
56095
+ if (!right) return left;
55980
56096
  return {
55981
- entries: plan.entries,
55982
- conflicts: plan.conflicts,
55983
- findManifest: (blockKind) => {
55984
- if (!isCustomBlockKind(blockKind)) return void 0;
55985
- return entriesByKind.get(blockKind);
55986
- }
56097
+ ...left,
56098
+ ...right
55987
56099
  };
55988
56100
  }
55989
- function sourceLabel(source) {
55990
- switch (source.kind) {
55991
- case "managed-database": return "DB";
55992
- case "sdk-synced": return "SDK-synced DB";
55993
- case "sdk-config": return "SDK config";
55994
- default: return assertNever$24(source);
55995
- }
56101
+ function pageBlockPosition(index, blockCount) {
56102
+ if (blockCount <= 1) return "only";
56103
+ if (index === 0) return "first";
56104
+ if (index === blockCount - 1) return "last";
56105
+ return "middle";
55996
56106
  }
55997
56107
  //#endregion
55998
56108
  //#region ../blocks/src/PageRenderer.tsx
55999
- function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
56109
+ function PageRenderer$1(props) {
56110
+ const { page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring } = props;
56000
56111
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
56001
56112
  dataContext?.imageResolveContext,
56002
56113
  dataContext?.mediaAssets,
@@ -56005,12 +56116,16 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
56005
56116
  ]);
56006
56117
  const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
56007
56118
  const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
56119
+ const themeResources = React$1.useMemo(() => resolvePageThemeResources(props), [
56120
+ props.rendering,
56121
+ props.theme,
56122
+ props.themeTokens
56123
+ ]);
56008
56124
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
56009
56125
  className: "rb-p-6 rb-caption",
56010
56126
  style: textColorStyle("mutedText"),
56011
56127
  children: "No blocks found."
56012
56128
  });
56013
- const themeTokens = providedThemeTokens ?? buildThemeRuntime$1(theme).tokens;
56014
56129
  const resolvedRegistry = registry ?? getDefaultComponentRegistry();
56015
56130
  setContextResolveImageUrlContext(imageResolveContext);
56016
56131
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
@@ -56033,22 +56148,14 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
56033
56148
  const renderableContent = getRenderableContent(block, dataContext?.previewStage);
56034
56149
  const variantKey = definition?.manifest ? resolveVariantKey(definition.manifest, renderableContent) : null;
56035
56150
  const shouldUseWrapper = !managesOwnWrapper || Boolean(wrapBlock);
56036
- const blockSectionProps = {
56037
- themeTokens,
56038
- themeConfig: theme,
56151
+ const blockSectionProps = buildBlockSectionProps({
56152
+ props,
56153
+ themeResources,
56039
56154
  block,
56040
- usePlaceholders,
56041
- dataContext,
56042
56155
  blockKey,
56043
- registry: resolvedRegistry,
56044
- routeMap,
56045
- wrapBlock,
56046
- blockOverrides,
56047
- sdkConfig,
56048
- customBlocks,
56049
56156
  imageResolveContext,
56050
- previewAuthoring
56051
- };
56157
+ registry: resolvedRegistry
56158
+ });
56052
56159
  if (!shouldUseWrapper) {
56053
56160
  const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
56054
56161
  return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
@@ -56090,81 +56197,6 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
56090
56197
  })] }, blockKey);
56091
56198
  }) });
56092
56199
  }
56093
- function isSiteStyleTransitionStyleGroup(value) {
56094
- return value?.startsWith("site-style-transition-") === true;
56095
- }
56096
- function boundaryMapForAdjacentBlockIds(boundaries) {
56097
- return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
56098
- }
56099
- function boundaryKey(previousBlockId, nextBlockId) {
56100
- return `${previousBlockId}\u0000${nextBlockId}`;
56101
- }
56102
- function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
56103
- const previousBlockId = previousBlock?.id ?? null;
56104
- const nextBlockId = nextBlock?.id ?? null;
56105
- if (!previousBlockId || !nextBlockId) return null;
56106
- return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
56107
- }
56108
- function renderBoundaryAfterBlock(input) {
56109
- const previousBlockId = input.block.id;
56110
- const nextBlockId = input.nextBlock?.id ?? null;
56111
- if (!previousBlockId || !nextBlockId) return null;
56112
- const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
56113
- if (!boundary) return null;
56114
- const rendered = /* @__PURE__ */ jsx("div", {
56115
- "aria-hidden": "true",
56116
- "data-block-boundary": "",
56117
- "data-boundary-id": boundary.boundaryId,
56118
- "data-boundary-previous-block-id": boundary.previousBlockId,
56119
- "data-boundary-next-block-id": boundary.nextBlockId,
56120
- "data-style-group": boundary.styleGroup,
56121
- style: boundaryCssVarsStyle(boundary)
56122
- }, `${input.blockKey}:boundary`);
56123
- return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
56124
- }
56125
- function boundaryCssVarsStyle(boundary) {
56126
- return {
56127
- "--site-style-transition-from": boundary.cssVars.from,
56128
- "--site-style-transition-to": boundary.cssVars.to
56129
- };
56130
- }
56131
- function boundaryReserveCssVarsStyle(input) {
56132
- const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
56133
- const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
56134
- if (!before && !after) return void 0;
56135
- return {
56136
- ...before ? { "--site-style-boundary-before-reserve": before } : {},
56137
- ...after ? { "--site-style-boundary-after-reserve": after } : {}
56138
- };
56139
- }
56140
- function boundaryReserveValueForTreatment(boundary) {
56141
- return boundary.metrics.reserveCss;
56142
- }
56143
- function transitionCssVarsStyle(content) {
56144
- const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
56145
- const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
56146
- const from = typeof cssVars?.from === "string" ? cssVars.from : null;
56147
- const to = typeof cssVars?.to === "string" ? cssVars.to : null;
56148
- if (!from && !to) return void 0;
56149
- return {
56150
- ...from ? { "--site-style-transition-from": from } : {},
56151
- ...to ? { "--site-style-transition-to": to } : {}
56152
- };
56153
- }
56154
- function mergeStyleObjects(left, right) {
56155
- if (!left) return right;
56156
- if (!right) return left;
56157
- return {
56158
- ...left,
56159
- ...right
56160
- };
56161
- }
56162
- function pageBlockPosition(index, blockCount) {
56163
- if (blockCount <= 1) return "only";
56164
- if (index === 0) return "first";
56165
- if (index === blockCount - 1) return "last";
56166
- return "middle";
56167
- }
56168
56200
  function resolvePageRendererImageResolveContext(dataContext) {
56169
56201
  const input = dataContext?.imageResolveContext;
56170
56202
  return buildResolveImageUrlContext({
@@ -56174,6 +56206,23 @@ function resolvePageRendererImageResolveContext(dataContext) {
56174
56206
  mediaAssets: input?.mediaAssets ?? dataContext?.mediaAssets
56175
56207
  });
56176
56208
  }
56209
+ function buildBlockSectionProps(input) {
56210
+ return {
56211
+ themeResources: input.themeResources,
56212
+ block: input.block,
56213
+ usePlaceholders: input.props.usePlaceholders ?? false,
56214
+ dataContext: input.props.dataContext,
56215
+ blockKey: input.blockKey,
56216
+ registry: input.registry,
56217
+ routeMap: input.props.routeMap,
56218
+ wrapBlock: input.props.wrapBlock,
56219
+ blockOverrides: input.props.blockOverrides,
56220
+ sdkConfig: input.props.sdkConfig,
56221
+ customBlocks: input.props.customBlocks,
56222
+ imageResolveContext: input.imageResolveContext,
56223
+ previewAuthoring: input.props.previewAuthoring
56224
+ };
56225
+ }
56177
56226
  /**
56178
56227
  * Look up a block override component by block kind.
56179
56228
  * Supports both full ("block.hero") and short ("hero") keys.
@@ -56240,7 +56289,7 @@ function getCachedValidator(manifest, flavour) {
56240
56289
  * referential equality of all props that affect rendering. Standard React.memo
56241
56290
  * wouldn't catch all the render triggers from the editor store.
56242
56291
  */
56243
- const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, themeConfig, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
56292
+ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
56244
56293
  const perfStart = globalThis.process?.env?.DEBUG_PERF === "1" && typeof window === "undefined" ? Date.now() : 0;
56245
56294
  const fallbackImageResolveContext = getCurrentResolveImageUrlContext();
56246
56295
  const resolvedImageResolveContext = imageResolveContext ?? fallbackImageResolveContext;
@@ -56261,6 +56310,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56261
56310
  return node;
56262
56311
  }
56263
56312
  const OverrideComponent = getBlockOverride(block.kind, blockOverrides);
56313
+ requireBlockOverride(themeResources, OverrideComponent, block.kind);
56264
56314
  let definition = getBlockDefinition(block.kind);
56265
56315
  if (!definition && block.kind.startsWith("custom.")) definition = createCustomBlockRegistry({
56266
56316
  sdkConfig,
@@ -56273,8 +56323,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56273
56323
  if (OverrideComponent) {
56274
56324
  const rendered = /* @__PURE__ */ jsx(OverrideComponent, {
56275
56325
  content: getRenderableContent(block, dataContext?.previewStage),
56276
- theme: themeTokens,
56277
- themeConfig,
56326
+ ...overrideThemeProps(themeResources),
56278
56327
  data: void 0,
56279
56328
  siteId: dataContext?.siteId,
56280
56329
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -56373,8 +56422,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56373
56422
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
56374
56423
  const baseProps = {
56375
56424
  content: hydratedContent,
56376
- theme: themeTokens,
56377
- themeConfig,
56425
+ ...overrideThemeProps(themeResources),
56378
56426
  data: resolved,
56379
56427
  siteId: dataContext?.siteId,
56380
56428
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -56394,6 +56442,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56394
56442
  let rendered;
56395
56443
  if (OverrideComponent) rendered = /* @__PURE__ */ jsx(OverrideComponent, { ...baseProps });
56396
56444
  else {
56445
+ requireThemeResources(themeResources, block.kind);
56397
56446
  const BlockComponent = getCachedBlockComponent(definition.manifest);
56398
56447
  const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
56399
56448
  const rootContext = { $root: {
@@ -56443,7 +56492,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
56443
56492
  });
56444
56493
  }
56445
56494
  }, (prev, next) => {
56446
- 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;
56495
+ 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;
56447
56496
  });
56448
56497
  function fallback(message) {
56449
56498
  return /* @__PURE__ */ jsx("div", {
@@ -69660,6 +69709,10 @@ function toBlocksImageResolveContextInput(context) {
69660
69709
  }
69661
69710
  //#endregion
69662
69711
  //#region src/rendering/blocks-page-renderer.ts
69712
+ const MissingBlockOverrideError = MissingBlockOverrideError$1;
69713
+ function isOverrideOnlyPageRenderer(props) {
69714
+ return props.rendering?.kind === "overrides-only";
69715
+ }
69663
69716
  function normalizeSdkCustomBlocks(customBlocks) {
69664
69717
  if (!customBlocks) return void 0;
69665
69718
  return customBlocks.map((block) => {
@@ -69690,15 +69743,23 @@ function toBlocksPageRendererDataContext(dataContext) {
69690
69743
  }
69691
69744
  function PageRenderer(props) {
69692
69745
  const blocksSdkConfig = props.sdkConfig ? { customBlocks: normalizeSdkCustomBlocks(props.sdkConfig.customBlocks) } : props.sdkConfig;
69693
- const blocksTheme = parseBlocksTheme(props.theme);
69694
- const blocksProps = {
69695
- ...props,
69696
- theme: blocksTheme,
69746
+ const { rendering: _rendering, theme: _theme, themeTokens: _themeTokens, ...commonProps } = props;
69747
+ const commonBlocksProps = {
69748
+ ...commonProps,
69697
69749
  dataContext: props.dataContext ? toBlocksPageRendererDataContext(props.dataContext) : void 0,
69698
69750
  blockOverrides: toBlocksBlockOverrides(props.blockOverrides),
69699
69751
  sdkConfig: blocksSdkConfig,
69700
69752
  customBlocks: normalizeSdkCustomBlocks(props.customBlocks)
69701
69753
  };
69754
+ const blocksProps = isOverrideOnlyPageRenderer(props) ? {
69755
+ ...commonBlocksProps,
69756
+ rendering: { kind: "overrides-only" },
69757
+ blockOverrides: toBlocksBlockOverrides(props.blockOverrides) ?? {}
69758
+ } : {
69759
+ ...commonBlocksProps,
69760
+ theme: parseBlocksTheme(props.theme),
69761
+ themeTokens: props.themeTokens
69762
+ };
69702
69763
  return React$1.createElement(PageRenderer$1, blocksProps);
69703
69764
  }
69704
69765
  //#endregion
@@ -69740,8 +69801,31 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
69740
69801
  default: return assertNever$24(themeRuntime);
69741
69802
  }
69742
69803
  }
69804
+ function renderWithOverrideOnlyRuntime({ runtime, children }) {
69805
+ switch (runtime.kind) {
69806
+ case "responsive-only": return /* @__PURE__ */ jsx(ResponsiveScope, {
69807
+ responsiveMode: runtime.responsiveMode,
69808
+ children
69809
+ });
69810
+ case "none": return /* @__PURE__ */ jsx(Fragment, { children });
69811
+ default: return assertNever$24(runtime);
69812
+ }
69813
+ }
69743
69814
  //#endregion
69744
69815
  //#region src/rendering/components/pageShared.tsx
69816
+ function isOverrideOnlyPage(props) {
69817
+ return props.rendering?.kind === "overrides-only";
69818
+ }
69819
+ function resolvePageThemeTokens(props) {
69820
+ const baseTokens = props.themeTokens ?? buildThemeRuntime(props.theme).tokens;
69821
+ return props.sdkConfig?.theme?.palette ? {
69822
+ ...baseTokens,
69823
+ palette: {
69824
+ ...baseTokens.palette,
69825
+ ...props.sdkConfig.theme.palette
69826
+ }
69827
+ } : baseTokens;
69828
+ }
69745
69829
  function toPageHydrationBootstrapConfig(props) {
69746
69830
  return {
69747
69831
  siteId: props.siteId,
@@ -69749,55 +69833,60 @@ function toPageHydrationBootstrapConfig(props) {
69749
69833
  mediaAssets: props.mediaAssets
69750
69834
  };
69751
69835
  }
69752
- 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 }) {
69753
- const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
69754
- return renderWithSdkThemeRuntime({
69755
- themeRuntime,
69756
- theme,
69757
- children: /* @__PURE__ */ jsx(PageRenderer, {
69758
- theme,
69759
- page,
69760
- runtimeBoundaries,
69761
- themeTokens: sdkConfig?.theme?.palette ? {
69762
- ...baseTokens,
69763
- palette: {
69764
- ...baseTokens.palette,
69765
- ...sdkConfig.theme.palette
69766
- }
69767
- } : baseTokens,
69768
- usePlaceholders,
69769
- dataContext: {
69836
+ function PageContent(props) {
69837
+ const { page, runtimeBoundaries, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext } = props;
69838
+ const rendererCommonProps = {
69839
+ page,
69840
+ runtimeBoundaries,
69841
+ usePlaceholders,
69842
+ dataContext: {
69843
+ siteId,
69844
+ apiBaseUrl,
69845
+ portalToken,
69846
+ previewToken,
69847
+ resolvedData,
69848
+ bookingOfferingPresets: bookingOfferingPresets ?? [],
69849
+ routes: routeMap,
69850
+ pagesByIdentifier,
69851
+ entriesByIdentifier,
69852
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
69853
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
69854
+ contentEntry: dataContext?.contentEntry ?? null,
69855
+ pageSurface: dataContext?.pageSurface ?? null,
69856
+ subject: dataContext?.subject ?? null,
69857
+ editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
69858
+ previewStage: dataContext?.previewStage,
69859
+ supabaseUrl,
69860
+ mediaAssets,
69861
+ imageResolveContext: {
69770
69862
  siteId,
69771
- apiBaseUrl,
69772
- portalToken,
69773
- previewToken,
69774
- resolvedData,
69775
- bookingOfferingPresets: bookingOfferingPresets ?? [],
69776
- routes: routeMap,
69777
- pagesByIdentifier,
69778
- entriesByIdentifier,
69779
- occurrenceContext: dataContext?.occurrenceContext ?? null,
69780
- entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
69781
- contentEntry: dataContext?.contentEntry ?? null,
69782
- pageSurface: dataContext?.pageSurface ?? null,
69783
- subject: dataContext?.subject ?? null,
69784
- editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
69785
- previewStage: dataContext?.previewStage,
69786
69863
  supabaseUrl,
69787
- mediaAssets,
69788
- imageResolveContext: {
69789
- siteId,
69790
- supabaseUrl,
69791
- mediaAssets
69792
- }
69793
- },
69794
- routeMap,
69795
- wrapBlock,
69796
- registry,
69797
- blockOverrides,
69798
- sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
69799
- customBlocks
69800
- })
69864
+ mediaAssets
69865
+ }
69866
+ },
69867
+ routeMap,
69868
+ wrapBlock,
69869
+ registry,
69870
+ sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
69871
+ customBlocks
69872
+ };
69873
+ const content = isOverrideOnlyPage(props) ? /* @__PURE__ */ jsx(PageRenderer, {
69874
+ ...rendererCommonProps,
69875
+ rendering: { kind: "overrides-only" },
69876
+ blockOverrides: props.blockOverrides
69877
+ }) : /* @__PURE__ */ jsx(PageRenderer, {
69878
+ ...rendererCommonProps,
69879
+ theme: props.theme,
69880
+ themeTokens: resolvePageThemeTokens(props),
69881
+ blockOverrides
69882
+ });
69883
+ return isOverrideOnlyPage(props) ? renderWithOverrideOnlyRuntime({
69884
+ runtime: props.rendering.runtime,
69885
+ children: content
69886
+ }) : renderWithSdkThemeRuntime({
69887
+ themeRuntime: props.themeRuntime ?? defaultPageThemeRuntime,
69888
+ theme: props.theme,
69889
+ children: content
69801
69890
  });
69802
69891
  }
69803
69892
  //#endregion
@@ -70320,12 +70409,48 @@ function buildLogo(logo, fallbackAlt) {
70320
70409
  return result;
70321
70410
  }
70322
70411
  //#endregion
70412
+ //#region src/rendering/renderingMode.ts
70413
+ const defaultOverrideOnlyRuntime = { kind: "responsive-only" };
70414
+ //#endregion
70323
70415
  //#region src/rendering/components/Layout.tsx
70324
70416
  /**
70325
70417
  * Layout component with header and footer
70326
70418
  *
70327
70419
  * Renders site header and footer around content. Fetches site data if not provided.
70328
70420
  */
70421
+ function isOverrideOnlyLayout(props) {
70422
+ return props.rendering?.kind === "overrides-only";
70423
+ }
70424
+ var UnsupportedOverrideOnlyLayoutChromeError = class extends Error {
70425
+ constructor(surface) {
70426
+ super(`Override-only Layout requires a custom or disabled ${surface}; SDK default chrome is unavailable.`);
70427
+ this.surface = surface;
70428
+ this.code = "unsupported_override_only_layout_chrome";
70429
+ this.name = "UnsupportedOverrideOnlyLayoutChromeError";
70430
+ }
70431
+ };
70432
+ async function resolveLayoutSiteData(props) {
70433
+ if (props.siteData) return props.siteData;
70434
+ if (!props.client) throw new Error("Layout: must provide either siteData or client");
70435
+ if (!props.siteId && !props.slug && !props.domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
70436
+ return props.client.getSite({
70437
+ id: props.siteId,
70438
+ slug: props.slug,
70439
+ domain: props.domain
70440
+ });
70441
+ }
70442
+ function renderOverrideOnlyLayout(props, data) {
70443
+ if (data.header === true) throw new UnsupportedOverrideOnlyLayoutChromeError("header");
70444
+ if (data.footer === true) throw new UnsupportedOverrideOnlyLayoutChromeError("footer");
70445
+ return renderWithOverrideOnlyRuntime({
70446
+ runtime: props.rendering.runtime ?? defaultOverrideOnlyRuntime,
70447
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
70448
+ typeof props.header === "function" ? props.header(data.headerData) : null,
70449
+ props.children,
70450
+ typeof props.footer === "function" ? props.footer(data.footerData) : null
70451
+ ] })
70452
+ });
70453
+ }
70329
70454
  /**
70330
70455
  * Layout component that wraps content with site header and footer.
70331
70456
  *
@@ -70361,20 +70486,13 @@ function buildLogo(logo, fallbackAlt) {
70361
70486
  * </Layout>
70362
70487
  * ```
70363
70488
  */
70364
- async function Layout({ siteData: providedSiteData, client, siteId, slug, domain, children, header = true, footer = true, headerVariant, hasPortalSession = false, previewStage = "published", themeRuntime }) {
70365
- let siteData = providedSiteData;
70366
- if (!siteData) {
70367
- if (!client) throw new Error("Layout: must provide either siteData or client");
70368
- if (!siteId && !slug && !domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
70369
- siteData = await client.getSite({
70370
- id: siteId,
70371
- slug,
70372
- domain
70373
- });
70374
- }
70375
- const { site, theme, navigation, layout, routes } = siteData;
70489
+ async function Layout(props) {
70490
+ const { children, hasPortalSession = false, previewStage = "published" } = props;
70491
+ const header = props.header ?? true;
70492
+ const footer = props.footer ?? true;
70493
+ const siteData = await resolveLayoutSiteData(props);
70494
+ const { site, navigation, layout, routes } = siteData;
70376
70495
  const footerBlocks = siteData.footerBlocks ?? [];
70377
- const builtThemeRuntime = buildThemeRuntime(theme);
70378
70496
  const navigationOptions = {
70379
70497
  hasPortalSession,
70380
70498
  previewStage,
@@ -70388,22 +70506,38 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
70388
70506
  const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
70389
70507
  const legalFooterMenuViewModel = buildFooterMenuForRole(navigation, routes, "legal-policy", navigationOptions);
70390
70508
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
70391
- const headerData = {
70509
+ const customHeaderData = {
70392
70510
  menu: menuViewModel,
70393
70511
  logo: logoViewModel,
70394
70512
  site,
70395
- theme,
70396
70513
  routes
70397
70514
  };
70398
- const footerData = {
70515
+ const customFooterData = {
70399
70516
  menu: menuViewModel,
70400
70517
  footerMenu: footerMenuViewModel,
70401
70518
  legalFooterMenu: legalFooterMenuViewModel,
70402
70519
  logo: logoViewModel,
70403
70520
  site,
70404
- theme,
70405
70521
  routes
70406
70522
  };
70523
+ if (isOverrideOnlyLayout(props)) return renderOverrideOnlyLayout(props, {
70524
+ header: props.header ?? true,
70525
+ footer: props.footer ?? true,
70526
+ headerData: customHeaderData,
70527
+ footerData: customFooterData
70528
+ });
70529
+ const { theme } = siteData;
70530
+ const builtThemeRuntime = buildThemeRuntime(theme);
70531
+ const headerVariant = props.headerVariant;
70532
+ const themeRuntime = props.themeRuntime;
70533
+ const headerData = {
70534
+ ...customHeaderData,
70535
+ theme
70536
+ };
70537
+ const footerData = {
70538
+ ...customFooterData,
70539
+ theme
70540
+ };
70407
70541
  const headerContent = headerVariant ? {
70408
70542
  ...layout.header,
70409
70543
  variant: headerVariant
@@ -72715,6 +72849,25 @@ z$1.object({
72715
72849
  mode: z$1.enum(["apply", "preview"]).optional()
72716
72850
  }).strict();
72717
72851
  //#endregion
72852
+ //#region ../api/src/sdkThemeWire.ts
72853
+ /**
72854
+ * Validate a wire value without replacing it with the schema's parsed output.
72855
+ * The returned type is deliberately the schema input, not its canonical output.
72856
+ */
72857
+ function losslessValidatedSchema(schema) {
72858
+ return z$1.unknown().superRefine((value, ctx) => {
72859
+ const parsed = schema.safeParse(value);
72860
+ if (parsed.success) return;
72861
+ for (const issue of parsed.error.issues) ctx.addIssue({
72862
+ code: "custom",
72863
+ path: issue.path,
72864
+ message: issue.message,
72865
+ params: { validationCode: issue.code }
72866
+ });
72867
+ }).transform((value) => value);
72868
+ }
72869
+ losslessValidatedSchema(themeSchema);
72870
+ //#endregion
72718
72871
  //#region ../api/src/siteOnboarding.ts
72719
72872
  const LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = { configure_appointments: {
72720
72873
  requirementId: "configure_appointments",
@@ -73803,6 +73956,17 @@ async function prefetchBlockDataWithDeps(deps, page, context, client, options) {
73803
73956
  * hydration; the strict `@riverbankcms/sdk/rendering/server` surface exports it
73804
73957
  * directly.
73805
73958
  */
73959
+ function isOverrideOnlyBlock(props) {
73960
+ return props.rendering?.kind === "overrides-only";
73961
+ }
73962
+ var MissingStandaloneBlockOverrideError = class extends Error {
73963
+ constructor(blockKind) {
73964
+ super(`Override-only standalone rendering requires an override for block kind "${blockKind}".`);
73965
+ this.blockKind = blockKind;
73966
+ this.code = "missing_standalone_block_override";
73967
+ this.name = "MissingStandaloneBlockOverrideError";
73968
+ }
73969
+ };
73806
73970
  function toBlockHydrationBootstrapConfig(props) {
73807
73971
  return {
73808
73972
  siteId: props.siteId,
@@ -73872,14 +74036,16 @@ function buildStandaloneBlockViewModel({ siteId, pageId, previewStage, apiBaseUr
73872
74036
  function renderBlockOverride({ OverrideComponent, props, runtime, resolvedData }) {
73873
74037
  return /* @__PURE__ */ jsx(OverrideComponent, {
73874
74038
  content: props.content,
73875
- theme: runtime.themeRuntime.tokens,
73876
- themeConfig: props.theme,
74039
+ ...runtime && "theme" in props ? {
74040
+ theme: runtime.themeRuntime.tokens,
74041
+ themeConfig: props.theme
74042
+ } : {},
73877
74043
  data: resolvedData,
73878
74044
  siteId: props.siteId,
73879
74045
  apiBaseUrl: props.apiBaseUrl,
73880
74046
  portalToken: props.portalToken ?? null,
73881
74047
  supabaseUrl: props.supabaseUrl,
73882
- imageResolveContext: runtime.imageResolveContext,
74048
+ imageResolveContext: runtime?.imageResolveContext,
73883
74049
  blockId: props.blockId ?? null,
73884
74050
  blockKind: props.blockKind
73885
74051
  });
@@ -73908,8 +74074,8 @@ function renderManifestBlock({ definition, props, runtime, resolvedData }) {
73908
74074
  async function BlockContent(props) {
73909
74075
  const definition = getBlockDefinition(props.blockKind);
73910
74076
  const OverrideComponent = props.override;
74077
+ if (isOverrideOnlyBlock(props) && !OverrideComponent) throw new MissingStandaloneBlockOverrideError(props.blockKind);
73911
74078
  if (!definition && !OverrideComponent) return renderUnknownBlock(props.blockKind);
73912
- const runtime = buildBlockContentRuntime(props);
73913
74079
  const resolvedData = await loadStandaloneBlockData({
73914
74080
  ...props,
73915
74081
  hasDefinition: Boolean(definition)
@@ -73917,13 +74083,14 @@ async function BlockContent(props) {
73917
74083
  if (OverrideComponent) return renderBlockOverride({
73918
74084
  OverrideComponent,
73919
74085
  props,
73920
- runtime,
74086
+ runtime: isOverrideOnlyBlock(props) ? void 0 : buildBlockContentRuntime(props),
73921
74087
  resolvedData
73922
74088
  });
74089
+ if (isOverrideOnlyBlock(props)) throw new MissingStandaloneBlockOverrideError(props.blockKind);
73923
74090
  return renderManifestBlock({
73924
74091
  definition,
73925
74092
  props,
73926
- runtime,
74093
+ runtime: buildBlockContentRuntime(props),
73927
74094
  resolvedData
73928
74095
  });
73929
74096
  }
@@ -77728,4 +77895,4 @@ function defineBlockOverrideRegistrations(registrations) {
77728
77895
  * ```
77729
77896
  */
77730
77897
  //#endregion
77731
- export { Block, ImagePresets, Layout, Page, PageRenderer, RichText, ThemeScope, buildThemeRuntime, defineBlockOverrideRegistrations, defineBlockOverrides, defineLazyBlockOverride, isEntryContent, isPageContent, isPageSurfaceContent, loadContent, loadPage, resolveImageSourceSetWithContext, resolveImageUrl, resolveImageUrlWithContext, toBlocksImageResolveContextInput, toBlocksMediaAssets, toBlocksPageRendererDataContext };
77898
+ export { Block, ImagePresets, Layout, MissingBlockOverrideError, Page, PageRenderer, RichText, ThemeScope, UnsupportedOverrideOnlyLayoutChromeError, buildThemeRuntime, defineBlockOverrideRegistrations, defineBlockOverrides, defineLazyBlockOverride, isEntryContent, isPageContent, isPageSurfaceContent, loadContent, loadPage, resolveImageSourceSetWithContext, resolveImageUrl, resolveImageUrlWithContext, toBlocksImageResolveContextInput, toBlocksMediaAssets, toBlocksPageRendererDataContext };