@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
@@ -1214,9 +1214,10 @@ var init_fileAssetDeletion = __esmMin((() => {
1214
1214
  init_src$3();
1215
1215
  init_fileDomain();
1216
1216
  init_fileStorage();
1217
- })), init_fileMimeDetection = __esmMin((() => {
1217
+ }));
1218
+ var init_fileMimeDetection = __esmMin((() => {
1218
1219
  new TextDecoder("latin1");
1219
- })), init_filename = __esmMin((() => {})), PRODUCT_FILE_EXTENSION_TAGS;
1220
+ })), init_mimeType = __esmMin((() => {})), init_filename = __esmMin((() => {})), PRODUCT_FILE_EXTENSION_TAGS;
1220
1221
  var init_uploadVerificationContract = __esmMin((() => {
1221
1222
  init_fileDomain();
1222
1223
  init_fileMimeDetection();
@@ -1894,6 +1895,7 @@ var init_contentMediaSnapshotAudit = __esmMin((() => {
1894
1895
  init_fileAssetDeletion();
1895
1896
  init_fileAssetCompatibility();
1896
1897
  init_fileMimeDetection();
1898
+ init_mimeType();
1897
1899
  init_filename();
1898
1900
  init_uploadVerificationContract();
1899
1901
  init_videoPrep();
@@ -8081,6 +8083,7 @@ var init_palette$1 = __esmMin((() => {
8081
8083
  init_suggestRecipes();
8082
8084
  init_allRecipes();
8083
8085
  init_curated();
8086
+ init_curated();
8084
8087
  })), defaultThemeTokens;
8085
8088
  var init_tokens$1 = __esmMin((() => {
8086
8089
  defaultThemeTokens = {
@@ -8309,49 +8312,22 @@ var init_backgroundAppearance = __esmMin((() => {
8309
8312
  var init_compositionBudget = __esmMin((() => {
8310
8313
  init_types$14();
8311
8314
  }));
8312
- var init_headerStyleParts = __esmMin((() => {}));
8313
- var headerInteractionPaletteValues, headerInteractionPaletteSchema;
8314
- var init_interactionPalette = __esmMin((() => {
8315
- headerInteractionPaletteValues = [
8316
- "primary",
8317
- "secondary",
8318
- "accent"
8319
- ];
8320
- headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
8321
- }));
8322
- var clearSplitInteractionPalette;
8323
- var init_headerInteractionPalette = __esmMin((() => {
8324
- init_interactionPalette();
8325
- init_lookOptionGroups();
8326
- clearSplitInteractionPalette = defineLookOptionGroup({
8327
- id: "interaction-palette",
8328
- label: "Hover colour",
8329
- defaultOptionId: "accent",
8330
- options: [
8331
- {
8332
- id: "accent",
8333
- label: "Accent"
8334
- },
8335
- {
8336
- id: "primary",
8337
- label: "Primary"
8338
- },
8339
- {
8340
- id: "secondary",
8341
- label: "Secondary"
8342
- }
8343
- ]
8344
- });
8345
- }));
8346
- var init_headerOpeningForeground = __esmMin((() => {
8347
- init_expandPalette();
8348
- init_colorConversion();
8349
- init_tokens();
8350
- init_colorTokenParts();
8351
- init_types$14();
8352
- }));
8353
8315
  var init_customizableSurfaces = __esmMin((() => {
8354
8316
  init_types$14();
8317
+ }));
8318
+ //#endregion
8319
+ //#region ../theme-core/src/site-styles/headerLookTypes.ts
8320
+ function asHeaderLookId(value) {
8321
+ return value;
8322
+ }
8323
+ function asHeaderLayoutId(value) {
8324
+ return value;
8325
+ }
8326
+ function asHeaderStyleId(value) {
8327
+ return value;
8328
+ }
8329
+ var init_headerLookTypes = __esmMin((() => {
8330
+ init_customizableSurfaces();
8355
8331
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
8356
8332
  var init_logoBranding = __esmMin((() => {
8357
8333
  init_types$14();
@@ -8444,388 +8420,8 @@ var init_logoBranding = __esmMin((() => {
8444
8420
  "display"
8445
8421
  ];
8446
8422
  }));
8447
- //#endregion
8448
- //#region ../theme-core/src/site-styles/headerLooks.ts
8449
- function asHeaderLookId(value) {
8450
- return value;
8451
- }
8452
- function asHeaderLayoutId(value) {
8453
- return value;
8454
- }
8455
- function asHeaderStyleId(value) {
8456
- return value;
8457
- }
8458
- /**
8459
- * Starts every Look from the generated theme's header branch, then clears
8460
- * optional nested styling fields that would otherwise leak from another Look.
8461
- */
8462
- function baseHeader(theme) {
8463
- 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;
8464
- return {
8465
- ...header,
8466
- navContainer: {
8467
- type: "none",
8468
- tint: null,
8469
- opacity: .15
8470
- }
8471
- };
8472
- }
8473
- function supportedLayouts(ids) {
8474
- return ids.map(asHeaderLayoutId);
8475
- }
8476
- function headerStyleRepairChain(values) {
8477
- return values.map(asHeaderStyleId);
8478
- }
8479
- function getHeaderStyle(id) {
8480
- return headerStylesById.get(id) ?? null;
8481
- }
8482
- function isHeaderStyleCompatibleWithLayout(style, layoutId) {
8483
- return style.supportedLayoutIds.includes(layoutId);
8484
- }
8485
- function getHeaderStyleOrThrow(id) {
8486
- const style = getHeaderStyle(id);
8487
- if (!style) throw new Error(`Unknown Theme V2 header style: ${id}`);
8488
- return style;
8489
- }
8490
- function resolveLegacyHeaderLookAlias(lookId) {
8491
- return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
8492
- }
8493
- function getCompatibleHeaderStyleIds(layoutId) {
8494
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
8495
- return isHeaderStyleCompatibleWithLayout(getHeaderStyleOrThrow(styleId), layoutId);
8496
- });
8497
- }
8498
- function applyNavTypography(style, typography) {
8499
- switch (typography) {
8500
- case "plain": return style;
8501
- case "heading": return {
8502
- ...style,
8503
- typography: "heading",
8504
- fontWeight: "medium",
8505
- letterSpacing: "wide"
8506
- };
8507
- case "quiet-caps": return {
8508
- ...style,
8509
- textTransform: "uppercase",
8510
- textSize: "sm",
8511
- letterSpacing: "wide"
8512
- };
8513
- case "brand-caps": return {
8514
- ...style,
8515
- textTransform: "uppercase",
8516
- textSize: "sm",
8517
- letterSpacing: "wider"
8518
- };
8519
- default: return assertNever$12(typography, "Unhandled header nav typography");
8520
- }
8521
- }
8522
- function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
8523
- return applyNavTypography({
8524
- name: "Underline grow",
8525
- typography: "body",
8526
- fontWeight: "medium",
8527
- textTransform: "none",
8528
- italic: false,
8529
- colorToken,
8530
- padding: "compact",
8531
- paddingX: "compact",
8532
- borderRadius: "none",
8533
- effects: { hover: [{
8534
- effectId: "nav-underline",
8535
- options: {
8536
- style: "grow",
8537
- ...underlineColorToken ? { colorToken: underlineColorToken } : {}
8538
- }
8539
- }] }
8540
- }, typography);
8541
- }
8542
- function themedHeaderShadow(theme) {
8543
- switch (theme.shadow.elevation) {
8544
- case "none": return;
8545
- case "low": return { elevation: "sm" };
8546
- case "medium": return { elevation: "md" };
8547
- case "high": return { elevation: "lg" };
8548
- default: return assertNever$12(theme.shadow.elevation, "Unhandled theme shadow elevation");
8549
- }
8550
- }
8551
- function solidBrandHeader(theme) {
8552
- const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
8553
- return {
8554
- ...baseHeader(theme),
8555
- variant: "classic",
8556
- positioning: "sticky",
8557
- shrinkOnScroll: true,
8558
- background: {
8559
- type: "color",
8560
- color: "primary"
8561
- },
8562
- textColor: "primaryForeground",
8563
- navColor: "primaryForeground",
8564
- navStyle: "underline-grow",
8565
- navWeight: "bold",
8566
- navLinkStyle: {
8567
- typography: "body",
8568
- fontWeight: "bold",
8569
- textTransform: "uppercase",
8570
- italic: false,
8571
- colorToken: "primaryForeground",
8572
- hoverColorToken: "secondary",
8573
- textSize: "sm",
8574
- letterSpacing: "wider",
8575
- padding: "compact",
8576
- paddingX: "compact",
8577
- borderRadius: "none",
8578
- effects: { hover: [{
8579
- effectId: "text-color-change",
8580
- options: { hoverColorToken: "secondary" }
8581
- }, {
8582
- effectId: "nav-underline",
8583
- options: {
8584
- style: "grow",
8585
- colorToken: "secondary"
8586
- }
8587
- }] }
8588
- },
8589
- dropdownStyle: {
8590
- background: "primary-700",
8591
- textColor: "primaryForeground",
8592
- borderColor: null,
8593
- shadow: "md",
8594
- borderRadius: "md",
8595
- hoverBackground: "primary-900",
8596
- hoverTextColor: "secondary",
8597
- textTransform: "uppercase",
8598
- letterSpacing: "wider",
8599
- fontWeight: "bold",
8600
- textSize: "sm"
8601
- },
8602
- border: {
8603
- style: "solid",
8604
- width: "none",
8605
- position: "none"
8606
- },
8607
- logoText: {
8608
- hideOnShrink: true,
8609
- mobileMaxWidth: "sm",
8610
- mobileWrapLines: 2
8611
- },
8612
- ctaGap: "compact",
8613
- ctaTreatment: "inverted",
8614
- ...ctaVariant ? { ctaVariant } : {}
8615
- };
8616
- }
8617
- function cleanBaseHeader(theme) {
8618
- return {
8619
- ...baseHeader(theme),
8620
- variant: "classic",
8621
- positioning: "sticky",
8622
- shrinkOnScroll: false,
8623
- background: {
8624
- type: "color",
8625
- color: "surface"
8626
- },
8627
- textColor: "text",
8628
- navColor: "text",
8629
- navStyle: "minimal",
8630
- navWeight: "medium",
8631
- border: {
8632
- style: "solid",
8633
- width: "thin",
8634
- position: "bottom",
8635
- colorToken: "border"
8636
- },
8637
- ctaTreatment: "default",
8638
- ctaGap: "default"
8639
- };
8640
- }
8641
- function classicCenteredNavHeader(theme) {
8642
- return {
8643
- ...baseHeader(theme),
8644
- variant: "classic",
8645
- navPlacement: "center",
8646
- positioning: "sticky",
8647
- shrinkOnScroll: false,
8648
- background: {
8649
- type: "color",
8650
- color: "surface"
8651
- },
8652
- textColor: "text",
8653
- navColor: "text",
8654
- navStyle: "underline-grow",
8655
- navWeight: "medium",
8656
- navLinkStyle: underlineNavLinkStyle("text", "accent"),
8657
- border: {
8658
- style: "solid",
8659
- width: "thin",
8660
- position: "bottom",
8661
- colorToken: "border"
8662
- },
8663
- ctaTreatment: "primary",
8664
- ctaVariant: resolveHeaderCtaVariant(theme, "primary"),
8665
- ctaGap: "default",
8666
- logoText: {
8667
- mobileMaxWidth: "sm",
8668
- mobileWrapLines: 1,
8669
- hideOnShrink: false
8670
- }
8671
- };
8672
- }
8673
- function serifLineHeader(theme) {
8674
- return {
8675
- ...baseHeader(theme),
8676
- variant: "centered",
8677
- positioning: "sticky",
8678
- shrinkOnScroll: false,
8679
- background: {
8680
- type: "color",
8681
- color: "background"
8682
- },
8683
- textColor: "text",
8684
- navColor: "text",
8685
- navStyle: "underline-grow",
8686
- navWeight: "medium",
8687
- logo: {
8688
- fontFamily: "heading",
8689
- letterSpacing: "wide",
8690
- gradient: false
8691
- },
8692
- border: {
8693
- style: "solid",
8694
- width: "none",
8695
- position: "none"
8696
- },
8697
- shadow: { elevation: "none" },
8698
- ctaTreatment: "outline",
8699
- ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
8700
- ctaGap: "relaxed"
8701
- };
8702
- }
8703
- function centeredCalmHeader(theme) {
8704
- return {
8705
- ...baseHeader(theme),
8706
- variant: "centered",
8707
- positioning: "static",
8708
- shrinkOnScroll: false,
8709
- background: {
8710
- type: "color",
8711
- color: "surface"
8712
- },
8713
- textColor: "text",
8714
- navColor: "text",
8715
- navStyle: "minimal",
8716
- navWeight: "medium",
8717
- ctaTreatment: "ghost",
8718
- ctaVariant: resolveHeaderCtaVariant(theme, "ghost"),
8719
- ctaGap: "none"
8720
- };
8721
- }
8722
- function practicalUtilityHeader(theme) {
8723
- return {
8724
- ...baseHeader(theme),
8725
- variant: "classic",
8726
- positioning: "sticky",
8727
- shrinkOnScroll: true,
8728
- background: {
8729
- type: "color",
8730
- color: "surface"
8731
- },
8732
- textColor: "text",
8733
- navColor: "text",
8734
- navStyle: "solid",
8735
- navWeight: "semibold",
8736
- shadow: themedHeaderShadow(theme),
8737
- border: {
8738
- style: "solid",
8739
- width: "thin",
8740
- position: "bottom",
8741
- colorToken: "border"
8742
- },
8743
- ctaTreatment: "primary",
8744
- ctaVariant: resolveHeaderCtaVariant(theme, "primary"),
8745
- ctaGap: "compact",
8746
- logoText: {
8747
- mobileMaxWidth: "sm",
8748
- mobileWrapLines: 1,
8749
- hideOnShrink: false
8750
- }
8751
- };
8752
- }
8753
- function minimalTransparentHeader(theme) {
8754
- return {
8755
- ...baseHeader(theme),
8756
- variant: "classic",
8757
- positioning: "static",
8758
- shrinkOnScroll: false,
8759
- background: {
8760
- type: "color",
8761
- color: "transparent"
8762
- },
8763
- textColor: "text",
8764
- navColor: "text",
8765
- navStyle: "underline",
8766
- navWeight: "medium",
8767
- border: {
8768
- style: "solid",
8769
- width: "none",
8770
- position: "none"
8771
- },
8772
- ctaTreatment: "outline",
8773
- ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
8774
- ctaGap: "default"
8775
- };
8776
- }
8777
- function transparentOverlayHeader(theme) {
8778
- return {
8779
- ...baseHeader(theme),
8780
- variant: "transparent",
8781
- positioning: "fixed",
8782
- shrinkOnScroll: true,
8783
- background: {
8784
- type: "color",
8785
- color: "transparent"
8786
- },
8787
- textColor: "background",
8788
- navColor: "background",
8789
- navStyle: "frosted",
8790
- navWeight: "semibold",
8791
- border: {
8792
- style: "solid",
8793
- width: "none",
8794
- position: "none"
8795
- },
8796
- ctaTreatment: "inverted",
8797
- ctaVariant: resolveHeaderCtaVariant(theme, "inverted"),
8798
- ctaGap: "compact"
8799
- };
8800
- }
8801
- function floatingGlassHeader(theme) {
8802
- return {
8803
- ...transparentOverlayHeader(theme),
8804
- variant: "floating",
8805
- positioning: "sticky",
8806
- navStyle: "frosted",
8807
- navContainer: {
8808
- type: "glass",
8809
- tint: "text",
8810
- opacity: .16
8811
- },
8812
- container: {
8813
- rounded: "2xl",
8814
- border: true,
8815
- shadow: true,
8816
- padding: "sm",
8817
- tint: "background",
8818
- opacity: .12
8819
- }
8820
- };
8821
- }
8822
- var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog;
8823
- var init_headerLooks = __esmMin((() => {
8824
- init_headerCtaVariants();
8825
- init_headerStyleParts();
8826
- init_headerInteractionPalette();
8827
- init_headerOpeningForeground();
8828
- init_customizableSurfaces();
8423
+ var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations;
8424
+ var init_headerLookBranding = __esmMin((() => {
8829
8425
  init_logoBranding();
8830
8426
  init_types$14();
8831
8427
  titleOnlyLogoAccommodation = {
@@ -8946,6 +8542,72 @@ var init_headerLooks = __esmMin((() => {
8946
8542
  inlineMarkWithTitleLogoAccommodation,
8947
8543
  unbackedOverlayLogoAccommodation
8948
8544
  ];
8545
+ }));
8546
+ var headerInteractionPaletteValues, headerInteractionPaletteSchema;
8547
+ var init_interactionPalette = __esmMin((() => {
8548
+ headerInteractionPaletteValues = [
8549
+ "primary",
8550
+ "secondary",
8551
+ "accent"
8552
+ ];
8553
+ headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
8554
+ }));
8555
+ var clearSplitInteractionPalette;
8556
+ var init_headerInteractionPalette = __esmMin((() => {
8557
+ init_interactionPalette();
8558
+ init_lookOptionGroups();
8559
+ clearSplitInteractionPalette = defineLookOptionGroup({
8560
+ id: "interaction-palette",
8561
+ label: "Hover colour",
8562
+ defaultOptionId: "accent",
8563
+ options: [
8564
+ {
8565
+ id: "accent",
8566
+ label: "Accent"
8567
+ },
8568
+ {
8569
+ id: "primary",
8570
+ label: "Primary"
8571
+ },
8572
+ {
8573
+ id: "secondary",
8574
+ label: "Secondary"
8575
+ }
8576
+ ]
8577
+ });
8578
+ }));
8579
+ //#endregion
8580
+ //#region ../theme-core/src/site-styles/headerLayoutStyleCatalog.ts
8581
+ function supportedLayouts(ids) {
8582
+ return ids.map(asHeaderLayoutId);
8583
+ }
8584
+ function headerStyleRepairChain(values) {
8585
+ return values.map(asHeaderStyleId);
8586
+ }
8587
+ function getHeaderStyle(id) {
8588
+ return headerStylesById.get(id) ?? null;
8589
+ }
8590
+ function isHeaderStyleCompatibleWithLayout(style, layoutId) {
8591
+ return style.supportedLayoutIds.includes(layoutId);
8592
+ }
8593
+ function getHeaderStyleOrThrow(id) {
8594
+ const style = getHeaderStyle(id);
8595
+ if (!style) throw new Error(`Unknown Theme V2 header style: ${id}`);
8596
+ return style;
8597
+ }
8598
+ function resolveLegacyHeaderLookAlias(lookId) {
8599
+ return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
8600
+ }
8601
+ function getCompatibleHeaderStyleIds(layoutId) {
8602
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
8603
+ return isHeaderStyleCompatibleWithLayout(getHeaderStyleOrThrow(styleId), layoutId);
8604
+ });
8605
+ }
8606
+ var headerLayoutCatalog, headerStyleCatalog, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById;
8607
+ var init_headerLayoutStyleCatalog = __esmMin((() => {
8608
+ init_types$14();
8609
+ init_headerInteractionPalette();
8610
+ init_headerLookTypes();
8949
8611
  headerLayoutCatalog = defineExactCatalog()([
8950
8612
  {
8951
8613
  id: asHeaderLayoutId("classic"),
@@ -9325,6 +8987,373 @@ var init_headerLooks = __esmMin((() => {
9325
8987
  }
9326
8988
  ]);
9327
8989
  legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
8990
+ }));
8991
+ var init_headerOpeningForeground = __esmMin((() => {
8992
+ init_expandPalette();
8993
+ init_colorConversion();
8994
+ init_tokens();
8995
+ init_colorTokenParts();
8996
+ init_types$14();
8997
+ }));
8998
+ //#endregion
8999
+ //#region ../theme-core/src/site-styles/headerStyleCompilerPrimitives.ts
9000
+ function baseHeader(theme) {
9001
+ 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;
9002
+ return {
9003
+ ...header,
9004
+ navContainer: {
9005
+ type: "none",
9006
+ tint: null,
9007
+ opacity: .15
9008
+ }
9009
+ };
9010
+ }
9011
+ function applyNavTypography(style, typography) {
9012
+ switch (typography) {
9013
+ case "plain": return style;
9014
+ case "heading": return {
9015
+ ...style,
9016
+ typography: "heading",
9017
+ fontWeight: "medium",
9018
+ letterSpacing: "wide"
9019
+ };
9020
+ case "quiet-caps": return {
9021
+ ...style,
9022
+ textTransform: "uppercase",
9023
+ textSize: "sm",
9024
+ letterSpacing: "wide"
9025
+ };
9026
+ case "brand-caps": return {
9027
+ ...style,
9028
+ textTransform: "uppercase",
9029
+ textSize: "sm",
9030
+ letterSpacing: "wider"
9031
+ };
9032
+ default: return assertNever$12(typography, "Unhandled header nav typography");
9033
+ }
9034
+ }
9035
+ function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
9036
+ return applyNavTypography({
9037
+ name: "Underline grow",
9038
+ typography: "body",
9039
+ fontWeight: "medium",
9040
+ textTransform: "none",
9041
+ italic: false,
9042
+ colorToken,
9043
+ padding: "compact",
9044
+ paddingX: "compact",
9045
+ borderRadius: "none",
9046
+ effects: { hover: [{
9047
+ effectId: "nav-underline",
9048
+ options: {
9049
+ style: "grow",
9050
+ ...underlineColorToken ? { colorToken: underlineColorToken } : {}
9051
+ }
9052
+ }] }
9053
+ }, typography);
9054
+ }
9055
+ function themedHeaderShadow(theme) {
9056
+ switch (theme.shadow.elevation) {
9057
+ case "none": return;
9058
+ case "low": return { elevation: "sm" };
9059
+ case "medium": return { elevation: "md" };
9060
+ case "high": return { elevation: "lg" };
9061
+ default: return assertNever$12(theme.shadow.elevation, "Unhandled theme shadow elevation");
9062
+ }
9063
+ }
9064
+ var init_headerStyleCompilerPrimitives = __esmMin((() => {
9065
+ init_headerCtaVariants();
9066
+ init_headerLookTypes();
9067
+ init_types$14();
9068
+ }));
9069
+ var init_headerStyleCompiler = __esmMin((() => {
9070
+ init_headerCtaVariants();
9071
+ init_headerInteractionPalette();
9072
+ init_headerOpeningForeground();
9073
+ init_headerLayoutStyleCatalog();
9074
+ init_headerStyleCompilerPrimitives();
9075
+ init_types$14();
9076
+ }));
9077
+ //#endregion
9078
+ //#region ../theme-core/src/site-styles/headerLegacyLooks.ts
9079
+ function solidBrandHeader(theme) {
9080
+ const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
9081
+ return {
9082
+ ...baseHeader(theme),
9083
+ variant: "classic",
9084
+ positioning: "sticky",
9085
+ shrinkOnScroll: true,
9086
+ background: {
9087
+ type: "color",
9088
+ color: "primary"
9089
+ },
9090
+ textColor: "primaryForeground",
9091
+ navColor: "primaryForeground",
9092
+ navStyle: "underline-grow",
9093
+ navWeight: "bold",
9094
+ navLinkStyle: {
9095
+ typography: "body",
9096
+ fontWeight: "bold",
9097
+ textTransform: "uppercase",
9098
+ italic: false,
9099
+ colorToken: "primaryForeground",
9100
+ hoverColorToken: "secondary",
9101
+ textSize: "sm",
9102
+ letterSpacing: "wider",
9103
+ padding: "compact",
9104
+ paddingX: "compact",
9105
+ borderRadius: "none",
9106
+ effects: { hover: [{
9107
+ effectId: "text-color-change",
9108
+ options: { hoverColorToken: "secondary" }
9109
+ }, {
9110
+ effectId: "nav-underline",
9111
+ options: {
9112
+ style: "grow",
9113
+ colorToken: "secondary"
9114
+ }
9115
+ }] }
9116
+ },
9117
+ dropdownStyle: {
9118
+ background: "primary-700",
9119
+ textColor: "primaryForeground",
9120
+ borderColor: null,
9121
+ shadow: "md",
9122
+ borderRadius: "md",
9123
+ hoverBackground: "primary-900",
9124
+ hoverTextColor: "secondary",
9125
+ textTransform: "uppercase",
9126
+ letterSpacing: "wider",
9127
+ fontWeight: "bold",
9128
+ textSize: "sm"
9129
+ },
9130
+ border: {
9131
+ style: "solid",
9132
+ width: "none",
9133
+ position: "none"
9134
+ },
9135
+ logoText: {
9136
+ hideOnShrink: true,
9137
+ mobileMaxWidth: "sm",
9138
+ mobileWrapLines: 2
9139
+ },
9140
+ ctaGap: "compact",
9141
+ ctaTreatment: "inverted",
9142
+ ...ctaVariant ? { ctaVariant } : {}
9143
+ };
9144
+ }
9145
+ function cleanBaseHeader(theme) {
9146
+ return {
9147
+ ...baseHeader(theme),
9148
+ variant: "classic",
9149
+ positioning: "sticky",
9150
+ shrinkOnScroll: false,
9151
+ background: {
9152
+ type: "color",
9153
+ color: "surface"
9154
+ },
9155
+ textColor: "text",
9156
+ navColor: "text",
9157
+ navStyle: "minimal",
9158
+ navWeight: "medium",
9159
+ border: {
9160
+ style: "solid",
9161
+ width: "thin",
9162
+ position: "bottom",
9163
+ colorToken: "border"
9164
+ },
9165
+ ctaTreatment: "default",
9166
+ ctaGap: "default"
9167
+ };
9168
+ }
9169
+ function classicCenteredNavHeader(theme) {
9170
+ return {
9171
+ ...baseHeader(theme),
9172
+ variant: "classic",
9173
+ navPlacement: "center",
9174
+ positioning: "sticky",
9175
+ shrinkOnScroll: false,
9176
+ background: {
9177
+ type: "color",
9178
+ color: "surface"
9179
+ },
9180
+ textColor: "text",
9181
+ navColor: "text",
9182
+ navStyle: "underline-grow",
9183
+ navWeight: "medium",
9184
+ navLinkStyle: underlineNavLinkStyle("text", "accent"),
9185
+ border: {
9186
+ style: "solid",
9187
+ width: "thin",
9188
+ position: "bottom",
9189
+ colorToken: "border"
9190
+ },
9191
+ ctaTreatment: "primary",
9192
+ ctaVariant: resolveHeaderCtaVariant(theme, "primary"),
9193
+ ctaGap: "default",
9194
+ logoText: {
9195
+ mobileMaxWidth: "sm",
9196
+ mobileWrapLines: 1,
9197
+ hideOnShrink: false
9198
+ }
9199
+ };
9200
+ }
9201
+ function serifLineHeader(theme) {
9202
+ return {
9203
+ ...baseHeader(theme),
9204
+ variant: "centered",
9205
+ positioning: "sticky",
9206
+ shrinkOnScroll: false,
9207
+ background: {
9208
+ type: "color",
9209
+ color: "background"
9210
+ },
9211
+ textColor: "text",
9212
+ navColor: "text",
9213
+ navStyle: "underline-grow",
9214
+ navWeight: "medium",
9215
+ logo: {
9216
+ fontFamily: "heading",
9217
+ letterSpacing: "wide",
9218
+ gradient: false
9219
+ },
9220
+ border: {
9221
+ style: "solid",
9222
+ width: "none",
9223
+ position: "none"
9224
+ },
9225
+ shadow: { elevation: "none" },
9226
+ ctaTreatment: "outline",
9227
+ ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
9228
+ ctaGap: "relaxed"
9229
+ };
9230
+ }
9231
+ function centeredCalmHeader(theme) {
9232
+ return {
9233
+ ...baseHeader(theme),
9234
+ variant: "centered",
9235
+ positioning: "static",
9236
+ shrinkOnScroll: false,
9237
+ background: {
9238
+ type: "color",
9239
+ color: "surface"
9240
+ },
9241
+ textColor: "text",
9242
+ navColor: "text",
9243
+ navStyle: "minimal",
9244
+ navWeight: "medium",
9245
+ ctaTreatment: "ghost",
9246
+ ctaVariant: resolveHeaderCtaVariant(theme, "ghost"),
9247
+ ctaGap: "none"
9248
+ };
9249
+ }
9250
+ function practicalUtilityHeader(theme) {
9251
+ return {
9252
+ ...baseHeader(theme),
9253
+ variant: "classic",
9254
+ positioning: "sticky",
9255
+ shrinkOnScroll: true,
9256
+ background: {
9257
+ type: "color",
9258
+ color: "surface"
9259
+ },
9260
+ textColor: "text",
9261
+ navColor: "text",
9262
+ navStyle: "solid",
9263
+ navWeight: "semibold",
9264
+ shadow: themedHeaderShadow(theme),
9265
+ border: {
9266
+ style: "solid",
9267
+ width: "thin",
9268
+ position: "bottom",
9269
+ colorToken: "border"
9270
+ },
9271
+ ctaTreatment: "primary",
9272
+ ctaVariant: resolveHeaderCtaVariant(theme, "primary"),
9273
+ ctaGap: "compact",
9274
+ logoText: {
9275
+ mobileMaxWidth: "sm",
9276
+ mobileWrapLines: 1,
9277
+ hideOnShrink: false
9278
+ }
9279
+ };
9280
+ }
9281
+ function minimalTransparentHeader(theme) {
9282
+ return {
9283
+ ...baseHeader(theme),
9284
+ variant: "classic",
9285
+ positioning: "static",
9286
+ shrinkOnScroll: false,
9287
+ background: {
9288
+ type: "color",
9289
+ color: "transparent"
9290
+ },
9291
+ textColor: "text",
9292
+ navColor: "text",
9293
+ navStyle: "underline",
9294
+ navWeight: "medium",
9295
+ border: {
9296
+ style: "solid",
9297
+ width: "none",
9298
+ position: "none"
9299
+ },
9300
+ ctaTreatment: "outline",
9301
+ ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
9302
+ ctaGap: "default"
9303
+ };
9304
+ }
9305
+ function transparentOverlayHeader(theme) {
9306
+ return {
9307
+ ...baseHeader(theme),
9308
+ variant: "transparent",
9309
+ positioning: "fixed",
9310
+ shrinkOnScroll: true,
9311
+ background: {
9312
+ type: "color",
9313
+ color: "transparent"
9314
+ },
9315
+ textColor: "background",
9316
+ navColor: "background",
9317
+ navStyle: "frosted",
9318
+ navWeight: "semibold",
9319
+ border: {
9320
+ style: "solid",
9321
+ width: "none",
9322
+ position: "none"
9323
+ },
9324
+ ctaTreatment: "inverted",
9325
+ ctaVariant: resolveHeaderCtaVariant(theme, "inverted"),
9326
+ ctaGap: "compact"
9327
+ };
9328
+ }
9329
+ function floatingGlassHeader(theme) {
9330
+ return {
9331
+ ...transparentOverlayHeader(theme),
9332
+ variant: "floating",
9333
+ positioning: "sticky",
9334
+ navStyle: "frosted",
9335
+ navContainer: {
9336
+ type: "glass",
9337
+ tint: "text",
9338
+ opacity: .16
9339
+ },
9340
+ container: {
9341
+ rounded: "2xl",
9342
+ border: true,
9343
+ shadow: true,
9344
+ padding: "sm",
9345
+ tint: "background",
9346
+ opacity: .12
9347
+ }
9348
+ };
9349
+ }
9350
+ var headerLookCatalog;
9351
+ var init_headerLegacyLooks = __esmMin((() => {
9352
+ init_headerCtaVariants();
9353
+ init_headerLookBranding();
9354
+ init_headerLookTypes();
9355
+ init_headerStyleCompilerPrimitives();
9356
+ init_types$14();
9328
9357
  headerLookCatalog = defineExactCatalog()([
9329
9358
  {
9330
9359
  id: asHeaderLookId("clean-base"),
@@ -9398,6 +9427,22 @@ var init_headerLooks = __esmMin((() => {
9398
9427
  ]);
9399
9428
  new Map(headerLookCatalog.map((look) => [look.id, look]));
9400
9429
  }));
9430
+ var init_headerLookSelection = __esmMin((() => {
9431
+ init_customizableSurfaces();
9432
+ init_headerLookBranding();
9433
+ init_headerLookTypes();
9434
+ init_headerLegacyLooks();
9435
+ }));
9436
+ //#endregion
9437
+ //#region ../theme-core/src/site-styles/headerLooks.ts
9438
+ var init_headerLooks = __esmMin((() => {
9439
+ init_headerLookTypes();
9440
+ init_headerLookBranding();
9441
+ init_headerLayoutStyleCatalog();
9442
+ init_headerStyleCompiler();
9443
+ init_headerLegacyLooks();
9444
+ init_headerLookSelection();
9445
+ }));
9401
9446
  var init_compilationPlan = __esmMin((() => {
9402
9447
  init_headerLooks();
9403
9448
  }));
@@ -15447,6 +15492,7 @@ var init_buttons = __esmMin((() => {
15447
15492
  init_constants$2();
15448
15493
  init_presets$1();
15449
15494
  init_styles();
15495
+ init_styles();
15450
15496
  }));
15451
15497
  //#endregion
15452
15498
  //#region ../theme-core/src/cards/types.ts
@@ -132101,6 +132147,216 @@ init_node();
132101
132147
  init_fragments();
132102
132148
  init_defineBlock();
132103
132149
  //#endregion
132150
+ //#region ../blocks/src/system/manifest/hydrateLinks.ts
132151
+ init_typeGuards();
132152
+ /**
132153
+ * Hydrates link objects within block content using the provided route map. Returns
132154
+ * the original content reference when no mutations are required to avoid unnecessary renders.
132155
+ */
132156
+ function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
132157
+ if (!routes || !manifest?.fields?.length) return content;
132158
+ return hydrateValue(content, {
132159
+ routes,
132160
+ pagesByIdentifier,
132161
+ entriesByIdentifier
132162
+ });
132163
+ }
132164
+ function hydrateValue(value, context) {
132165
+ try {
132166
+ if (Array.isArray(value)) {
132167
+ const resolvedItems = value.map((item) => hydrateValue(item, context));
132168
+ return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
132169
+ }
132170
+ if (isRecord$32(value)) {
132171
+ if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
132172
+ if (isPageLink$1(value)) return hydratePageLink(value, context);
132173
+ if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
132174
+ const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
132175
+ return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
132176
+ }
132177
+ return value;
132178
+ } catch (err) {
132179
+ console.error("[hydrateLinks] Error hydrating value:", err, value);
132180
+ return value;
132181
+ }
132182
+ }
132183
+ function hydrateInternalLink(link, routes) {
132184
+ const resolved = resolveRouteTarget(link.routeId, routes);
132185
+ if (!resolved) return link;
132186
+ const nextHref = resolved.href;
132187
+ const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
132188
+ const nextUpdatedAt = resolved.updatedAt;
132189
+ const updates = {};
132190
+ if (nextHref && nextHref !== currentHref) updates.href = nextHref;
132191
+ if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
132192
+ return Object.keys(updates).length > 0 ? {
132193
+ ...link,
132194
+ ...updates
132195
+ } : link;
132196
+ }
132197
+ function isInternalLink$1(value) {
132198
+ if (value.kind !== "internal") return false;
132199
+ if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
132200
+ return true;
132201
+ }
132202
+ function isPageLink$1(value) {
132203
+ if (value.kind !== "page") return false;
132204
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
132205
+ return true;
132206
+ }
132207
+ function hydratePageLink(link, context) {
132208
+ const resolved = resolvePageRouteTarget(link, context);
132209
+ if (!resolved) return link;
132210
+ return {
132211
+ ...link,
132212
+ href: resolved.href,
132213
+ routeId: resolved.routeId
132214
+ };
132215
+ }
132216
+ function isEntryLink$1(value) {
132217
+ if (value.kind !== "entry") return false;
132218
+ if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
132219
+ if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
132220
+ return true;
132221
+ }
132222
+ function hydrateEntryLink(link, context) {
132223
+ const resolved = resolveEntryRouteTarget(link, context);
132224
+ if (!resolved) return link;
132225
+ return {
132226
+ ...link,
132227
+ href: resolved.href,
132228
+ routeId: resolved.routeId
132229
+ };
132230
+ }
132231
+ //#endregion
132232
+ //#region ../blocks/src/sdkBlockTransform.ts
132233
+ init_augmentManifest();
132234
+ /**
132235
+ * Transforms an SDK custom block into a BlockManifest.
132236
+ *
132237
+ * If the block has a `layout`, it can be rendered declaratively without React code.
132238
+ * If no layout, the block MUST use blockOverrides for rendering.
132239
+ */
132240
+ function transformSdkBlockToManifest(sdkBlock) {
132241
+ const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
132242
+ return augmentManifest({
132243
+ name: sdkBlock.id,
132244
+ version: "1.0.0",
132245
+ title: sdkBlock.title,
132246
+ titleSource: sdkBlock.titleSource,
132247
+ description: sdkBlock.description,
132248
+ component: sdkBlock.id,
132249
+ fields: sdkBlock.fields,
132250
+ slots: [],
132251
+ category: sdkBlock.category,
132252
+ tags: sdkBlock.tags,
132253
+ icon: sdkBlock.icon,
132254
+ layout: sdkBlock.layout,
132255
+ variants: sdkBlock.variants,
132256
+ defaultVariant: sdkBlock.defaultVariant,
132257
+ variantOptions: sdkBlock.variantOptions,
132258
+ previewCustomize: sdkBlock.previewCustomize,
132259
+ behaviours: {
132260
+ supportsThemeSwitching: true,
132261
+ inlineEditing: hasLayout,
132262
+ animation: hasLayout,
132263
+ paletteHidden: false
132264
+ }
132265
+ });
132266
+ }
132267
+ /**
132268
+ * Transforms an SDK custom block into a SystemBlockDefinition.
132269
+ *
132270
+ * This creates a minimal definition with just the manifest - no data loaders
132271
+ * or content normalizers since SDK blocks handle their own rendering.
132272
+ */
132273
+ function transformSdkBlockToDefinition(sdkBlock) {
132274
+ return {
132275
+ manifest: transformSdkBlockToManifest(sdkBlock),
132276
+ dataLoaders: sdkBlock.dataLoaders
132277
+ };
132278
+ }
132279
+ //#endregion
132280
+ //#region ../blocks/src/customBlockRegistry.ts
132281
+ init_src$3();
132282
+ const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
132283
+ function isCustomBlockKind(blockKind) {
132284
+ return blockKind.startsWith("custom.");
132285
+ }
132286
+ function transformToBlockDescriptor(sdkBlock, source = "sdk") {
132287
+ return {
132288
+ name: sdkBlock.id,
132289
+ title: sdkBlock.title,
132290
+ description: sdkBlock.description,
132291
+ category: sdkBlock.category,
132292
+ tags: sdkBlock.tags,
132293
+ icon: sdkBlock.icon,
132294
+ definition: transformSdkBlockToDefinition(sdkBlock),
132295
+ source
132296
+ };
132297
+ }
132298
+ function toResolvedCustomBlock(manifest, source) {
132299
+ return {
132300
+ blockKind: manifest.id,
132301
+ manifest: transformSdkBlockToManifest(manifest),
132302
+ source,
132303
+ descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
132304
+ };
132305
+ }
132306
+ function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
132307
+ switch (policy.kind) {
132308
+ case "canonical-db-fallback-sdk": {
132309
+ const entriesByKind = /* @__PURE__ */ new Map();
132310
+ const conflicts = [];
132311
+ for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
132312
+ for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
132313
+ const existing = entriesByKind.get(sdkBlock.id);
132314
+ if (existing) {
132315
+ conflicts.push({
132316
+ kind: "conflict",
132317
+ blockKind: existing.blockKind,
132318
+ winner: existing.source,
132319
+ loser: { kind: "sdk-config" },
132320
+ reason: "db-canonical-sdk-fallback"
132321
+ });
132322
+ continue;
132323
+ }
132324
+ entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
132325
+ }
132326
+ return {
132327
+ policy,
132328
+ entries: Array.from(entriesByKind.values()),
132329
+ conflicts
132330
+ };
132331
+ }
132332
+ }
132333
+ }
132334
+ function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
132335
+ const plan = planCustomBlockRegistryResolution({
132336
+ sdkConfig,
132337
+ customBlocks,
132338
+ policy
132339
+ });
132340
+ const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
132341
+ for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
132342
+ return {
132343
+ entries: plan.entries,
132344
+ conflicts: plan.conflicts,
132345
+ findManifest: (blockKind) => {
132346
+ if (!isCustomBlockKind(blockKind)) return void 0;
132347
+ return entriesByKind.get(blockKind);
132348
+ }
132349
+ };
132350
+ }
132351
+ function sourceLabel(source) {
132352
+ switch (source.kind) {
132353
+ case "managed-database": return "DB";
132354
+ case "sdk-synced": return "SDK-synced DB";
132355
+ case "sdk-config": return "SDK config";
132356
+ default: return assertNever$20(source);
132357
+ }
132358
+ }
132359
+ //#endregion
132104
132360
  //#region ../theme-core/src/runtime/fontFamily.ts
132105
132361
  /**
132106
132362
  * Font Family Formatting Utilities
@@ -135870,214 +136126,111 @@ function mapFontStyle(italic) {
135870
136126
  return italic ? "italic" : "normal";
135871
136127
  }
135872
136128
  //#endregion
135873
- //#region ../blocks/src/system/manifest/hydrateLinks.ts
135874
- init_typeGuards();
135875
- /**
135876
- * Hydrates link objects within block content using the provided route map. Returns
135877
- * the original content reference when no mutations are required to avoid unnecessary renders.
135878
- */
135879
- function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
135880
- if (!routes || !manifest?.fields?.length) return content;
135881
- return hydrateValue(content, {
135882
- routes,
135883
- pagesByIdentifier,
135884
- entriesByIdentifier
135885
- });
135886
- }
135887
- function hydrateValue(value, context) {
135888
- try {
135889
- if (Array.isArray(value)) {
135890
- const resolvedItems = value.map((item) => hydrateValue(item, context));
135891
- return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
135892
- }
135893
- if (isRecord$32(value)) {
135894
- if (isInternalLink$1(value)) return hydrateInternalLink(value, context.routes);
135895
- if (isPageLink$1(value)) return hydratePageLink(value, context);
135896
- if (isEntryLink$1(value)) return hydrateEntryLink(value, context);
135897
- const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, context)]);
135898
- return resolvedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(resolvedEntries);
135899
- }
135900
- return value;
135901
- } catch (err) {
135902
- console.error("[hydrateLinks] Error hydrating value:", err, value);
135903
- return value;
136129
+ //#region ../blocks/src/pageRenderingMode.ts
136130
+ var MissingBlockOverrideError$1 = class extends Error {
136131
+ constructor(blockKind) {
136132
+ super(`Override-only rendering requires an override for block kind "${blockKind}".`);
136133
+ this.blockKind = blockKind;
136134
+ this.code = "missing_block_override";
136135
+ this.name = "MissingBlockOverrideError";
135904
136136
  }
136137
+ };
136138
+ function isOverrideOnlyResourceInput(props) {
136139
+ return props.rendering?.kind === "overrides-only";
135905
136140
  }
135906
- function hydrateInternalLink(link, routes) {
135907
- const resolved = resolveRouteTarget(link.routeId, routes);
135908
- if (!resolved) return link;
135909
- const nextHref = resolved.href;
135910
- const currentHref = typeof link.href === "string" && link.href.length > 0 ? link.href : null;
135911
- const nextUpdatedAt = resolved.updatedAt;
135912
- const updates = {};
135913
- if (nextHref && nextHref !== currentHref) updates.href = nextHref;
135914
- if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) updates.updatedAt = nextUpdatedAt;
135915
- return Object.keys(updates).length > 0 ? {
135916
- ...link,
135917
- ...updates
135918
- } : link;
135919
- }
135920
- function isInternalLink$1(value) {
135921
- if (value.kind !== "internal") return false;
135922
- if (typeof value.routeId !== "string" || value.routeId.length === 0) return false;
135923
- return true;
135924
- }
135925
- function isPageLink$1(value) {
135926
- if (value.kind !== "page") return false;
135927
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
135928
- return true;
135929
- }
135930
- function hydratePageLink(link, context) {
135931
- const resolved = resolvePageRouteTarget(link, context);
135932
- if (!resolved) return link;
136141
+ function resolvePageThemeResources(props) {
136142
+ if (isOverrideOnlyResourceInput(props)) return { kind: "unavailable" };
135933
136143
  return {
135934
- ...link,
135935
- href: resolved.href,
135936
- routeId: resolved.routeId
136144
+ kind: "available",
136145
+ tokens: props.themeTokens ?? buildThemeRuntime$1(props.theme).tokens,
136146
+ config: props.theme
135937
136147
  };
135938
136148
  }
135939
- function isEntryLink$1(value) {
135940
- if (value.kind !== "entry") return false;
135941
- if (typeof value.contentType !== "string" || value.contentType.length === 0) return false;
135942
- if (typeof value.identifier !== "string" || value.identifier.length === 0) return false;
135943
- return true;
136149
+ function requireBlockOverride(resources, override, blockKind) {
136150
+ if (resources.kind === "unavailable" && !override) throw new MissingBlockOverrideError$1(blockKind);
135944
136151
  }
135945
- function hydrateEntryLink(link, context) {
135946
- const resolved = resolveEntryRouteTarget(link, context);
135947
- if (!resolved) return link;
135948
- return {
135949
- ...link,
135950
- href: resolved.href,
135951
- routeId: resolved.routeId
135952
- };
136152
+ function overrideThemeProps(resources) {
136153
+ return resources.kind === "available" ? {
136154
+ theme: resources.tokens,
136155
+ themeConfig: resources.config
136156
+ } : {};
136157
+ }
136158
+ function requireThemeResources(resources, blockKind) {
136159
+ if (resources.kind === "unavailable") throw new MissingBlockOverrideError$1(blockKind);
136160
+ return resources;
135953
136161
  }
135954
136162
  //#endregion
135955
- //#region ../blocks/src/sdkBlockTransform.ts
135956
- init_augmentManifest();
135957
- /**
135958
- * Transforms an SDK custom block into a BlockManifest.
135959
- *
135960
- * If the block has a `layout`, it can be rendered declaratively without React code.
135961
- * If no layout, the block MUST use blockOverrides for rendering.
135962
- */
135963
- function transformSdkBlockToManifest(sdkBlock) {
135964
- const hasLayout = Boolean(sdkBlock.layout) || Boolean(sdkBlock.variants && Object.keys(sdkBlock.variants).length > 0);
135965
- return augmentManifest({
135966
- name: sdkBlock.id,
135967
- version: "1.0.0",
135968
- title: sdkBlock.title,
135969
- titleSource: sdkBlock.titleSource,
135970
- description: sdkBlock.description,
135971
- component: sdkBlock.id,
135972
- fields: sdkBlock.fields,
135973
- slots: [],
135974
- category: sdkBlock.category,
135975
- tags: sdkBlock.tags,
135976
- icon: sdkBlock.icon,
135977
- layout: sdkBlock.layout,
135978
- variants: sdkBlock.variants,
135979
- defaultVariant: sdkBlock.defaultVariant,
135980
- variantOptions: sdkBlock.variantOptions,
135981
- previewCustomize: sdkBlock.previewCustomize,
135982
- behaviours: {
135983
- supportsThemeSwitching: true,
135984
- inlineEditing: hasLayout,
135985
- animation: hasLayout,
135986
- paletteHidden: false
135987
- }
135988
- });
136163
+ //#region ../blocks/src/pageRendererBoundaries.tsx
136164
+ init_typeGuards();
136165
+ const boundaryKey = (previousBlockId, nextBlockId) => `${previousBlockId}\u0000${nextBlockId}`;
136166
+ function isSiteStyleTransitionStyleGroup(value) {
136167
+ return value?.startsWith("site-style-transition-") === true;
135989
136168
  }
135990
- /**
135991
- * Transforms an SDK custom block into a SystemBlockDefinition.
135992
- *
135993
- * This creates a minimal definition with just the manifest - no data loaders
135994
- * or content normalizers since SDK blocks handle their own rendering.
135995
- */
135996
- function transformSdkBlockToDefinition(sdkBlock) {
135997
- return {
135998
- manifest: transformSdkBlockToManifest(sdkBlock),
135999
- dataLoaders: sdkBlock.dataLoaders
136000
- };
136169
+ function boundaryMapForAdjacentBlockIds(boundaries) {
136170
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
136001
136171
  }
136002
- //#endregion
136003
- //#region ../blocks/src/customBlockRegistry.ts
136004
- init_src$3();
136005
- const defaultCustomBlockSourcePolicy = { kind: "canonical-db-fallback-sdk" };
136006
- function isCustomBlockKind(blockKind) {
136007
- return blockKind.startsWith("custom.");
136172
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaries) {
136173
+ const previousBlockId = previousBlock?.id ?? null;
136174
+ const nextBlockId = nextBlock?.id ?? null;
136175
+ if (!previousBlockId || !nextBlockId) return null;
136176
+ return boundaries.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
136008
136177
  }
136009
- function transformToBlockDescriptor(sdkBlock, source = "sdk") {
136178
+ function renderBoundaryAfterBlock(input) {
136179
+ const previousBlockId = input.block.id;
136180
+ const nextBlockId = input.nextBlock?.id ?? null;
136181
+ if (!previousBlockId || !nextBlockId) return null;
136182
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
136183
+ if (!boundary) return null;
136184
+ const rendered = /* @__PURE__ */ jsx("div", {
136185
+ "aria-hidden": "true",
136186
+ "data-block-boundary": "",
136187
+ "data-boundary-id": boundary.boundaryId,
136188
+ "data-boundary-previous-block-id": boundary.previousBlockId,
136189
+ "data-boundary-next-block-id": boundary.nextBlockId,
136190
+ "data-style-group": boundary.styleGroup,
136191
+ style: boundaryCssVarsStyle(boundary)
136192
+ }, `${input.blockKey}:boundary`);
136193
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
136194
+ }
136195
+ function boundaryCssVarsStyle(boundary) {
136010
136196
  return {
136011
- name: sdkBlock.id,
136012
- title: sdkBlock.title,
136013
- description: sdkBlock.description,
136014
- category: sdkBlock.category,
136015
- tags: sdkBlock.tags,
136016
- icon: sdkBlock.icon,
136017
- definition: transformSdkBlockToDefinition(sdkBlock),
136018
- source
136197
+ "--site-style-transition-from": boundary.cssVars.from,
136198
+ "--site-style-transition-to": boundary.cssVars.to
136019
136199
  };
136020
136200
  }
136021
- function toResolvedCustomBlock(manifest, source) {
136201
+ function boundaryReserveCssVarsStyle(input) {
136202
+ const before = input.before?.metrics.reserveCss ?? null;
136203
+ const after = input.after?.metrics.reserveCss ?? null;
136204
+ if (!before && !after) return void 0;
136022
136205
  return {
136023
- blockKind: manifest.id,
136024
- manifest: transformSdkBlockToManifest(manifest),
136025
- source,
136026
- descriptor: transformToBlockDescriptor(manifest, source.kind === "managed-database" ? "database" : "sdk")
136206
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
136207
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
136027
136208
  };
136028
136209
  }
136029
- function planCustomBlockRegistryResolution({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy }) {
136030
- switch (policy.kind) {
136031
- case "canonical-db-fallback-sdk": {
136032
- const entriesByKind = /* @__PURE__ */ new Map();
136033
- const conflicts = [];
136034
- for (const customBlock of customBlocks) entriesByKind.set(customBlock.manifest.id, toResolvedCustomBlock(customBlock.manifest, customBlock.source));
136035
- for (const sdkBlock of sdkConfig?.customBlocks ?? []) {
136036
- const existing = entriesByKind.get(sdkBlock.id);
136037
- if (existing) {
136038
- conflicts.push({
136039
- kind: "conflict",
136040
- blockKind: existing.blockKind,
136041
- winner: existing.source,
136042
- loser: { kind: "sdk-config" },
136043
- reason: "db-canonical-sdk-fallback"
136044
- });
136045
- continue;
136046
- }
136047
- entriesByKind.set(sdkBlock.id, toResolvedCustomBlock(sdkBlock, { kind: "sdk-config" }));
136048
- }
136049
- return {
136050
- policy,
136051
- entries: Array.from(entriesByKind.values()),
136052
- conflicts
136053
- };
136054
- }
136055
- }
136210
+ function transitionCssVarsStyle(content) {
136211
+ const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
136212
+ const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
136213
+ const from = typeof cssVars?.from === "string" ? cssVars.from : null;
136214
+ const to = typeof cssVars?.to === "string" ? cssVars.to : null;
136215
+ if (!from && !to) return void 0;
136216
+ return {
136217
+ ...from ? { "--site-style-transition-from": from } : {},
136218
+ ...to ? { "--site-style-transition-to": to } : {}
136219
+ };
136056
136220
  }
136057
- function createCustomBlockRegistry({ sdkConfig, customBlocks = [], policy = defaultCustomBlockSourcePolicy, onConflict }) {
136058
- const plan = planCustomBlockRegistryResolution({
136059
- sdkConfig,
136060
- customBlocks,
136061
- policy
136062
- });
136063
- const entriesByKind = new Map(plan.entries.map((entry) => [entry.blockKind, entry]));
136064
- for (const conflict of plan.conflicts) onConflict?.(`Using ${sourceLabel(conflict.winner)} custom block "${conflict.blockKind}" - ${sourceLabel(conflict.loser)} block is fallback only`);
136221
+ function mergeStyleObjects(left, right) {
136222
+ if (!left) return right;
136223
+ if (!right) return left;
136065
136224
  return {
136066
- entries: plan.entries,
136067
- conflicts: plan.conflicts,
136068
- findManifest: (blockKind) => {
136069
- if (!isCustomBlockKind(blockKind)) return void 0;
136070
- return entriesByKind.get(blockKind);
136071
- }
136225
+ ...left,
136226
+ ...right
136072
136227
  };
136073
136228
  }
136074
- function sourceLabel(source) {
136075
- switch (source.kind) {
136076
- case "managed-database": return "DB";
136077
- case "sdk-synced": return "SDK-synced DB";
136078
- case "sdk-config": return "SDK config";
136079
- default: return assertNever$20(source);
136080
- }
136229
+ function pageBlockPosition(index, blockCount) {
136230
+ if (blockCount <= 1) return "only";
136231
+ if (index === 0) return "first";
136232
+ if (index === blockCount - 1) return "last";
136233
+ return "middle";
136081
136234
  }
136082
136235
  //#endregion
136083
136236
  //#region ../blocks/src/PageRenderer.tsx
@@ -136085,7 +136238,8 @@ init_fragments();
136085
136238
  init_colorStyles();
136086
136239
  init_typeGuards();
136087
136240
  init_media();
136088
- function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
136241
+ function PageRenderer$1(props) {
136242
+ const { page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring } = props;
136089
136243
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
136090
136244
  dataContext?.imageResolveContext,
136091
136245
  dataContext?.mediaAssets,
@@ -136094,12 +136248,16 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
136094
136248
  ]);
136095
136249
  const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
136096
136250
  const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
136251
+ const themeResources = React$1.useMemo(() => resolvePageThemeResources(props), [
136252
+ props.rendering,
136253
+ props.theme,
136254
+ props.themeTokens
136255
+ ]);
136097
136256
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
136098
136257
  className: "rb-p-6 rb-caption",
136099
136258
  style: textColorStyle("mutedText"),
136100
136259
  children: "No blocks found."
136101
136260
  });
136102
- const themeTokens = providedThemeTokens ?? buildThemeRuntime$1(theme).tokens;
136103
136261
  const resolvedRegistry = registry ?? getDefaultComponentRegistry();
136104
136262
  setContextResolveImageUrlContext(imageResolveContext);
136105
136263
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
@@ -136122,22 +136280,14 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
136122
136280
  const renderableContent = getRenderableContent(block, dataContext?.previewStage);
136123
136281
  const variantKey = definition?.manifest ? resolveVariantKey(definition.manifest, renderableContent) : null;
136124
136282
  const shouldUseWrapper = !managesOwnWrapper || Boolean(wrapBlock);
136125
- const blockSectionProps = {
136126
- themeTokens,
136127
- themeConfig: theme,
136283
+ const blockSectionProps = buildBlockSectionProps({
136284
+ props,
136285
+ themeResources,
136128
136286
  block,
136129
- usePlaceholders,
136130
- dataContext,
136131
136287
  blockKey,
136132
- registry: resolvedRegistry,
136133
- routeMap,
136134
- wrapBlock,
136135
- blockOverrides,
136136
- sdkConfig,
136137
- customBlocks,
136138
136288
  imageResolveContext,
136139
- previewAuthoring
136140
- };
136289
+ registry: resolvedRegistry
136290
+ });
136141
136291
  if (!shouldUseWrapper) {
136142
136292
  const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
136143
136293
  return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
@@ -136179,81 +136329,6 @@ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = fals
136179
136329
  })] }, blockKey);
136180
136330
  }) });
136181
136331
  }
136182
- function isSiteStyleTransitionStyleGroup(value) {
136183
- return value?.startsWith("site-style-transition-") === true;
136184
- }
136185
- function boundaryMapForAdjacentBlockIds(boundaries) {
136186
- return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
136187
- }
136188
- function boundaryKey(previousBlockId, nextBlockId) {
136189
- return `${previousBlockId}\u0000${nextBlockId}`;
136190
- }
136191
- function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
136192
- const previousBlockId = previousBlock?.id ?? null;
136193
- const nextBlockId = nextBlock?.id ?? null;
136194
- if (!previousBlockId || !nextBlockId) return null;
136195
- return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
136196
- }
136197
- function renderBoundaryAfterBlock(input) {
136198
- const previousBlockId = input.block.id;
136199
- const nextBlockId = input.nextBlock?.id ?? null;
136200
- if (!previousBlockId || !nextBlockId) return null;
136201
- const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
136202
- if (!boundary) return null;
136203
- const rendered = /* @__PURE__ */ jsx("div", {
136204
- "aria-hidden": "true",
136205
- "data-block-boundary": "",
136206
- "data-boundary-id": boundary.boundaryId,
136207
- "data-boundary-previous-block-id": boundary.previousBlockId,
136208
- "data-boundary-next-block-id": boundary.nextBlockId,
136209
- "data-style-group": boundary.styleGroup,
136210
- style: boundaryCssVarsStyle(boundary)
136211
- }, `${input.blockKey}:boundary`);
136212
- return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
136213
- }
136214
- function boundaryCssVarsStyle(boundary) {
136215
- return {
136216
- "--site-style-transition-from": boundary.cssVars.from,
136217
- "--site-style-transition-to": boundary.cssVars.to
136218
- };
136219
- }
136220
- function boundaryReserveCssVarsStyle(input) {
136221
- const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
136222
- const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
136223
- if (!before && !after) return void 0;
136224
- return {
136225
- ...before ? { "--site-style-boundary-before-reserve": before } : {},
136226
- ...after ? { "--site-style-boundary-after-reserve": after } : {}
136227
- };
136228
- }
136229
- function boundaryReserveValueForTreatment(boundary) {
136230
- return boundary.metrics.reserveCss;
136231
- }
136232
- function transitionCssVarsStyle(content) {
136233
- const transitionStyles = isObjectRecord$1(content._transitionStyles) ? content._transitionStyles : null;
136234
- const cssVars = isObjectRecord$1(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
136235
- const from = typeof cssVars?.from === "string" ? cssVars.from : null;
136236
- const to = typeof cssVars?.to === "string" ? cssVars.to : null;
136237
- if (!from && !to) return void 0;
136238
- return {
136239
- ...from ? { "--site-style-transition-from": from } : {},
136240
- ...to ? { "--site-style-transition-to": to } : {}
136241
- };
136242
- }
136243
- function mergeStyleObjects(left, right) {
136244
- if (!left) return right;
136245
- if (!right) return left;
136246
- return {
136247
- ...left,
136248
- ...right
136249
- };
136250
- }
136251
- function pageBlockPosition(index, blockCount) {
136252
- if (blockCount <= 1) return "only";
136253
- if (index === 0) return "first";
136254
- if (index === blockCount - 1) return "last";
136255
- return "middle";
136256
- }
136257
136332
  function resolvePageRendererImageResolveContext(dataContext) {
136258
136333
  const input = dataContext?.imageResolveContext;
136259
136334
  return buildResolveImageUrlContext({
@@ -136263,6 +136338,23 @@ function resolvePageRendererImageResolveContext(dataContext) {
136263
136338
  mediaAssets: input?.mediaAssets ?? dataContext?.mediaAssets
136264
136339
  });
136265
136340
  }
136341
+ function buildBlockSectionProps(input) {
136342
+ return {
136343
+ themeResources: input.themeResources,
136344
+ block: input.block,
136345
+ usePlaceholders: input.props.usePlaceholders ?? false,
136346
+ dataContext: input.props.dataContext,
136347
+ blockKey: input.blockKey,
136348
+ registry: input.registry,
136349
+ routeMap: input.props.routeMap,
136350
+ wrapBlock: input.props.wrapBlock,
136351
+ blockOverrides: input.props.blockOverrides,
136352
+ sdkConfig: input.props.sdkConfig,
136353
+ customBlocks: input.props.customBlocks,
136354
+ imageResolveContext: input.imageResolveContext,
136355
+ previewAuthoring: input.props.previewAuthoring
136356
+ };
136357
+ }
136266
136358
  /**
136267
136359
  * Look up a block override component by block kind.
136268
136360
  * Supports both full ("block.hero") and short ("hero") keys.
@@ -136329,7 +136421,7 @@ function getCachedValidator(manifest, flavour) {
136329
136421
  * referential equality of all props that affect rendering. Standard React.memo
136330
136422
  * wouldn't catch all the render triggers from the editor store.
136331
136423
  */
136332
- const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, themeConfig, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
136424
+ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources, block, usePlaceholders, dataContext, registry, routeMap, wrapBlock, blockOverrides, sdkConfig, customBlocks, imageResolveContext, previewAuthoring }) {
136333
136425
  const perfStart = globalThis.process?.env?.DEBUG_PERF === "1" && typeof window === "undefined" ? Date.now() : 0;
136334
136426
  const fallbackImageResolveContext = getCurrentResolveImageUrlContext();
136335
136427
  const resolvedImageResolveContext = imageResolveContext ?? fallbackImageResolveContext;
@@ -136350,6 +136442,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
136350
136442
  return node;
136351
136443
  }
136352
136444
  const OverrideComponent = getBlockOverride(block.kind, blockOverrides);
136445
+ requireBlockOverride(themeResources, OverrideComponent, block.kind);
136353
136446
  let definition = getBlockDefinition(block.kind);
136354
136447
  if (!definition && block.kind.startsWith("custom.")) definition = createCustomBlockRegistry({
136355
136448
  sdkConfig,
@@ -136362,8 +136455,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
136362
136455
  if (OverrideComponent) {
136363
136456
  const rendered = /* @__PURE__ */ jsx(OverrideComponent, {
136364
136457
  content: getRenderableContent(block, dataContext?.previewStage),
136365
- theme: themeTokens,
136366
- themeConfig,
136458
+ ...overrideThemeProps(themeResources),
136367
136459
  data: void 0,
136368
136460
  siteId: dataContext?.siteId,
136369
136461
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -136462,8 +136554,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
136462
136554
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
136463
136555
  const baseProps = {
136464
136556
  content: hydratedContent,
136465
- theme: themeTokens,
136466
- themeConfig,
136557
+ ...overrideThemeProps(themeResources),
136467
136558
  data: resolved,
136468
136559
  siteId: dataContext?.siteId,
136469
136560
  apiBaseUrl: dataContext?.apiBaseUrl,
@@ -136483,6 +136574,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
136483
136574
  let rendered;
136484
136575
  if (OverrideComponent) rendered = /* @__PURE__ */ jsx(OverrideComponent, { ...baseProps });
136485
136576
  else {
136577
+ requireThemeResources(themeResources, block.kind);
136486
136578
  const BlockComponent = getCachedBlockComponent(definition.manifest);
136487
136579
  const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
136488
136580
  const rootContext = { $root: {
@@ -136532,7 +136624,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeTokens, t
136532
136624
  });
136533
136625
  }
136534
136626
  }, (prev, next) => {
136535
- 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;
136627
+ 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;
136536
136628
  });
136537
136629
  function fallback(message) {
136538
136630
  return /* @__PURE__ */ jsx("div", {
@@ -149769,6 +149861,10 @@ function buildThemeRuntime(theme) {
149769
149861
  }
149770
149862
  //#endregion
149771
149863
  //#region src/rendering/blocks-page-renderer.ts
149864
+ const MissingBlockOverrideError = MissingBlockOverrideError$1;
149865
+ function isOverrideOnlyPageRenderer(props) {
149866
+ return props.rendering?.kind === "overrides-only";
149867
+ }
149772
149868
  function normalizeSdkCustomBlocks(customBlocks) {
149773
149869
  if (!customBlocks) return void 0;
149774
149870
  return customBlocks.map((block) => {
@@ -149799,15 +149895,23 @@ function toBlocksPageRendererDataContext(dataContext) {
149799
149895
  }
149800
149896
  function PageRenderer(props) {
149801
149897
  const blocksSdkConfig = props.sdkConfig ? { customBlocks: normalizeSdkCustomBlocks(props.sdkConfig.customBlocks) } : props.sdkConfig;
149802
- const blocksTheme = parseBlocksTheme(props.theme);
149803
- const blocksProps = {
149804
- ...props,
149805
- theme: blocksTheme,
149898
+ const { rendering: _rendering, theme: _theme, themeTokens: _themeTokens, ...commonProps } = props;
149899
+ const commonBlocksProps = {
149900
+ ...commonProps,
149806
149901
  dataContext: props.dataContext ? toBlocksPageRendererDataContext(props.dataContext) : void 0,
149807
149902
  blockOverrides: toBlocksBlockOverrides(props.blockOverrides),
149808
149903
  sdkConfig: blocksSdkConfig,
149809
149904
  customBlocks: normalizeSdkCustomBlocks(props.customBlocks)
149810
149905
  };
149906
+ const blocksProps = isOverrideOnlyPageRenderer(props) ? {
149907
+ ...commonBlocksProps,
149908
+ rendering: { kind: "overrides-only" },
149909
+ blockOverrides: toBlocksBlockOverrides(props.blockOverrides) ?? {}
149910
+ } : {
149911
+ ...commonBlocksProps,
149912
+ theme: parseBlocksTheme(props.theme),
149913
+ themeTokens: props.themeTokens
149914
+ };
149811
149915
  return React$1.createElement(PageRenderer$1, blocksProps);
149812
149916
  }
149813
149917
  //#endregion
@@ -149850,8 +149954,31 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
149850
149954
  default: return assertNever$20(themeRuntime);
149851
149955
  }
149852
149956
  }
149957
+ function renderWithOverrideOnlyRuntime({ runtime, children }) {
149958
+ switch (runtime.kind) {
149959
+ case "responsive-only": return /* @__PURE__ */ jsx(ResponsiveScope, {
149960
+ responsiveMode: runtime.responsiveMode,
149961
+ children
149962
+ });
149963
+ case "none": return /* @__PURE__ */ jsx(Fragment, { children });
149964
+ default: return assertNever$20(runtime);
149965
+ }
149966
+ }
149853
149967
  //#endregion
149854
149968
  //#region src/rendering/components/pageShared.tsx
149969
+ function isOverrideOnlyPage(props) {
149970
+ return props.rendering?.kind === "overrides-only";
149971
+ }
149972
+ function resolvePageThemeTokens(props) {
149973
+ const baseTokens = props.themeTokens ?? buildThemeRuntime(props.theme).tokens;
149974
+ return props.sdkConfig?.theme?.palette ? {
149975
+ ...baseTokens,
149976
+ palette: {
149977
+ ...baseTokens.palette,
149978
+ ...props.sdkConfig.theme.palette
149979
+ }
149980
+ } : baseTokens;
149981
+ }
149855
149982
  function toPageHydrationBootstrapConfig(props) {
149856
149983
  return {
149857
149984
  siteId: props.siteId,
@@ -149859,55 +149986,60 @@ function toPageHydrationBootstrapConfig(props) {
149859
149986
  mediaAssets: props.mediaAssets
149860
149987
  };
149861
149988
  }
149862
- 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 }) {
149863
- const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
149864
- return renderWithSdkThemeRuntime({
149865
- themeRuntime,
149866
- theme,
149867
- children: /* @__PURE__ */ jsx(PageRenderer, {
149868
- theme,
149869
- page,
149870
- runtimeBoundaries,
149871
- themeTokens: sdkConfig?.theme?.palette ? {
149872
- ...baseTokens,
149873
- palette: {
149874
- ...baseTokens.palette,
149875
- ...sdkConfig.theme.palette
149876
- }
149877
- } : baseTokens,
149878
- usePlaceholders,
149879
- dataContext: {
149989
+ function PageContent(props) {
149990
+ const { page, runtimeBoundaries, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext } = props;
149991
+ const rendererCommonProps = {
149992
+ page,
149993
+ runtimeBoundaries,
149994
+ usePlaceholders,
149995
+ dataContext: {
149996
+ siteId,
149997
+ apiBaseUrl,
149998
+ portalToken,
149999
+ previewToken,
150000
+ resolvedData,
150001
+ bookingOfferingPresets: bookingOfferingPresets ?? [],
150002
+ routes: routeMap,
150003
+ pagesByIdentifier,
150004
+ entriesByIdentifier,
150005
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
150006
+ entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
150007
+ contentEntry: dataContext?.contentEntry ?? null,
150008
+ pageSurface: dataContext?.pageSurface ?? null,
150009
+ subject: dataContext?.subject ?? null,
150010
+ editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
150011
+ previewStage: dataContext?.previewStage,
150012
+ supabaseUrl,
150013
+ mediaAssets,
150014
+ imageResolveContext: {
149880
150015
  siteId,
149881
- apiBaseUrl,
149882
- portalToken,
149883
- previewToken,
149884
- resolvedData,
149885
- bookingOfferingPresets: bookingOfferingPresets ?? [],
149886
- routes: routeMap,
149887
- pagesByIdentifier,
149888
- entriesByIdentifier,
149889
- occurrenceContext: dataContext?.occurrenceContext ?? null,
149890
- entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
149891
- contentEntry: dataContext?.contentEntry ?? null,
149892
- pageSurface: dataContext?.pageSurface ?? null,
149893
- subject: dataContext?.subject ?? null,
149894
- editableRouteMetadataFieldIds: dataContext?.editableRouteMetadataFieldIds ?? null,
149895
- previewStage: dataContext?.previewStage,
149896
150016
  supabaseUrl,
149897
- mediaAssets,
149898
- imageResolveContext: {
149899
- siteId,
149900
- supabaseUrl,
149901
- mediaAssets
149902
- }
149903
- },
149904
- routeMap,
149905
- wrapBlock,
149906
- registry,
149907
- blockOverrides,
149908
- sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
149909
- customBlocks
149910
- })
150017
+ mediaAssets
150018
+ }
150019
+ },
150020
+ routeMap,
150021
+ wrapBlock,
150022
+ registry,
150023
+ sdkConfig: sdkConfig ? { customBlocks: sdkConfig.customBlocks } : null,
150024
+ customBlocks
150025
+ };
150026
+ const content = isOverrideOnlyPage(props) ? /* @__PURE__ */ jsx(PageRenderer, {
150027
+ ...rendererCommonProps,
150028
+ rendering: { kind: "overrides-only" },
150029
+ blockOverrides: props.blockOverrides
150030
+ }) : /* @__PURE__ */ jsx(PageRenderer, {
150031
+ ...rendererCommonProps,
150032
+ theme: props.theme,
150033
+ themeTokens: resolvePageThemeTokens(props),
150034
+ blockOverrides
150035
+ });
150036
+ return isOverrideOnlyPage(props) ? renderWithOverrideOnlyRuntime({
150037
+ runtime: props.rendering.runtime,
150038
+ children: content
150039
+ }) : renderWithSdkThemeRuntime({
150040
+ themeRuntime: props.themeRuntime ?? defaultPageThemeRuntime,
150041
+ theme: props.theme,
150042
+ children: content
149911
150043
  });
149912
150044
  }
149913
150045
  //#endregion
@@ -150430,12 +150562,48 @@ function buildLogo(logo, fallbackAlt) {
150430
150562
  return result;
150431
150563
  }
150432
150564
  //#endregion
150565
+ //#region src/rendering/renderingMode.ts
150566
+ const defaultOverrideOnlyRuntime = { kind: "responsive-only" };
150567
+ //#endregion
150433
150568
  //#region src/rendering/components/Layout.tsx
150434
150569
  /**
150435
150570
  * Layout component with header and footer
150436
150571
  *
150437
150572
  * Renders site header and footer around content. Fetches site data if not provided.
150438
150573
  */
150574
+ function isOverrideOnlyLayout(props) {
150575
+ return props.rendering?.kind === "overrides-only";
150576
+ }
150577
+ var UnsupportedOverrideOnlyLayoutChromeError = class extends Error {
150578
+ constructor(surface) {
150579
+ super(`Override-only Layout requires a custom or disabled ${surface}; SDK default chrome is unavailable.`);
150580
+ this.surface = surface;
150581
+ this.code = "unsupported_override_only_layout_chrome";
150582
+ this.name = "UnsupportedOverrideOnlyLayoutChromeError";
150583
+ }
150584
+ };
150585
+ async function resolveLayoutSiteData(props) {
150586
+ if (props.siteData) return props.siteData;
150587
+ if (!props.client) throw new Error("Layout: must provide either siteData or client");
150588
+ if (!props.siteId && !props.slug && !props.domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
150589
+ return props.client.getSite({
150590
+ id: props.siteId,
150591
+ slug: props.slug,
150592
+ domain: props.domain
150593
+ });
150594
+ }
150595
+ function renderOverrideOnlyLayout(props, data) {
150596
+ if (data.header === true) throw new UnsupportedOverrideOnlyLayoutChromeError("header");
150597
+ if (data.footer === true) throw new UnsupportedOverrideOnlyLayoutChromeError("footer");
150598
+ return renderWithOverrideOnlyRuntime({
150599
+ runtime: props.rendering.runtime ?? defaultOverrideOnlyRuntime,
150600
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
150601
+ typeof props.header === "function" ? props.header(data.headerData) : null,
150602
+ props.children,
150603
+ typeof props.footer === "function" ? props.footer(data.footerData) : null
150604
+ ] })
150605
+ });
150606
+ }
150439
150607
  /**
150440
150608
  * Layout component that wraps content with site header and footer.
150441
150609
  *
@@ -150471,20 +150639,13 @@ function buildLogo(logo, fallbackAlt) {
150471
150639
  * </Layout>
150472
150640
  * ```
150473
150641
  */
150474
- async function Layout({ siteData: providedSiteData, client, siteId, slug, domain, children, header = true, footer = true, headerVariant, hasPortalSession = false, previewStage = "published", themeRuntime }) {
150475
- let siteData = providedSiteData;
150476
- if (!siteData) {
150477
- if (!client) throw new Error("Layout: must provide either siteData or client");
150478
- if (!siteId && !slug && !domain) throw new Error("Layout: must provide siteId, slug, or domain when using client");
150479
- siteData = await client.getSite({
150480
- id: siteId,
150481
- slug,
150482
- domain
150483
- });
150484
- }
150485
- const { site, theme, navigation, layout, routes } = siteData;
150642
+ async function Layout(props) {
150643
+ const { children, hasPortalSession = false, previewStage = "published" } = props;
150644
+ const header = props.header ?? true;
150645
+ const footer = props.footer ?? true;
150646
+ const siteData = await resolveLayoutSiteData(props);
150647
+ const { site, navigation, layout, routes } = siteData;
150486
150648
  const footerBlocks = siteData.footerBlocks ?? [];
150487
- const builtThemeRuntime = buildThemeRuntime(theme);
150488
150649
  const navigationOptions = {
150489
150650
  hasPortalSession,
150490
150651
  previewStage,
@@ -150498,22 +150659,38 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
150498
150659
  const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
150499
150660
  const legalFooterMenuViewModel = buildFooterMenuForRole(navigation, routes, "legal-policy", navigationOptions);
150500
150661
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
150501
- const headerData = {
150662
+ const customHeaderData = {
150502
150663
  menu: menuViewModel,
150503
150664
  logo: logoViewModel,
150504
150665
  site,
150505
- theme,
150506
150666
  routes
150507
150667
  };
150508
- const footerData = {
150668
+ const customFooterData = {
150509
150669
  menu: menuViewModel,
150510
150670
  footerMenu: footerMenuViewModel,
150511
150671
  legalFooterMenu: legalFooterMenuViewModel,
150512
150672
  logo: logoViewModel,
150513
150673
  site,
150514
- theme,
150515
150674
  routes
150516
150675
  };
150676
+ if (isOverrideOnlyLayout(props)) return renderOverrideOnlyLayout(props, {
150677
+ header: props.header ?? true,
150678
+ footer: props.footer ?? true,
150679
+ headerData: customHeaderData,
150680
+ footerData: customFooterData
150681
+ });
150682
+ const { theme } = siteData;
150683
+ const builtThemeRuntime = buildThemeRuntime(theme);
150684
+ const headerVariant = props.headerVariant;
150685
+ const themeRuntime = props.themeRuntime;
150686
+ const headerData = {
150687
+ ...customHeaderData,
150688
+ theme
150689
+ };
150690
+ const footerData = {
150691
+ ...customFooterData,
150692
+ theme
150693
+ };
150517
150694
  const headerContent = headerVariant ? {
150518
150695
  ...layout.header,
150519
150696
  variant: headerVariant
@@ -152884,6 +153061,26 @@ z$1.object({
152884
153061
  mode: z$1.enum(["apply", "preview"]).optional()
152885
153062
  }).strict();
152886
153063
  //#endregion
153064
+ //#region ../api/src/sdkThemeWire.ts
153065
+ init_schema$1();
153066
+ /**
153067
+ * Validate a wire value without replacing it with the schema's parsed output.
153068
+ * The returned type is deliberately the schema input, not its canonical output.
153069
+ */
153070
+ function losslessValidatedSchema(schema) {
153071
+ return z$1.unknown().superRefine((value, ctx) => {
153072
+ const parsed = schema.safeParse(value);
153073
+ if (parsed.success) return;
153074
+ for (const issue of parsed.error.issues) ctx.addIssue({
153075
+ code: "custom",
153076
+ path: issue.path,
153077
+ message: issue.message,
153078
+ params: { validationCode: issue.code }
153079
+ });
153080
+ }).transform((value) => value);
153081
+ }
153082
+ losslessValidatedSchema(themeSchema);
153083
+ //#endregion
152887
153084
  //#region ../api/src/siteOnboarding.ts
152888
153085
  const LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = { configure_appointments: {
152889
153086
  requirementId: "configure_appointments",
@@ -153991,6 +154188,17 @@ async function prefetchBlockDataWithDeps(deps, page, context, client, options) {
153991
154188
  * hydration; the strict `@riverbankcms/sdk/rendering/server` surface exports it
153992
154189
  * directly.
153993
154190
  */
154191
+ function isOverrideOnlyBlock(props) {
154192
+ return props.rendering?.kind === "overrides-only";
154193
+ }
154194
+ var MissingStandaloneBlockOverrideError = class extends Error {
154195
+ constructor(blockKind) {
154196
+ super(`Override-only standalone rendering requires an override for block kind "${blockKind}".`);
154197
+ this.blockKind = blockKind;
154198
+ this.code = "missing_standalone_block_override";
154199
+ this.name = "MissingStandaloneBlockOverrideError";
154200
+ }
154201
+ };
153994
154202
  function toBlockHydrationBootstrapConfig(props) {
153995
154203
  return {
153996
154204
  siteId: props.siteId,
@@ -154060,14 +154268,16 @@ function buildStandaloneBlockViewModel({ siteId, pageId, previewStage, apiBaseUr
154060
154268
  function renderBlockOverride({ OverrideComponent, props, runtime, resolvedData }) {
154061
154269
  return /* @__PURE__ */ jsx(OverrideComponent, {
154062
154270
  content: props.content,
154063
- theme: runtime.themeRuntime.tokens,
154064
- themeConfig: props.theme,
154271
+ ...runtime && "theme" in props ? {
154272
+ theme: runtime.themeRuntime.tokens,
154273
+ themeConfig: props.theme
154274
+ } : {},
154065
154275
  data: resolvedData,
154066
154276
  siteId: props.siteId,
154067
154277
  apiBaseUrl: props.apiBaseUrl,
154068
154278
  portalToken: props.portalToken ?? null,
154069
154279
  supabaseUrl: props.supabaseUrl,
154070
- imageResolveContext: runtime.imageResolveContext,
154280
+ imageResolveContext: runtime?.imageResolveContext,
154071
154281
  blockId: props.blockId ?? null,
154072
154282
  blockKind: props.blockKind
154073
154283
  });
@@ -154096,8 +154306,8 @@ function renderManifestBlock({ definition, props, runtime, resolvedData }) {
154096
154306
  async function BlockContent(props) {
154097
154307
  const definition = getBlockDefinition(props.blockKind);
154098
154308
  const OverrideComponent = props.override;
154309
+ if (isOverrideOnlyBlock(props) && !OverrideComponent) throw new MissingStandaloneBlockOverrideError(props.blockKind);
154099
154310
  if (!definition && !OverrideComponent) return renderUnknownBlock(props.blockKind);
154100
- const runtime = buildBlockContentRuntime(props);
154101
154311
  const resolvedData = await loadStandaloneBlockData({
154102
154312
  ...props,
154103
154313
  hasDefinition: Boolean(definition)
@@ -154105,13 +154315,14 @@ async function BlockContent(props) {
154105
154315
  if (OverrideComponent) return renderBlockOverride({
154106
154316
  OverrideComponent,
154107
154317
  props,
154108
- runtime,
154318
+ runtime: isOverrideOnlyBlock(props) ? void 0 : buildBlockContentRuntime(props),
154109
154319
  resolvedData
154110
154320
  });
154321
+ if (isOverrideOnlyBlock(props)) throw new MissingStandaloneBlockOverrideError(props.blockKind);
154111
154322
  return renderManifestBlock({
154112
154323
  definition,
154113
154324
  props,
154114
- runtime,
154325
+ runtime: buildBlockContentRuntime(props),
154115
154326
  resolvedData
154116
154327
  });
154117
154328
  }
@@ -157923,4 +158134,4 @@ function defineBlockOverrideRegistrations(registrations) {
157923
158134
  * ```
157924
158135
  */
157925
158136
  //#endregion
157926
- export { Block, ImagePresets, Layout, Page, PageRenderer, RichText, ThemeScope, buildThemeRuntime, defineBlockOverrideRegistrations, defineBlockOverrides, defineLazyBlockOverride, isEntryContent, isPageContent, isPageSurfaceContent, loadContent, loadPage, resolveImageSourceSetWithContext, resolveImageUrl, resolveImageUrlWithContext, toBlocksImageResolveContextInput, toBlocksMediaAssets, toBlocksPageRendererDataContext };
158137
+ 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 };