@phis/ui 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1762) hide show
  1. package/README.md +5 -5
  2. package/cms/plugins.d.ts +1 -1
  3. package/cms.d.ts +1 -1
  4. package/components/calendar/gregory-calendar-adapter-client.js +1 -0
  5. package/components/cms/clients/phi-background-motion-layer-client.js +5 -2
  6. package/components/cms/phi-cms-area-render-scope.d.ts +1 -3
  7. package/components/cms/phi-cms-deferred-error-page.d.ts +19 -0
  8. package/components/cms/phi-cms-deferred-error-page.js +31 -0
  9. package/components/cms/phi-cms-error-fallback.d.ts +11 -0
  10. package/components/cms/phi-cms-error-fallback.js +35 -0
  11. package/components/cms/phi-cms-error-page.js +13 -32
  12. package/components/cms/phi-cms-layout-renderer.d.ts +12 -2
  13. package/components/cms/phi-cms-layout-renderer.js +140 -58
  14. package/components/cms/phi-cms-page-redirect.js +3 -5
  15. package/components/cms/phi-cms-page-render-scope.d.ts +52 -0
  16. package/components/cms/phi-cms-page-render-scope.js +94 -0
  17. package/components/cms/phi-cms-render-diagnostic-client.js +11 -3
  18. package/components/cms/phi-cms-root-layout.d.ts +2 -1
  19. package/components/cms/phi-cms-root-layout.js +67 -19
  20. package/components/cms/phi-cms-root-page.js +4 -32
  21. package/components/cms/phi-cms-root-slot-page.js +6 -38
  22. package/components/controls/phi-anchor-nav-control.d.ts +20 -0
  23. package/components/controls/phi-anchor-nav-control.js +12 -0
  24. package/components/controls/phi-avatar-control.js +2 -2
  25. package/components/controls/phi-background-control.d.ts +8 -8
  26. package/components/controls/phi-background-control.js +28 -51
  27. package/components/controls/phi-breadcrumb-control.d.ts +12 -0
  28. package/components/controls/phi-breadcrumb-control.js +7 -0
  29. package/components/controls/phi-bullet-list-control.d.ts +32 -0
  30. package/components/controls/phi-bullet-list-control.js +73 -0
  31. package/components/controls/phi-button-control.d.ts +8 -1
  32. package/components/controls/phi-button-control.js +9 -5
  33. package/components/controls/phi-button-types.d.ts +0 -1
  34. package/components/controls/phi-button-types.js +1 -9
  35. package/components/controls/phi-cascader-control.d.ts +22 -0
  36. package/components/controls/phi-cascader-control.js +62 -5
  37. package/components/controls/phi-collapse-control.d.ts +43 -0
  38. package/components/controls/phi-collapse-control.js +35 -0
  39. package/components/controls/phi-collection-header-control.js +3 -2
  40. package/components/controls/phi-color-control.js +9 -67
  41. package/components/controls/phi-color-field-control.d.ts +6 -1
  42. package/components/controls/phi-color-field-control.js +4 -2
  43. package/components/controls/phi-confirm-dialog.d.ts +2 -1
  44. package/components/controls/phi-control-option-content.d.ts +7 -3
  45. package/components/controls/phi-control-option-content.js +9 -4
  46. package/components/controls/phi-date-picker-control.js +3 -2
  47. package/components/controls/phi-description-tooltip-icon.js +2 -2
  48. package/components/controls/phi-dialog-control.d.ts +3 -3
  49. package/components/controls/phi-dialog-control.js +9 -2
  50. package/components/controls/phi-drag-handle-control.js +2 -2
  51. package/components/controls/phi-drawer-control-adapter.js +1 -1
  52. package/components/controls/phi-drawer-control.d.ts +3 -3
  53. package/components/controls/phi-expand-indicator.js +4 -3
  54. package/components/controls/phi-float-button-control.d.ts +39 -0
  55. package/components/controls/phi-float-button-control.js +73 -0
  56. package/components/controls/phi-form-control-contract.d.ts +9 -0
  57. package/components/controls/phi-form-control.js +68 -3
  58. package/components/controls/phi-icon-picker-control.js +17 -12
  59. package/components/controls/phi-image-control.d.ts +52 -0
  60. package/components/controls/phi-image-control.js +69 -0
  61. package/components/controls/phi-inline-text-editor.d.ts +6 -1
  62. package/components/controls/phi-inline-text-editor.js +15 -3
  63. package/components/controls/phi-labeled-control.d.ts +17 -2
  64. package/components/controls/phi-labeled-control.js +20 -2
  65. package/components/controls/phi-lightbox-image-control.d.ts +16 -0
  66. package/components/controls/phi-lightbox-image-control.js +12 -0
  67. package/components/controls/phi-mask-picker-control.js +5 -13
  68. package/components/controls/phi-media-asset-tile-control.js +3 -23
  69. package/components/controls/phi-media-picker-control.js +3 -3
  70. package/components/controls/phi-menu-control.d.ts +4 -9
  71. package/components/controls/phi-menu-control.js +45 -46
  72. package/components/controls/phi-modal-control-adapter.js +63 -1
  73. package/components/controls/phi-multi-select-control.js +11 -4
  74. package/components/controls/phi-number-control.js +4 -3
  75. package/components/controls/phi-options-provider.js +3 -6
  76. package/components/controls/phi-otp-control.js +4 -3
  77. package/components/controls/phi-overlay-control-contract.d.ts +3 -3
  78. package/components/controls/phi-padding-control.d.ts +0 -2
  79. package/components/controls/phi-padding-control.js +11 -13
  80. package/components/controls/phi-rate-control.js +3 -2
  81. package/components/controls/phi-result-control.d.ts +15 -0
  82. package/components/controls/phi-result-control.js +11 -0
  83. package/components/controls/phi-segmented-control.js +11 -4
  84. package/components/controls/phi-select-control.js +41 -9
  85. package/components/controls/phi-shadow-control.js +5 -1
  86. package/components/controls/phi-slider-control.d.ts +17 -4
  87. package/components/controls/phi-slider-control.js +33 -8
  88. package/components/controls/phi-steps-control.d.ts +40 -0
  89. package/components/controls/phi-steps-control.js +24 -0
  90. package/components/controls/phi-surface-control.d.ts +56 -0
  91. package/components/controls/phi-surface-control.js +109 -0
  92. package/components/controls/phi-switch-control.js +3 -2
  93. package/components/controls/phi-table-control.d.ts +2 -0
  94. package/components/controls/phi-table-control.js +69 -19
  95. package/components/controls/phi-text-control.d.ts +3 -5
  96. package/components/controls/phi-text-control.js +7 -5
  97. package/components/controls/phi-text-types.d.ts +8 -0
  98. package/components/controls/phi-theme-scope-control.d.ts +23 -0
  99. package/components/controls/phi-theme-scope-control.js +29 -0
  100. package/components/controls/phi-timeline-control.d.ts +32 -0
  101. package/components/controls/phi-timeline-control.js +33 -0
  102. package/components/controls/phi-toolbar-control.d.ts +1 -0
  103. package/components/controls/phi-toolbar-control.js +9 -1
  104. package/components/controls/phi-tour-control.d.ts +41 -0
  105. package/components/controls/phi-tour-control.js +29 -0
  106. package/components/controls/phi-tree-control.js +4 -3
  107. package/components/controls/phi-tree-select-control.js +11 -4
  108. package/components/controls/phi-video-embed-control.js +2 -2
  109. package/components/forms/auth-admin-settings-labels.d.ts +2 -0
  110. package/components/forms/auth-admin-settings-labels.js +4 -0
  111. package/components/forms/choice-form-field-controls.js +2 -2
  112. package/components/forms/compound-form-controls.js +29 -28
  113. package/components/forms/content-entry-curation-config.d.ts +12 -0
  114. package/components/forms/content-entry-curation-config.js +12 -0
  115. package/components/forms/content-entry-forms.d.ts +52 -0
  116. package/components/forms/content-entry-forms.js +328 -0
  117. package/components/forms/extended-form-field-controls.js +18 -1
  118. package/components/forms/form-descriptor-contract.d.ts +0 -9
  119. package/components/forms/form-descriptor-contract.js +1 -1
  120. package/components/forms/form-descriptor-runtime-client.js +86 -10
  121. package/components/forms/form-guard-client.d.ts +14 -1
  122. package/components/forms/form-guard-client.js +13 -2
  123. package/components/forms/form-labels.js +2 -1
  124. package/components/forms/form-provider-contract.d.ts +38 -0
  125. package/components/forms/form-provider-contract.js +41 -0
  126. package/components/forms/form-provider-registry.d.ts +9 -2
  127. package/components/forms/form-resolution.js +3 -5
  128. package/components/forms/form-widget-config.d.ts +5 -4
  129. package/components/forms/form-widget-config.js +3 -2
  130. package/components/forms/link-target-form-control.d.ts +10 -0
  131. package/components/forms/link-target-form-control.js +82 -0
  132. package/components/forms/phi-form-widget.js +2 -4
  133. package/components/forms/runtime-form-client.d.ts +0 -22
  134. package/components/forms/runtime-form-client.js +1 -1
  135. package/components/forms/runtime-form-controller-mount.js +6 -4
  136. package/components/forms/runtime-form-controller-requirement.d.ts +1 -11
  137. package/components/forms/runtime-form-controller-requirement.js +3 -3
  138. package/components/forms/shared-form-ids.d.ts +5 -0
  139. package/components/forms/shared-form-ids.js +5 -0
  140. package/components/forms/shared-form-loaders.d.ts +11 -2
  141. package/components/forms/shared-form-loaders.js +13 -3
  142. package/components/forms/shared-form-provider-registry.js +4 -0
  143. package/components/forms/storage-size.d.ts +0 -9
  144. package/components/forms/storage-size.js +1 -1
  145. package/components/forms/upload-form-control.d.ts +5 -0
  146. package/components/forms/upload-form-control.js +27 -7
  147. package/components/layouts/clients/phi-carousel-layout-client.d.ts +5 -17
  148. package/components/layouts/clients/phi-carousel-layout-client.js +36 -61
  149. package/components/layouts/clients/phi-collapsible-layout-client.d.ts +3 -1
  150. package/components/layouts/clients/phi-collapsible-layout-client.js +84 -81
  151. package/components/layouts/clients/phi-content-layout-client.d.ts +4 -33
  152. package/components/layouts/clients/phi-content-layout-client.js +7 -11
  153. package/components/layouts/clients/phi-flex-layout-client.d.ts +7 -0
  154. package/components/layouts/clients/phi-flex-layout-client.js +77 -51
  155. package/components/layouts/clients/phi-grid-layout-client.js +37 -38
  156. package/components/layouts/clients/phi-layout-anchored-overlay.d.ts +0 -1
  157. package/components/layouts/clients/phi-layout-anchored-overlay.js +3 -3
  158. package/components/layouts/clients/phi-sequence-slot-editor.d.ts +2 -3
  159. package/components/layouts/clients/phi-sequence-slot-editor.js +41 -38
  160. package/components/layouts/clients/phi-split-card-half.d.ts +28 -0
  161. package/components/layouts/clients/phi-split-card-half.js +33 -0
  162. package/components/layouts/clients/phi-split-card-layout-client.d.ts +12 -21
  163. package/components/layouts/clients/phi-split-card-layout-client.js +29 -51
  164. package/components/layouts/clients/phi-stack-layout-client.d.ts +2 -17
  165. package/components/layouts/clients/phi-stack-layout-client.js +67 -90
  166. package/components/layouts/clients/phi-three-column-layout-client.d.ts +3 -30
  167. package/components/layouts/clients/phi-three-column-layout-client.js +6 -10
  168. package/components/layouts/clients/use-phi-sequence-layout.d.ts +44 -0
  169. package/components/layouts/clients/use-phi-sequence-layout.js +69 -0
  170. package/components/layouts/layout-definitions.d.ts +64 -68
  171. package/components/layouts/layout-definitions.js +20 -34
  172. package/components/layouts/layout-slot-meta.d.ts +19 -0
  173. package/components/layouts/layout-slot-meta.js +34 -0
  174. package/components/layouts/phi-base-layout.d.ts +1 -1
  175. package/components/layouts/phi-base-layout.js +5 -8
  176. package/components/layouts/phi-flex-vertical-layout.d.ts +3 -2
  177. package/components/layouts/phi-flex-vertical-layout.js +2 -2
  178. package/components/layouts/phi-grid-contract.d.ts +30 -22
  179. package/components/layouts/phi-grid-contract.js +39 -38
  180. package/components/layouts/phi-layout-contract.d.ts +9 -14
  181. package/components/layouts/phi-layout-contract.js +5 -57
  182. package/components/layouts/phi-layout-signal-surface.d.ts +26 -0
  183. package/components/layouts/phi-layout-signal-surface.js +15 -0
  184. package/components/layouts/phi-layout-surface-box.d.ts +32 -0
  185. package/components/layouts/phi-layout-surface-box.js +41 -0
  186. package/components/layouts/phi-layout-view-model.d.ts +6 -2
  187. package/components/layouts/phi-layout-view-model.js +16 -26
  188. package/components/layouts/phi-masonry-columns.d.ts +18 -0
  189. package/components/layouts/phi-masonry-columns.js +77 -0
  190. package/components/layouts/phi-masonry-contract.d.ts +45 -0
  191. package/components/layouts/phi-masonry-contract.js +62 -0
  192. package/components/layouts/phi-masonry-layout.d.ts +9 -2
  193. package/components/layouts/phi-masonry-layout.js +27 -21
  194. package/components/layouts/phi-structure-region-layout.js +2 -2
  195. package/components/layouts/plugins/carousel-layout-plugin.js +2 -31
  196. package/components/layouts/plugins/collapsible-layout-plugin.js +16 -3
  197. package/components/layouts/plugins/content-layout-plugin.js +1 -1
  198. package/components/layouts/plugins/flex-layout-plugin.js +1 -1
  199. package/components/layouts/plugins/flex-vertical-layout-plugin.js +1 -1
  200. package/components/layouts/plugins/grid-layout-plugin.js +1 -1
  201. package/components/layouts/plugins/masonry-layout-plugin.js +1 -1
  202. package/components/layouts/plugins/split-card-layout-plugin.js +1 -1
  203. package/components/layouts/plugins/stack-layout-plugin.js +2 -25
  204. package/components/layouts/plugins/three-column-layout-plugin.js +1 -1
  205. package/components/layouts/split-card-geometry.d.ts +14 -0
  206. package/components/layouts/split-card-geometry.js +32 -0
  207. package/components/layouts/stack-signals.d.ts +5 -0
  208. package/components/layouts/stack-signals.js +12 -4
  209. package/components/layouts/use-phi-slot-sequence.d.ts +0 -9
  210. package/components/layouts/use-phi-slot-sequence.js +2 -2
  211. package/components/media/asset-type-label.d.ts +6 -0
  212. package/components/media/asset-type-label.js +27 -0
  213. package/components/media/background-asset-projection.d.ts +3 -17
  214. package/components/media/background-asset-projection.js +15 -6
  215. package/components/media/focal-rect.d.ts +20 -1
  216. package/components/media/focal-rect.js +37 -2
  217. package/components/media/image-presentation.d.ts +12 -2
  218. package/components/media/image-presentation.js +33 -6
  219. package/components/media/media-folder-options.d.ts +2 -0
  220. package/components/media/media-folder-options.js +5 -0
  221. package/components/media/media-space-selection.d.ts +0 -27
  222. package/components/media/media-space-selection.js +2 -2
  223. package/components/media/media-upload-flow.d.ts +17 -14
  224. package/components/media/media-upload-flow.js +135 -26
  225. package/components/media/phi-area-upload-widget.js +30 -27
  226. package/components/media/phi-asset-focal-rect-widget.js +0 -1
  227. package/components/media/phi-asset-inspector-section.js +6 -9
  228. package/components/media/phi-image-preview-data.d.ts +0 -10
  229. package/components/media/phi-image-preview-data.js +1 -1
  230. package/components/media/phi-media-kind-icon.js +10 -10
  231. package/components/media/phi-media-picker-binding.js +2 -2
  232. package/components/media/phi-media-restricted-icon.js +2 -2
  233. package/components/media/phi-media-upload.d.ts +13 -1
  234. package/components/media/phi-media-upload.js +51 -7
  235. package/components/media/phi-site-font-assets.d.ts +8 -1
  236. package/components/media/phi-site-font-assets.js +20 -6
  237. package/components/motion/phi-sequence-viewport.js +17 -4
  238. package/components/motion/use-phi-sequence-autoplay.d.ts +26 -0
  239. package/components/motion/use-phi-sequence-autoplay.js +52 -0
  240. package/components/motion/use-phi-sequence-gestures.d.ts +24 -0
  241. package/components/motion/use-phi-sequence-gestures.js +59 -0
  242. package/components/overlays/phi-dialog-body-context.d.ts +5 -0
  243. package/components/overlays/phi-dialog-body-context.js +17 -0
  244. package/components/overlays/phi-overlay-container-client.js +37 -15
  245. package/components/regions/clients/cms-region-container-client.d.ts +6 -1
  246. package/components/regions/clients/cms-region-container-client.js +66 -28
  247. package/components/regions/clients/use-phi-region-reveal.d.ts +28 -0
  248. package/components/regions/clients/use-phi-region-reveal.js +104 -0
  249. package/components/regions/phi-cms-region-container.d.ts +4 -1
  250. package/components/regions/phi-cms-region-container.js +13 -3
  251. package/components/regions/phi-cms-region-shell.d.ts +13 -1
  252. package/components/regions/phi-cms-region-shell.js +98 -51
  253. package/components/regions/phi-cms-region-static.js +5 -2
  254. package/components/regions/presets/content-entry-editor-page-tree.d.ts +48 -0
  255. package/components/regions/presets/content-entry-editor-page-tree.js +749 -0
  256. package/components/regions/presets/content-entry-editor-tour.d.ts +19 -0
  257. package/components/regions/presets/content-entry-editor-tour.js +71 -0
  258. package/components/regions/presets/content-entry-public-page-trees.d.ts +52 -0
  259. package/components/regions/presets/content-entry-public-page-trees.js +146 -0
  260. package/components/regions/presets/phi-area-root-redirect-tree.js +7 -1
  261. package/components/regions/presets/phi-area-shell-preset-nodes.d.ts +49 -0
  262. package/components/regions/presets/phi-area-shell-preset-nodes.js +160 -0
  263. package/components/regions/presets/phi-base-page-column.d.ts +26 -0
  264. package/components/regions/presets/phi-base-page-column.js +42 -0
  265. package/components/regions/presets/phi-base-page-layout.d.ts +3 -3
  266. package/components/regions/presets/phi-base-page-layout.js +4 -3
  267. package/components/regions/presets/phi-settings-page-shell-tree.d.ts +15 -5
  268. package/components/regions/presets/phi-settings-page-shell-tree.js +34 -28
  269. package/components/root/phi-config-provider.d.ts +20 -2
  270. package/components/root/phi-config-provider.js +26 -4
  271. package/components/root/phi-dayjs-locale.d.ts +0 -7
  272. package/components/root/phi-dayjs-locale.js +4 -6
  273. package/components/root/phi-root-background.d.ts +9 -0
  274. package/components/root/phi-root-background.js +14 -3
  275. package/components/root/phi-root-layout.d.ts +1 -0
  276. package/components/root/phi-root-layout.js +32 -27
  277. package/components/root/phi-root-live-theme-provider.d.ts +1 -2
  278. package/components/root/phi-root-live-theme-provider.js +9 -3
  279. package/components/root/phi-root-theme-resolver.d.ts +4 -0
  280. package/components/root/phi-root-theme-resolver.js +65 -3
  281. package/components/root/phi-shell-chrome-overlay.d.ts +47 -22
  282. package/components/root/phi-shell-chrome-overlay.js +61 -20
  283. package/components/root/phi-theme-tone-source.d.ts +19 -0
  284. package/components/root/phi-theme-tone-source.js +7 -0
  285. package/components/runtime/core-runtime-controller-address.d.ts +0 -1
  286. package/components/runtime/core-runtime-controller-address.js +1 -1
  287. package/components/runtime/mounted-runtime-controller.js +5 -2
  288. package/components/runtime/phi-restored-request-runtime.d.ts +12 -0
  289. package/components/runtime/phi-restored-request-runtime.js +12 -0
  290. package/components/runtime/renderable-block-runtime.d.ts +10 -4
  291. package/components/runtime/renderable-block-runtime.js +53 -121
  292. package/components/runtime/runtime-controller-config-overlays.d.ts +19 -0
  293. package/components/runtime/runtime-controller-config-overlays.js +76 -0
  294. package/components/runtime/runtime-controller-materialization.d.ts +37 -1
  295. package/components/runtime/runtime-controller-materialization.js +87 -13
  296. package/components/runtime/runtime-controller-server-host.d.ts +4 -2
  297. package/components/runtime/runtime-controller-server-host.js +4 -2
  298. package/components/runtime/runtime-module-authoring-host.js +2 -1
  299. package/components/runtime/runtime-module-context.d.ts +2 -1
  300. package/components/runtime/runtime-page-condition-state.js +3 -2
  301. package/components/runtime/runtime-signal-identity.d.ts +11 -1
  302. package/components/runtime/runtime-signal-identity.js +28 -1
  303. package/components/runtime/runtime-signal-partition.d.ts +9 -0
  304. package/components/runtime/runtime-signal-partition.js +4 -0
  305. package/components/runtime/runtime-signal-registry.d.ts +1 -1
  306. package/components/runtime/runtime-signal-registry.js +2 -5
  307. package/components/runtime/runtime-visual-anchors.d.ts +48 -0
  308. package/components/runtime/runtime-visual-anchors.js +128 -0
  309. package/components/runtime/use-phi-pathname.d.ts +6 -0
  310. package/components/runtime/use-phi-pathname.js +11 -0
  311. package/components/runtime/user-state-client.js +2 -1
  312. package/components/shell/phi-antd-icon.d.ts +117 -60
  313. package/components/shell/phi-antd-icon.js +234 -61
  314. package/components/shell/phi-cms-shell.d.ts +7 -1
  315. package/components/shell/phi-cms-shell.js +4 -3
  316. package/components/shell/phi-icon.d.ts +7 -2
  317. package/components/shell/phi-icon.js +5 -5
  318. package/components/shell/phi-locale-switch.js +3 -2
  319. package/components/shell/phi-widget-icon.js +28 -28
  320. package/components/state/history-store.d.ts +28 -16
  321. package/components/state/history-store.js +10 -4
  322. package/components/surface/phi-surface-ground.d.ts +16 -0
  323. package/components/surface/phi-surface-ground.js +54 -0
  324. package/components/surface/phi-surface-tone-scope.d.ts +14 -0
  325. package/components/surface/phi-surface-tone-scope.js +11 -0
  326. package/components/surface/phi-surface-tone.d.ts +18 -0
  327. package/components/surface/phi-surface-tone.js +36 -0
  328. package/components/tables/client/phi-table-binding.d.ts +4 -2
  329. package/components/tables/client/phi-table-binding.js +15 -11
  330. package/components/trees/client/phi-tree-binding.js +85 -7
  331. package/components/widgets/builder/phi-static-options-picker.d.ts +1 -0
  332. package/components/widgets/builder/phi-static-options-picker.js +63 -195
  333. package/components/widgets/builder/phi-static-rows-editor.d.ts +65 -0
  334. package/components/widgets/builder/phi-static-rows-editor.js +190 -0
  335. package/components/widgets/builder/phi-static-timeline-picker.d.ts +7 -0
  336. package/components/widgets/builder/phi-static-timeline-picker.js +91 -0
  337. package/components/widgets/client/description-editor-sections.d.ts +1 -1
  338. package/components/widgets/client/external-document-editor.js +24 -9
  339. package/components/widgets/client/html-editor-image-node.d.ts +0 -8
  340. package/components/widgets/client/html-editor-image-node.js +2 -2
  341. package/components/widgets/client/html-editor.js +13 -2
  342. package/components/widgets/client/shared/core-options-providers.js +4 -7
  343. package/components/widgets/client/shared/description-items.d.ts +5 -4
  344. package/components/widgets/client/shared/description-items.js +9 -4
  345. package/components/widgets/client/shared/phi-choice-controller.d.ts +1 -1
  346. package/components/widgets/client/shared/phi-choice-controller.js +11 -4
  347. package/components/widgets/client/shared/phi-command-buttons-authoring-tools.d.ts +11 -0
  348. package/components/widgets/client/shared/phi-command-buttons-authoring-tools.js +40 -0
  349. package/components/widgets/client/shared/phi-command-buttons.d.ts +20 -0
  350. package/components/widgets/client/shared/phi-command-buttons.js +286 -0
  351. package/components/widgets/client/shared/phi-link-target-control.d.ts +44 -0
  352. package/components/widgets/client/shared/phi-link-target-control.js +93 -0
  353. package/components/widgets/client/shared/phi-mask-picker.js +65 -34
  354. package/components/widgets/client/shared/phi-page-reference-picker.js +2 -2
  355. package/components/widgets/client/shared/phi-rendered-value.d.ts +0 -14
  356. package/components/widgets/client/shared/phi-rendered-value.js +1 -1
  357. package/components/widgets/client/shared/phi-static-table-provider.d.ts +1 -12
  358. package/components/widgets/client/shared/phi-static-table-provider.js +16 -17
  359. package/components/widgets/client/shared/phi-table-provider-request.d.ts +11 -0
  360. package/components/widgets/client/shared/phi-table-provider-request.js +43 -0
  361. package/components/widgets/client/shared/phi-timeline-provider.d.ts +36 -0
  362. package/components/widgets/client/shared/phi-timeline-provider.js +115 -0
  363. package/components/widgets/client/shared/phi-widget-image-tool-button.d.ts +0 -1
  364. package/components/widgets/client/shared/phi-widget-image-tool-button.js +2 -4
  365. package/components/widgets/client/shared/phi-widget-tool-buttons.d.ts +17 -2
  366. package/components/widgets/client/shared/phi-widget-tool-buttons.js +53 -45
  367. package/components/widgets/config/background-pattern-live.js +4 -14
  368. package/components/widgets/config/background.d.ts +33 -11
  369. package/components/widgets/config/background.js +86 -149
  370. package/components/widgets/config/choice-shared.d.ts +2 -3
  371. package/components/widgets/config/choice-shared.js +1 -1
  372. package/components/widgets/config/command-buttons.d.ts +48 -0
  373. package/components/widgets/config/command-buttons.js +207 -0
  374. package/components/widgets/config/common-action-field.d.ts +52 -0
  375. package/components/widgets/config/common-action-field.js +57 -0
  376. package/components/widgets/config/control-signal-config.d.ts +26 -0
  377. package/components/widgets/config/control-signal-config.js +21 -13
  378. package/components/widgets/config/geometry.js +7 -5
  379. package/components/widgets/config/image-source-parser.d.ts +0 -2
  380. package/components/widgets/config/image-source-parser.js +2 -5
  381. package/components/widgets/config/image-variant-options.d.ts +5 -0
  382. package/components/widgets/config/image-variant-options.js +14 -0
  383. package/components/widgets/config/mask.d.ts +2 -1
  384. package/components/widgets/config/mask.js +11 -2
  385. package/components/widgets/config/parser-primitives.d.ts +1 -10
  386. package/components/widgets/config/parser-primitives.js +2 -42
  387. package/components/widgets/config/search-shared.d.ts +1 -6
  388. package/components/widgets/config/search-shared.js +1 -51
  389. package/components/widgets/config/spacing-options.d.ts +4 -4
  390. package/components/widgets/config/spacing-options.js +10 -11
  391. package/components/widgets/config/stack-tabs.d.ts +0 -1
  392. package/components/widgets/config/stack-tabs.js +1 -1
  393. package/components/widgets/helpers/font-size.js +6 -1
  394. package/components/widgets/helpers/html-content.js +2 -1
  395. package/components/widgets/helpers/internal-reference-resolver.server.js +8 -7
  396. package/components/widgets/label-sets/admin-locales.d.ts +4 -0
  397. package/components/widgets/label-sets/admin-locales.js +8 -0
  398. package/components/widgets/label-sets/admin-settings.d.ts +4 -0
  399. package/components/widgets/label-sets/admin-settings.js +8 -0
  400. package/components/widgets/label-sets/admin-users.d.ts +7 -0
  401. package/components/widgets/label-sets/admin-users.js +14 -0
  402. package/components/widgets/label-sets/authoring-tools.d.ts +0 -2
  403. package/components/widgets/label-sets/authoring-tools.js +78 -6
  404. package/components/widgets/label-sets/background.js +11 -13
  405. package/components/widgets/label-sets/builder-modules.js +6 -0
  406. package/components/widgets/label-sets/card.d.ts +5 -0
  407. package/components/widgets/label-sets/card.js +17 -0
  408. package/components/widgets/label-sets/color-picker.d.ts +0 -2
  409. package/components/widgets/label-sets/color-picker.js +0 -4
  410. package/components/widgets/label-sets/common-controls.d.ts +0 -2
  411. package/components/widgets/label-sets/common-controls.js +1 -1
  412. package/components/widgets/label-sets/content-entries.d.ts +128 -0
  413. package/components/widgets/label-sets/content-entries.js +197 -0
  414. package/components/widgets/label-sets/gallery.d.ts +4 -0
  415. package/components/widgets/label-sets/gallery.js +31 -0
  416. package/components/widgets/label-sets/history.d.ts +5 -0
  417. package/components/widgets/label-sets/history.js +106 -0
  418. package/components/widgets/label-sets/icon-picker.d.ts +0 -2
  419. package/components/widgets/label-sets/icon-picker.js +0 -4
  420. package/components/widgets/label-sets/inspector.js +124 -1
  421. package/components/widgets/label-sets/logout.d.ts +4 -0
  422. package/components/widgets/label-sets/logout.js +21 -0
  423. package/components/widgets/label-sets/profile.d.ts +1 -0
  424. package/components/widgets/label-sets/profile.js +2 -0
  425. package/components/widgets/label-sets/revisions.js +20 -0
  426. package/components/widgets/label-sets/theme-mode-switch.d.ts +4 -0
  427. package/components/widgets/label-sets/theme-mode-switch.js +19 -0
  428. package/components/widgets/label-sets/tour.d.ts +4 -0
  429. package/components/widgets/label-sets/tour.js +29 -0
  430. package/components/widgets/label-types/authoring-tools.d.ts +44 -1
  431. package/components/widgets/label-types/authoring-tools.js +42 -1
  432. package/components/widgets/label-types/background.d.ts +2 -3
  433. package/components/widgets/label-types/background.js +3 -4
  434. package/components/widgets/label-types/builder-modules.d.ts +5 -0
  435. package/components/widgets/label-types/builder-modules.js +4 -0
  436. package/components/widgets/label-types/card.d.ts +5 -0
  437. package/components/widgets/label-types/card.js +3 -0
  438. package/components/widgets/label-types/gallery.d.ts +13 -0
  439. package/components/widgets/label-types/gallery.js +10 -0
  440. package/components/widgets/label-types/history.d.ts +48 -0
  441. package/components/widgets/label-types/history.js +66 -0
  442. package/components/widgets/label-types/inspector.d.ts +84 -0
  443. package/components/widgets/label-types/inspector.js +66 -0
  444. package/components/widgets/label-types/logout.d.ts +5 -0
  445. package/components/widgets/label-types/logout.js +1 -0
  446. package/components/widgets/label-types/revisions.d.ts +15 -0
  447. package/components/widgets/label-types/revisions.js +14 -4
  448. package/components/widgets/label-types/theme-mode-switch.d.ts +5 -0
  449. package/components/widgets/label-types/theme-mode-switch.js +4 -0
  450. package/components/widgets/label-types/tour.d.ts +9 -0
  451. package/components/widgets/label-types/tour.js +7 -0
  452. package/components/widgets/login-redirect.d.ts +1 -1
  453. package/components/widgets/login-redirect.js +4 -6
  454. package/components/widgets/navigation-descriptor-resolver.server.js +64 -30
  455. package/components/widgets/server/navigation-request.d.ts +0 -1
  456. package/components/widgets/server/navigation-request.js +1 -1
  457. package/components/widgets/server/search.d.ts +0 -2
  458. package/components/widgets/server/search.js +1 -1
  459. package/components/widgets/shared/bullet-list-vocabulary.d.ts +80 -0
  460. package/components/widgets/shared/bullet-list-vocabulary.js +159 -0
  461. package/components/widgets/shared/card-body-client.d.ts +64 -56
  462. package/components/widgets/shared/card-body-client.js +243 -90
  463. package/components/widgets/shared/card-vocabulary.d.ts +53 -0
  464. package/components/widgets/shared/card-vocabulary.js +39 -0
  465. package/components/widgets/shared/markdown-body-client.d.ts +9 -5
  466. package/components/widgets/shared/markdown-body-client.js +24 -36
  467. package/components/widgets/shared/markdown-render.d.ts +11 -0
  468. package/components/widgets/shared/markdown-render.js +24 -6
  469. package/components/widgets/shared/result-body-client.js +2 -2
  470. package/components/widgets/signals/command-toolbar-address.d.ts +0 -2
  471. package/components/widgets/signals/command-toolbar-address.js +0 -4
  472. package/components/widgets/signals/control-signal-capabilities.d.ts +23 -13
  473. package/components/widgets/signals/control-signal-capabilities.js +33 -3
  474. package/components/widgets/signals/renderable-block-signal-capabilities.d.ts +5 -0
  475. package/components/widgets/signals/renderable-block-signal-capabilities.js +5 -0
  476. package/components/widgets/signals/signal-endpoints.d.ts +4 -1
  477. package/components/widgets/signals/signal-endpoints.js +9 -4
  478. package/components/workspace/catalog-state.d.ts +13 -0
  479. package/components/workspace/catalog-store.js +1 -0
  480. package/constants/cms-layout-types.d.ts +6 -2
  481. package/constants/cms-layout-types.js +8 -4
  482. package/constants/cms-widget-types.d.ts +8 -19
  483. package/constants/cms-widget-types.js +22 -13
  484. package/constants/content-entry-kinds.d.ts +21 -0
  485. package/constants/content-entry-kinds.js +25 -0
  486. package/constants/content-entry-parts.d.ts +55 -0
  487. package/constants/content-entry-parts.js +48 -0
  488. package/constants/core-data-provider-keys.d.ts +12 -0
  489. package/constants/core-data-provider-keys.js +12 -0
  490. package/constants/grid-columns.d.ts +4 -0
  491. package/constants/grid-columns.js +5 -0
  492. package/constants/html-link-schemes.d.ts +6 -0
  493. package/constants/html-link-schemes.js +6 -0
  494. package/constants/media-library-provider-keys.d.ts +5 -0
  495. package/constants/media-library-provider-keys.js +5 -0
  496. package/constants/public-login-route.d.ts +11 -0
  497. package/constants/public-login-route.js +12 -0
  498. package/constants/runtime-data-provider-key.d.ts +1 -1
  499. package/constants/runtime-module-ownership.js +32 -5
  500. package/constants/runtime-render-client-types.d.ts +0 -1
  501. package/constants/runtime-render-client-types.js +0 -1
  502. package/constants/site-cookies.d.ts +9 -0
  503. package/constants/site-cookies.js +13 -0
  504. package/constants/support.d.ts +1 -1
  505. package/constants/support.js +1 -1
  506. package/constants/thread-library-provider-keys.d.ts +4 -3
  507. package/constants/thread-library-provider-keys.js +4 -3
  508. package/constants.d.ts +2 -1
  509. package/constants.js +3 -1
  510. package/controls.d.ts +16 -0
  511. package/controls.js +8 -0
  512. package/forms.d.ts +3 -2
  513. package/forms.js +1 -1
  514. package/gateway/auth-public-manifest.js +21 -14
  515. package/gateway/content-entries.d.ts +57 -0
  516. package/gateway/content-entries.js +141 -0
  517. package/gateway/dashboard-cards-route.js +121 -77
  518. package/gateway/errors.d.ts +0 -1
  519. package/gateway/errors.js +1 -1
  520. package/gateway/form-registry.d.ts +1 -6
  521. package/gateway/form-registry.js +12 -28
  522. package/gateway/form-submit.d.ts +6 -21
  523. package/gateway/form-submit.js +8 -13
  524. package/gateway/internal-references.d.ts +7 -4
  525. package/gateway/internal-references.js +157 -15
  526. package/gateway/media-folder-images.d.ts +19 -0
  527. package/gateway/media-folder-images.js +37 -0
  528. package/gateway/module-diagnostics-route.js +4 -9
  529. package/gateway/navigation-target-route.js +15 -84
  530. package/gateway/page-references-route.d.ts +18 -0
  531. package/gateway/page-references-route.js +86 -0
  532. package/gateway/route-handler-helpers.d.ts +9 -0
  533. package/gateway/route-handler-helpers.js +41 -0
  534. package/gateway/server-capabilities.d.ts +1 -1
  535. package/gateway/server-capabilities.js +24 -16
  536. package/gateway/site-api-request.d.ts +32 -0
  537. package/gateway/site-api-request.js +48 -0
  538. package/gateway/site-area.d.ts +26 -2
  539. package/gateway/site-area.js +80 -95
  540. package/gateway/site-auth-settings.d.ts +4 -3
  541. package/gateway/site-auth-settings.js +11 -27
  542. package/gateway/site-config.js +15 -16
  543. package/gateway/site-content.d.ts +30 -0
  544. package/gateway/site-content.js +32 -0
  545. package/gateway/site-form-route.js +14 -5
  546. package/gateway/site-media-settings.d.ts +6 -5
  547. package/gateway/site-media-settings.js +11 -27
  548. package/gateway/site-nav.js +34 -61
  549. package/gateway/site-page.d.ts +11 -5
  550. package/gateway/site-page.js +56 -96
  551. package/gateway/site-proxy.js +13 -3
  552. package/gateway/site-settings.d.ts +4 -3
  553. package/gateway/site-settings.js +11 -27
  554. package/gateway/site-stats.d.ts +4 -3
  555. package/gateway/site-stats.js +11 -27
  556. package/gateway/site-theme.d.ts +3 -3
  557. package/gateway/site-theme.js +14 -31
  558. package/gateway/thread-inbox-stats.d.ts +4 -3
  559. package/gateway/thread-inbox-stats.js +13 -25
  560. package/gateway/tr.d.ts +8 -0
  561. package/gateway/tr.js +18 -3
  562. package/gateway/user-state.d.ts +2 -2
  563. package/gateway/user-state.js +14 -26
  564. package/helpers/access.d.ts +0 -5
  565. package/helpers/access.js +0 -19
  566. package/helpers/antd-locale.d.ts +0 -3
  567. package/helpers/antd-locale.js +4 -6
  568. package/helpers/cms-area-config.d.ts +15 -11
  569. package/helpers/cms-area-config.js +13 -10
  570. package/helpers/cms-area-root-route.d.ts +4 -5
  571. package/helpers/cms-area-root-route.js +2 -6
  572. package/helpers/cms-config-field-validation.d.ts +7 -3
  573. package/helpers/cms-config-field-validation.js +47 -6
  574. package/helpers/cms-container-chrome.d.ts +10 -2
  575. package/helpers/cms-container-chrome.js +22 -31
  576. package/helpers/cms-content-binding.d.ts +13 -0
  577. package/helpers/cms-content-binding.js +32 -0
  578. package/helpers/cms-dialog.d.ts +51 -0
  579. package/helpers/cms-dialog.js +50 -0
  580. package/helpers/cms-layout-defaults.d.ts +19 -9
  581. package/helpers/cms-layout-defaults.js +64 -74
  582. package/helpers/cms-navigation-catalog.d.ts +0 -1
  583. package/helpers/cms-navigation-catalog.js +1 -1
  584. package/helpers/cms-node-factories.d.ts +1 -3
  585. package/helpers/cms-node-factories.js +2 -5
  586. package/helpers/cms-node-visibility.d.ts +8 -0
  587. package/helpers/cms-node-visibility.js +21 -1
  588. package/helpers/cms-page-catalog.d.ts +1 -3
  589. package/helpers/cms-page-catalog.js +11 -11
  590. package/helpers/cms-preset-nodes.d.ts +51 -1
  591. package/helpers/cms-preset-nodes.js +68 -2
  592. package/helpers/cms-preset-page-tree.d.ts +28 -0
  593. package/helpers/cms-preset-page-tree.js +83 -0
  594. package/helpers/cms-region-keys.d.ts +0 -1
  595. package/helpers/cms-region-keys.js +1 -1
  596. package/helpers/cms-routing.d.ts +0 -1
  597. package/helpers/cms-scope-search-params.d.ts +5 -1
  598. package/helpers/cms-scope-search-params.js +6 -1
  599. package/helpers/cms-tree-controller-settings.d.ts +11 -0
  600. package/helpers/cms-tree-controller-settings.js +37 -0
  601. package/helpers/content-entry-record-binding.d.ts +21 -0
  602. package/helpers/content-entry-record-binding.js +31 -0
  603. package/helpers/css-linear-gradient.d.ts +28 -0
  604. package/helpers/css-linear-gradient.js +122 -0
  605. package/helpers/flags.d.ts +10 -0
  606. package/helpers/flags.js +20 -0
  607. package/helpers/form-id.d.ts +8 -0
  608. package/helpers/form-id.js +10 -0
  609. package/helpers/format-date-time.d.ts +5 -0
  610. package/helpers/format-date-time.js +31 -0
  611. package/helpers/internal-path.d.ts +12 -0
  612. package/helpers/internal-path.js +28 -0
  613. package/helpers/is-record.js +2 -1
  614. package/helpers/layout-authoring-markers.d.ts +0 -2
  615. package/helpers/layout-authoring-markers.js +1 -1
  616. package/helpers/layout-style.d.ts +2 -16
  617. package/helpers/layout-style.js +15 -32
  618. package/helpers/link-target.d.ts +6 -1
  619. package/helpers/link-target.js +12 -4
  620. package/helpers/locale.d.ts +2 -0
  621. package/helpers/locale.js +4 -0
  622. package/helpers/logout.d.ts +0 -16
  623. package/helpers/logout.js +1 -1
  624. package/helpers/motion.d.ts +0 -1
  625. package/helpers/motion.js +1 -1
  626. package/helpers/overlay-events.d.ts +9 -0
  627. package/helpers/overlay-events.js +9 -0
  628. package/helpers/page-reference-tree.d.ts +42 -0
  629. package/helpers/page-reference-tree.js +92 -0
  630. package/helpers/phi-seo.d.ts +0 -3
  631. package/helpers/phi-seo.js +2 -2
  632. package/helpers/public-route-claims.d.ts +0 -1
  633. package/helpers/public-route-claims.js +1 -1
  634. package/helpers/region-page-scope.d.ts +26 -0
  635. package/helpers/region-page-scope.js +121 -0
  636. package/helpers/renderable-block-defaults.d.ts +0 -3
  637. package/helpers/renderable-block-defaults.js +1 -1
  638. package/helpers/renderable-block-normalizers.d.ts +26 -0
  639. package/helpers/renderable-block-normalizers.js +166 -0
  640. package/helpers/renderable-block-serialization.d.ts +1 -5
  641. package/helpers/renderable-block-serialization.js +13 -166
  642. package/helpers/runtime-module-route-path.d.ts +0 -1
  643. package/helpers/runtime-module-route-path.js +1 -1
  644. package/helpers/shell-region-style.d.ts +3 -3
  645. package/helpers/shell-region-style.js +3 -3
  646. package/helpers/signal-listen-routes.d.ts +14 -0
  647. package/helpers/signal-listen-routes.js +33 -0
  648. package/helpers/signal-route-lifecycle.d.ts +1 -3
  649. package/helpers/signal-route-lifecycle.js +2 -2
  650. package/helpers/signal-route-set-join.d.ts +4 -0
  651. package/helpers/signal-route-set-join.js +29 -0
  652. package/helpers/site-api.d.ts +0 -3
  653. package/helpers/site-api.js +1 -3
  654. package/helpers/site-locale-config.d.ts +16 -6
  655. package/helpers/site-locale-config.js +14 -0
  656. package/helpers/static-render-path.d.ts +12 -0
  657. package/helpers/static-render-path.js +18 -0
  658. package/helpers/structure-widget-swap.js +4 -4
  659. package/helpers/surface-presets.d.ts +81 -0
  660. package/helpers/surface-presets.js +65 -0
  661. package/helpers/surface-style.d.ts +63 -0
  662. package/helpers/surface-style.js +74 -0
  663. package/helpers/table-binding.d.ts +6 -2
  664. package/helpers/table-binding.js +12 -1
  665. package/helpers/text-placeholders.d.ts +11 -21
  666. package/helpers/text-placeholders.js +24 -8
  667. package/helpers/translation-cache.js +3 -1
  668. package/helpers.d.ts +3 -0
  669. package/helpers.js +8 -0
  670. package/module-dashboard-cards.d.ts +15 -0
  671. package/module-dashboard-cards.js +15 -0
  672. package/module-records.d.ts +14 -0
  673. package/module-records.js +13 -0
  674. package/net/log.d.ts +1 -2
  675. package/net/log.js +1 -1
  676. package/next/area-route.d.ts +17 -3
  677. package/next/area-route.js +30 -22
  678. package/next/config.d.mts +25 -0
  679. package/next/config.mjs +277 -0
  680. package/next/overlay-zones.js +3 -7
  681. package/next/root-error-page.d.ts +15 -0
  682. package/next/root-error-page.js +30 -0
  683. package/next/root-route.d.ts +0 -4
  684. package/next/root-route.js +6 -7
  685. package/next/seo-routes.js +8 -36
  686. package/next/site-proxy.d.ts +2 -2
  687. package/next/site-proxy.js +17 -6
  688. package/package.json +23 -2
  689. package/plugins/factories/widget-builder-plugin.js +2 -3
  690. package/plugins/registries/runtime-controllers.js +4 -1
  691. package/plugins/runtime/phi-slot-child-frame-client.js +17 -8
  692. package/plugins/runtime/phi-slot-child-frame-view.d.ts +10 -2
  693. package/plugins/runtime/phi-slot-child-frame-view.js +12 -28
  694. package/plugins/runtime/phi-slot-child-frame.d.ts +2 -0
  695. package/plugins/runtime/phi-slot-child-frame.js +1 -1
  696. package/plugins/runtime/phi-slot-child-viewport-effects-observer.js +12 -5
  697. package/plugins/runtime/slot-size-policy.d.ts +1 -2
  698. package/plugins/runtime/slot-size-policy.js +17 -6
  699. package/plugins/runtime-modules/accounting/module.d.ts +1 -1
  700. package/plugins/runtime-modules/accounting/trees/phi-default-accounting-page-tree.js +2 -0
  701. package/plugins/runtime-modules/admin/definition.d.ts +2 -5
  702. package/plugins/runtime-modules/admin/definition.js +2 -8
  703. package/plugins/runtime-modules/admin/forms.d.ts +0 -3
  704. package/plugins/runtime-modules/admin/forms.js +15 -24
  705. package/plugins/runtime-modules/admin/ids.d.ts +9 -0
  706. package/plugins/runtime-modules/admin/ids.js +9 -0
  707. package/plugins/runtime-modules/admin/module.d.ts +32 -1
  708. package/plugins/runtime-modules/admin/module.js +8 -3
  709. package/plugins/runtime-modules/admin/presets.d.ts +1 -4
  710. package/plugins/runtime-modules/admin/presets.js +0 -1
  711. package/plugins/runtime-modules/admin/trees/admin-settings-label-set.js +3 -2
  712. package/plugins/runtime-modules/admin/trees/phi-default-admin-area-preset-tree.js +15 -147
  713. package/plugins/runtime-modules/admin/trees/phi-default-admin-settings-page-tree.js +7 -4
  714. package/plugins/runtime-modules/app/definition.d.ts +2 -2
  715. package/plugins/runtime-modules/app/definition.js +2 -2
  716. package/plugins/runtime-modules/app/forms.d.ts +0 -6
  717. package/plugins/runtime-modules/app/forms.js +34 -56
  718. package/plugins/runtime-modules/app/ids.d.ts +9 -0
  719. package/plugins/runtime-modules/app/ids.js +9 -0
  720. package/plugins/runtime-modules/app/module.d.ts +1 -1
  721. package/plugins/runtime-modules/app/trees/phi-default-app-area-preset-tree.js +8 -64
  722. package/plugins/runtime-modules/app/trees/phi-default-app-profile-page-tree.js +1 -0
  723. package/plugins/runtime-modules/app/trees/profile-label-set.js +3 -2
  724. package/plugins/runtime-modules/area-base-presets.d.ts +1 -1
  725. package/plugins/runtime-modules/area-base-presets.js +0 -1
  726. package/plugins/runtime-modules/area-contributions/accounting.d.ts +1 -1
  727. package/plugins/runtime-modules/area-contributions/admin.d.ts +1 -1
  728. package/plugins/runtime-modules/area-contributions/app.d.ts +1 -1
  729. package/plugins/runtime-modules/area-contributions/app.js +0 -2
  730. package/plugins/runtime-modules/area-contributions/builder.d.ts +1 -1
  731. package/plugins/runtime-modules/area-contributions/common.d.ts +7 -2
  732. package/plugins/runtime-modules/area-contributions/common.js +10 -1
  733. package/plugins/runtime-modules/area-contributions/editor.d.ts +1 -1
  734. package/plugins/runtime-modules/area-contributions/editor.js +2 -0
  735. package/plugins/runtime-modules/area-contributions/public.d.ts +1 -1
  736. package/plugins/runtime-modules/area-contributions/public.js +2 -0
  737. package/plugins/runtime-modules/area-contributions.d.ts +0 -1
  738. package/plugins/runtime-modules/area-contributions.js +14 -4
  739. package/plugins/runtime-modules/area-definitions.d.ts +0 -97
  740. package/plugins/runtime-modules/area-definitions.js +9 -31
  741. package/plugins/runtime-modules/area-module-defaults.js +13 -5
  742. package/plugins/runtime-modules/asset/client-data-providers.js +6 -0
  743. package/plugins/runtime-modules/asset/controller/client.d.ts +14 -5
  744. package/plugins/runtime-modules/asset/controller/client.js +1 -1
  745. package/plugins/runtime-modules/asset/controller/definition.d.ts +21 -5
  746. package/plugins/runtime-modules/asset/controller/definition.js +22 -10
  747. package/plugins/runtime-modules/asset/controller/mount.d.ts +5 -2
  748. package/plugins/runtime-modules/asset/controller/mount.js +2 -2
  749. package/plugins/runtime-modules/asset/controller/runtime.d.ts +8 -1
  750. package/plugins/runtime-modules/asset/controller/runtime.js +69 -115
  751. package/plugins/runtime-modules/asset/data-providers.d.ts +59 -0
  752. package/plugins/runtime-modules/asset/data-providers.js +50 -0
  753. package/plugins/runtime-modules/asset/definition.d.ts +54 -0
  754. package/plugins/runtime-modules/asset/ids.d.ts +6 -0
  755. package/plugins/runtime-modules/asset/ids.js +7 -0
  756. package/plugins/runtime-modules/asset/metadata-form.d.ts +0 -2
  757. package/plugins/runtime-modules/asset/metadata-form.js +2 -2
  758. package/plugins/runtime-modules/asset/server.js +5 -0
  759. package/plugins/runtime-modules/asset/services/folder-images.server.d.ts +11 -0
  760. package/plugins/runtime-modules/asset/services/folder-images.server.js +41 -0
  761. package/plugins/runtime-modules/asset/services/options.d.ts +3 -0
  762. package/plugins/runtime-modules/asset/services/options.js +37 -28
  763. package/plugins/runtime-modules/asset/settings-forms.d.ts +0 -3
  764. package/plugins/runtime-modules/asset/settings-forms.js +1 -1
  765. package/plugins/runtime-modules/asset/trees/phi-default-admin-media-settings-page-tree.js +28 -8
  766. package/plugins/runtime-modules/asset/trees/phi-default-builder-media-page-tree.js +106 -58
  767. package/plugins/runtime-modules/asset/widgets/area-upload/config.d.ts +2 -2
  768. package/plugins/runtime-modules/asset/widgets/area-upload/config.js +4 -3
  769. package/plugins/runtime-modules/asset/widgets/asset-focal-rect/config.d.ts +2 -1
  770. package/plugins/runtime-modules/asset/widgets/asset-focal-rect/config.js +1 -1
  771. package/plugins/runtime-modules/asset/widgets/image-inspector/config.d.ts +2 -2
  772. package/plugins/runtime-modules/asset/widgets/image-inspector/config.js +4 -3
  773. package/plugins/runtime-modules/asset/widgets/media-picker/config.d.ts +2 -2
  774. package/plugins/runtime-modules/asset/widgets/media-picker/config.js +4 -3
  775. package/plugins/runtime-modules/auth/admin-settings-forms.d.ts +0 -7
  776. package/plugins/runtime-modules/auth/admin-settings-forms.js +3 -3
  777. package/plugins/runtime-modules/auth/controller/definition.d.ts +13 -4
  778. package/plugins/runtime-modules/auth/controller/definition.js +3 -3
  779. package/plugins/runtime-modules/auth/controller/server-definition.d.ts +5 -5
  780. package/plugins/runtime-modules/auth/controller-plugin.js +23 -47
  781. package/plugins/runtime-modules/auth/definition.d.ts +1 -1
  782. package/plugins/runtime-modules/auth/definition.js +2 -2
  783. package/plugins/runtime-modules/auth/form-provider-registry.js +10 -6
  784. package/plugins/runtime-modules/auth/ids.d.ts +16 -0
  785. package/plugins/runtime-modules/auth/ids.js +17 -0
  786. package/plugins/runtime-modules/auth/machine.d.ts +0 -13
  787. package/plugins/runtime-modules/auth/machine.js +1 -1
  788. package/plugins/runtime-modules/auth/overlay-ids.d.ts +0 -1
  789. package/plugins/runtime-modules/auth/overlay-ids.js +0 -3
  790. package/plugins/runtime-modules/auth/services/installations-table.js +4 -3
  791. package/plugins/runtime-modules/auth/trees/phi-auth-area-overlay-tree.server.js +35 -7
  792. package/plugins/runtime-modules/auth/trees/phi-auth-runtime-page-tree.js +1 -1
  793. package/plugins/runtime-modules/auth/trees/phi-default-admin-auth-settings-page-tree.js +1 -0
  794. package/plugins/runtime-modules/auth/trees/phi-default-pub-confirm-page-tree.js +25 -21
  795. package/plugins/runtime-modules/auth/trees/phi-default-pub-login-page-tree.js +25 -21
  796. package/plugins/runtime-modules/auth/trees/phi-default-pub-registration-page-tree.js +25 -21
  797. package/plugins/runtime-modules/auth/trees/phi-default-pub-reset-password-page-tree.js +25 -21
  798. package/plugins/runtime-modules/auth/trees/security-label-set.js +3 -2
  799. package/plugins/runtime-modules/auth/widgets/auth-methods/config.d.ts +2 -1
  800. package/plugins/runtime-modules/auth/widgets/auth-methods/config.js +1 -1
  801. package/plugins/runtime-modules/auth/widgets/auth-workflow/client.js +3 -2
  802. package/plugins/runtime-modules/auth/widgets/auth-workflow/config.d.ts +2 -1
  803. package/plugins/runtime-modules/auth/widgets/auth-workflow/config.js +1 -1
  804. package/plugins/runtime-modules/auth/widgets/logout/client.d.ts +3 -1
  805. package/plugins/runtime-modules/auth/widgets/logout/client.js +12 -7
  806. package/plugins/runtime-modules/auth/widgets/logout/server.d.ts +1 -1
  807. package/plugins/runtime-modules/auth/widgets/logout/server.js +10 -2
  808. package/plugins/runtime-modules/auth/widgets/security/client.d.ts +4 -1
  809. package/plugins/runtime-modules/auth/widgets/security/client.js +11 -5
  810. package/plugins/runtime-modules/avatar/definition.d.ts +1 -1
  811. package/plugins/runtime-modules/avatar/definition.js +2 -2
  812. package/plugins/runtime-modules/avatar/ids.d.ts +9 -0
  813. package/plugins/runtime-modules/avatar/ids.js +9 -0
  814. package/plugins/runtime-modules/avatar/labels.js +3 -2
  815. package/plugins/runtime-modules/avatar/module.d.ts +1 -1
  816. package/plugins/runtime-modules/avatar/overlay-tree.server.js +2 -6
  817. package/plugins/runtime-modules/avatar/widgets/account-avatar/client.js +6 -3
  818. package/plugins/runtime-modules/blog/authoring-widgets.d.ts +2 -0
  819. package/plugins/runtime-modules/blog/authoring-widgets.js +4 -0
  820. package/plugins/runtime-modules/blog/authoring.d.ts +1 -0
  821. package/plugins/runtime-modules/blog/authoring.js +8 -0
  822. package/plugins/runtime-modules/blog/definition.d.ts +35 -0
  823. package/plugins/runtime-modules/blog/definition.js +22 -0
  824. package/plugins/runtime-modules/blog/forms.d.ts +16 -0
  825. package/plugins/runtime-modules/blog/forms.js +11 -0
  826. package/plugins/runtime-modules/blog/ids.d.ts +25 -0
  827. package/plugins/runtime-modules/blog/ids.js +27 -0
  828. package/plugins/runtime-modules/blog/labels.d.ts +4 -0
  829. package/plugins/runtime-modules/blog/labels.js +27 -0
  830. package/plugins/runtime-modules/blog/module.d.ts +35 -0
  831. package/plugins/runtime-modules/blog/module.js +12 -0
  832. package/plugins/runtime-modules/blog/presets.d.ts +53 -0
  833. package/plugins/runtime-modules/blog/presets.js +24 -0
  834. package/plugins/runtime-modules/blog/server.d.ts +1 -0
  835. package/plugins/runtime-modules/blog/server.js +17 -0
  836. package/plugins/runtime-modules/builder/addresses.d.ts +1 -1
  837. package/plugins/runtime-modules/builder/area-settings-answer.d.ts +31 -0
  838. package/plugins/runtime-modules/builder/area-settings-answer.js +81 -0
  839. package/plugins/runtime-modules/builder/area-shell-presets.server.d.ts +21 -5
  840. package/plugins/runtime-modules/builder/area-shell-presets.server.js +102 -100
  841. package/plugins/runtime-modules/builder/authoring-provider-keys.d.ts +1 -20
  842. package/plugins/runtime-modules/builder/authoring-provider-keys.js +1 -1
  843. package/plugins/runtime-modules/builder/authoring-widgets.js +0 -2
  844. package/plugins/runtime-modules/builder/cards.d.ts +3 -0
  845. package/plugins/runtime-modules/builder/cards.js +79 -0
  846. package/plugins/runtime-modules/builder/clients/builder-region-overrides.js +4 -2
  847. package/plugins/runtime-modules/builder/clients/canvas-widget.js +19 -6
  848. package/plugins/runtime-modules/builder/clients/grid-placement-settings.d.ts +24 -0
  849. package/plugins/runtime-modules/builder/clients/grid-placement-settings.js +93 -0
  850. package/plugins/runtime-modules/builder/clients/inspector-config-field.d.ts +46 -5
  851. package/plugins/runtime-modules/builder/clients/inspector-config-field.js +325 -104
  852. package/plugins/runtime-modules/builder/clients/inspector-image-field.d.ts +17 -0
  853. package/plugins/runtime-modules/builder/clients/inspector-image-field.js +59 -0
  854. package/plugins/runtime-modules/builder/clients/inspector-link-target-field.d.ts +9 -23
  855. package/plugins/runtime-modules/builder/clients/inspector-link-target-field.js +13 -60
  856. package/plugins/runtime-modules/builder/clients/inspector-section-widget.d.ts +9 -3
  857. package/plugins/runtime-modules/builder/clients/inspector-section-widget.js +51 -110
  858. package/plugins/runtime-modules/builder/clients/inspector-surface-labels.d.ts +8 -0
  859. package/plugins/runtime-modules/builder/clients/inspector-surface-labels.js +24 -0
  860. package/plugins/runtime-modules/builder/clients/inspector-title.js +7 -8
  861. package/plugins/runtime-modules/builder/clients/layout-inspector.d.ts +18 -9
  862. package/plugins/runtime-modules/builder/clients/layout-inspector.js +71 -158
  863. package/plugins/runtime-modules/builder/clients/layout-scaffold-buttons.js +4 -4
  864. package/plugins/runtime-modules/builder/clients/layout-scaffold-overlays.js +2 -2
  865. package/plugins/runtime-modules/builder/clients/mode-switch.js +3 -5
  866. package/plugins/runtime-modules/builder/clients/pages-header.js +11 -63
  867. package/plugins/runtime-modules/builder/clients/pages-workspace.js +10 -1
  868. package/plugins/runtime-modules/builder/clients/region-inspector.d.ts +6 -2
  869. package/plugins/runtime-modules/builder/clients/region-inspector.js +12 -26
  870. package/plugins/runtime-modules/builder/clients/region-visibility-fields.d.ts +15 -0
  871. package/plugins/runtime-modules/builder/clients/region-visibility-fields.js +135 -0
  872. package/plugins/runtime-modules/builder/clients/shells-workspace.js +3 -1
  873. package/plugins/runtime-modules/builder/clients/structure-canvas.d.ts +1 -3
  874. package/plugins/runtime-modules/builder/clients/structure-canvas.js +50 -41
  875. package/plugins/runtime-modules/builder/clients/widget-effects-editor.js +2 -2
  876. package/plugins/runtime-modules/builder/clients/widget-inspector.d.ts +15 -1
  877. package/plugins/runtime-modules/builder/clients/widget-inspector.js +69 -26
  878. package/plugins/runtime-modules/builder/cms-instance-allocator.d.ts +0 -1
  879. package/plugins/runtime-modules/builder/cms-instance-allocator.js +1 -1
  880. package/plugins/runtime-modules/builder/controller/client.d.ts +31 -14
  881. package/plugins/runtime-modules/builder/controller/client.js +9 -2
  882. package/plugins/runtime-modules/builder/controller/definition.d.ts +53 -14
  883. package/plugins/runtime-modules/builder/controller/definition.js +148 -37
  884. package/plugins/runtime-modules/builder/{draft-command-controller.d.ts → controller/draft-command-controller.d.ts} +12 -5
  885. package/plugins/runtime-modules/builder/{draft-command-controller.js → controller/draft-command-controller.js} +186 -232
  886. package/plugins/runtime-modules/builder/{draft-status-controller.d.ts → controller/draft-status-controller.d.ts} +9 -2
  887. package/plugins/runtime-modules/builder/{draft-status-controller.js → controller/draft-status-controller.js} +30 -12
  888. package/plugins/runtime-modules/builder/controller/inspector-controller.d.ts +3 -0
  889. package/plugins/runtime-modules/builder/controller/inspector-controller.js +207 -0
  890. package/plugins/runtime-modules/builder/controller/mount.d.ts +1 -1
  891. package/plugins/runtime-modules/builder/controller/mount.js +1 -1
  892. package/plugins/runtime-modules/builder/{page-controller-helpers.d.ts → controller/page-controller-helpers.d.ts} +2 -4
  893. package/plugins/runtime-modules/builder/{page-controller-helpers.js → controller/page-controller-helpers.js} +4 -4
  894. package/plugins/runtime-modules/builder/{page-controller.d.ts → controller/page-controller.d.ts} +6 -3
  895. package/plugins/runtime-modules/builder/{page-controller.js → controller/page-controller.js} +45 -134
  896. package/plugins/runtime-modules/builder/controller/preview-controller.d.ts +5 -0
  897. package/plugins/runtime-modules/builder/controller/preview-controller.js +68 -0
  898. package/plugins/runtime-modules/builder/{region-controller.d.ts → controller/region-controller.d.ts} +1 -2
  899. package/plugins/runtime-modules/builder/{region-controller.js → controller/region-controller.js} +18 -38
  900. package/plugins/runtime-modules/builder/controller/server-definition.d.ts +34 -14
  901. package/plugins/runtime-modules/builder/controller/server-definition.js +29 -3
  902. package/plugins/runtime-modules/builder/{signal-wiring-controller.d.ts → controller/signal-wiring-controller.d.ts} +2 -8
  903. package/plugins/runtime-modules/builder/{signal-wiring-controller.js → controller/signal-wiring-controller.js} +4 -12
  904. package/plugins/runtime-modules/builder/{workspace-controller.d.ts → controller/workspace-controller.d.ts} +15 -7
  905. package/plugins/runtime-modules/builder/{workspace-controller.js → controller/workspace-controller.js} +270 -725
  906. package/plugins/runtime-modules/builder/data-providers.d.ts +1 -1
  907. package/plugins/runtime-modules/builder/definition.d.ts +3 -3
  908. package/plugins/runtime-modules/builder/definition.js +2 -2
  909. package/plugins/runtime-modules/builder/developer-workspace-store.d.ts +27 -26
  910. package/plugins/runtime-modules/builder/developer-workspace-store.js +59 -224
  911. package/plugins/runtime-modules/builder/developer-workspace-types.d.ts +30 -34
  912. package/plugins/runtime-modules/builder/edit-scaffold-drawer.js +6 -5
  913. package/plugins/runtime-modules/builder/effects-form-values.js +3 -2
  914. package/plugins/runtime-modules/builder/history.d.ts +59 -5
  915. package/plugins/runtime-modules/builder/ids.d.ts +9 -0
  916. package/plugins/runtime-modules/builder/ids.js +9 -0
  917. package/plugins/runtime-modules/builder/inspector-actions.d.ts +18 -13
  918. package/plugins/runtime-modules/builder/inspector-actions.js +9 -16
  919. package/plugins/runtime-modules/builder/inspector-overlay-addresses.d.ts +2 -3
  920. package/plugins/runtime-modules/builder/inspector-overlay-addresses.js +3 -8
  921. package/plugins/runtime-modules/builder/inspector-section-widget.js +15 -6
  922. package/plugins/runtime-modules/builder/module-authoring-catalog.d.ts +2 -0
  923. package/plugins/runtime-modules/builder/module-authoring-catalog.server.js +3 -0
  924. package/plugins/runtime-modules/builder/module-usage-client.js +5 -1
  925. package/plugins/runtime-modules/builder/navigation-catalog.server.js +4 -1
  926. package/plugins/runtime-modules/builder/navigation-folder-address.d.ts +0 -1
  927. package/plugins/runtime-modules/builder/navigation-folder-address.js +1 -1
  928. package/plugins/runtime-modules/builder/navigation-path-context.js +3 -5
  929. package/plugins/runtime-modules/builder/navigation-store.d.ts +2 -2
  930. package/plugins/runtime-modules/builder/navigation-store.js +3 -3
  931. package/plugins/runtime-modules/builder/node-config-write.d.ts +38 -0
  932. package/plugins/runtime-modules/builder/node-config-write.js +134 -0
  933. package/plugins/runtime-modules/builder/node-finders.d.ts +0 -1
  934. package/plugins/runtime-modules/builder/node-finders.js +1 -1
  935. package/plugins/runtime-modules/builder/offered-page-catalog.d.ts +0 -13
  936. package/plugins/runtime-modules/builder/offered-page-catalog.js +2 -2
  937. package/plugins/runtime-modules/builder/options-providers.js +16 -9
  938. package/plugins/runtime-modules/builder/page-preset-catalog.server.js +2 -63
  939. package/plugins/runtime-modules/builder/page-presets.server.d.ts +8 -1
  940. package/plugins/runtime-modules/builder/page-presets.server.js +63 -76
  941. package/plugins/runtime-modules/builder/page-references-provider.js +1 -1
  942. package/plugins/runtime-modules/builder/page-tree-walk.d.ts +3 -0
  943. package/plugins/runtime-modules/builder/page-tree-walk.js +4 -0
  944. package/plugins/runtime-modules/builder/persistence.d.ts +26 -11
  945. package/plugins/runtime-modules/builder/persistence.js +38 -78
  946. package/plugins/runtime-modules/builder/plugin-meta-labels.js +2 -0
  947. package/plugins/runtime-modules/builder/plugin-meta-labels.server.d.ts +15 -0
  948. package/plugins/runtime-modules/builder/plugin-meta-labels.server.js +58 -30
  949. package/plugins/runtime-modules/builder/plugin-metas.d.ts +7 -0
  950. package/plugins/runtime-modules/builder/plugin-metas.js +27 -9
  951. package/plugins/runtime-modules/builder/presets.d.ts +0 -132
  952. package/plugins/runtime-modules/builder/presets.js +0 -1
  953. package/plugins/runtime-modules/builder/preview-transport.d.ts +9 -26
  954. package/plugins/runtime-modules/builder/preview-transport.js +2 -2
  955. package/plugins/runtime-modules/builder/public-route-collisions.d.ts +0 -33
  956. package/plugins/runtime-modules/builder/public-route-collisions.js +4 -4
  957. package/plugins/runtime-modules/builder/region-defaults.js +18 -46
  958. package/plugins/runtime-modules/builder/region-hydration.d.ts +5 -9
  959. package/plugins/runtime-modules/builder/region-hydration.js +37 -106
  960. package/plugins/runtime-modules/builder/region-keys.d.ts +0 -1
  961. package/plugins/runtime-modules/builder/region-keys.js +1 -4
  962. package/plugins/runtime-modules/builder/region-root-node.d.ts +22 -0
  963. package/plugins/runtime-modules/builder/region-root-node.js +25 -0
  964. package/plugins/runtime-modules/builder/render-root-node-preview.server.d.ts +2 -20
  965. package/plugins/runtime-modules/builder/render-root-node-preview.server.js +10 -27
  966. package/plugins/runtime-modules/builder/render-root-node-scaffold.d.ts +13 -4
  967. package/plugins/runtime-modules/builder/render-root-node-scaffold.js +27 -130
  968. package/plugins/runtime-modules/builder/root-node-normalization.d.ts +31 -23
  969. package/plugins/runtime-modules/builder/root-node-normalization.js +72 -69
  970. package/plugins/runtime-modules/builder/root-node-renderable-tree.d.ts +1 -3
  971. package/plugins/runtime-modules/builder/root-node-renderable-tree.js +11 -53
  972. package/plugins/runtime-modules/builder/runtime-module-selection.d.ts +3 -12
  973. package/plugins/runtime-modules/builder/runtime-module-selection.js +25 -4
  974. package/plugins/runtime-modules/builder/selected-collection-source.d.ts +0 -8
  975. package/plugins/runtime-modules/builder/selected-collection-source.js +5 -6
  976. package/plugins/runtime-modules/builder/sequential-slot-helpers.d.ts +0 -3
  977. package/plugins/runtime-modules/builder/sequential-slot-helpers.js +1 -1
  978. package/plugins/runtime-modules/builder/server.js +5 -0
  979. package/plugins/runtime-modules/builder/services/navigation-table.js +31 -13
  980. package/plugins/runtime-modules/builder/services/page-source-tree.js +20 -7
  981. package/plugins/runtime-modules/builder/services/runtime-modules-table.d.ts +19 -0
  982. package/plugins/runtime-modules/builder/services/runtime-modules-table.js +84 -12
  983. package/plugins/runtime-modules/builder/signal-endpoints.js +11 -31
  984. package/plugins/runtime-modules/builder/signal-route-selection.js +4 -7
  985. package/plugins/runtime-modules/builder/signal-wiring-options.js +5 -4
  986. package/plugins/runtime-modules/builder/structure-region-pick-items.js +3 -2
  987. package/plugins/runtime-modules/builder/trees/builder-navigation-label-set.js +3 -2
  988. package/plugins/runtime-modules/builder/trees/builder-settings-label-set.js +3 -2
  989. package/plugins/runtime-modules/builder/trees/phi-builder-inspector-area-overlay-tree.server.js +86 -35
  990. package/plugins/runtime-modules/builder/trees/phi-default-builder-area-preset-tree.d.ts +11 -5
  991. package/plugins/runtime-modules/builder/trees/phi-default-builder-area-preset-tree.js +196 -107
  992. package/plugins/runtime-modules/builder/trees/phi-default-builder-settings-page-tree.js +7 -4
  993. package/plugins/runtime-modules/builder/widgets/chrome/config.d.ts +32 -52
  994. package/plugins/runtime-modules/builder/widgets/chrome/config.js +4 -6
  995. package/plugins/runtime-modules/builder/widgets/hello-world/config.d.ts +2 -1
  996. package/plugins/runtime-modules/builder/widgets/hello-world/config.js +4 -3
  997. package/plugins/runtime-modules/builder/widgets/structure-region/built-in.js +279 -638
  998. package/plugins/runtime-modules/builder/widgets/structure-region/config.js +3 -10
  999. package/plugins/runtime-modules/builder/widgets/structure-region/plugin.js +4 -3
  1000. package/plugins/runtime-modules/builder/widgets/structure-region/tree-operations.d.ts +43 -0
  1001. package/plugins/runtime-modules/builder/widgets/structure-region/tree-operations.js +114 -0
  1002. package/plugins/runtime-modules/builder/widgets/test-block/config.d.ts +2 -1
  1003. package/plugins/runtime-modules/builder/widgets/test-block/config.js +4 -3
  1004. package/plugins/runtime-modules/builder/widgets/workspaces/config.d.ts +1 -1
  1005. package/plugins/runtime-modules/builder/widgets.js +0 -8
  1006. package/plugins/runtime-modules/client-area-contributions/accounting.d.ts +1 -1
  1007. package/plugins/runtime-modules/client-area-contributions/accounting.js +0 -2
  1008. package/plugins/runtime-modules/client-area-contributions/admin.js +0 -8
  1009. package/plugins/runtime-modules/client-area-contributions/app.d.ts +1 -1
  1010. package/plugins/runtime-modules/client-area-contributions/app.js +0 -8
  1011. package/plugins/runtime-modules/client-area-contributions/builder.d.ts +1 -1
  1012. package/plugins/runtime-modules/client-area-contributions/builder.js +0 -2
  1013. package/plugins/runtime-modules/client-area-contributions/common.d.ts +1 -1
  1014. package/plugins/runtime-modules/client-area-contributions/common.js +12 -0
  1015. package/plugins/runtime-modules/client-area-contributions/editor.js +0 -8
  1016. package/plugins/runtime-modules/client-area-contributions/public.d.ts +1 -1
  1017. package/plugins/runtime-modules/client-authoring-module.js +6 -0
  1018. package/plugins/runtime-modules/client-authoring-providers/accounting.d.ts +1 -1
  1019. package/plugins/runtime-modules/client-authoring-providers/admin.d.ts +1 -1
  1020. package/plugins/runtime-modules/client-authoring-providers/app.d.ts +1 -1
  1021. package/plugins/runtime-modules/client-authoring-providers/app.js +0 -6
  1022. package/plugins/runtime-modules/client-authoring-providers/builder.d.ts +1 -1
  1023. package/plugins/runtime-modules/client-authoring-providers/common.d.ts +1 -1
  1024. package/plugins/runtime-modules/client-authoring-providers/common.js +12 -0
  1025. package/plugins/runtime-modules/client-authoring-providers/editor.d.ts +1 -1
  1026. package/plugins/runtime-modules/client-authoring-providers/editor.js +9 -3
  1027. package/plugins/runtime-modules/client-authoring-providers/public.d.ts +1 -1
  1028. package/plugins/runtime-modules/client-authoring-providers/public.js +10 -4
  1029. package/plugins/runtime-modules/client-authoring-widget-module.js +6 -0
  1030. package/plugins/runtime-modules/client-manifests/app.js +0 -5
  1031. package/plugins/runtime-modules/client-manifests/builder.js +0 -4
  1032. package/plugins/runtime-modules/client-manifests/common-data-providers.js +3 -0
  1033. package/plugins/runtime-modules/client-manifests/common.d.ts +1 -0
  1034. package/plugins/runtime-modules/client-manifests/common.js +35 -3
  1035. package/plugins/runtime-modules/client-manifests/editor.js +2 -2
  1036. package/plugins/runtime-modules/client-manifests/public.js +0 -2
  1037. package/plugins/runtime-modules/content-entry-routes.d.ts +105 -0
  1038. package/plugins/runtime-modules/content-entry-routes.js +112 -0
  1039. package/plugins/runtime-modules/contracts.d.ts +2 -4
  1040. package/plugins/runtime-modules/contracts.js +39 -2
  1041. package/plugins/runtime-modules/core/authoring-widgets.js +19 -3
  1042. package/plugins/runtime-modules/core/cards.js +3 -9
  1043. package/plugins/runtime-modules/core/client-data-providers.d.ts +14 -2
  1044. package/plugins/runtime-modules/core/client-data-providers.js +31 -0
  1045. package/plugins/runtime-modules/core/content-entries/categories-table.d.ts +10 -0
  1046. package/plugins/runtime-modules/core/content-entries/categories-table.js +77 -0
  1047. package/plugins/runtime-modules/core/content-entries/curation-options.d.ts +8 -0
  1048. package/plugins/runtime-modules/core/content-entries/curation-options.js +71 -0
  1049. package/plugins/runtime-modules/core/content-entries/record-source.server.d.ts +22 -0
  1050. package/plugins/runtime-modules/core/content-entries/record-source.server.js +19 -0
  1051. package/plugins/runtime-modules/core/content-entries/record.server.d.ts +10 -0
  1052. package/plugins/runtime-modules/core/content-entries/record.server.js +18 -0
  1053. package/plugins/runtime-modules/{news/services → core/content-entries}/table.d.ts +3 -2
  1054. package/plugins/runtime-modules/core/content-entries/table.js +164 -0
  1055. package/plugins/runtime-modules/core/content-entries/tags.d.ts +14 -0
  1056. package/plugins/runtime-modules/core/content-entries/tags.js +40 -0
  1057. package/plugins/runtime-modules/core/data-providers.d.ts +289 -0
  1058. package/plugins/runtime-modules/core/data-providers.js +199 -0
  1059. package/plugins/runtime-modules/core/definition.d.ts +328 -1
  1060. package/plugins/runtime-modules/core/definition.js +2 -2
  1061. package/plugins/runtime-modules/core/form-providers.d.ts +38 -0
  1062. package/plugins/runtime-modules/core/form-providers.js +3 -0
  1063. package/plugins/runtime-modules/core/ids.d.ts +9 -0
  1064. package/plugins/runtime-modules/core/ids.js +9 -0
  1065. package/plugins/runtime-modules/core/messaging/data-providers.d.ts +106 -0
  1066. package/plugins/runtime-modules/core/messaging/data-providers.js +119 -0
  1067. package/plugins/runtime-modules/core/messaging/forms.d.ts +16 -0
  1068. package/plugins/runtime-modules/core/messaging/forms.js +145 -0
  1069. package/plugins/runtime-modules/core/messaging/labels.d.ts +49 -0
  1070. package/plugins/runtime-modules/core/messaging/labels.js +149 -0
  1071. package/plugins/runtime-modules/{threads/services/table.js → core/messaging/thread-inbox-table.js} +22 -22
  1072. package/plugins/runtime-modules/core/server.js +12 -0
  1073. package/plugins/runtime-modules/core/widgets/account/client.js +6 -4
  1074. package/plugins/runtime-modules/core/widgets/account/config.d.ts +3 -1
  1075. package/plugins/runtime-modules/core/widgets/account/config.js +2 -1
  1076. package/plugins/runtime-modules/core/widgets/brand/client.d.ts +3 -1
  1077. package/plugins/runtime-modules/core/widgets/brand/client.js +9 -2
  1078. package/plugins/runtime-modules/core/widgets/brand/config.d.ts +2 -1
  1079. package/plugins/runtime-modules/core/widgets/brand/config.js +1 -1
  1080. package/plugins/runtime-modules/core/widgets/brand/plugin.js +2 -2
  1081. package/plugins/runtime-modules/core/widgets/brand/server.d.ts +2 -2
  1082. package/plugins/runtime-modules/core/widgets/brand/server.js +2 -1
  1083. package/plugins/runtime-modules/core/widgets/breadcrumb/client.js +4 -4
  1084. package/plugins/runtime-modules/core/widgets/breadcrumb/config.d.ts +3 -1
  1085. package/plugins/runtime-modules/core/widgets/breadcrumb/config.js +2 -1
  1086. package/plugins/runtime-modules/core/widgets/button/client.js +7 -5
  1087. package/plugins/runtime-modules/core/widgets/button/config.d.ts +73 -36
  1088. package/plugins/runtime-modules/core/widgets/button/config.js +40 -29
  1089. package/plugins/runtime-modules/core/widgets/card/authoring.js +3 -3
  1090. package/plugins/runtime-modules/core/widgets/card/collection-view-binding.js +58 -15
  1091. package/plugins/runtime-modules/core/widgets/card/config.d.ts +336 -32
  1092. package/plugins/runtime-modules/core/widgets/card/config.js +176 -45
  1093. package/plugins/runtime-modules/core/widgets/card/editor.d.ts +6 -2
  1094. package/plugins/runtime-modules/core/widgets/card/editor.js +133 -25
  1095. package/plugins/runtime-modules/core/widgets/card/plugin.js +13 -6
  1096. package/plugins/runtime-modules/core/widgets/card/server.d.ts +10 -3
  1097. package/plugins/runtime-modules/core/widgets/card/server.js +71 -32
  1098. package/plugins/runtime-modules/core/widgets/cascader/authoring.d.ts +9 -4
  1099. package/plugins/runtime-modules/core/widgets/cascader/config.d.ts +3 -2
  1100. package/plugins/runtime-modules/core/widgets/cascader/config.js +1 -1
  1101. package/plugins/runtime-modules/core/widgets/checkbox-group/config.d.ts +3 -2
  1102. package/plugins/runtime-modules/core/widgets/checkbox-group/config.js +1 -1
  1103. package/plugins/runtime-modules/core/widgets/collection-view/asset-binding.js +20 -2
  1104. package/plugins/runtime-modules/core/widgets/collection-view/config.d.ts +2 -4
  1105. package/plugins/runtime-modules/core/widgets/collection-view/config.js +8 -14
  1106. package/plugins/runtime-modules/core/widgets/color/client.js +1 -1
  1107. package/plugins/runtime-modules/core/widgets/color/config.d.ts +8 -2
  1108. package/plugins/runtime-modules/core/widgets/color/config.js +18 -2
  1109. package/plugins/runtime-modules/core/widgets/color/plugin.js +4 -3
  1110. package/plugins/runtime-modules/core/widgets/command-toolbar/authoring.js +5 -4
  1111. package/plugins/runtime-modules/core/widgets/command-toolbar/client.js +11 -237
  1112. package/plugins/runtime-modules/core/widgets/command-toolbar/config.d.ts +17 -26
  1113. package/plugins/runtime-modules/core/widgets/command-toolbar/config.js +32 -116
  1114. package/plugins/runtime-modules/core/widgets/command-toolbar/plugin.js +4 -3
  1115. package/plugins/runtime-modules/core/widgets/date-input/authoring.d.ts +3 -0
  1116. package/plugins/runtime-modules/core/widgets/date-input/authoring.js +8 -0
  1117. package/plugins/runtime-modules/core/widgets/date-input/client.d.ts +6 -0
  1118. package/plugins/runtime-modules/core/widgets/{date-picker → date-input}/client.js +5 -10
  1119. package/plugins/runtime-modules/core/widgets/{date-picker → date-input}/config.d.ts +6 -4
  1120. package/plugins/runtime-modules/core/widgets/{date-picker → date-input}/config.js +11 -16
  1121. package/plugins/runtime-modules/core/widgets/date-input/plugin.d.ts +3 -0
  1122. package/plugins/runtime-modules/core/widgets/date-input/plugin.js +9 -0
  1123. package/plugins/runtime-modules/core/widgets/date-input/selection.d.ts +8 -0
  1124. package/plugins/runtime-modules/core/widgets/date-input/selection.js +13 -0
  1125. package/plugins/runtime-modules/core/widgets/description/client.d.ts +3 -1
  1126. package/plugins/runtime-modules/core/widgets/description/client.js +5 -21
  1127. package/plugins/runtime-modules/core/widgets/description/config.d.ts +323 -12
  1128. package/plugins/runtime-modules/core/widgets/description/config.js +12 -6
  1129. package/plugins/runtime-modules/core/widgets/description/editor.js +44 -29
  1130. package/plugins/runtime-modules/core/widgets/description/plugin.js +1 -1
  1131. package/plugins/runtime-modules/core/widgets/description/server.d.ts +2 -1
  1132. package/plugins/runtime-modules/core/widgets/description/server.js +14 -31
  1133. package/plugins/runtime-modules/core/widgets/dimension/config.d.ts +1 -1
  1134. package/plugins/runtime-modules/core/widgets/draft-status/client.js +1 -1
  1135. package/plugins/runtime-modules/core/widgets/draft-status/config.d.ts +2 -1
  1136. package/plugins/runtime-modules/core/widgets/draft-status/config.js +1 -1
  1137. package/plugins/runtime-modules/core/widgets/entry-detail/authoring.d.ts +6 -0
  1138. package/plugins/runtime-modules/core/widgets/entry-detail/authoring.js +14 -0
  1139. package/plugins/runtime-modules/core/widgets/entry-detail/client.d.ts +9 -0
  1140. package/plugins/runtime-modules/core/widgets/entry-detail/client.js +7 -0
  1141. package/plugins/runtime-modules/core/widgets/entry-detail/config.d.ts +62 -0
  1142. package/plugins/runtime-modules/core/widgets/entry-detail/config.js +35 -0
  1143. package/plugins/runtime-modules/core/widgets/entry-detail/plugin.d.ts +3 -0
  1144. package/plugins/runtime-modules/core/widgets/entry-detail/plugin.js +8 -0
  1145. package/plugins/runtime-modules/core/widgets/entry-detail/server.d.ts +18 -0
  1146. package/plugins/runtime-modules/core/widgets/entry-detail/server.js +42 -0
  1147. package/plugins/runtime-modules/core/widgets/entry-header/authoring.d.ts +6 -0
  1148. package/plugins/runtime-modules/core/widgets/entry-header/authoring.js +14 -0
  1149. package/plugins/runtime-modules/core/widgets/entry-header/client.d.ts +12 -0
  1150. package/plugins/runtime-modules/core/widgets/entry-header/client.js +10 -0
  1151. package/plugins/runtime-modules/core/widgets/entry-header/config.d.ts +77 -0
  1152. package/plugins/runtime-modules/core/widgets/entry-header/config.js +52 -0
  1153. package/plugins/runtime-modules/core/widgets/entry-header/plugin.d.ts +3 -0
  1154. package/plugins/runtime-modules/core/widgets/entry-header/plugin.js +8 -0
  1155. package/plugins/runtime-modules/core/widgets/entry-header/server.d.ts +15 -0
  1156. package/plugins/runtime-modules/core/widgets/entry-header/server.js +40 -0
  1157. package/plugins/runtime-modules/core/widgets/entry-list/authoring.d.ts +2 -0
  1158. package/plugins/runtime-modules/{news/widgets/news-list → core/widgets/entry-list}/authoring.js +5 -5
  1159. package/plugins/runtime-modules/core/widgets/entry-list/client.d.ts +95 -0
  1160. package/plugins/runtime-modules/core/widgets/entry-list/client.js +130 -0
  1161. package/plugins/runtime-modules/core/widgets/entry-list/config.d.ts +201 -0
  1162. package/plugins/runtime-modules/core/widgets/entry-list/config.js +153 -0
  1163. package/plugins/runtime-modules/core/widgets/entry-list/plugin.d.ts +3 -0
  1164. package/plugins/runtime-modules/core/widgets/entry-list/plugin.js +11 -0
  1165. package/plugins/runtime-modules/core/widgets/entry-list/server.d.ts +27 -0
  1166. package/plugins/runtime-modules/core/widgets/entry-list/server.js +85 -0
  1167. package/plugins/runtime-modules/core/widgets/entry-list/view.server.d.ts +33 -0
  1168. package/plugins/runtime-modules/core/widgets/entry-list/view.server.js +104 -0
  1169. package/plugins/runtime-modules/core/widgets/float-button/authoring.d.ts +3 -0
  1170. package/plugins/runtime-modules/core/widgets/float-button/authoring.js +16 -0
  1171. package/plugins/runtime-modules/core/widgets/float-button/client.d.ts +12 -0
  1172. package/plugins/runtime-modules/core/widgets/float-button/client.js +24 -0
  1173. package/plugins/runtime-modules/core/widgets/float-button/config.d.ts +97 -0
  1174. package/plugins/runtime-modules/core/widgets/float-button/config.js +129 -0
  1175. package/plugins/runtime-modules/core/widgets/float-button/plugin.d.ts +3 -0
  1176. package/plugins/runtime-modules/core/widgets/float-button/plugin.js +29 -0
  1177. package/plugins/runtime-modules/core/widgets/form/config.d.ts +1 -1
  1178. package/plugins/runtime-modules/core/widgets/form/config.js +18 -1
  1179. package/plugins/runtime-modules/core/widgets/form-preview/client.js +2 -1
  1180. package/plugins/runtime-modules/core/widgets/form-preview/config.d.ts +2 -1
  1181. package/plugins/runtime-modules/core/widgets/form-preview/config.js +1 -1
  1182. package/plugins/runtime-modules/core/widgets/gallery/authoring.js +16 -3
  1183. package/plugins/runtime-modules/core/widgets/gallery/client.d.ts +5 -14
  1184. package/plugins/runtime-modules/core/widgets/gallery/client.js +77 -57
  1185. package/plugins/runtime-modules/core/widgets/gallery/config.d.ts +89 -12
  1186. package/plugins/runtime-modules/core/widgets/gallery/config.js +28 -20
  1187. package/plugins/runtime-modules/core/widgets/gallery/plugin.js +2 -3
  1188. package/plugins/runtime-modules/core/widgets/gallery/server.d.ts +17 -0
  1189. package/plugins/runtime-modules/core/widgets/gallery/server.js +42 -0
  1190. package/plugins/runtime-modules/core/widgets/header-navigation/client.js +3 -3
  1191. package/plugins/runtime-modules/core/widgets/header-navigation/config.d.ts +2 -1
  1192. package/plugins/runtime-modules/core/widgets/header-navigation/config.js +1 -1
  1193. package/plugins/runtime-modules/core/widgets/html/config.d.ts +3 -1
  1194. package/plugins/runtime-modules/core/widgets/html/config.js +2 -1
  1195. package/plugins/runtime-modules/core/widgets/icon/config.d.ts +2 -1
  1196. package/plugins/runtime-modules/core/widgets/icon/config.js +1 -1
  1197. package/plugins/runtime-modules/core/widgets/image/client.js +8 -40
  1198. package/plugins/runtime-modules/core/widgets/image/config.d.ts +3 -1
  1199. package/plugins/runtime-modules/core/widgets/image/config.js +7 -18
  1200. package/plugins/runtime-modules/core/widgets/image/editor.js +9 -27
  1201. package/plugins/runtime-modules/core/widgets/input/client.js +24 -7
  1202. package/plugins/runtime-modules/core/widgets/input/config.d.ts +2 -1
  1203. package/plugins/runtime-modules/core/widgets/input/config.js +1 -1
  1204. package/plugins/runtime-modules/core/widgets/length/config.d.ts +1 -1
  1205. package/plugins/runtime-modules/core/widgets/locale/config.d.ts +1 -0
  1206. package/plugins/runtime-modules/core/widgets/locale/config.js +1 -0
  1207. package/plugins/runtime-modules/core/widgets/markdown/config.d.ts +13 -48
  1208. package/plugins/runtime-modules/core/widgets/markdown/config.js +25 -12
  1209. package/plugins/runtime-modules/core/widgets/markdown-toc/client.js +2 -2
  1210. package/plugins/runtime-modules/core/widgets/markdown-toc/config.d.ts +2 -1
  1211. package/plugins/runtime-modules/core/widgets/markdown-toc/config.js +1 -1
  1212. package/plugins/runtime-modules/core/widgets/multi-select/config.d.ts +3 -3
  1213. package/plugins/runtime-modules/core/widgets/multi-select/config.js +1 -3
  1214. package/plugins/runtime-modules/core/widgets/number-input/config.d.ts +1 -1
  1215. package/plugins/runtime-modules/core/widgets/otp/config.d.ts +2 -1
  1216. package/plugins/runtime-modules/core/widgets/otp/config.js +1 -1
  1217. package/plugins/runtime-modules/core/widgets/page-title/server.d.ts +0 -1
  1218. package/plugins/runtime-modules/core/widgets/page-title/server.js +1 -1
  1219. package/plugins/runtime-modules/core/widgets/pagination/client.js +2 -1
  1220. package/plugins/runtime-modules/core/widgets/pagination/config.d.ts +2 -1
  1221. package/plugins/runtime-modules/core/widgets/pagination/config.js +1 -1
  1222. package/plugins/runtime-modules/core/widgets/quick-links/client.js +9 -6
  1223. package/plugins/runtime-modules/core/widgets/quick-links/config.d.ts +2 -1
  1224. package/plugins/runtime-modules/core/widgets/quick-links/config.js +1 -1
  1225. package/plugins/runtime-modules/core/widgets/rate/config.d.ts +3 -1
  1226. package/plugins/runtime-modules/core/widgets/rate/config.js +2 -1
  1227. package/plugins/runtime-modules/core/widgets/record/authoring.d.ts +1 -2
  1228. package/plugins/runtime-modules/core/widgets/record/authoring.js +17 -5
  1229. package/plugins/runtime-modules/core/widgets/record/client.js +9 -8
  1230. package/plugins/runtime-modules/core/widgets/record/config.d.ts +2 -1
  1231. package/plugins/runtime-modules/core/widgets/record/config.js +3 -2
  1232. package/plugins/runtime-modules/core/widgets/result/config.d.ts +92 -21
  1233. package/plugins/runtime-modules/core/widgets/result/config.js +1 -1
  1234. package/plugins/runtime-modules/core/widgets/segmented/authoring.d.ts +3 -1
  1235. package/plugins/runtime-modules/core/widgets/segmented/authoring.js +24 -2
  1236. package/plugins/runtime-modules/core/widgets/segmented/client.d.ts +4 -1
  1237. package/plugins/runtime-modules/core/widgets/segmented/client.js +5 -1
  1238. package/plugins/runtime-modules/core/widgets/segmented/config.d.ts +3 -2
  1239. package/plugins/runtime-modules/core/widgets/segmented/config.js +3 -3
  1240. package/plugins/runtime-modules/core/widgets/select-box/config.d.ts +3 -2
  1241. package/plugins/runtime-modules/core/widgets/select-box/config.js +1 -1
  1242. package/plugins/runtime-modules/core/widgets/sidebar-navigation/client.js +5 -5
  1243. package/plugins/runtime-modules/core/widgets/sidebar-navigation/config.d.ts +2 -1
  1244. package/plugins/runtime-modules/core/widgets/sidebar-navigation/config.js +1 -1
  1245. package/plugins/runtime-modules/core/widgets/simple-text/client.js +2 -1
  1246. package/plugins/runtime-modules/core/widgets/simple-text/config.d.ts +92 -21
  1247. package/plugins/runtime-modules/core/widgets/simple-text/config.js +1 -1
  1248. package/plugins/runtime-modules/core/widgets/simple-text/editor.js +1 -2
  1249. package/plugins/runtime-modules/core/widgets/slider/config.d.ts +2 -1
  1250. package/plugins/runtime-modules/core/widgets/slider/config.js +1 -1
  1251. package/plugins/runtime-modules/core/widgets/slot-upload/client.js +46 -20
  1252. package/plugins/runtime-modules/core/widgets/slot-upload/config.d.ts +2 -14
  1253. package/plugins/runtime-modules/core/widgets/slot-upload/config.js +3 -3
  1254. package/plugins/runtime-modules/core/widgets/steps/authoring.d.ts +3 -0
  1255. package/plugins/runtime-modules/core/widgets/steps/authoring.js +28 -0
  1256. package/plugins/runtime-modules/core/widgets/steps/client.d.ts +9 -0
  1257. package/plugins/runtime-modules/core/widgets/steps/client.js +32 -0
  1258. package/plugins/runtime-modules/core/widgets/steps/config.d.ts +156 -0
  1259. package/plugins/runtime-modules/core/widgets/steps/config.js +69 -0
  1260. package/plugins/runtime-modules/core/widgets/steps/plugin.d.ts +3 -0
  1261. package/plugins/runtime-modules/core/widgets/steps/plugin.js +38 -0
  1262. package/plugins/runtime-modules/core/widgets/switch/config.d.ts +1 -1
  1263. package/plugins/runtime-modules/core/widgets/switch/config.js +1 -1
  1264. package/plugins/runtime-modules/core/widgets/table/client.js +153 -80
  1265. package/plugins/runtime-modules/core/widgets/table/config.d.ts +248 -22
  1266. package/plugins/runtime-modules/core/widgets/table/config.js +54 -6
  1267. package/plugins/runtime-modules/core/widgets/theme-mode-switch/authoring.js +3 -2
  1268. package/plugins/runtime-modules/core/widgets/theme-mode-switch/client.d.ts +9 -5
  1269. package/plugins/runtime-modules/core/widgets/theme-mode-switch/client.js +15 -10
  1270. package/plugins/runtime-modules/core/widgets/theme-mode-switch/config.d.ts +6 -10
  1271. package/plugins/runtime-modules/core/widgets/theme-mode-switch/config.js +3 -5
  1272. package/plugins/runtime-modules/core/widgets/theme-mode-switch/plugin.js +3 -13
  1273. package/plugins/runtime-modules/core/widgets/theme-mode-switch/server.d.ts +9 -0
  1274. package/plugins/runtime-modules/core/widgets/theme-mode-switch/server.js +23 -0
  1275. package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/client.d.ts +1 -1
  1276. package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/client.js +104 -16
  1277. package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/config.d.ts +13 -4
  1278. package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/config.js +8 -2
  1279. package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/server.js +1 -1
  1280. package/plugins/runtime-modules/{threads → core}/widgets/thread-widget-config.d.ts +7 -0
  1281. package/plugins/runtime-modules/{threads → core}/widgets/thread-widget-config.js +4 -4
  1282. package/plugins/runtime-modules/core/widgets/timeline/authoring.d.ts +3 -0
  1283. package/plugins/runtime-modules/core/widgets/timeline/authoring.js +11 -0
  1284. package/plugins/runtime-modules/core/widgets/timeline/client.d.ts +10 -0
  1285. package/plugins/runtime-modules/core/widgets/timeline/client.js +75 -0
  1286. package/plugins/runtime-modules/core/widgets/timeline/config.d.ts +116 -0
  1287. package/plugins/runtime-modules/core/widgets/timeline/config.js +102 -0
  1288. package/plugins/runtime-modules/core/widgets/timeline/plugin.d.ts +3 -0
  1289. package/plugins/runtime-modules/core/widgets/timeline/plugin.js +45 -0
  1290. package/plugins/runtime-modules/core/widgets/tour-button/authoring.d.ts +3 -0
  1291. package/plugins/runtime-modules/core/widgets/tour-button/authoring.js +10 -0
  1292. package/plugins/runtime-modules/core/widgets/tour-button/client.d.ts +13 -0
  1293. package/plugins/runtime-modules/core/widgets/tour-button/client.js +36 -0
  1294. package/plugins/runtime-modules/core/widgets/tour-button/config.d.ts +39 -0
  1295. package/plugins/runtime-modules/core/widgets/tour-button/config.js +28 -0
  1296. package/plugins/runtime-modules/core/widgets/tour-button/plugin.d.ts +3 -0
  1297. package/plugins/runtime-modules/core/widgets/tour-button/plugin.js +8 -0
  1298. package/plugins/runtime-modules/core/widgets/tour-button/server.d.ts +8 -0
  1299. package/plugins/runtime-modules/core/widgets/tour-button/server.js +14 -0
  1300. package/plugins/runtime-modules/core/widgets/tree/client.js +41 -45
  1301. package/plugins/runtime-modules/core/widgets/tree/config.js +1 -1
  1302. package/plugins/runtime-modules/core/widgets.js +72 -6
  1303. package/plugins/runtime-modules/dashboard/authoring-client.d.ts +0 -1
  1304. package/plugins/runtime-modules/dashboard/authoring-client.js +1 -1
  1305. package/plugins/runtime-modules/dashboard/clients/dashboard-card-view.js +55 -17
  1306. package/plugins/runtime-modules/dashboard/definition.d.ts +1 -4
  1307. package/plugins/runtime-modules/dashboard/definition.js +2 -8
  1308. package/plugins/runtime-modules/dashboard/ids.d.ts +9 -0
  1309. package/plugins/runtime-modules/dashboard/ids.js +9 -0
  1310. package/plugins/runtime-modules/dashboard/module.d.ts +39 -1
  1311. package/plugins/runtime-modules/dashboard/module.js +8 -3
  1312. package/plugins/runtime-modules/dashboard/services/collection.js +2 -2
  1313. package/plugins/runtime-modules/dashboard/trees/admin-dashboard-label-set.js +3 -2
  1314. package/plugins/runtime-modules/dashboard/trees/area-dashboard-label-set.d.ts +2 -0
  1315. package/plugins/runtime-modules/dashboard/trees/area-dashboard-label-set.js +7 -2
  1316. package/plugins/runtime-modules/dashboard/trees/dashboard-cards-page-tree.d.ts +37 -0
  1317. package/plugins/runtime-modules/dashboard/trees/dashboard-cards-page-tree.js +69 -0
  1318. package/plugins/runtime-modules/dashboard/trees/phi-default-admin-dashboard-page-tree.js +6 -52
  1319. package/plugins/runtime-modules/dashboard/trees/phi-default-area-dashboard-page-tree.js +7 -46
  1320. package/plugins/runtime-modules/dashboard/trees/phi-default-builder-dashboard-page-tree.js +21 -17
  1321. package/plugins/runtime-modules/descriptor-compiler.d.ts +3 -13
  1322. package/plugins/runtime-modules/descriptor-compiler.js +162 -71
  1323. package/plugins/runtime-modules/editor/client-data-providers.d.ts +5 -0
  1324. package/plugins/runtime-modules/editor/client-data-providers.js +9 -0
  1325. package/plugins/runtime-modules/editor/data-providers.d.ts +83 -0
  1326. package/plugins/runtime-modules/editor/data-providers.js +75 -0
  1327. package/plugins/runtime-modules/editor/definition.d.ts +76 -5
  1328. package/plugins/runtime-modules/editor/definition.js +4 -8
  1329. package/plugins/runtime-modules/editor/ids.d.ts +19 -0
  1330. package/plugins/runtime-modules/editor/ids.js +26 -0
  1331. package/plugins/runtime-modules/editor/module.d.ts +89 -1
  1332. package/plugins/runtime-modules/editor/module.js +8 -3
  1333. package/plugins/runtime-modules/editor/presets.d.ts +39 -1
  1334. package/plugins/runtime-modules/editor/presets.js +26 -3
  1335. package/plugins/runtime-modules/editor/services/releases-table.d.ts +10 -0
  1336. package/plugins/runtime-modules/editor/services/releases-table.js +182 -0
  1337. package/plugins/runtime-modules/editor/tour.d.ts +29 -0
  1338. package/plugins/runtime-modules/editor/tour.js +34 -0
  1339. package/plugins/runtime-modules/editor/trees/editor-releases-label-set.d.ts +35 -0
  1340. package/plugins/runtime-modules/editor/trees/editor-releases-label-set.js +54 -0
  1341. package/plugins/runtime-modules/editor/trees/phi-default-editor-area-preset-tree.js +12 -180
  1342. package/plugins/runtime-modules/editor/trees/phi-default-editor-releases-page-tree.d.ts +13 -0
  1343. package/plugins/runtime-modules/editor/trees/phi-default-editor-releases-page-tree.js +134 -0
  1344. package/plugins/runtime-modules/form-builder/client.js +1 -1
  1345. package/{components/forms/form-builder-controller-plugin.d.ts → plugins/runtime-modules/form-builder/controller/client.d.ts} +2 -2
  1346. package/{components/forms/form-builder-controller-plugin.js → plugins/runtime-modules/form-builder/controller/client.js} +2 -2
  1347. package/plugins/runtime-modules/groups/addresses.d.ts +3 -0
  1348. package/plugins/runtime-modules/groups/addresses.js +11 -0
  1349. package/plugins/runtime-modules/groups/controller/client.d.ts +5 -0
  1350. package/plugins/runtime-modules/groups/controller/client.js +43 -30
  1351. package/plugins/runtime-modules/groups/controller/definition.d.ts +5 -0
  1352. package/plugins/runtime-modules/groups/controller/definition.js +10 -0
  1353. package/plugins/runtime-modules/groups/data-providers.d.ts +2 -2
  1354. package/plugins/runtime-modules/groups/data-providers.js +3 -3
  1355. package/plugins/runtime-modules/groups/definition.d.ts +3 -3
  1356. package/plugins/runtime-modules/groups/definition.js +2 -2
  1357. package/plugins/runtime-modules/groups/forms.d.ts +1 -6
  1358. package/plugins/runtime-modules/groups/forms.js +65 -30
  1359. package/plugins/runtime-modules/groups/ids.d.ts +9 -0
  1360. package/plugins/runtime-modules/groups/ids.js +9 -0
  1361. package/plugins/runtime-modules/groups/labels.d.ts +5 -0
  1362. package/plugins/runtime-modules/groups/labels.js +15 -3
  1363. package/plugins/runtime-modules/groups/presets.js +2 -2
  1364. package/plugins/runtime-modules/groups/services/options.js +4 -3
  1365. package/plugins/runtime-modules/groups/services/table.js +32 -36
  1366. package/plugins/runtime-modules/groups/trees/phi-default-admin-groups-page-tree.d.ts +5 -1
  1367. package/plugins/runtime-modules/groups/trees/phi-default-admin-groups-page-tree.js +259 -146
  1368. package/plugins/runtime-modules/groups/trees/phi-default-app-groups-page-tree.js +3 -4
  1369. package/plugins/runtime-modules/localization/cards.js +11 -7
  1370. package/plugins/runtime-modules/localization/controller/client.d.ts +12 -4
  1371. package/plugins/runtime-modules/localization/controller/client.js +31 -131
  1372. package/plugins/runtime-modules/localization/controller/definition.d.ts +19 -4
  1373. package/plugins/runtime-modules/localization/controller/definition.js +7 -4
  1374. package/plugins/runtime-modules/localization/data-providers.js +1 -1
  1375. package/plugins/runtime-modules/localization/definition.d.ts +2 -2
  1376. package/plugins/runtime-modules/localization/definition.js +3 -3
  1377. package/plugins/runtime-modules/localization/forms.d.ts +0 -4
  1378. package/plugins/runtime-modules/localization/forms.js +35 -44
  1379. package/plugins/runtime-modules/localization/ids.d.ts +9 -0
  1380. package/plugins/runtime-modules/localization/ids.js +9 -0
  1381. package/plugins/runtime-modules/localization/presets.d.ts +45 -1
  1382. package/plugins/runtime-modules/localization/presets.js +16 -12
  1383. package/plugins/runtime-modules/localization/server.js +1 -0
  1384. package/plugins/runtime-modules/localization/services/options.js +16 -8
  1385. package/plugins/runtime-modules/localization/services/table.js +24 -44
  1386. package/plugins/runtime-modules/localization/tour.d.ts +35 -0
  1387. package/plugins/runtime-modules/localization/tour.js +42 -0
  1388. package/plugins/runtime-modules/localization/trees/admin-locales-label-set.js +3 -2
  1389. package/plugins/runtime-modules/localization/trees/editor-translations-label-set.js +3 -2
  1390. package/plugins/runtime-modules/localization/trees/editor-translations-widget-label-set.d.ts +2 -0
  1391. package/plugins/runtime-modules/localization/trees/editor-translations-widget-label-set.js +7 -2
  1392. package/plugins/runtime-modules/localization/trees/phi-default-admin-locales-page-tree.js +3 -9
  1393. package/plugins/runtime-modules/localization/trees/phi-default-editor-translations-page-tree.js +40 -24
  1394. package/plugins/runtime-modules/module-labels.server.js +21 -27
  1395. package/plugins/runtime-modules/news/authoring-widgets.js +3 -6
  1396. package/plugins/runtime-modules/news/definition.d.ts +9 -139
  1397. package/plugins/runtime-modules/news/definition.js +8 -18
  1398. package/plugins/runtime-modules/news/forms.d.ts +3 -26
  1399. package/plugins/runtime-modules/news/forms.js +10 -203
  1400. package/plugins/runtime-modules/news/ids.d.ts +19 -36
  1401. package/plugins/runtime-modules/news/ids.js +20 -118
  1402. package/plugins/runtime-modules/news/labels.d.ts +4 -0
  1403. package/plugins/runtime-modules/news/labels.js +27 -0
  1404. package/plugins/runtime-modules/news/module.d.ts +4 -126
  1405. package/plugins/runtime-modules/news/presets.d.ts +51 -15
  1406. package/plugins/runtime-modules/news/presets.js +20 -62
  1407. package/plugins/runtime-modules/news/server.js +1 -2
  1408. package/plugins/runtime-modules/observability/definition.d.ts +1 -1
  1409. package/plugins/runtime-modules/observability/definition.js +2 -2
  1410. package/plugins/runtime-modules/observability/ids.d.ts +9 -0
  1411. package/plugins/runtime-modules/observability/ids.js +9 -0
  1412. package/plugins/runtime-modules/observability/module.d.ts +1 -1
  1413. package/plugins/runtime-modules/observability/services/table.js +11 -24
  1414. package/plugins/runtime-modules/observability/trees/admin-logs-label-set.js +3 -2
  1415. package/plugins/runtime-modules/observability/trees/phi-default-admin-logs-page-tree.js +2 -7
  1416. package/plugins/runtime-modules/phi-default-site-area-preset-tree.js +38 -37
  1417. package/plugins/runtime-modules/pub-area-preset.js +7 -2
  1418. package/plugins/runtime-modules/public/module.d.ts +1 -1
  1419. package/plugins/runtime-modules/public/trees/phi-default-pub-contact-page-tree.js +25 -20
  1420. package/plugins/runtime-modules/public/trees/phi-default-pub-error-page-tree.js +15 -10
  1421. package/plugins/runtime-modules/public/trees/phi-default-pub-home-page-tree.js +11 -20
  1422. package/plugins/runtime-modules/public/trees/phi-default-pub-terms-page-tree.js +11 -20
  1423. package/plugins/runtime-modules/public/trees/phi-default-pub-unsubscribe-page-tree.js +11 -20
  1424. package/plugins/runtime-modules/public/trees/phi-default-pub-welcome-page-tree.js +0 -1
  1425. package/plugins/runtime-modules/resolver.d.ts +0 -4
  1426. package/plugins/runtime-modules/resolver.js +17 -2
  1427. package/plugins/runtime-modules/revisions/authoring-client.d.ts +0 -1
  1428. package/plugins/runtime-modules/revisions/authoring-client.js +1 -1
  1429. package/plugins/runtime-modules/revisions/controller/client.d.ts +23 -5
  1430. package/plugins/runtime-modules/revisions/controller/client.js +33 -70
  1431. package/plugins/runtime-modules/revisions/controller/definition.d.ts +30 -5
  1432. package/plugins/runtime-modules/revisions/controller/definition.js +10 -3
  1433. package/plugins/runtime-modules/revisions/data-providers.d.ts +7 -0
  1434. package/plugins/runtime-modules/revisions/data-providers.js +2 -0
  1435. package/plugins/runtime-modules/revisions/definition.d.ts +7 -0
  1436. package/plugins/runtime-modules/revisions/forms.js +7 -16
  1437. package/plugins/runtime-modules/revisions/services/table.js +63 -11
  1438. package/plugins/runtime-modules/revisions/trees/phi-default-builder-revisions-page-tree.js +129 -22
  1439. package/plugins/runtime-modules/revisions/types.d.ts +3 -0
  1440. package/plugins/runtime-modules/settings.d.ts +9 -1
  1441. package/plugins/runtime-modules/settings.js +19 -10
  1442. package/plugins/runtime-modules/shell-tree-composition.d.ts +4 -4
  1443. package/plugins/runtime-modules/shell-tree-composition.js +2 -0
  1444. package/plugins/runtime-modules/sidebar-route.d.ts +2 -2
  1445. package/plugins/runtime-modules/sidebar-route.js +2 -3
  1446. package/plugins/runtime-modules/site-module-client-manifests.d.ts +1 -2
  1447. package/plugins/runtime-modules/site-module-client-manifests.js +1 -1
  1448. package/plugins/runtime-modules/theme/brand-theme-model.d.ts +170 -0
  1449. package/plugins/runtime-modules/theme/brand-theme-model.js +164 -0
  1450. package/plugins/runtime-modules/theme/controller/client.d.ts +4 -9
  1451. package/plugins/runtime-modules/theme/controller/client.js +7 -5
  1452. package/plugins/runtime-modules/theme/controller/definition.d.ts +14 -8
  1453. package/plugins/runtime-modules/theme/controller/definition.js +8 -14
  1454. package/plugins/runtime-modules/theme/controller/runtime.d.ts +11 -0
  1455. package/plugins/runtime-modules/theme/controller/runtime.js +627 -0
  1456. package/plugins/runtime-modules/theme/controller/server-definition.d.ts +4 -9
  1457. package/plugins/runtime-modules/theme/controller/server-definition.js +8 -1
  1458. package/plugins/runtime-modules/theme/materialize-images.js +9 -1
  1459. package/plugins/runtime-modules/theme/presets.d.ts +44 -2
  1460. package/plugins/runtime-modules/theme/presets.js +16 -12
  1461. package/plugins/runtime-modules/theme/tour.d.ts +36 -0
  1462. package/plugins/runtime-modules/theme/tour.js +43 -0
  1463. package/plugins/runtime-modules/theme/trees/phi-default-builder-theme-page-tree.js +60 -42
  1464. package/plugins/runtime-modules/theme/widgets/brand-controls/authoring.d.ts +10 -10
  1465. package/plugins/runtime-modules/theme/widgets/brand-controls/client.d.ts +0 -6
  1466. package/plugins/runtime-modules/theme/widgets/brand-controls/client.js +177 -934
  1467. package/plugins/runtime-modules/theme/widgets/brand-controls/plugin.js +3 -2
  1468. package/plugins/runtime-modules/theme-descriptors.d.ts +0 -58
  1469. package/plugins/runtime-modules/theme-descriptors.js +1 -1
  1470. package/plugins/runtime-modules/threads/addresses.d.ts +15 -8
  1471. package/plugins/runtime-modules/threads/addresses.js +30 -23
  1472. package/plugins/runtime-modules/threads/authoring-widgets.js +3 -5
  1473. package/plugins/runtime-modules/threads/cards.js +4 -6
  1474. package/plugins/runtime-modules/threads/client-data-providers.js +0 -5
  1475. package/plugins/runtime-modules/threads/controller/client.d.ts +0 -6
  1476. package/plugins/runtime-modules/threads/controller/client.js +20 -49
  1477. package/plugins/runtime-modules/threads/controller/definition.d.ts +0 -6
  1478. package/plugins/runtime-modules/threads/controller/definition.js +14 -29
  1479. package/plugins/runtime-modules/threads/data-providers.d.ts +3 -98
  1480. package/plugins/runtime-modules/threads/data-providers.js +1 -104
  1481. package/plugins/runtime-modules/threads/definition.d.ts +6 -99
  1482. package/plugins/runtime-modules/threads/definition.js +5 -3
  1483. package/plugins/runtime-modules/threads/forms.d.ts +3 -22
  1484. package/plugins/runtime-modules/threads/forms.js +18 -145
  1485. package/plugins/runtime-modules/threads/ids.d.ts +9 -0
  1486. package/plugins/runtime-modules/threads/ids.js +9 -0
  1487. package/{components/widgets/label-sets/threads.d.ts → plugins/runtime-modules/threads/labels.d.ts} +2 -40
  1488. package/plugins/runtime-modules/threads/labels.js +156 -0
  1489. package/plugins/runtime-modules/threads/presets.js +33 -15
  1490. package/plugins/runtime-modules/threads/server.js +1 -0
  1491. package/plugins/runtime-modules/threads/services/options.js +4 -8
  1492. package/plugins/runtime-modules/threads/trees/{phi-default-app-threads-page-tree.d.ts → phi-default-threads-page-tree.d.ts} +3 -1
  1493. package/plugins/runtime-modules/threads/trees/{phi-default-app-threads-page-tree.js → phi-default-threads-page-tree.js} +185 -187
  1494. package/plugins/runtime-modules/threads/widgets.js +5 -14
  1495. package/plugins/runtime-modules/tour/authoring-widgets.d.ts +2 -0
  1496. package/plugins/runtime-modules/tour/authoring-widgets.js +4 -0
  1497. package/plugins/runtime-modules/tour/authoring.d.ts +1 -0
  1498. package/plugins/runtime-modules/tour/authoring.js +8 -0
  1499. package/plugins/runtime-modules/tour/client.d.ts +1 -0
  1500. package/plugins/runtime-modules/{admin → tour}/client.js +1 -1
  1501. package/plugins/runtime-modules/tour/controller/address.d.ts +1 -0
  1502. package/plugins/runtime-modules/tour/controller/address.js +3 -0
  1503. package/plugins/runtime-modules/tour/controller/client.d.ts +39 -0
  1504. package/plugins/runtime-modules/tour/controller/client.js +162 -0
  1505. package/plugins/runtime-modules/tour/controller/definition.d.ts +48 -0
  1506. package/plugins/runtime-modules/tour/controller/definition.js +41 -0
  1507. package/plugins/runtime-modules/tour/controller/progress.d.ts +19 -0
  1508. package/plugins/runtime-modules/tour/controller/progress.js +24 -0
  1509. package/plugins/runtime-modules/tour/definition.d.ts +27 -0
  1510. package/plugins/runtime-modules/tour/definition.js +32 -0
  1511. package/plugins/runtime-modules/tour/ids.d.ts +7 -0
  1512. package/plugins/runtime-modules/tour/ids.js +8 -0
  1513. package/plugins/runtime-modules/tour/module.d.ts +1 -0
  1514. package/plugins/runtime-modules/tour/module.js +4 -0
  1515. package/plugins/runtime-modules/tour/server.d.ts +1 -0
  1516. package/plugins/runtime-modules/tour/server.js +14 -0
  1517. package/plugins/runtime-modules/user-management/cards.js +3 -5
  1518. package/plugins/runtime-modules/user-management/controller/client.d.ts +14 -8
  1519. package/plugins/runtime-modules/user-management/controller/client.js +50 -181
  1520. package/plugins/runtime-modules/user-management/controller/definition.d.ts +21 -8
  1521. package/plugins/runtime-modules/user-management/controller/definition.js +54 -26
  1522. package/plugins/runtime-modules/user-management/definition.d.ts +1 -1
  1523. package/plugins/runtime-modules/user-management/definition.js +2 -2
  1524. package/plugins/runtime-modules/user-management/forms.d.ts +0 -4
  1525. package/plugins/runtime-modules/user-management/forms.js +34 -34
  1526. package/plugins/runtime-modules/user-management/ids.d.ts +9 -0
  1527. package/plugins/runtime-modules/user-management/ids.js +9 -0
  1528. package/plugins/runtime-modules/user-management/server.js +1 -0
  1529. package/plugins/runtime-modules/user-management/services/table.js +15 -48
  1530. package/plugins/runtime-modules/user-management/trees/admin-users-label-set.js +3 -2
  1531. package/plugins/runtime-modules/user-management/trees/phi-default-admin-users-page-tree.js +82 -19
  1532. package/plugins/runtime-modules/video/widgets/embed/config.d.ts +2 -10
  1533. package/plugins/runtime-modules/video/widgets/embed/config.js +5 -4
  1534. package/runtime-data-provider-client.d.ts +2 -0
  1535. package/runtime-data-provider-client.js +1 -0
  1536. package/server-helpers/area-root-door-warmup.js +11 -4
  1537. package/server-helpers/area-root-route.d.ts +5 -7
  1538. package/server-helpers/area-root-route.js +5 -11
  1539. package/server-helpers/cms-area.js +3 -1
  1540. package/server-helpers/cms-bound-content.d.ts +38 -0
  1541. package/server-helpers/cms-bound-content.js +97 -0
  1542. package/server-helpers/cms-link-targets.d.ts +8 -1
  1543. package/server-helpers/cms-link-targets.js +13 -1
  1544. package/server-helpers/cms-lookup.d.ts +22 -0
  1545. package/server-helpers/cms-lookup.js +56 -0
  1546. package/server-helpers/cms-node-features.d.ts +17 -3
  1547. package/server-helpers/cms-node-features.js +22 -16
  1548. package/server-helpers/cms-request.js +50 -25
  1549. package/server-helpers/cms-review.d.ts +14 -1
  1550. package/server-helpers/cms-review.js +20 -6
  1551. package/server-helpers/cms-root.d.ts +3 -1
  1552. package/server-helpers/cms-root.js +42 -44
  1553. package/server-helpers/cms-route.d.ts +2 -1
  1554. package/server-helpers/cms-route.js +8 -1
  1555. package/server-helpers/content-entry-page.d.ts +16 -0
  1556. package/server-helpers/content-entry-page.js +24 -0
  1557. package/server-helpers/page-tour.d.ts +11 -0
  1558. package/server-helpers/page-tour.js +26 -0
  1559. package/server-helpers/public-login-route.d.ts +10 -5
  1560. package/server-helpers/public-login-route.js +49 -28
  1561. package/server-helpers/record-source.d.ts +31 -0
  1562. package/server-helpers/record-source.js +44 -0
  1563. package/server-helpers/request-locale.js +23 -9
  1564. package/server-helpers/request-memo.d.ts +14 -0
  1565. package/server-helpers/request-memo.js +72 -0
  1566. package/server-helpers/request-runtime.d.ts +9 -2
  1567. package/server-helpers/request-runtime.js +2 -2
  1568. package/server-helpers/request-search-params.d.ts +12 -0
  1569. package/server-helpers/request-search-params.js +21 -0
  1570. package/server-helpers/root-layout.js +2 -13
  1571. package/server-helpers/runtime.d.ts +1 -41
  1572. package/server-helpers/runtime.js +51 -46
  1573. package/server-helpers/translate.d.ts +3 -1
  1574. package/server-helpers/translate.js +13 -7
  1575. package/styles/builder-scaffold.css +0 -112
  1576. package/styles/control-shape.css +14 -0
  1577. package/styles/controls.css +51 -0
  1578. package/styles/layout-authoring-scaffold.css +0 -31
  1579. package/styles/layout.css +233 -10
  1580. package/styles/shell.css +54 -0
  1581. package/theme/antd-css-var-contract.d.ts +5 -10
  1582. package/theme/antd-css-var-contract.js +5 -10
  1583. package/theme/phi-button-shadow.d.ts +0 -2
  1584. package/theme/phi-button-shadow.js +1 -1
  1585. package/theme/phi-control-shape.js +2 -1
  1586. package/theme/phi-css-vars.d.ts +13 -3
  1587. package/theme/phi-css-vars.js +25 -16
  1588. package/theme/phi-font-catalogue.d.ts +0 -2
  1589. package/theme/phi-font-catalogue.js +1 -1
  1590. package/theme/phi-font-face.d.ts +0 -3
  1591. package/theme/phi-font-face.js +2 -2
  1592. package/theme/phi-published-root-style.d.ts +1 -2
  1593. package/theme/phi-published-root-style.js +2 -4
  1594. package/theme/phi-theme-adoption.d.ts +0 -3
  1595. package/theme/phi-theme-adoption.js +3 -3
  1596. package/theme/phi-theme-blocks.js +4 -4
  1597. package/theme/phi-theme-palette.d.ts +0 -1
  1598. package/theme/phi-theme-palette.js +0 -3
  1599. package/theme/phi-theme-selection.d.ts +0 -9
  1600. package/theme/phi-theme-selection.js +4 -3
  1601. package/theme/phi-theme-tokens.d.ts +1 -16
  1602. package/theme/phi-theme-tokens.js +5 -2
  1603. package/theme/phi-theme.d.ts +0 -2
  1604. package/theme/phi-theme.js +38 -15
  1605. package/theme/phi-tokens.d.ts +36 -10
  1606. package/theme/phi-tokens.js +44 -2
  1607. package/types/builder.d.ts +8 -0
  1608. package/types/calendar.d.ts +5 -0
  1609. package/types/calendar.js +7 -6
  1610. package/types/cms-border-config.js +2 -1
  1611. package/types/cms-config.d.ts +20 -47
  1612. package/types/cms-config.js +36 -117
  1613. package/types/cms-container.d.ts +8 -8
  1614. package/types/cms-module-descriptors.d.ts +17 -25
  1615. package/types/cms-mount-policy.d.ts +0 -1
  1616. package/types/cms-mount-policy.js +1 -1
  1617. package/types/cms-overlay.d.ts +34 -7
  1618. package/types/cms-overlay.js +33 -43
  1619. package/types/cms-plugins.d.ts +205 -9
  1620. package/types/cms-presets.d.ts +62 -15
  1621. package/types/cms-presets.js +23 -1
  1622. package/types/cms.d.ts +41 -21
  1623. package/types/content-entries.d.ts +76 -0
  1624. package/types/content-entries.js +16 -0
  1625. package/types/core-runtime-controller.js +4 -3
  1626. package/types/core-widget-placements.d.ts +59 -21
  1627. package/types/dashboard-cards.d.ts +28 -7
  1628. package/types/dashboard-cards.js +5 -0
  1629. package/types/dimension.js +2 -1
  1630. package/types/draft-status.js +2 -1
  1631. package/types/form-descriptor.d.ts +1 -1
  1632. package/types/form-submit-route.d.ts +26 -0
  1633. package/types/form-submit-route.js +1 -0
  1634. package/types/layout-style.d.ts +12 -4
  1635. package/types/layout-style.js +15 -6
  1636. package/types/media.d.ts +0 -1
  1637. package/types/record-provider.d.ts +23 -0
  1638. package/types/record-provider.js +1 -0
  1639. package/types/references.d.ts +1 -1
  1640. package/types/references.js +1 -1
  1641. package/types/renderable-block-geometry.d.ts +0 -4
  1642. package/types/renderable-block-geometry.js +2 -2
  1643. package/types/renderable-block.d.ts +9 -6
  1644. package/types/runtime-data-provider.d.ts +11 -1
  1645. package/types/runtime-data-provider.js +25 -2
  1646. package/types/signals.d.ts +3 -1
  1647. package/types/signals.js +3 -1
  1648. package/types/site-config.d.ts +15 -3
  1649. package/types/site-request-context.d.ts +2 -159
  1650. package/types/site-theme.d.ts +1 -4
  1651. package/types/surface.d.ts +59 -0
  1652. package/types/surface.js +62 -0
  1653. package/types/table-signal-values.js +25 -4
  1654. package/types/table-widget.d.ts +50 -0
  1655. package/types/table-widget.js +3 -4
  1656. package/types/thread-widget.js +2 -1
  1657. package/types/tours.d.ts +84 -0
  1658. package/types/tours.js +75 -0
  1659. package/types/widget-runtime.d.ts +35 -41
  1660. package/types.d.ts +2 -1
  1661. package/types.js +2 -0
  1662. package/widget-config.d.ts +2 -1
  1663. package/widget-config.js +3 -1
  1664. package/components/layouts/clients/phi-flex-vertical-layout-client.d.ts +0 -10
  1665. package/components/layouts/clients/phi-flex-vertical-layout-client.js +0 -133
  1666. package/components/root/phi-root-rem-provider.d.ts +0 -7
  1667. package/components/root/phi-root-rem-provider.js +0 -14
  1668. package/components/widgets/label-sets/news.d.ts +0 -9
  1669. package/components/widgets/label-sets/news.js +0 -29
  1670. package/components/widgets/label-sets/threads.js +0 -269
  1671. package/gateway/news.d.ts +0 -22
  1672. package/gateway/news.js +0 -76
  1673. package/helpers/visibility.d.ts +0 -1
  1674. package/helpers/visibility.js +0 -4
  1675. package/plugins/runtime-modules/admin/client.d.ts +0 -1
  1676. package/plugins/runtime-modules/admin/controller/address.d.ts +0 -3
  1677. package/plugins/runtime-modules/admin/controller/address.js +0 -4
  1678. package/plugins/runtime-modules/admin/controller/client.d.ts +0 -18
  1679. package/plugins/runtime-modules/admin/controller/client.js +0 -8
  1680. package/plugins/runtime-modules/admin/controller/definition.d.ts +0 -16
  1681. package/plugins/runtime-modules/admin/controller/definition.js +0 -13
  1682. package/plugins/runtime-modules/avatar/client.d.ts +0 -0
  1683. package/plugins/runtime-modules/avatar/client.js +0 -2
  1684. package/plugins/runtime-modules/builder/inspector-controller.d.ts +0 -3
  1685. package/plugins/runtime-modules/builder/inspector-controller.js +0 -290
  1686. package/plugins/runtime-modules/builder/page-reference-tree.d.ts +0 -18
  1687. package/plugins/runtime-modules/builder/page-reference-tree.js +0 -31
  1688. package/plugins/runtime-modules/builder/preview-controller.d.ts +0 -7
  1689. package/plugins/runtime-modules/builder/preview-controller.js +0 -82
  1690. package/plugins/runtime-modules/builder/tree-options.d.ts +0 -7
  1691. package/plugins/runtime-modules/builder/tree-options.js +0 -14
  1692. package/plugins/runtime-modules/builder/widgets/chrome-controls/authoring.d.ts +0 -3
  1693. package/plugins/runtime-modules/builder/widgets/chrome-controls/authoring.js +0 -7
  1694. package/plugins/runtime-modules/builder/widgets/chrome-controls/client.d.ts +0 -9
  1695. package/plugins/runtime-modules/builder/widgets/chrome-controls/client.js +0 -34
  1696. package/plugins/runtime-modules/builder/widgets/chrome-controls/config.d.ts +0 -19
  1697. package/plugins/runtime-modules/builder/widgets/chrome-controls/config.js +0 -30
  1698. package/plugins/runtime-modules/builder/widgets/chrome-controls/plugin.d.ts +0 -3
  1699. package/plugins/runtime-modules/builder/widgets/chrome-controls/plugin.js +0 -9
  1700. package/plugins/runtime-modules/builder/widgets/chrome-controls/server.d.ts +0 -8
  1701. package/plugins/runtime-modules/builder/widgets/chrome-controls/server.js +0 -6
  1702. package/plugins/runtime-modules/client-manifests/news-render-clients.d.ts +0 -2
  1703. package/plugins/runtime-modules/client-manifests/news-render-clients.js +0 -10
  1704. package/plugins/runtime-modules/core/widgets/command-toolbar/authoring-tools.d.ts +0 -5
  1705. package/plugins/runtime-modules/core/widgets/command-toolbar/authoring-tools.js +0 -45
  1706. package/plugins/runtime-modules/core/widgets/date-picker/authoring.d.ts +0 -3
  1707. package/plugins/runtime-modules/core/widgets/date-picker/authoring.js +0 -8
  1708. package/plugins/runtime-modules/core/widgets/date-picker/client.d.ts +0 -6
  1709. package/plugins/runtime-modules/core/widgets/date-picker/plugin.d.ts +0 -3
  1710. package/plugins/runtime-modules/core/widgets/date-picker/plugin.js +0 -9
  1711. package/plugins/runtime-modules/dashboard/client.d.ts +0 -2
  1712. package/plugins/runtime-modules/dashboard/client.js +0 -13
  1713. package/plugins/runtime-modules/dashboard/controller/address.d.ts +0 -3
  1714. package/plugins/runtime-modules/dashboard/controller/address.js +0 -4
  1715. package/plugins/runtime-modules/dashboard/controller/client.d.ts +0 -18
  1716. package/plugins/runtime-modules/dashboard/controller/client.js +0 -8
  1717. package/plugins/runtime-modules/dashboard/controller/definition.d.ts +0 -16
  1718. package/plugins/runtime-modules/dashboard/controller/definition.js +0 -13
  1719. package/plugins/runtime-modules/editor/client.d.ts +0 -1
  1720. package/plugins/runtime-modules/editor/client.js +0 -7
  1721. package/plugins/runtime-modules/editor/controller/address.d.ts +0 -3
  1722. package/plugins/runtime-modules/editor/controller/address.js +0 -4
  1723. package/plugins/runtime-modules/editor/controller/client.d.ts +0 -18
  1724. package/plugins/runtime-modules/editor/controller/client.js +0 -8
  1725. package/plugins/runtime-modules/editor/controller/definition.d.ts +0 -16
  1726. package/plugins/runtime-modules/editor/controller/definition.js +0 -13
  1727. package/plugins/runtime-modules/editor/trees/editor-label-set.d.ts +0 -8
  1728. package/plugins/runtime-modules/editor/trees/editor-label-set.js +0 -22
  1729. package/plugins/runtime-modules/news/client-data-providers.d.ts +0 -11
  1730. package/plugins/runtime-modules/news/client-data-providers.js +0 -14
  1731. package/plugins/runtime-modules/news/data-providers.d.ts +0 -133
  1732. package/plugins/runtime-modules/news/data-providers.js +0 -112
  1733. package/plugins/runtime-modules/news/services/options.d.ts +0 -3
  1734. package/plugins/runtime-modules/news/services/options.js +0 -35
  1735. package/plugins/runtime-modules/news/services/table.js +0 -144
  1736. package/plugins/runtime-modules/news/trees/editor-news-label-set.d.ts +0 -8
  1737. package/plugins/runtime-modules/news/trees/editor-news-label-set.js +0 -29
  1738. package/plugins/runtime-modules/news/trees/editor-news-widget-label-set.d.ts +0 -65
  1739. package/plugins/runtime-modules/news/trees/editor-news-widget-label-set.js +0 -106
  1740. package/plugins/runtime-modules/news/trees/phi-default-editor-news-page-tree.d.ts +0 -17
  1741. package/plugins/runtime-modules/news/trees/phi-default-editor-news-page-tree.js +0 -462
  1742. package/plugins/runtime-modules/news/trees/phi-default-pub-news-page-tree.d.ts +0 -11
  1743. package/plugins/runtime-modules/news/trees/phi-default-pub-news-page-tree.js +0 -86
  1744. package/plugins/runtime-modules/news/widgets/news-list/authoring.d.ts +0 -2
  1745. package/plugins/runtime-modules/news/widgets/news-list/client.d.ts +0 -34
  1746. package/plugins/runtime-modules/news/widgets/news-list/client.js +0 -26
  1747. package/plugins/runtime-modules/news/widgets/news-list/config.d.ts +0 -43
  1748. package/plugins/runtime-modules/news/widgets/news-list/config.js +0 -52
  1749. package/plugins/runtime-modules/news/widgets/news-list/plugin.d.ts +0 -3
  1750. package/plugins/runtime-modules/news/widgets/news-list/plugin.js +0 -8
  1751. package/plugins/runtime-modules/news/widgets/news-list/server.d.ts +0 -14
  1752. package/plugins/runtime-modules/news/widgets/news-list/server.js +0 -82
  1753. package/plugins/runtime-modules/news/widgets.d.ts +0 -2
  1754. package/plugins/runtime-modules/news/widgets.js +0 -16
  1755. package/types/news.d.ts +0 -33
  1756. /package/{types/news.js → components/controls/phi-form-control-contract.js} +0 -0
  1757. /package/plugins/runtime-modules/{threads/services/table.d.ts → core/messaging/thread-inbox-table.d.ts} +0 -0
  1758. /package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/authoring.d.ts +0 -0
  1759. /package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/authoring.js +0 -0
  1760. /package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/plugin.d.ts +0 -0
  1761. /package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/plugin.js +0 -0
  1762. /package/plugins/runtime-modules/{threads → core}/widgets/thread-conversation/server.d.ts +0 -0
@@ -1,17 +1,13 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
- import { ConfigProvider, theme as antdTheme } from "antd";
5
- import { DeleteOutlined } from "@ant-design/icons";
3
+ import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore, } from "react";
6
4
  import { usePhiSignalDispatcher, usePhiSignalListener } from "../../../../../components/runtime/runtime-signal-bus";
7
5
  import { usePhiSignalIdentity } from "../../../../../components/runtime/runtime-signal-identity";
8
- import { usePhiApplicationFeedback } from "../../../../../components/runtime/use-phi-application-feedback";
9
6
  import { PHI_SIGNAL_VALUE_SCHEMAS } from "../../../../../types/signals";
10
7
  import { createPhiThemeControllerAddress } from "../../../../../plugins/runtime-modules/theme/controller/address";
11
8
  import { PHI_THEME_SIGNAL_CHANNELS } from "../../../../../plugins/runtime-modules/theme/controller/signals";
12
- import { createPhiCoreRuntimeControllerAddress } from "../../../../../components/runtime/core-runtime-controller-address";
13
- import { PHI_DEFAULT_THEME_PRESET_KEY, PHI_DEFAULT_THEME_PRESET_VERSION, PHI_THEME_CUSTOM_COLOR_KEYS, isPhiThemePaletteModeSeedKey, mergePhiThemePalettes, resolvePhiThemeColorTokens, resolvePhiThemePresetPlugin, } from "../../../../../theme/phi-theme-presets";
14
- import { buildPhiThemeCustomColorPalette, resolvePhiThemePaletteCustomColors, resolvePhiThemePresetCustomColors, } from "../../../../../theme/phi-theme-palette";
9
+ import { PHI_THEME_CUSTOM_COLOR_KEYS, isPhiThemePaletteModeSeedKey, mergePhiThemePalettes, resolvePhiThemeColorTokens, } from "../../../../../theme/phi-theme-presets";
10
+ import { buildPhiThemeCustomColorPalette, resolvePhiThemePaletteCustomColors } from "../../../../../theme/phi-theme-palette";
15
11
  import { usePhiConfig } from "../../../../../components/root/phi-config-provider";
16
12
  import { usePhiThemeBlockCatalog } from "../../../../../components/root/phi-theme-block-catalog-provider";
17
13
  import { resolvePhiThemeComposition, resolvePhiThemeEffectiveLogo, resolvePhiThemeEffectiveFonts, resolvePhiThemeEffectiveRoot, } from "../../../../../theme/phi-theme-composition";
@@ -19,23 +15,21 @@ import { usePhiSiteFontAssets } from "../../../../../components/media/phi-site-f
19
15
  import { buildPhiFontFaceCss, buildPhiFontFamilyStack } from "../../../../../theme/phi-font-face";
20
16
  import { PHI_THEME_HEADING_FONT_VARIABLE, readPhiThemeHeadingFont, resolvePhiThemeHeadingFontFamily, } from "../../../../../theme/phi-theme-typography";
21
17
  import { resolvePhiThemeRuntimePayload } from "../../../../../theme/phi-theme-runtime";
22
- import { materializePhiThemeBrandLogo, materializePhiThemeModuleBlocks } from "../../materialize-images";
23
- import { createPhiAntdThemeCssVarKey, resolvePhiAntdAliasTokens, } from "../../../../../theme/phi-antd-token-resolver";
24
- import { buildPhiThemeStructuralTokens, } from "../../../../../theme/phi-theme";
25
- import { buildPhiSiteThemeSelectOptions, createPhiSiteThemeSelectionValue, createPhiThemeDerivation, ensurePhiThemeDerivation, readPhiSiteThemeSelectionState, resolvePhiThemeSelectionValue, } from "../../../../../theme/phi-theme-selection";
26
- import { PHI_CONTROL_HEIGHTS, PHI_PADDING, PHI_RADII } from "../../../../../theme/phi-tokens";
27
- import { PHI_COLOR_PICKER_NEUTRAL_PRESETS, PHI_COLOR_PICKER_PRESETS, } from "../../../../../components/widgets/config/color-picker-presets";
18
+ import { resolvePhiAntdAliasTokens } from "../../../../../theme/phi-antd-token-resolver";
19
+ import { buildPhiThemeStructuralTokens } from "../../../../../theme/phi-theme";
20
+ import { PHI_CONTROL_HEIGHTS, PHI_PADDING, PHI_RADII, } from "../../../../../theme/phi-tokens";
21
+ import { PHI_COLOR_PICKER_NEUTRAL_PRESETS, PHI_COLOR_PICKER_PRESETS } from "../../../../../components/widgets/config/color-picker-presets";
28
22
  import { PHI_SPACING_TOKEN_KEYS } from "../../../../../components/widgets/config/spacing-options";
29
23
  import { PhiColorFieldControl } from "../../../../../components/controls/phi-color-field-control";
30
24
  import { PhiBrandControl, resolvePhiBrandLogoUrl } from "../../../../../components/controls/phi-brand-control";
31
25
  import { PhiBackgroundControl } from "../../../../../components/controls/phi-background-control";
32
- import { PHI_ROOT_BACKGROUND_IMAGE_SOURCE_KINDS, PHI_ROOT_BACKGROUND_MOTION_MODES, resolvePhiRootBackgroundPaintStyle, } from "../../../../../components/root/phi-root-background";
33
- import { PHI_SHELL_CHROME_OVERLAY_BASE_KINDS, PHI_SHELL_CHROME_OVERLAY_EFFECTS, PHI_SHELL_CHROME_OVERLAY_IMAGE_SOURCE_KINDS, PHI_SHELL_CHROME_OVERLAY_MOTION_MODES, resolvePhiShellChromeOverlayConfig, resolvePhiShellChromePaneShadow, resolvePhiShellChromePaneShadows, resolvePhiShellChromeOverlayStyle, } from "../../../../../components/root/phi-shell-chrome-overlay";
26
+ import { PHI_ROOT_BACKGROUND_IMAGE_SOURCE_KINDS, PHI_ROOT_BACKGROUND_FILTERS, PHI_ROOT_BACKGROUND_MOTION_MODES, resolvePhiRootBackgroundPaintStyle, } from "../../../../../components/root/phi-root-background";
27
+ import { PHI_SHELL_CHROME_OVERLAY_BASE_KINDS, PHI_SHELL_CHROME_OVERLAY_FILTERS, PHI_SHELL_CHROME_OVERLAY_IMAGE_SOURCE_KINDS, PHI_SHELL_CHROME_OVERLAY_MOTION_MODES, resolvePhiShellChromeOverlayConfig, resolvePhiShellChromePaneShadow, resolvePhiShellChromePaneShadows, resolvePhiShellChromeOverlayStyle, } from "../../../../../components/root/phi-shell-chrome-overlay";
34
28
  import { normalizePhiBackgroundWidgetConfig } from "../../../../../components/widgets/config/background";
35
29
  import { PhiMediaPickerBinding } from "../../../../../components/media/phi-media-picker-binding";
36
30
  import { PHI_MEDIA_WIDGET_DEFAULT_LABELS } from "../../../../../components/media/media-widget-labels";
37
31
  import { PHI_SEARCH_WIDGET_DEFAULT_LABELS } from "../../../../../components/widgets/label-types/search";
38
- import { buildPhiMediaAssetContentDeliveryUrl, PhiMediaAssetFlags, PhiMediaKind } from "../../../../../constants/media";
32
+ import { buildPhiMediaAssetContentDeliveryUrl, PhiMediaAssetFlags, PhiMediaKind, } from "../../../../../constants/media";
39
33
  import { createPhiMediaPickerAssetControllerRoutes } from "../../../../../components/media/asset-controller-routes";
40
34
  import { PhiPresetSizeControl } from "../../../../../components/controls/phi-preset-size-control";
41
35
  import { PhiButtonControl } from "../../../../../components/controls/phi-button-control";
@@ -49,9 +43,6 @@ import { PHI_AUTHORING_OPTION_PROVIDER_KEYS } from "../../../../../constants/aut
49
43
  import { PhiShadowControl } from "../../../../../components/controls/phi-shadow-control";
50
44
  import { PhiIcon } from "../../../../../components/shell/phi-icon";
51
45
  import { PhiIconPickerControl } from "../../../../../components/controls/phi-icon-picker-control";
52
- import { createPhiHistoryStore } from "../../../../../components/state/history-store";
53
- import { createPhiCommandToolbarControlAddress } from "../../../../../components/widgets/signals/command-toolbar-address";
54
- import { PHI_THEME_RUNTIME_MODULE_ID } from "../../../../../plugins/runtime-modules/theme/ids";
55
46
  import { PhiTableControl } from "../../../../../components/controls/phi-table-control";
56
47
  import { PhiSegmentedControl } from "../../../../../components/controls/phi-segmented-control";
57
48
  import { applyPhiButtonShadowComponentTokens, isPhiButtonShadowStep, } from "../../../../../theme/phi-button-shadow";
@@ -61,13 +52,14 @@ import { PhiSwitchControl } from "../../../../../components/controls/phi-switch-
61
52
  import { PhiTagControl } from "../../../../../components/controls/phi-tag-control";
62
53
  import { PHI_CONTROL_SHAPES, applyPhiControlShapeComponentTokens, applyPhiSurfaceShapeComponentTokens, buildPhiControlShapeCssVars, PHI_SURFACE_SHAPE_CSS_VAR, resolvePhiSurfaceShapeRadius, createPhiControlShapeCorners, readPhiControlShapeCorners, resolvePhiControlShape, resolvePhiUniformControlShape, } from "../../../../../theme/phi-control-shape";
63
54
  import { PhiAccordionControl } from "../../../../../components/controls/phi-accordion-control";
55
+ import { PhiAlertControl } from "../../../../../components/controls/phi-alert-control";
64
56
  import { PhiCardControl } from "../../../../../components/controls/phi-card-control";
57
+ import { PhiThemeScopeControl } from "../../../../../components/controls/phi-theme-scope-control";
65
58
  import { PhiFlexControl } from "../../../../../components/controls/phi-flex-control";
66
59
  import { PhiTypographyControl } from "../../../../../components/controls/phi-typography-control";
67
60
  import { PhiDividerControl } from "../../../../../components/controls/phi-divider-control";
68
61
  import { PhiStatisticControl } from "../../../../../components/controls/phi-statistic-control";
69
- const phiThemeHistory = createPhiHistoryStore("@phis/ui/theme-history");
70
- const DEFAULT_THEME_KEY = "default";
62
+ import { DEFAULT_THEME_KEY, omitThemeFields, resolveThemeKey, normalizeTheme, resolveInitialTheme, clearThemeControlShape, resolveThemePayloadPreset, applyThemePreset, createInitialBrandThemeState, clearThemeAuthoredGround, } from "../../brand-theme-model";
71
63
  const PHI_THEME_CHROME_SHADOW_EDGES = [
72
64
  { family: "header", label: "Header, downwards onto the Page" },
73
65
  { family: "sider", label: "Sider, outwards at its outer edge" },
@@ -277,10 +269,6 @@ const BRAND_THEME_COLOR_SECTION_KEYS = [
277
269
  "custom",
278
270
  ...THEME_COLOR_SEED_SECTIONS.map((section) => section.key),
279
271
  ];
280
- /** The record without the named fields, for the places where a part of the Theme is handed back to its block. */
281
- function omitThemeFields(theme, ...fields) {
282
- return Object.fromEntries(Object.entries(theme).filter(([key]) => !fields.includes(key)));
283
- }
284
272
  /**
285
273
  * The Site's palette written back with empty containers dropped, so a Theme whose author cleared their
286
274
  * last colour owns nothing again and follows its palette block outright. An absent `palette` and an
@@ -346,27 +334,6 @@ function omitThemeColorOverride(theme, tokenKey, mode) {
346
334
  overrides: Object.fromEntries(Object.entries(current.overrides ?? {}).filter(([key]) => key !== tokenKey)),
347
335
  }));
348
336
  }
349
- function resolveThemeKey(config) {
350
- return config?.themeKey?.trim() || DEFAULT_THEME_KEY;
351
- }
352
- function normalizeTheme(input, fallback) {
353
- if (!input || typeof input !== "object" || Array.isArray(input)) {
354
- return fallback;
355
- }
356
- return input;
357
- }
358
- /**
359
- * A fresh draft names its blocks and owns nothing: the proportions come from the style block at
360
- * resolve time, the colour from the palette block, and nothing is copied in that a reset would later
361
- * have to know how to take away.
362
- */
363
- function resolveInitialTheme(runtime) {
364
- return normalizeTheme(runtime.site.theme, {
365
- mode: "light",
366
- preset: PHI_DEFAULT_THEME_PRESET_KEY,
367
- presetVersion: PHI_DEFAULT_THEME_PRESET_VERSION,
368
- });
369
- }
370
337
  function readThemeButtonShadowChoice(theme, kind) {
371
338
  const step = theme.buttons?.shadow?.[kind];
372
339
  return isPhiButtonShadowStep(step) ? step : "theme";
@@ -410,9 +377,7 @@ function mergeThemeFontSlot(theme, slot, family) {
410
377
  fonts[slot] = family;
411
378
  else
412
379
  delete fonts[slot];
413
- return Object.keys(fonts).length > 0
414
- ? { ...theme, fonts }
415
- : Object.fromEntries(Object.entries(theme).filter(([key]) => key !== "fonts"));
380
+ return Object.keys(fonts).length > 0 ? { ...theme, fonts } : omitThemeFields(theme, "fonts");
416
381
  }
417
382
  /**
418
383
  * The heading font chosen, or handed back to the body font by removing it.
@@ -426,9 +391,7 @@ function mergeThemeHeadingFont(theme, heading) {
426
391
  delete typography.headings;
427
392
  else
428
393
  typography.headings = heading;
429
- return Object.keys(typography).length > 0
430
- ? { ...theme, typography }
431
- : Object.fromEntries(Object.entries(theme).filter(([key]) => key !== "typography"));
394
+ return Object.keys(typography).length > 0 ? { ...theme, typography } : omitThemeFields(theme, "typography");
432
395
  }
433
396
  function mergeThemeControlShape(theme, controls) {
434
397
  return {
@@ -480,13 +443,6 @@ function clearThemeShapeScale(theme) {
480
443
  style: { ...(theme.style ?? {}), token },
481
444
  };
482
445
  }
483
- function clearThemeControlShape(theme) {
484
- const shape = Object.fromEntries(Object.entries(theme.shape ?? {}).filter(([key]) => key !== "controls"));
485
- return Object.keys(shape).length > 0 ? { ...theme, shape } : omitThemeFields(theme, "shape");
486
- }
487
- function resolveThemePayloadPreset(theme, presets) {
488
- return resolvePhiThemePresetPlugin(presets, theme.preset);
489
- }
490
446
  function resolveThemePayloadMode(theme) {
491
447
  return theme.mode === "dark" ? "dark" : "light";
492
448
  }
@@ -503,26 +459,6 @@ function mergeThemeCustomColors(theme, colorPatch, mode) {
503
459
  customColors: { ...(current.customColors ?? {}), ...colorPatch },
504
460
  }));
505
461
  }
506
- /**
507
- * Picking a palette block drops the author's own palette, exactly as picking a ground or a style drops
508
- * theirs: somebody choosing another palette means to see it, and their seeds laid over it would hide
509
- * the very thing they asked for.
510
- */
511
- function applyThemePreset(theme, preset) {
512
- return {
513
- ...omitThemeFields(theme, "palette"),
514
- preset: preset.key,
515
- presetVersion: preset.version,
516
- };
517
- }
518
- /** Back to the blocks alone: the palette, the proportions, the Button shadows and the component overrides all go. */
519
- function resetThemeToPreset(theme, presets, preset = resolveThemePayloadPreset(theme, presets)) {
520
- return {
521
- ...omitThemeFields(theme, "palette", "style", "buttons", "components"),
522
- preset: preset.key,
523
- presetVersion: preset.version,
524
- };
525
- }
526
462
  function stripEmptyTokenValues(token) {
527
463
  return Object.fromEntries(Object.entries(token).filter(([, value]) => value !== undefined && value !== null && value !== ""));
528
464
  }
@@ -544,14 +480,6 @@ function countThemePaletteLeaves(palette) {
544
480
  Object.keys(mode?.overrides ?? {}).length +
545
481
  Object.keys(mode?.customColors ?? {}).length, Object.keys(palette?.seed ?? {}).length);
546
482
  }
547
- function readTokenColor(token, key, fallback) {
548
- const value = token[key];
549
- return typeof value === "string" && value.trim() ? value : fallback;
550
- }
551
- function readComputedTokenColor(token, key, fallback) {
552
- const value = token[key];
553
- return typeof value === "string" && value.trim() ? value : fallback;
554
- }
555
483
  function readEffectiveTokenString(token, key, fallback) {
556
484
  const value = token[key];
557
485
  return typeof value === "string" && value.trim() ? value : fallback;
@@ -571,18 +499,6 @@ function readEffectiveTokenBoolean(token, key, fallback) {
571
499
  const value = token[key];
572
500
  return typeof value === "boolean" ? value : fallback;
573
501
  }
574
- function buildThemeReviewRoutePath(area) {
575
- return area === "public" ? "/public" : `/${area}`;
576
- }
577
- function buildThemeReviewHref({ area, revisionId, themeKey, }) {
578
- const url = new URL(buildThemeReviewRoutePath(area), window.location.origin);
579
- url.searchParams.set("reviewKind", "theme");
580
- url.searchParams.set("reviewRevision", String(revisionId));
581
- url.searchParams.set("reviewArea", area);
582
- url.searchParams.set("reviewPage", "/");
583
- url.searchParams.set("reviewThemeKey", themeKey);
584
- return `${url.pathname}${url.search}`;
585
- }
586
502
  /*
587
503
  * One route set per purpose: the preview swatch and the image field each open their own picker.
588
504
  *
@@ -614,13 +530,14 @@ const renderPhiThemeRootBackgroundMediaPicker = function renderPhiThemeRootBackg
614
530
  signalRoutes: PHI_THEME_ROOT_BACKGROUND_MEDIA_ROUTES[props.purpose],
615
531
  }, labels: PHI_MEDIA_WIDGET_DEFAULT_LABELS, searchLabels: PHI_SEARCH_WIDGET_DEFAULT_LABELS, value: props.value, open: props.open, trigger: props.trigger, onOpenChange: props.onOpenChange, onCommit: props.onCommit, onDiscard: props.onDiscard, onAssetSelect: props.onAssetSelect, onAssetClear: props.onAssetClear }));
616
532
  };
617
- function mergeThemeRootBackground(theme, mode, value) {
533
+ /** The Theme root's ground (`background`) or its chrome overlay (`chrome`) for one colour mode. */
534
+ function mergeThemeRootSurface(theme, surface, mode, value) {
618
535
  return {
619
536
  ...theme,
620
537
  root: {
621
538
  ...(theme.root ?? {}),
622
- background: {
623
- ...(theme.root?.background ?? {}),
539
+ [surface]: {
540
+ ...(theme.root?.[surface] ?? {}),
624
541
  [mode]: value,
625
542
  },
626
543
  },
@@ -641,18 +558,6 @@ function mergeThemeChromeShadow(theme, family, value) {
641
558
  },
642
559
  };
643
560
  }
644
- function mergeThemeChromeOverlay(theme, mode, value) {
645
- return {
646
- ...theme,
647
- root: {
648
- ...(theme.root ?? {}),
649
- chrome: {
650
- ...(theme.root?.chrome ?? {}),
651
- [mode]: value,
652
- },
653
- },
654
- };
655
- }
656
561
  /**
657
562
  * A patch on the Brand block, with the empties taken back out.
658
563
  *
@@ -722,22 +627,29 @@ function mergeThemeBrandLogo(theme, mode, logo) {
722
627
  * like it did nothing but reopen the first part. Only a list that is blank all through clears the
723
628
  * Wordmark, which is what hands the Site's own name back to the fallback.
724
629
  */
630
+ /**
631
+ * One change to the Wordmark, and the record kept clean: a field set to nothing leaves it, and a
632
+ * Wordmark with nothing left in it goes. Weight, slant and tracking used to stay behind as `null`
633
+ * inside the record, which `mergeThemeBrand` only cleans one level up.
634
+ */
635
+ function mergeThemeWordmark(theme, patch) {
636
+ const wordmark = { ...(theme.brand?.wordmark ?? {}), ...patch };
637
+ for (const [key, value] of Object.entries(wordmark)) {
638
+ if (value == null || value === "")
639
+ delete wordmark[key];
640
+ }
641
+ return mergeThemeBrand(theme, {
642
+ wordmark: Object.keys(wordmark).length > 0 ? wordmark : null,
643
+ });
644
+ }
725
645
  function mergeThemeWordmarkParts(theme, parts) {
726
646
  const hasText = parts.some((part) => part.text.trim());
727
- const wordmark = theme.brand?.wordmark ?? {};
728
- if (hasText) {
729
- return mergeThemeBrand(theme, {
730
- wordmark: { ...wordmark, parts: parts.map((part) => ({ ...part })) },
731
- });
732
- }
733
647
  /*
734
- * Clearing the text hands the Site's name back to the fallback -- unless the Brand has said it draws
735
- * no name, which is a decision about the Wordmark and not about its parts. Dropping the whole record
736
- * here would switch the name back on the moment somebody emptied the last part.
648
+ * Clearing the text hands the Site's name back to the fallback, and takes only the text: the weight,
649
+ * slant, tracking and font somebody chose -- and a decision to draw no name at all -- are about the
650
+ * Wordmark, not about its parts, and used to go with the last character.
737
651
  */
738
- return mergeThemeBrand(theme, {
739
- wordmark: wordmark.shows === "none" ? { shows: "none" } : null,
740
- });
652
+ return mergeThemeWordmark(theme, { parts: hasText ? parts.map((part) => ({ ...part })) : null });
741
653
  }
742
654
  /** Whether the Brand draws a name at all. Off is stated; on is simply the Wordmark without the word. */
743
655
  function mergeThemeWordmarkShows(theme, shows) {
@@ -756,103 +668,6 @@ function mergeThemeWordmarkShows(theme, shows) {
756
668
  wordmark: Object.keys(rest).length > 0 ? rest : null,
757
669
  });
758
670
  }
759
- /**
760
- * What a Widget knows before the Controller has told it anything: the theme the Site was rendered with.
761
- *
762
- * It used to consult a module variable the Widgets kept between them, because a Widget mounting late
763
- * had no other way to learn about an unsaved draft. That variable answered for the browser tab, while
764
- * the draft belongs to the Area the Controller is mounted in -- so it was right by coincidence and
765
- * silently wrong wherever the two differed. A Widget asks now, and this is only the starting point.
766
- */
767
- function createInitialBrandThemeState(themeKey, fallbackTheme) {
768
- return {
769
- key: themeKey,
770
- published: fallbackTheme,
771
- draft: fallbackTheme,
772
- revisionId: null,
773
- hasPublishedThemeRevision: false,
774
- publishedRevisionId: null,
775
- };
776
- }
777
- function isSameThemePayload(left, right) {
778
- return JSON.stringify(left) === JSON.stringify(right);
779
- }
780
- /*
781
- * `correlationId` is the exchange this state belongs to: the command that saved, published or reset,
782
- * or the draft another Widget asked the Controller to take. It is absent only where the Controller
783
- * announces the state it loaded on arrival, which begins one.
784
- */
785
- function emitThemeState(dispatchSignal, theme, revisionId, selectionValue, draftStatus = "draft", correlationId) {
786
- const sender = createPhiThemeControllerAddress();
787
- const receiver = "broadcast";
788
- dispatchSignal({
789
- scope: "area",
790
- channel: PHI_THEME_SIGNAL_CHANNELS.brandTheme,
791
- action: "change",
792
- value: {
793
- theme,
794
- revisionId,
795
- draftStatus,
796
- themeKey: DEFAULT_THEME_KEY,
797
- },
798
- valueType: "json",
799
- valueSchema: PHI_SIGNAL_VALUE_SCHEMAS.brandTheme,
800
- sender,
801
- receiver,
802
- correlationId,
803
- timestamp: Date.now(),
804
- });
805
- dispatchSignal({
806
- scope: "area",
807
- channel: PHI_THEME_SIGNAL_CHANNELS.presetSelect,
808
- action: "change",
809
- value: selectionValue,
810
- valueType: "string",
811
- sender,
812
- receiver,
813
- correlationId,
814
- timestamp: Date.now(),
815
- });
816
- }
817
- /**
818
- * The draft's state in the words every draft keeper uses (`PhiDraftStatusSignalValue`), for the Core
819
- * Draft Status Widget: broadcast when it changes, or addressed to the one Widget that asked on mount.
820
- */
821
- function emitThemeDraftStatus(dispatchSignal, receiver, value, correlationId) {
822
- dispatchSignal({
823
- scope: "area",
824
- channel: PHI_THEME_SIGNAL_CHANNELS.draftStatus,
825
- action: "change",
826
- value: { ...value, themeKey: DEFAULT_THEME_KEY },
827
- valueType: "json",
828
- valueSchema: PHI_SIGNAL_VALUE_SCHEMAS.revisionsDraftStatus,
829
- sender: createPhiThemeControllerAddress(),
830
- receiver,
831
- correlationId,
832
- timestamp: Date.now(),
833
- });
834
- }
835
- /**
836
- * The Set select's options, stated again for a stored Theme that changed.
837
- *
838
- * The Site Theme entry names the Set the stored Theme was derived from, and a save or a publish is a
839
- * new stored Theme. The whole list goes out, because that is what the select takes; the Sets come from
840
- * the server, where the active Modules are known.
841
- */
842
- function emitThemeSelectOptions(dispatchSignal, options, correlationId) {
843
- dispatchSignal({
844
- scope: "area",
845
- channel: PHI_THEME_SIGNAL_CHANNELS.presetOptions,
846
- action: "change",
847
- value: { options: options.map((option) => ({ ...option })) },
848
- valueType: "json",
849
- valueSchema: PHI_SIGNAL_VALUE_SCHEMAS.controlOptions,
850
- sender: createPhiThemeControllerAddress(),
851
- receiver: "broadcast",
852
- correlationId,
853
- timestamp: Date.now(),
854
- });
855
- }
856
671
  /**
857
672
  * "Publish what you are holding" -- the question a Widget asks the Controller when it mounts.
858
673
  *
@@ -878,28 +693,6 @@ function emitThemeHydrateRequest(dispatchSignal, sender) {
878
693
  timestamp: Date.now(),
879
694
  });
880
695
  }
881
- /**
882
- * The reply, addressed to the one Widget that asked.
883
- *
884
- * Deliberately not `emitThemeState`. That one announces a change everybody is affected by, and says
885
- * three things -- the theme, the draft status, the selected preset -- because all three moved. Nothing
886
- * moved here: one Widget arrived late and needs catching up, so a broadcast would set the state of
887
- * Widgets that already had it, under the correlation of a mount they had no part in.
888
- */
889
- function emitThemeStateTo(dispatchSignal, receiver, theme, revisionId, draftStatus, correlationId) {
890
- dispatchSignal({
891
- scope: "area",
892
- channel: PHI_THEME_SIGNAL_CHANNELS.brandTheme,
893
- action: "change",
894
- value: { theme, revisionId, draftStatus, themeKey: DEFAULT_THEME_KEY },
895
- valueType: "json",
896
- valueSchema: PHI_SIGNAL_VALUE_SCHEMAS.brandTheme,
897
- sender: createPhiThemeControllerAddress(),
898
- receiver,
899
- correlationId,
900
- timestamp: Date.now(),
901
- });
902
- }
903
696
  function emitThemeDraftRequest(dispatchSignal, theme, revisionId, edit) {
904
697
  dispatchSignal({
905
698
  scope: "area",
@@ -919,48 +712,6 @@ function emitThemeDraftRequest(dispatchSignal, theme, revisionId, edit) {
919
712
  timestamp: Date.now(),
920
713
  });
921
714
  }
922
- function emitRootThemeState(dispatchSignal, theme, correlationId) {
923
- dispatchSignal({
924
- scope: "site",
925
- channel: "theme",
926
- action: "change",
927
- value: theme,
928
- valueType: "json",
929
- valueSchema: PHI_SIGNAL_VALUE_SCHEMAS.runtimeTheme,
930
- sender: createPhiThemeControllerAddress(),
931
- receiver: createPhiCoreRuntimeControllerAddress(),
932
- correlationId,
933
- timestamp: Date.now(),
934
- });
935
- }
936
- /**
937
- * The Page, asked again for the Theme it now has.
938
- *
939
- * Publishing moves what the server renders from, and almost none of that is in this Widget's hands.
940
- * The Root layout reads the Site's Theme once per server render and hands the whole of it down --
941
- * fonts, the root background, the Brand's pictures -- and the Builder page around this Widget was
942
- * measured with the shell heights of the Theme that stood before. The broadcast beside this one
943
- * reaches the Theme Widgets on this page and nothing above them, and the preview signal only paints
944
- * the draft; so without this, what was published is visible on the next navigation and not before.
945
- *
946
- * `reload` at the Core Runtime's address is the Site's one way of saying it: the always-mounted
947
- * adapter answers with `router.refresh()`, which re-renders the route's Server components and leaves
948
- * the operator on the panel they had open (components/runtime/core-runtime-application-adapter.tsx).
949
- * A document reload would close it.
950
- */
951
- function emitRootReload(dispatchSignal, correlationId) {
952
- dispatchSignal({
953
- scope: "site",
954
- channel: "reload",
955
- action: "activate",
956
- value: null,
957
- valueType: "none",
958
- sender: createPhiThemeControllerAddress(),
959
- receiver: createPhiCoreRuntimeControllerAddress(),
960
- correlationId,
961
- timestamp: Date.now(),
962
- });
963
- }
964
715
  /**
965
716
  * The draft, for a Widget that edits it but does not own it.
966
717
  *
@@ -1044,502 +795,33 @@ function usePhiBrandThemeDraft(runtime, themeKey) {
1044
795
  }, undefined, selfAddress);
1045
796
  return { state, draftRef, publishDraft, pickerTransaction, editTransaction };
1046
797
  }
798
+ /*
799
+ * The mode the preview switch last said, kept beside the panels rather than in them. The switch speaks
800
+ * only when it changes, and the panels sit in a Stack that remounts them on every tab change, so a
801
+ * panel opened after the switch went dark started light again while the switch still read "Dark".
802
+ */
803
+ let phiBrandPreviewModeHeard = null;
804
+ const phiBrandPreviewModeListeners = new Set();
805
+ function subscribePhiBrandPreviewMode(listener) {
806
+ phiBrandPreviewModeListeners.add(listener);
807
+ return () => {
808
+ phiBrandPreviewModeListeners.delete(listener);
809
+ };
810
+ }
1047
811
  function usePhiBrandPreviewMode(initialMode) {
1048
- const [mode, setMode] = useState(initialMode);
812
+ const heard = useSyncExternalStore(subscribePhiBrandPreviewMode, () => phiBrandPreviewModeHeard, () => null);
1049
813
  usePhiSignalListener((signal) => {
1050
814
  if (signal.scope === "page" &&
1051
815
  signal.receiver === "broadcast" &&
1052
816
  signal.channel === PHI_THEME_SIGNAL_CHANNELS.previewThemeMode &&
1053
817
  signal.action === "change" &&
1054
818
  signal.valueType === "boolean") {
1055
- setMode(signal.value === true ? "dark" : "light");
819
+ phiBrandPreviewModeHeard = signal.value === true ? "dark" : "light";
820
+ for (const listener of phiBrandPreviewModeListeners)
821
+ listener();
1056
822
  }
1057
823
  });
1058
- return mode;
1059
- }
1060
- export function PhiBuilderBrandThemeControllerWidgetClient({ runtime, config, setOptions, }) {
1061
- const dispatchSignal = usePhiSignalDispatcher();
1062
- const { showMessage } = usePhiApplicationFeedback();
1063
- const { presets: themePresets } = usePhiConfig();
1064
- const themeBlocks = usePhiThemeBlockCatalog();
1065
- const themeKey = resolveThemeKey(config);
1066
- const siteKey = runtime.site.key;
1067
- const historyScope = `theme:${siteKey}:${themeKey}`;
1068
- const reviewArea = config?.reviewArea ?? (runtime.area === "builder" ? "public" : runtime.area);
1069
- const fallbackTheme = useMemo(() => resolveInitialTheme(runtime), [runtime]);
1070
- const initialState = useMemo(() => createInitialBrandThemeState(themeKey, fallbackTheme), [fallbackTheme, themeKey]);
1071
- const [state, setState] = useState(initialState);
1072
- const stateRef = useRef(initialState);
1073
- /*
1074
- * The Theme being worked on -- the Draft entry of the Set select. Trying on a Set or the Published
1075
- * Theme leaves it alone, so picking Draft again takes the try-on back; any edit moves it.
1076
- */
1077
- const siteThemeRef = useRef(initialState.draft);
1078
- /* The options last sent, so a draft that changes nothing in the select does not send them again. */
1079
- const sentSelectOptionsRef = useRef(null);
1080
- /* The draft a picker edit started from, while one is open; see `PhiThemeDraftEdit`. */
1081
- const pickerEditBeforeRef = useRef(null);
1082
- const [saving, setSaving] = useState(false);
1083
- /*
1084
- * The Theme as it is stored -- the saved draft, or the published Theme where no draft stands -- and
1085
- * why it could not be read, if it could not. What is on screen differing from it is `unsaved`.
1086
- */
1087
- const savedThemeRef = useRef(initialState.draft);
1088
- const readErrorRef = useRef(null);
1089
- const resolveDraftStatus = useCallback(() => {
1090
- const current = stateRef.current;
1091
- const subject = `theme/${themeKey}`;
1092
- if (readErrorRef.current !== null) {
1093
- return { status: "error", revisionId: null, subject, error: readErrorRef.current };
1094
- }
1095
- if (!isSameThemePayload(current.draft, savedThemeRef.current)) {
1096
- return { status: "unsaved", revisionId: current.revisionId, subject };
1097
- }
1098
- return current.revisionId != null
1099
- ? { status: "draft", revisionId: current.revisionId, subject }
1100
- : { status: "published", revisionId: null, subject };
1101
- }, [themeKey]);
1102
- const announceDraftStatus = useCallback((correlationId) => {
1103
- emitThemeDraftStatus(dispatchSignal, "broadcast", resolveDraftStatus(), correlationId);
1104
- }, [dispatchSignal, resolveDraftStatus]);
1105
- /*
1106
- * A draft exists once one was saved, or once the Theme being worked on is no longer the published one.
1107
- * Undoing back to the published Theme takes an unsaved draft away again.
1108
- */
1109
- const hasDraft = useCallback(() => {
1110
- const current = stateRef.current;
1111
- return current.revisionId != null || !isSameThemePayload(siteThemeRef.current, current.published);
1112
- }, []);
1113
- const resolveSelectionValue = useCallback(() => resolvePhiThemeSelectionValue(siteKey, {
1114
- published: stateRef.current.hasPublishedThemeRevision,
1115
- draft: hasDraft(),
1116
- }), [hasDraft, siteKey]);
1117
- const emitSelectOptions = useCallback((correlationId) => {
1118
- const current = stateRef.current;
1119
- const options = [
1120
- ...buildPhiSiteThemeSelectOptions({
1121
- siteKey,
1122
- published: current.hasPublishedThemeRevision
1123
- ? { theme: current.published, revisionId: current.publishedRevisionId }
1124
- : null,
1125
- draft: hasDraft() ? { theme: siteThemeRef.current, revisionId: current.revisionId } : null,
1126
- }),
1127
- ...setOptions,
1128
- ];
1129
- const serialized = JSON.stringify(options);
1130
- if (serialized === sentSelectOptionsRef.current) {
1131
- return;
1132
- }
1133
- sentSelectOptionsRef.current = serialized;
1134
- emitThemeSelectOptions(dispatchSignal, options, correlationId);
1135
- }, [dispatchSignal, hasDraft, setOptions, siteKey]);
1136
- /*
1137
- * Every draft states the Set it was derived from. A Theme that never named one gets the core Set on
1138
- * its first draft, so the Draft entry is never without a name.
1139
- */
1140
- const publishDraft = useCallback((draftTheme, options) => {
1141
- const nextTheme = ensurePhiThemeDerivation(draftTheme);
1142
- const current = stateRef.current;
1143
- if (options?.history !== false && !isSameThemePayload(current.draft, nextTheme)) {
1144
- phiThemeHistory.record(historyScope, {
1145
- label: "Update theme",
1146
- before: current.draft,
1147
- after: nextTheme,
1148
- });
1149
- }
1150
- const nextState = {
1151
- ...current,
1152
- draft: nextTheme,
1153
- };
1154
- stateRef.current = nextState;
1155
- if (options?.updateSiteSnapshot !== false) {
1156
- siteThemeRef.current = nextTheme;
1157
- }
1158
- setState(nextState);
1159
- emitThemeState(dispatchSignal, nextTheme, nextState.revisionId, options?.selectionValue ?? resolveSelectionValue(), "draft", options?.correlationId);
1160
- announceDraftStatus(options?.correlationId);
1161
- emitSelectOptions(options?.correlationId);
1162
- }, [announceDraftStatus, dispatchSignal, emitSelectOptions, historyScope, resolveSelectionValue]);
1163
- useEffect(() => {
1164
- const emitAvailability = () => {
1165
- const availability = phiThemeHistory.getAvailability(historyScope);
1166
- for (const [controlKey, enabled] of [
1167
- ["undo", availability.canUndo],
1168
- ["redo", availability.canRedo],
1169
- ]) {
1170
- dispatchSignal({
1171
- scope: "area",
1172
- channel: "enabled",
1173
- action: "change",
1174
- value: enabled,
1175
- valueType: "boolean",
1176
- sender: createPhiThemeControllerAddress(),
1177
- receiver: createPhiCommandToolbarControlAddress(PHI_THEME_RUNTIME_MODULE_ID, "builder-theme-page", controlKey),
1178
- timestamp: Date.now(),
1179
- });
1180
- }
1181
- };
1182
- emitAvailability();
1183
- return phiThemeHistory.subscribe(historyScope, emitAvailability);
1184
- }, [dispatchSignal, historyScope]);
1185
- useEffect(() => {
1186
- let cancelled = false;
1187
- void fetch(`/api/site/cms/theme?key=${encodeURIComponent(themeKey)}`, {
1188
- method: "GET",
1189
- cache: "no-store",
1190
- })
1191
- .then(async (response) => {
1192
- const body = (await response.json().catch(() => null));
1193
- if (!response.ok) {
1194
- throw new Error(body?.error ?? "Failed to read theme.");
1195
- }
1196
- if (cancelled) {
1197
- return;
1198
- }
1199
- const published = normalizeTheme(body?.published, fallbackTheme);
1200
- const draft = normalizeTheme(body?.draft?.theme?.theme, published);
1201
- const revisionId = typeof body?.draft?.revisionId === "number" && Number.isInteger(body.draft.revisionId)
1202
- ? body.draft.revisionId
1203
- : null;
1204
- const publishedRevisionId = typeof body?.publishedRevisionId === "number" && Number.isInteger(body.publishedRevisionId)
1205
- ? body.publishedRevisionId
1206
- : null;
1207
- const nextState = {
1208
- key: body?.key?.trim() || themeKey,
1209
- published,
1210
- draft,
1211
- revisionId,
1212
- hasPublishedThemeRevision: publishedRevisionId != null,
1213
- publishedRevisionId,
1214
- };
1215
- stateRef.current = nextState;
1216
- siteThemeRef.current = draft;
1217
- savedThemeRef.current = draft;
1218
- readErrorRef.current = null;
1219
- setState(nextState);
1220
- phiThemeHistory.clear(historyScope);
1221
- emitThemeState(dispatchSignal, draft, revisionId, resolveSelectionValue(), revisionId == null ? "published" : "draft");
1222
- announceDraftStatus();
1223
- emitSelectOptions();
1224
- })
1225
- .catch((error) => {
1226
- if (!cancelled) {
1227
- const message = error instanceof Error ? error.message : "Failed to read theme.";
1228
- readErrorRef.current = message;
1229
- announceDraftStatus();
1230
- showMessage({ level: "error", content: message });
1231
- }
1232
- });
1233
- return () => {
1234
- cancelled = true;
1235
- };
1236
- }, [
1237
- announceDraftStatus,
1238
- dispatchSignal,
1239
- emitSelectOptions,
1240
- fallbackTheme,
1241
- historyScope,
1242
- resolveSelectionValue,
1243
- showMessage,
1244
- siteKey,
1245
- themeKey,
1246
- ]);
1247
- async function saveTheme(draftTheme = stateRef.current.draft, options) {
1248
- let nextTheme = ensurePhiThemeDerivation(draftTheme);
1249
- setSaving(true);
1250
- try {
1251
- const current = stateRef.current;
1252
- /*
1253
- * The blocks a Module brought become the Site's here, on the way to the server and nowhere else:
1254
- * its palette, its style tokens, and its ground -- background, Chrome and Shadow of both modes as
1255
- * values, every picture as a Site Asset. Following a block costs nothing; saving is what says
1256
- * somebody means to keep it, and a look somebody decided on must not depend on a package staying
1257
- * installed.
1258
- */
1259
- const materialized = await materializePhiThemeModuleBlocks(nextTheme, resolvePhiThemeComposition(nextTheme, themeBlocks));
1260
- /*
1261
- * The Logo is taken the same way, from every Set, core included: a Set offers it, and a Site that
1262
- * saved has decided to keep it -- as a picture in its own library, not as a data URL in its record.
1263
- */
1264
- nextTheme = await materializePhiThemeBrandLogo(materialized.theme, resolvePhiThemeComposition(materialized.theme, themeBlocks).markSet);
1265
- const response = await fetch("/api/site/cms/theme", {
1266
- method: "POST",
1267
- headers: {
1268
- "content-type": "application/json",
1269
- },
1270
- body: JSON.stringify({
1271
- key: current.key,
1272
- theme: nextTheme,
1273
- message: "Brand theme draft",
1274
- }),
1275
- });
1276
- const body = (await response.json().catch(() => null));
1277
- if (!response.ok) {
1278
- throw new Error(body?.error ?? "Failed to save theme draft.");
1279
- }
1280
- const revisionId = typeof body?.revisionId === "number" && Number.isInteger(body.revisionId) ? body.revisionId : null;
1281
- const savedTheme = normalizeTheme(body?.theme?.theme, nextTheme);
1282
- const nextState = {
1283
- ...stateRef.current,
1284
- draft: savedTheme,
1285
- revisionId,
1286
- };
1287
- stateRef.current = nextState;
1288
- siteThemeRef.current = savedTheme;
1289
- savedThemeRef.current = savedTheme;
1290
- setState(nextState);
1291
- emitThemeState(dispatchSignal, savedTheme, revisionId, resolveSelectionValue(), "draft", options?.correlationId);
1292
- announceDraftStatus(options?.correlationId);
1293
- emitSelectOptions(options?.correlationId);
1294
- if (options?.notify !== false) {
1295
- showMessage({ level: "success", content: "Saved theme draft." }, { correlationId: options?.correlationId ?? null });
1296
- }
1297
- return revisionId;
1298
- }
1299
- finally {
1300
- setSaving(false);
1301
- }
1302
- }
1303
- async function publishTheme(correlationId) {
1304
- const current = stateRef.current;
1305
- if (current.revisionId == null) {
1306
- throw new Error("No saved theme draft found to publish.");
1307
- }
1308
- const response = await fetch("/api/site/cms/theme/publish", {
1309
- method: "POST",
1310
- headers: {
1311
- "content-type": "application/json",
1312
- },
1313
- body: JSON.stringify({
1314
- key: current.key,
1315
- revisionId: current.revisionId,
1316
- }),
1317
- });
1318
- const body = (await response.json().catch(() => null));
1319
- if (!response.ok) {
1320
- throw new Error(body?.error ?? "Failed to publish theme.");
1321
- }
1322
- const published = normalizeTheme(body?.theme?.theme, current.draft);
1323
- const nextState = {
1324
- ...current,
1325
- published,
1326
- draft: published,
1327
- revisionId: null,
1328
- hasPublishedThemeRevision: true,
1329
- publishedRevisionId: current.revisionId,
1330
- };
1331
- stateRef.current = nextState;
1332
- siteThemeRef.current = published;
1333
- savedThemeRef.current = published;
1334
- setState(nextState);
1335
- emitThemeState(dispatchSignal, published, null, resolveSelectionValue(), "published", correlationId);
1336
- announceDraftStatus(correlationId);
1337
- emitSelectOptions(correlationId);
1338
- showMessage({ level: "success", content: "Published theme." }, { correlationId: correlationId ?? null });
1339
- emitRootReload(dispatchSignal, correlationId);
1340
- }
1341
- /*
1342
- * The Controller names the address it is addressed at, or the bus has nobody to deliver to.
1343
- *
1344
- * A signal is held until a listener answers for its receiver, and a listener answers only for an
1345
- * address it names. Every draft a Widget sent -- and every hydrate request -- was held here and
1346
- * never arrived, silently: the Widget rendered its own copy, so the controls looked right while the
1347
- * Controller knew nothing and the preview was never told.
1348
- */
1349
- usePhiSignalListener((signal) => {
1350
- if (signal.channel === PHI_THEME_SIGNAL_CHANNELS.brandTheme &&
1351
- signal.action === "change" &&
1352
- signal.receiver === createPhiThemeControllerAddress() &&
1353
- signal.sender !== createPhiThemeControllerAddress()) {
1354
- const value = signal.value && typeof signal.value === "object"
1355
- ? signal.value
1356
- : null;
1357
- const current = stateRef.current;
1358
- const nextTheme = normalizeTheme(value?.theme, current.draft);
1359
- const revisionId = typeof value?.revisionId === "number" && Number.isInteger(value.revisionId) ? value.revisionId : current.revisionId;
1360
- if (revisionId !== current.revisionId) {
1361
- stateRef.current = { ...current, revisionId };
1362
- }
1363
- const edit = value?.edit;
1364
- if (edit === "live") {
1365
- pickerEditBeforeRef.current ??= current.draft;
1366
- publishDraft(nextTheme, { history: false, correlationId: signal.correlationId });
1367
- return;
1368
- }
1369
- if (edit === "commit" || edit === "discard") {
1370
- const before = pickerEditBeforeRef.current;
1371
- pickerEditBeforeRef.current = null;
1372
- if (edit === "discard") {
1373
- publishDraft(before ?? nextTheme, { history: false, correlationId: signal.correlationId });
1374
- return;
1375
- }
1376
- publishDraft(nextTheme, { history: false, correlationId: signal.correlationId });
1377
- if (before && !isSameThemePayload(before, nextTheme)) {
1378
- phiThemeHistory.record(historyScope, { label: "Update theme", before, after: nextTheme });
1379
- }
1380
- return;
1381
- }
1382
- pickerEditBeforeRef.current = null;
1383
- publishDraft(nextTheme, { correlationId: signal.correlationId });
1384
- return;
1385
- }
1386
- if (signal.scope === "area" &&
1387
- signal.receiver === createPhiThemeControllerAddress() &&
1388
- signal.channel === PHI_THEME_SIGNAL_CHANNELS.previewThemeMode &&
1389
- signal.action === "change" &&
1390
- signal.valueType === "boolean") {
1391
- const value = signal.value;
1392
- const nextMode = typeof value === "boolean" ? value ? "dark" : "light" : null;
1393
- if (!nextMode) {
1394
- return;
1395
- }
1396
- const current = stateRef.current;
1397
- const baseTheme = current.hasPublishedThemeRevision ? current.published : fallbackTheme;
1398
- const nextTheme = {
1399
- ...baseTheme,
1400
- mode: nextMode,
1401
- };
1402
- // Resolved here, where the catalogue is: the root applies what it receives and holds no blocks.
1403
- emitRootThemeState(dispatchSignal, resolvePhiThemeRuntimePayload(nextTheme, themeBlocks).theme, signal.correlationId);
1404
- return;
1405
- }
1406
- if (signal.channel === PHI_THEME_SIGNAL_CHANNELS.presetSelect) {
1407
- if (signal.scope === "area" &&
1408
- signal.action === "change" &&
1409
- signal.receiver === createPhiThemeControllerAddress() &&
1410
- typeof signal.value === "string" &&
1411
- signal.value.trim().length > 0) {
1412
- /*
1413
- * Draft goes back to the Theme being worked on; Published is tried on the way a Set is -- it
1414
- * replaces what is shown, the Draft entry keeps what was there, and only a save or an edit on
1415
- * top makes it the draft. Both are one history entry.
1416
- */
1417
- const siteState = readPhiSiteThemeSelectionState(signal.value, siteKey);
1418
- if (siteState) {
1419
- const current = stateRef.current;
1420
- if (siteState === "published" && !current.hasPublishedThemeRevision) {
1421
- return;
1422
- }
1423
- const nextTheme = siteState === "draft" ? siteThemeRef.current : current.published;
1424
- if (!isSameThemePayload(current.draft, nextTheme)) {
1425
- publishDraft(nextTheme, {
1426
- updateSiteSnapshot: false,
1427
- correlationId: signal.correlationId,
1428
- selectionValue: createPhiSiteThemeSelectionValue(siteKey, siteState),
1429
- });
1430
- }
1431
- return;
1432
- }
1433
- /*
1434
- * A Set is tried on, not taken: it decides all three parts and names itself as the derivation,
1435
- * but the Site Theme entry keeps what was there before, so choosing it again takes the Set back.
1436
- */
1437
- const set = themeBlocks.sets.find((candidate) => candidate.key === signal.value);
1438
- if (!set) {
1439
- return;
1440
- }
1441
- const palette = themeBlocks.palettes.find((candidate) => candidate.key === set.palette);
1442
- const withSet = mergeThemeSetChoice(stateRef.current.draft, set);
1443
- const nextTheme = {
1444
- ...(palette ? applyThemePreset(withSet, palette) : withSet),
1445
- derivedFrom: createPhiThemeDerivation(set),
1446
- };
1447
- if (!isSameThemePayload(stateRef.current.draft, nextTheme)) {
1448
- publishDraft(nextTheme, {
1449
- updateSiteSnapshot: false,
1450
- correlationId: signal.correlationId,
1451
- selectionValue: set.key,
1452
- });
1453
- }
1454
- return;
1455
- }
1456
- return;
1457
- }
1458
- /*
1459
- * A Draft Status Widget that mounted asks what stands; the answer goes to it alone, for the reason
1460
- * `emitThemeStateTo` gives. Answered whatever is in progress, because it is a question about state.
1461
- */
1462
- if (signal.scope === "area" &&
1463
- signal.channel === PHI_THEME_SIGNAL_CHANNELS.draftStatus &&
1464
- signal.action === "activate" &&
1465
- signal.receiver === createPhiThemeControllerAddress()) {
1466
- if (signal.sender != null) {
1467
- emitThemeDraftStatus(dispatchSignal, signal.sender, resolveDraftStatus(), signal.correlationId);
1468
- }
1469
- return;
1470
- }
1471
- if (signal.scope !== "area" ||
1472
- signal.channel !== PHI_THEME_SIGNAL_CHANNELS.command ||
1473
- signal.action !== "activate" ||
1474
- signal.valueType !== "string" ||
1475
- signal.receiver !== createPhiThemeControllerAddress()) {
1476
- return;
1477
- }
1478
- const commandValue = signal.value;
1479
- /*
1480
- * Answered before the saving guard: a Widget that mounts mid-save is asking what is there, which
1481
- * is a question about state and not a command that would compete with the save.
1482
- */
1483
- if (commandValue === "hydrate") {
1484
- const asker = signal.sender;
1485
- if (asker == null) {
1486
- return;
1487
- }
1488
- const current = stateRef.current;
1489
- emitThemeStateTo(dispatchSignal, asker, current.draft, current.revisionId, current.revisionId == null ? "published" : "draft", signal.correlationId);
1490
- return;
1491
- }
1492
- if (saving) {
1493
- return;
1494
- }
1495
- if (commandValue === "save") {
1496
- void saveTheme(undefined, { correlationId: signal.correlationId }).catch((error) => {
1497
- showMessage({ level: "error", content: error instanceof Error ? error.message : "Failed to save theme draft." }, { correlationId: signal.correlationId });
1498
- });
1499
- return;
1500
- }
1501
- if (commandValue === "publish") {
1502
- void publishTheme(signal.correlationId).catch((error) => {
1503
- showMessage({ level: "error", content: error instanceof Error ? error.message : "Failed to publish theme." }, { correlationId: signal.correlationId });
1504
- });
1505
- return;
1506
- }
1507
- if (commandValue === "preview") {
1508
- const revisionId = stateRef.current.revisionId;
1509
- if (!Number.isInteger(revisionId) || revisionId <= 0) {
1510
- showMessage({ level: "error", content: "No saved theme draft found. Save first before opening live preview." }, { correlationId: signal.correlationId });
1511
- return;
1512
- }
1513
- const href = buildThemeReviewHref({
1514
- area: reviewArea,
1515
- revisionId: revisionId,
1516
- themeKey: stateRef.current.key,
1517
- });
1518
- window.open(href, "_blank", "noopener,noreferrer");
1519
- return;
1520
- }
1521
- if (commandValue === "reset") {
1522
- const preset = resolveThemePayloadPreset(stateRef.current.draft, themePresets);
1523
- publishDraft(resetThemeToPreset(stateRef.current.draft, themePresets, preset), { correlationId: signal.correlationId });
1524
- showMessage({ level: "success", content: `Reset theme to ${preset.title}.` }, { correlationId: signal.correlationId });
1525
- return;
1526
- }
1527
- if (commandValue === "undo") {
1528
- pickerEditBeforeRef.current = null;
1529
- phiThemeHistory.undo(historyScope, (previous) => {
1530
- publishDraft(previous, { history: false, correlationId: signal.correlationId });
1531
- });
1532
- return;
1533
- }
1534
- if (commandValue === "redo") {
1535
- pickerEditBeforeRef.current = null;
1536
- phiThemeHistory.redo(historyScope, (next) => {
1537
- publishDraft(next, { history: false, correlationId: signal.correlationId });
1538
- });
1539
- }
1540
- }, undefined, createPhiThemeControllerAddress());
1541
- void state;
1542
- return null;
824
+ return heard ?? initialMode;
1543
825
  }
1544
826
  /**
1545
827
  * The open section of a Theme panel, remembered for the session.
@@ -1708,35 +990,53 @@ export function PhiBuilderBrandThemeControlsWidgetClient({ runtime, config, colo
1708
990
  const loading = false;
1709
991
  const saving = false;
1710
992
  const [activeColorSection, changeActiveColorSection] = usePhiBrandAccordionSection(BRAND_THEME_COLOR_COLLAPSE_STORAGE_KEY, BRAND_THEME_COLOR_SECTION_KEYS);
1711
- const themeComposition = resolvePhiThemeComposition(state.draft, themeBlocks);
1712
- const algorithm = previewMode === "dark" ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm;
1713
- const selectedPreset = resolveThemePayloadPreset(state.draft, themePresets);
1714
- /*
1715
- * What the tab shows is what the Site renders: the palette block with the draft's palette on top,
1716
- * resolved for the mode being edited. The seeds the author owns are the ones present in the draft's
1717
- * palette, shared or under this mode; the derived overrides live under this mode alone.
1718
- */
1719
- const colorToken = resolvePhiThemeColorTokens(selectedPreset, state.draft.palette, previewMode);
1720
- const ownPalette = state.draft.palette ?? {};
1721
- const ownOverrides = ownPalette.modes?.[previewMode]?.overrides ?? {};
1722
993
  /*
1723
- * The same colour without the author's derived overrides: what a derived control falls back to, and
1724
- * what its "Reset override" hands back. Seeds stay in, so the algorithm derives from the author's seed.
994
+ * Everything the panel derives from the draft, derived once per draft and mode. The panel renders
995
+ * on every picker step and again on the Controller's echo of it, and each render used to resolve the
996
+ * colour tokens twice and the whole alias derivation on top -- for some seventy colour fields that
997
+ * then redrew. Kept until the draft, the mode, the blocks or the presets change.
1725
998
  */
1726
- const baseColorToken = resolvePhiThemeColorTokens(selectedPreset, mergeThemePaletteMode(state.draft, previewMode, (current) => ({ ...current, overrides: {} })).palette, previewMode);
1727
- const customPalette = resolveThemeCustomPalette(state.draft, selectedPreset, previewMode);
1728
- const customColorOptions = PHI_THEME_CUSTOM_COLOR_KEYS.map((key, index) => ({
1729
- key,
1730
- label: `${colorPickerLabels?.custom ?? "Custom"} ${index + 1}`,
1731
- value: customPalette[key],
1732
- }));
1733
- const computedToken = antdTheme.getDesignToken({
1734
- algorithm,
1735
- token: {
999
+ const customLabel = colorPickerLabels?.custom ?? "Custom";
1000
+ const { themeComposition, selectedPreset, colorToken, ownPalette, ownOverrides, customPalette, customColorOptions, computedToken, } = useMemo(() => {
1001
+ const themeComposition = resolvePhiThemeComposition(state.draft, themeBlocks);
1002
+ const selectedPreset = resolveThemePayloadPreset(state.draft, themePresets);
1003
+ /*
1004
+ * What the tab shows is what the Site renders: the palette block with the draft's palette on top,
1005
+ * resolved for the mode being edited. The seeds the author owns are the ones present in the draft's
1006
+ * palette, shared or under this mode; the derived overrides live under this mode alone.
1007
+ */
1008
+ const colorToken = resolvePhiThemeColorTokens(selectedPreset, state.draft.palette, previewMode);
1009
+ const ownPalette = state.draft.palette ?? {};
1010
+ const ownOverrides = ownPalette.modes?.[previewMode]?.overrides ?? {};
1011
+ /*
1012
+ * The same colour without the author's derived overrides: what a derived control falls back to, and
1013
+ * what its "Reset override" hands back. Seeds stay in, so the algorithm derives from the author's
1014
+ * seed.
1015
+ */
1016
+ const baseColorToken = resolvePhiThemeColorTokens(selectedPreset, mergeThemePaletteMode(state.draft, previewMode, (current) => ({ ...current, overrides: {} })).palette, previewMode);
1017
+ const customPalette = resolveThemeCustomPalette(state.draft, selectedPreset, previewMode);
1018
+ const customColorOptions = PHI_THEME_CUSTOM_COLOR_KEYS.map((key, index) => ({
1019
+ key,
1020
+ label: `${customLabel} ${index + 1}`,
1021
+ value: customPalette[key],
1022
+ }));
1023
+ // What the algorithm derives for the mode being edited: the Foundation's resolver, which is the one
1024
+ // the preview and the live render use too.
1025
+ const computedToken = resolvePhiAntdAliasTokens(previewMode, {
1736
1026
  ...buildPhiEffectiveNonColorThemeTokens(state.draft),
1737
1027
  ...baseColorToken,
1738
- },
1739
- });
1028
+ });
1029
+ return {
1030
+ themeComposition,
1031
+ selectedPreset,
1032
+ colorToken,
1033
+ ownPalette,
1034
+ ownOverrides,
1035
+ customPalette,
1036
+ customColorOptions,
1037
+ computedToken,
1038
+ };
1039
+ }, [customLabel, previewMode, state.draft, themeBlocks, themePresets]);
1740
1040
  return (_jsx(PhiFlexControl, { vertical: true, gap: clientToken.padding, style: { width: "100%", minWidth: 0, opacity: loading ? 0.65 : 1 }, children: _jsx(PhiCardControl, { size: "small", children: _jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingSM, children: [_jsx(PhiBrandBlockPicker, { label: "Palette", value: themeComposition.palette.key, unavailable: themeComposition.unavailable.palette, options: themeBlocks.palettes, onChange: (key) => {
1741
1041
  const palette = themeBlocks.palettes.find((candidate) => candidate.key === key);
1742
1042
  if (!palette)
@@ -1749,7 +1049,7 @@ export function PhiBuilderBrandThemeControlsWidgetClient({ runtime, config, colo
1749
1049
  flex: `0 1 min(100%, ${colorControlWidth}px)`,
1750
1050
  minWidth: 0,
1751
1051
  maxWidth: "100%",
1752
- }, children: _jsx(PhiColorFieldControl, { ...pickerTransaction, tokenKey: "custom6", value: customPalette.custom6, defaultValue: resolvePhiThemePresetCustomColors(selectedPreset, previewMode).custom6, disabled: saving, customColors: customColorOptions, presets: PHI_COLOR_PICKER_PRESETS, labels: colorPickerLabels, onChange: (value) => {
1052
+ }, children: _jsx(PhiColorFieldControl, { ...pickerTransaction, tokenKey: "custom6", value: customPalette.custom6, defaultValue: resolvePhiThemePaletteCustomColors(selectedPreset.palette, previewMode).custom6, disabled: saving, customColors: customColorOptions, presets: PHI_COLOR_PICKER_PRESETS, labels: colorPickerLabels, onChange: (value) => {
1753
1053
  publishDraft(mergeThemeCustomColors(state.draft, buildPhiThemeCustomColorPalette(value), previewMode));
1754
1054
  } }) })] })),
1755
1055
  children: (_jsx(PhiFlexControl, { wrap: "wrap", style: { minWidth: 0, columnGap: clientToken.paddingXXS, rowGap: clientToken.paddingSM }, children: customColorOptions
@@ -1758,7 +1058,7 @@ export function PhiBuilderBrandThemeControlsWidgetClient({ runtime, config, colo
1758
1058
  flex: `1 1 calc((100% - ${clientToken.paddingXXS}) / 2)`,
1759
1059
  minWidth: 0,
1760
1060
  maxWidth: "100%",
1761
- }, children: _jsx(PhiColorFieldControl, { ...pickerTransaction, label: item.label, tokenKey: item.key, value: item.value, defaultValue: resolvePhiThemePresetCustomColors(selectedPreset, previewMode)[item.key], disabled: saving, customColors: customColorOptions, presets: PHI_COLOR_PICKER_PRESETS, labels: colorPickerLabels, onChange: (value, tokenKey) => {
1061
+ }, children: _jsx(PhiColorFieldControl, { ...pickerTransaction, label: item.label, tokenKey: item.key, value: item.value, defaultValue: resolvePhiThemePaletteCustomColors(selectedPreset.palette, previewMode)[item.key], disabled: saving, customColors: customColorOptions, presets: PHI_COLOR_PICKER_PRESETS, labels: colorPickerLabels, onChange: (value, tokenKey) => {
1762
1062
  if (!tokenKey || !PHI_THEME_CUSTOM_COLOR_KEYS.includes(tokenKey)) {
1763
1063
  return;
1764
1064
  }
@@ -1768,9 +1068,9 @@ export function PhiBuilderBrandThemeControlsWidgetClient({ runtime, config, colo
1768
1068
  ...THEME_COLOR_SEED_SECTIONS.map((section) => {
1769
1069
  const seedAuthored = Object.prototype.hasOwnProperty.call(ownPalette.seed ?? {}, section.key) ||
1770
1070
  Object.prototype.hasOwnProperty.call(ownPalette.modes?.[previewMode]?.seed ?? {}, section.key);
1771
- const seedDefaultValue = readComputedTokenColor(computedToken, section.key, section.fallback);
1071
+ const seedDefaultValue = readEffectiveTokenString(computedToken, section.key, section.fallback);
1772
1072
  const seedValue = seedAuthored
1773
- ? readTokenColor(colorToken, section.key, seedDefaultValue)
1073
+ ? readEffectiveTokenString(colorToken, section.key, seedDefaultValue)
1774
1074
  : seedDefaultValue;
1775
1075
  return {
1776
1076
  key: section.key,
@@ -1783,12 +1083,12 @@ export function PhiBuilderBrandThemeControlsWidgetClient({ runtime, config, colo
1783
1083
  } }) })] })),
1784
1084
  children: (_jsx(PhiFlexControl, { wrap: "wrap", style: { minWidth: 0, columnGap: clientToken.paddingXXS, rowGap: clientToken.paddingSM }, children: section.derived.map((item) => {
1785
1085
  const overridden = Object.prototype.hasOwnProperty.call(ownOverrides, item.key);
1786
- const fallback = readComputedTokenColor(computedToken, item.key, section.fallback);
1086
+ const fallback = readEffectiveTokenString(computedToken, item.key, section.fallback);
1787
1087
  return (_jsx("div", { style: {
1788
1088
  flex: `1 1 calc((100% - ${clientToken.paddingXXS}) / 2)`,
1789
1089
  minWidth: 0,
1790
1090
  maxWidth: "100%",
1791
- }, children: _jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXXS, children: [_jsx(PhiColorFieldControl, { ...pickerTransaction, label: item.label, tokenKey: item.key, value: overridden ? readTokenColor(colorToken, item.key, fallback) : fallback, defaultValue: fallback, disabled: saving, customColors: customColorOptions, labels: colorPickerLabels, onChange: (value, tokenKey) => {
1091
+ }, children: _jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXXS, children: [_jsx(PhiColorFieldControl, { ...pickerTransaction, label: item.label, tokenKey: item.key, value: overridden ? readEffectiveTokenString(colorToken, item.key, fallback) : fallback, defaultValue: fallback, disabled: saving, customColors: customColorOptions, labels: colorPickerLabels, onChange: (value, tokenKey) => {
1792
1092
  if (!tokenKey) {
1793
1093
  return;
1794
1094
  }
@@ -1823,8 +1123,9 @@ export function PhiBuilderBrandStyleControlsWidgetClient({ runtime, config, }) {
1823
1123
  controlHeight: readEffectiveTokenNumber(styleTokenInput, "controlHeight", PHI_CONTROL_HEIGHTS.md),
1824
1124
  controlHeightLG: readEffectiveTokenNumber(styleTokenInput, "controlHeightLG", PHI_CONTROL_HEIGHTS.lg),
1825
1125
  };
1126
+ /** One row per size step: a label and the preset picker; Border Radius and Control Height share it. */
1127
+ const renderPresetSizeRows = (items, options) => (_jsx(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: items.map((item) => (_jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: item.label }), _jsx(PhiPresetSizeControl, { disabled: saving, value: item.value, fallbackKey: item.fallbackPreset, options: options, onChange: (value) => updateToken({ [item.key]: value }) })] }, item.key))) }));
1826
1128
  const wireframe = readEffectiveTokenBoolean(styleTokenInput, "wireframe", true);
1827
- const remRootValue = state.draft.rem?.rootValue ?? 16;
1828
1129
  const baseFontSize = readEffectiveTokenNumber(styleTokenInput, "fontSize", 12);
1829
1130
  function updateToken(tokenPatch) {
1830
1131
  publishDraft(mergeThemeToken(state.draft, tokenPatch));
@@ -1876,7 +1177,7 @@ export function PhiBuilderBrandStyleControlsWidgetClient({ runtime, config, }) {
1876
1177
  },
1877
1178
  })),
1878
1179
  ], [fontFamilies, resolvedCatalogueFamilies, siteFontAssets.options]);
1879
- return (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.padding, style: { width: "100%", minWidth: 0, opacity: loading ? 0.65 : 1 }, children: [siteFontFaceCss ? (_jsx("style", { href: "phi-theme-font-picker-faces", precedence: "default", dangerouslySetInnerHTML: { __html: siteFontFaceCss } })) : null, _jsx(PhiCardControl, { size: "small", children: _jsx(PhiAccordionControl, { openSection: activeStyleSection, onOpenSectionChange: changeActiveStyleSection, sections: [
1180
+ return (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.padding, style: { width: "100%", minWidth: 0, opacity: loading ? 0.65 : 1 }, children: [siteFontFaceCss ? (_jsx("style", { href: "phi-theme-font-picker-faces", precedence: "default", dangerouslySetInnerHTML: { __html: siteFontFaceCss } })) : null, siteFontAssets.error ? (_jsx(PhiAlertControl, { level: "error", title: "The Site's own typefaces could not be read.", description: siteFontAssets.error })) : null, _jsx(PhiCardControl, { size: "small", children: _jsx(PhiAccordionControl, { openSection: activeStyleSection, onOpenSectionChange: changeActiveStyleSection, sections: [
1880
1181
  {
1881
1182
  key: "shapes",
1882
1183
  label: _jsx(PhiTypographyControl, { strong: true, children: "Shapes" }),
@@ -1899,20 +1200,20 @@ export function PhiBuilderBrandStyleControlsWidgetClient({ runtime, config, }) {
1899
1200
  {
1900
1201
  key: "radius",
1901
1202
  label: _jsx(PhiTypographyControl, { strong: true, children: "Border Radius" }),
1902
- children: (_jsx(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [
1903
- { key: "borderRadiusSM", label: "Small", value: radiusValues.borderRadiusSM, fallbackPreset: "xs" },
1904
- { key: "borderRadius", label: "Base", value: radiusValues.borderRadius, fallbackPreset: "sm" },
1905
- { key: "borderRadiusLG", label: "Large", value: radiusValues.borderRadiusLG, fallbackPreset: "base" },
1906
- ].map((item) => (_jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: item.label }), _jsx(PhiPresetSizeControl, { disabled: saving, value: item.value, fallbackKey: item.fallbackPreset, options: PHI_STYLE_RADIUS_PRESET_OPTIONS, onChange: (value) => updateToken({ [item.key]: value }) })] }, item.key))) })),
1203
+ children: renderPresetSizeRows([
1204
+ { key: "borderRadiusSM", label: "Small", value: radiusValues.borderRadiusSM, fallbackPreset: "xs" },
1205
+ { key: "borderRadius", label: "Base", value: radiusValues.borderRadius, fallbackPreset: "sm" },
1206
+ { key: "borderRadiusLG", label: "Large", value: radiusValues.borderRadiusLG, fallbackPreset: "base" },
1207
+ ], PHI_STYLE_RADIUS_PRESET_OPTIONS),
1907
1208
  },
1908
1209
  {
1909
1210
  key: "controlHeight",
1910
1211
  label: _jsx(PhiTypographyControl, { strong: true, children: "Control Height" }),
1911
- children: (_jsx(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [
1912
- { key: "controlHeightSM", label: "Small", value: controlHeightValues.controlHeightSM, fallbackPreset: "base" },
1913
- { key: "controlHeight", label: "Base", value: controlHeightValues.controlHeight, fallbackPreset: "md" },
1914
- { key: "controlHeightLG", label: "Large", value: controlHeightValues.controlHeightLG, fallbackPreset: "lg" },
1915
- ].map((item) => (_jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: item.label }), _jsx(PhiPresetSizeControl, { disabled: saving, value: item.value, fallbackKey: item.fallbackPreset, options: PHI_STYLE_CONTROL_HEIGHT_PRESET_OPTIONS, onChange: (value) => updateToken({ [item.key]: value }) })] }, item.key))) })),
1212
+ children: renderPresetSizeRows([
1213
+ { key: "controlHeightSM", label: "Small", value: controlHeightValues.controlHeightSM, fallbackPreset: "base" },
1214
+ { key: "controlHeight", label: "Base", value: controlHeightValues.controlHeight, fallbackPreset: "md" },
1215
+ { key: "controlHeightLG", label: "Large", value: controlHeightValues.controlHeightLG, fallbackPreset: "lg" },
1216
+ ], PHI_STYLE_CONTROL_HEIGHT_PRESET_OPTIONS),
1916
1217
  },
1917
1218
  {
1918
1219
  key: "fontFamily",
@@ -1924,7 +1225,7 @@ export function PhiBuilderBrandStyleControlsWidgetClient({ runtime, config, }) {
1924
1225
  {
1925
1226
  key: "fontSize",
1926
1227
  label: _jsx(PhiTypographyControl, { strong: true, children: "Base Font Size" }),
1927
- children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: "Root value" }), _jsxs(PhiTypographyControl, { code: true, children: [remRootValue, "px"] })] }), _jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: "Font size" }), _jsxs(PhiTypographyControl, { code: true, children: [baseFontSize, "px"] })] }), _jsx(PhiTypographyControl, { type: "secondary", children: "Root value controls rem conversion; font size is the seed every other type size is derived from." })] })),
1228
+ children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingSM, wrap: "nowrap", children: [_jsx(PhiTypographyControl, { style: { flex: `0 0 ${fieldLabelWidth}px` }, children: "Font size" }), _jsxs(PhiTypographyControl, { code: true, children: [baseFontSize, "px"] })] }), _jsx(PhiTypographyControl, { type: "secondary", children: "The seed every other type size is derived from." })] })),
1928
1229
  },
1929
1230
  {
1930
1231
  key: "wireframe",
@@ -1970,30 +1271,9 @@ function mergeThemeBlockChoice(theme, part, block) {
1970
1271
  return clearThemeAuthoredGround(withChoice);
1971
1272
  return withChoice;
1972
1273
  }
1973
- /**
1974
- * A Set decides all three parts, so it clears all three: the parts picked one by one, because a Set is
1975
- * what somebody falls back on when they stop deciding each part, and the values authored on top of
1976
- * them, for the same reason picking a single block clears its own. The Control shape belongs to the
1977
- * style, so it goes with the style tokens.
1978
- */
1979
- function mergeThemeSetChoice(theme, set) {
1980
- return clearThemeAuthoredFonts(clearThemeAuthoredGround(clearThemeControlShape(clearThemeStyleTokens({
1981
- ...theme,
1982
- blocks: { set: { key: set.key, version: set.version } },
1983
- }))));
1984
- }
1985
- /** Every font slot an author set, so the Set's fonts block is what shows. */
1986
- function clearThemeAuthoredFonts(theme) {
1987
- return Object.fromEntries(Object.entries(theme).filter(([key]) => key !== "fonts"));
1988
- }
1989
1274
  function formatShapeLabel(shape) {
1990
1275
  return shape.charAt(0).toUpperCase() + shape.slice(1);
1991
1276
  }
1992
- /** Every ground value an author set, in both modes, so the chosen block is what shows. */
1993
- function clearThemeAuthoredGround(theme) {
1994
- const root = Object.fromEntries(Object.entries(theme.root ?? {}).filter(([key]) => key !== "background" && key !== "chrome"));
1995
- return { ...theme, root };
1996
- }
1997
1277
  /**
1998
1278
  * Dropping the author's values for one surface, so the block below shows through again.
1999
1279
  *
@@ -2026,16 +1306,6 @@ function clearThemeRootSurface(theme, surface, mode) {
2026
1306
  function PhiBrandBlockResetButton({ blockTitle, disabled, onReset, }) {
2027
1307
  return (_jsx(PhiButtonControl, { size: "small", style: { flexShrink: 0 }, disabled: disabled, onClick: onReset, label: `Follow ${blockTitle}` }));
2028
1308
  }
2029
- /**
2030
- * Dropping every structural override, so the style block shows through again.
2031
- *
2032
- * Colour stays: the two tabs are two decisions, and somebody resetting the proportions did not ask to
2033
- * lose the brand colour they picked. The record keeps them apart -- `palette` and `style` -- so taking
2034
- * the one away never touches the other.
2035
- */
2036
- function clearThemeStyleTokens(theme) {
2037
- return omitThemeFields(theme, "style");
2038
- }
2039
1309
  /**
2040
1310
  * The picker for one part of the Theme.
2041
1311
  *
@@ -2229,27 +1499,20 @@ export function PhiBuilderBrandIdentityControlsWidgetClient({ runtime, config, }
2229
1499
  "--phi-labeled-control-width": "100%",
2230
1500
  }, children: [_jsx(PhiTypographyControl, { type: "secondary", children: showsWordmark
2231
1501
  ? _jsxs(_Fragment, { children: ["The Site name as it is set. One part per colour: a two-tone name is one word written in two. With no part at all the frame shows ", fallbackWordmark, "."] })
2232
- : _jsx(_Fragment, { children: "The Brand is the Logo alone. The name is not drawn, and neither is the Eyebrow above it." }) }), _jsx(PhiSwitchControl, { label: "Show name", checked: showsWordmark, checkedLabel: "On", uncheckedLabel: "Off", onChange: (checked) => publishDraft(mergeThemeWordmarkShows(state.draft, checked)) }), showsWordmark && (_jsxs(_Fragment, { children: [editableWordmarkParts.map((part, index) => (_jsx(PhiLabeledControl, { label: `Part #${index + 1}`, fill: true, children: _jsxs(PhiFlexControl, { gap: clientToken.paddingXXS, align: "center", style: { width: "100%", minWidth: 0 }, children: [_jsx(PhiTextControl, { value: part.text, placeholder: index === 0 ? fallbackWordmark : "Part", ariaLabel: `Wordmark part ${index + 1}`, allowClear: false, onChange: (next) => updateWordmarkPart(index, { text: next ?? "" }) }), _jsx(PhiColorControl, { mode: "single", allowClear: true, value: part.color ?? null, presets: PHI_COLOR_PICKER_PRESETS, onChange: (next) => updateWordmarkPart(index, { color: next }) }), _jsx(PhiButtonControl, { type: "text", size: "small", danger: true, disabled: wordmarkParts.length === 0, icon: _jsx(DeleteOutlined, {}), ariaLabel: "Remove this part of the Wordmark", onClick: () => {
1502
+ : _jsx(_Fragment, { children: "The Brand is the Logo alone. The name is not drawn, and neither is the Eyebrow above it." }) }), _jsx(PhiSwitchControl, { label: "Show name", checked: showsWordmark, checkedLabel: "On", uncheckedLabel: "Off", onChange: (checked) => publishDraft(mergeThemeWordmarkShows(state.draft, checked)) }), showsWordmark && (_jsxs(_Fragment, { children: [editableWordmarkParts.map((part, index) => (_jsx(PhiLabeledControl, { label: `Part #${index + 1}`, fill: true, children: _jsxs(PhiFlexControl, { gap: clientToken.paddingXXS, align: "center", style: { width: "100%", minWidth: 0 }, children: [_jsx(PhiTextControl, { value: part.text, placeholder: index === 0 ? fallbackWordmark : "Part", ariaLabel: `Wordmark part ${index + 1}`, allowClear: false, onChange: (next) => updateWordmarkPart(index, { text: next ?? "" }) }), _jsx(PhiColorControl, { mode: "single", allowClear: true,
1503
+ // A part's row is narrow: the swatch says the colour, the value would overflow it.
1504
+ showText: false, value: part.color ?? null, presets: PHI_COLOR_PICKER_PRESETS, onChange: (next) => updateWordmarkPart(index, { color: next }) }), _jsx(PhiButtonControl, { type: "text", size: "small", danger: true, disabled: wordmarkParts.length === 0, icon: _jsx(PhiIcon, { name: "delete", size: "inherit" }), ariaLabel: "Remove this part of the Wordmark", onClick: () => {
2233
1505
  setWordmarkPartKeys((current) => ({
2234
1506
  ...current,
2235
1507
  keys: current.keys.filter((_, at) => at !== index),
2236
1508
  }));
2237
1509
  publishDraft(mergeThemeWordmarkParts(state.draft, editableWordmarkParts.filter((_, at) => at !== index)));
2238
- } })] }) }, wordmarkPartKeys.keys[index] ?? `pending-${index}`))), _jsx(PhiLabeledControl, { label: " ", fill: true, children: _jsx(PhiButtonControl, { size: "small", label: "Add part", onClick: () => publishDraft(mergeThemeWordmarkParts(state.draft, [...editableWordmarkParts, { text: "" }])) }) }), _jsx(PhiDividerControl, { style: { marginBlock: clientToken.paddingXXS } }), _jsx(PhiLabeledControl, { label: "Weight", fill: true, children: _jsxs(PhiFlexControl, { gap: clientToken.paddingXS, align: "center", style: { width: "100%", minWidth: 0 }, children: [_jsx(PhiSelectControl, { ariaLabel: "Wordmark weight", style: { flex: "1 1 auto", minWidth: 0 }, value: String(brand.wordmark?.fontWeight ?? ""), options: [...PHI_THEME_WORDMARK_WEIGHT_OPTIONS], onChange: (next) => publishDraft(mergeThemeBrand(state.draft, {
2239
- wordmark: {
2240
- ...(brand.wordmark ?? {}),
2241
- fontWeight: next === "" ? null : Number(next),
2242
- },
2243
- })) }), _jsx(PhiCheckboxControl, { checked: brand.wordmark?.fontStyle === "italic", label: "Italic", onChange: (checked) => publishDraft(mergeThemeBrand(state.draft, {
2244
- wordmark: {
2245
- ...(brand.wordmark ?? {}),
2246
- fontStyle: checked ? "italic" : null,
2247
- },
2248
- })) })] }) }), _jsx(PhiNumberControl, { label: "Tracking", prefix: "em", style: { width: "100%" }, value: readWordmarkLetterSpacingEm(brand.wordmark?.letterSpacing), step: 0.01, precision: 3, min: -0.2, max: 1, onChange: (next) => publishDraft(mergeThemeBrand(state.draft, {
2249
- wordmark: {
2250
- ...(brand.wordmark ?? {}),
2251
- letterSpacing: next == null ? null : `${next}em`,
2252
- },
1510
+ } })] }) }, wordmarkPartKeys.keys[index] ?? `pending-${index}`))), _jsx(PhiLabeledControl, { label: " ", fill: true, children: _jsx(PhiButtonControl, { size: "small", label: "Add part", onClick: () => publishDraft(mergeThemeWordmarkParts(state.draft, [...editableWordmarkParts, { text: "" }])) }) }), _jsx(PhiDividerControl, { style: { marginBlock: clientToken.paddingXXS } }), _jsx(PhiLabeledControl, { label: "Weight", fill: true, children: _jsxs(PhiFlexControl, { gap: clientToken.paddingXS, align: "center", style: { width: "100%", minWidth: 0 }, children: [_jsx(PhiSelectControl, { ariaLabel: "Wordmark weight", style: { flex: "1 1 auto", minWidth: 0 }, value: String(brand.wordmark?.fontWeight ?? ""), options: [...PHI_THEME_WORDMARK_WEIGHT_OPTIONS], onChange: (next) => publishDraft(mergeThemeWordmark(state.draft, {
1511
+ fontWeight: next === "" ? null : Number(next),
1512
+ })) }), _jsx(PhiCheckboxControl, { checked: brand.wordmark?.fontStyle === "italic", label: "Italic", onChange: (checked) => publishDraft(mergeThemeWordmark(state.draft, {
1513
+ fontStyle: checked ? "italic" : null,
1514
+ })) })] }) }), _jsx(PhiNumberControl, { label: "Tracking", prefix: "em", style: { width: "100%" }, value: readWordmarkLetterSpacingEm(brand.wordmark?.letterSpacing), step: 0.01, precision: 3, min: -0.2, max: 1, onChange: (next) => publishDraft(mergeThemeWordmark(state.draft, {
1515
+ letterSpacing: next == null ? null : `${next}em`,
2253
1516
  })) }), _jsx(PhiLabeledControl, { label: "Eyebrow", fill: true, children: _jsx(PhiTextControl, { value: brand.eyebrow ?? "", placeholder: "The small line above the name", ariaLabel: "Eyebrow", allowClear: false, onChange: (next) => publishDraft(mergeThemeBrand(state.draft, {
2254
1517
  eyebrow: next ?? "",
2255
1518
  })) }) })] }))] })),
@@ -2305,12 +1568,12 @@ export function PhiBuilderBrandBackgroundControlsWidgetClient({ runtime, config,
2305
1568
  {
2306
1569
  key: "root",
2307
1570
  label: _jsx(PhiTypographyControl, { strong: true, children: "Root Background" }),
2308
- children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", justify: "space-between", gap: clientToken.paddingXS, children: [_jsxs(PhiTypographyControl, { type: "secondary", children: [modeLabel, ". One layer behind the whole Site, fixed to the viewport."] }), _jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingXXS, style: { flexShrink: 0 }, children: [_jsx(PhiBrandBlockResetButton, { disabled: state.draft.root?.background?.[mode] == null, blockTitle: composition.ground.title, onReset: () => publishDraft(clearThemeRootSurface(state.draft, "background", mode)) }), _jsx(PhiBrandCopyModeButton, { mode: mode, disabled: isSamePhiBackgroundConfig(rootBackground, otherRootBackground), onCopy: () => publishDraft(mergeThemeRootBackground(state.draft, otherMode, rootBackground)) })] })] }), _jsx(PhiBackgroundControl, { value: rootBackground, motionModes: PHI_ROOT_BACKGROUND_MOTION_MODES, imageSourceKinds: PHI_ROOT_BACKGROUND_IMAGE_SOURCE_KINDS, renderMediaPicker: renderPhiThemeRootBackgroundMediaPicker, editTransaction: editTransaction, onChange: (value) => publishDraft(mergeThemeRootBackground(state.draft, mode, value)) }, mode)] })),
1571
+ children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", justify: "space-between", gap: clientToken.paddingXS, children: [_jsxs(PhiTypographyControl, { type: "secondary", children: [modeLabel, ". One layer behind the whole Site, fixed to the viewport."] }), _jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingXXS, style: { flexShrink: 0 }, children: [_jsx(PhiBrandBlockResetButton, { disabled: state.draft.root?.background?.[mode] == null, blockTitle: composition.ground.title, onReset: () => publishDraft(clearThemeRootSurface(state.draft, "background", mode)) }), _jsx(PhiBrandCopyModeButton, { mode: mode, disabled: isSamePhiBackgroundConfig(rootBackground, otherRootBackground), onCopy: () => publishDraft(mergeThemeRootSurface(state.draft, "background", otherMode, rootBackground)) })] })] }), _jsx(PhiBackgroundControl, { value: rootBackground, motionModes: PHI_ROOT_BACKGROUND_MOTION_MODES, filters: PHI_ROOT_BACKGROUND_FILTERS, imageSourceKinds: PHI_ROOT_BACKGROUND_IMAGE_SOURCE_KINDS, renderMediaPicker: renderPhiThemeRootBackgroundMediaPicker, editTransaction: editTransaction, onChange: (value) => publishDraft(mergeThemeRootSurface(state.draft, "background", mode, value)) }, mode)] })),
2309
1572
  },
2310
1573
  {
2311
1574
  key: "chrome",
2312
1575
  label: _jsx(PhiTypographyControl, { strong: true, children: "Chrome Overlay" }),
2313
- children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", justify: "space-between", gap: clientToken.paddingXS, children: [_jsxs(PhiTypographyControl, { type: "secondary", children: [modeLabel, ". Shared by the Header, Sider and Footer Regions. Content and Hero never take it, and a Region that authors its own Background or Effect paints over it."] }), _jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingXXS, style: { flexShrink: 0 }, children: [_jsx(PhiBrandBlockResetButton, { disabled: state.draft.root?.chrome?.[mode] == null, blockTitle: composition.ground.title, onReset: () => publishDraft(clearThemeRootSurface(state.draft, "chrome", mode)) }), _jsx(PhiBrandCopyModeButton, { mode: mode, disabled: isSamePhiBackgroundConfig(chromeOverlay, otherChromeOverlay), onCopy: () => publishDraft(mergeThemeChromeOverlay(state.draft, otherMode, chromeOverlay)) })] })] }), _jsx(PhiBackgroundControl, { value: chromeOverlay, motionModes: PHI_SHELL_CHROME_OVERLAY_MOTION_MODES, effects: PHI_SHELL_CHROME_OVERLAY_EFFECTS, baseKinds: PHI_SHELL_CHROME_OVERLAY_BASE_KINDS, imageSourceKinds: PHI_SHELL_CHROME_OVERLAY_IMAGE_SOURCE_KINDS, renderMediaPicker: renderPhiThemeRootBackgroundMediaPicker, editTransaction: editTransaction, onChange: (value) => publishDraft(mergeThemeChromeOverlay(state.draft, mode, value)) }, `chrome-${mode}`)] })),
1576
+ children: (_jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingXS, children: [_jsxs(PhiFlexControl, { align: "center", justify: "space-between", gap: clientToken.paddingXS, children: [_jsxs(PhiTypographyControl, { type: "secondary", children: [modeLabel, ". Shared by the Header, Sider and Footer Regions. Content and Hero never take it, and a Region that authors its own Background or Effect paints over it."] }), _jsxs(PhiFlexControl, { align: "center", gap: clientToken.paddingXXS, style: { flexShrink: 0 }, children: [_jsx(PhiBrandBlockResetButton, { disabled: state.draft.root?.chrome?.[mode] == null, blockTitle: composition.ground.title, onReset: () => publishDraft(clearThemeRootSurface(state.draft, "chrome", mode)) }), _jsx(PhiBrandCopyModeButton, { mode: mode, disabled: isSamePhiBackgroundConfig(chromeOverlay, otherChromeOverlay), onCopy: () => publishDraft(mergeThemeRootSurface(state.draft, "chrome", otherMode, chromeOverlay)) })] })] }), _jsx(PhiBackgroundControl, { value: chromeOverlay, motionModes: PHI_SHELL_CHROME_OVERLAY_MOTION_MODES, filters: PHI_SHELL_CHROME_OVERLAY_FILTERS, baseKinds: PHI_SHELL_CHROME_OVERLAY_BASE_KINDS, imageSourceKinds: PHI_SHELL_CHROME_OVERLAY_IMAGE_SOURCE_KINDS, renderMediaPicker: renderPhiThemeRootBackgroundMediaPicker, editTransaction: editTransaction, onChange: (value) => publishDraft(mergeThemeRootSurface(state.draft, "chrome", mode, value)) }, `chrome-${mode}`)] })),
2314
1577
  },
2315
1578
  {
2316
1579
  key: "shadow",
@@ -2391,7 +1654,7 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2391
1654
  * and the parts nobody chose are the block's. Resolving here rather than in the state keeps the draft
2392
1655
  * that travels back to the Controller free of anything that was only worked out for display.
2393
1656
  */
2394
- const previewThemeResolved = resolvePhiThemeRuntimePayload(previewTheme, themeBlocks).theme;
1657
+ const previewThemeResolved = useMemo(() => resolvePhiThemeRuntimePayload(previewTheme, themeBlocks).theme, [previewTheme, themeBlocks]);
2395
1658
  const [hoveredStatusKey, setHoveredStatusKey] = useState(null);
2396
1659
  const [previewTableSearch, setPreviewTableSearch] = useState("");
2397
1660
  /*
@@ -2413,15 +1676,22 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2413
1676
  serif: previewFontStacks.serif.stack,
2414
1677
  display: previewFontStacks.display.stack,
2415
1678
  });
2416
- const previewTokenInput = {
1679
+ /*
1680
+ * The preview's tokens, derived once per draft and mode. The preview renders on every picker step,
1681
+ * on every hover over a status sample and on every keystroke in its sample field, and each render used
1682
+ * to run the colour resolution, the alias derivation and the component shaping again -- and handed
1683
+ * `PhiThemeScopeControl` a new token object, which wrote a new set of CSS variables each time.
1684
+ */
1685
+ const previewBodyFontStack = previewFontStacks.body.stack;
1686
+ const previewMonoFontStack = previewFontStacks.mono.stack;
1687
+ const previewEffectiveToken = useMemo(() => resolvePhiAntdAliasTokens(mode, {
2417
1688
  ...buildPhiEffectiveNonColorThemeTokens(previewThemeResolved),
2418
1689
  ...resolvePhiThemeColorTokens(previewPreset, previewThemeResolved.palette, mode),
2419
1690
  ...(previewThemeResolved.style?.token ?? {}),
2420
1691
  // The draft's lettering, applied as the root theme applies the Site's: body text and code.
2421
- ...(previewFontStacks.body.stack ? { fontFamily: previewFontStacks.body.stack } : {}),
2422
- ...(previewFontStacks.mono.stack ? { fontFamilyCode: previewFontStacks.mono.stack } : {}),
2423
- };
2424
- const previewEffectiveToken = resolvePhiAntdAliasTokens(mode, previewTokenInput);
1692
+ ...(previewBodyFontStack ? { fontFamily: previewBodyFontStack } : {}),
1693
+ ...(previewMonoFontStack ? { fontFamilyCode: previewMonoFontStack } : {}),
1694
+ }), [mode, previewBodyFontStack, previewMonoFontStack, previewPreset, previewThemeResolved]);
2425
1695
  const columns = [
2426
1696
  { title: "Name", key: "name", fieldPath: "name", sizing: { mode: "fill" } },
2427
1697
  { title: "Status", key: "status", fieldPath: "status", sizing: { mode: "content" }, render: (value) => _jsx(PhiTagControl, { color: "processing", children: String(value) }) },
@@ -2450,23 +1720,13 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2450
1720
  * identity as well is part of it: two shapes with otherwise equal tokens would hash to one key and
2451
1721
  * serve each other from cache.
2452
1722
  */
2453
- const previewControlShape = resolvePhiControlShape(previewThemeResolved.shape?.controls);
2454
- const previewShapedComponents = applyPhiSurfaceShapeComponentTokens(applyPhiControlShapeComponentTokens({ ...(applyPhiButtonShadowComponentTokens(previewThemeResolved.components, previewThemeResolved.buttons, mode) ?? {}) }, previewControlShape, previewEffectiveToken), previewControlShape, previewEffectiveToken);
2455
- const previewAntdTheme = {
2456
- inherit: false,
2457
- cssVar: {
2458
- prefix: "ant",
2459
- key: createPhiAntdThemeCssVarKey("builder-theme-preview", {
2460
- mode,
2461
- token: previewEffectiveToken,
2462
- components: previewShapedComponents,
2463
- }),
2464
- },
2465
- token: {
2466
- ...previewEffectiveToken,
2467
- },
2468
- components: previewShapedComponents,
2469
- };
1723
+ const { previewControlShape, previewShapedComponents } = useMemo(() => {
1724
+ const previewControlShape = resolvePhiControlShape(previewThemeResolved.shape?.controls);
1725
+ return {
1726
+ previewControlShape,
1727
+ previewShapedComponents: applyPhiSurfaceShapeComponentTokens(applyPhiControlShapeComponentTokens({ ...(applyPhiButtonShadowComponentTokens(previewThemeResolved.components, previewThemeResolved.buttons, mode) ?? {}) }, previewControlShape, previewEffectiveToken), previewControlShape, previewEffectiveToken),
1728
+ };
1729
+ }, [mode, previewEffectiveToken, previewThemeResolved]);
2470
1730
  const previewCardBackground = readEffectiveTokenString(previewEffectiveToken, "colorBgContainer", mode === "dark" ? "#141414" : "#ffffff");
2471
1731
  const previewSurfaceBackground = readEffectiveTokenString(previewEffectiveToken, "colorBgLayout", mode === "dark" ? "#000000" : "#f5f5f5");
2472
1732
  /*
@@ -2491,48 +1751,30 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2491
1751
  const previewSwatchColor = readEffectiveTokenString(previewEffectiveToken, "colorPrimary", "#1677ff");
2492
1752
  const previewLinkHoverColor = readEffectiveTokenString(previewEffectiveToken, "colorLinkHover", previewLinkColor);
2493
1753
  const previewLinkActiveColor = readEffectiveTokenString(previewEffectiveToken, "colorLinkActive", previewLinkColor);
1754
+ /*
1755
+ * Four status colours, one shape: text, ground and border, each with its hover. Info's border falls
1756
+ * back to the link colour where the others fall back to their own base, which is how it always was.
1757
+ */
2494
1758
  const statusPreviewItems = [
2495
- {
2496
- key: "info",
2497
- label: "Info",
2498
- color: readEffectiveTokenString(previewEffectiveToken, "colorInfoText", readEffectiveTokenString(previewEffectiveToken, "colorInfo", "#1677ff")),
2499
- background: readEffectiveTokenString(previewEffectiveToken, "colorInfoBg", previewCardBackground),
2500
- border: readEffectiveTokenString(previewEffectiveToken, "colorInfoBorder", previewLinkColor),
2501
- hoverColor: readEffectiveTokenString(previewEffectiveToken, "colorInfoTextHover", readEffectiveTokenString(previewEffectiveToken, "colorInfoHover", "#4096ff")),
2502
- hoverBackground: readEffectiveTokenString(previewEffectiveToken, "colorInfoBgHover", previewCardBackground),
2503
- hoverBorder: readEffectiveTokenString(previewEffectiveToken, "colorInfoBorderHover", readEffectiveTokenString(previewEffectiveToken, "colorInfoHover", "#4096ff")),
2504
- },
2505
- {
2506
- key: "success",
2507
- label: "Success",
2508
- color: readEffectiveTokenString(previewEffectiveToken, "colorSuccessText", readEffectiveTokenString(previewEffectiveToken, "colorSuccess", "#52c41a")),
2509
- background: readEffectiveTokenString(previewEffectiveToken, "colorSuccessBg", previewCardBackground),
2510
- border: readEffectiveTokenString(previewEffectiveToken, "colorSuccessBorder", readEffectiveTokenString(previewEffectiveToken, "colorSuccess", "#52c41a")),
2511
- hoverColor: readEffectiveTokenString(previewEffectiveToken, "colorSuccessTextHover", readEffectiveTokenString(previewEffectiveToken, "colorSuccessHover", "#73d13d")),
2512
- hoverBackground: readEffectiveTokenString(previewEffectiveToken, "colorSuccessBgHover", previewCardBackground),
2513
- hoverBorder: readEffectiveTokenString(previewEffectiveToken, "colorSuccessBorderHover", readEffectiveTokenString(previewEffectiveToken, "colorSuccessHover", "#73d13d")),
2514
- },
2515
- {
2516
- key: "warning",
2517
- label: "Warning",
2518
- color: readEffectiveTokenString(previewEffectiveToken, "colorWarningText", readEffectiveTokenString(previewEffectiveToken, "colorWarning", "#faad14")),
2519
- background: readEffectiveTokenString(previewEffectiveToken, "colorWarningBg", previewCardBackground),
2520
- border: readEffectiveTokenString(previewEffectiveToken, "colorWarningBorder", readEffectiveTokenString(previewEffectiveToken, "colorWarning", "#faad14")),
2521
- hoverColor: readEffectiveTokenString(previewEffectiveToken, "colorWarningTextHover", readEffectiveTokenString(previewEffectiveToken, "colorWarningHover", "#ffc53d")),
2522
- hoverBackground: readEffectiveTokenString(previewEffectiveToken, "colorWarningBgHover", previewCardBackground),
2523
- hoverBorder: readEffectiveTokenString(previewEffectiveToken, "colorWarningBorderHover", readEffectiveTokenString(previewEffectiveToken, "colorWarningHover", "#ffc53d")),
2524
- },
2525
- {
2526
- key: "error",
2527
- label: "Error",
2528
- color: readEffectiveTokenString(previewEffectiveToken, "colorErrorText", readEffectiveTokenString(previewEffectiveToken, "colorError", "#ff4d4f")),
2529
- background: readEffectiveTokenString(previewEffectiveToken, "colorErrorBg", previewCardBackground),
2530
- border: readEffectiveTokenString(previewEffectiveToken, "colorErrorBorder", readEffectiveTokenString(previewEffectiveToken, "colorError", "#ff4d4f")),
2531
- hoverColor: readEffectiveTokenString(previewEffectiveToken, "colorErrorTextHover", readEffectiveTokenString(previewEffectiveToken, "colorErrorHover", "#ff7875")),
2532
- hoverBackground: readEffectiveTokenString(previewEffectiveToken, "colorErrorBgHover", previewCardBackground),
2533
- hoverBorder: readEffectiveTokenString(previewEffectiveToken, "colorErrorBorderHover", readEffectiveTokenString(previewEffectiveToken, "colorErrorHover", "#ff7875")),
2534
- },
2535
- ];
1759
+ { key: "info", label: "Info", prefix: "colorInfo", base: "#1677ff", hover: "#4096ff", borderFallback: previewLinkColor },
1760
+ { key: "success", label: "Success", prefix: "colorSuccess", base: "#52c41a", hover: "#73d13d" },
1761
+ { key: "warning", label: "Warning", prefix: "colorWarning", base: "#faad14", hover: "#ffc53d" },
1762
+ { key: "error", label: "Error", prefix: "colorError", base: "#ff4d4f", hover: "#ff7875" },
1763
+ ].map(({ key, label, prefix, base, hover, ...item }) => {
1764
+ const read = (suffix, fallback) => readEffectiveTokenString(previewEffectiveToken, `${prefix}${suffix}`, fallback);
1765
+ const baseColor = read("", base);
1766
+ const hoverColor = read("Hover", hover);
1767
+ return {
1768
+ key,
1769
+ label,
1770
+ color: read("Text", baseColor),
1771
+ background: read("Bg", previewCardBackground),
1772
+ border: read("Border", "borderFallback" in item ? item.borderFallback : baseColor),
1773
+ hoverColor: read("TextHover", hoverColor),
1774
+ hoverBackground: read("BgHover", previewCardBackground),
1775
+ hoverBorder: read("BorderHover", hoverColor),
1776
+ };
1777
+ });
2536
1778
  const fontPreviewItems = [
2537
1779
  {
2538
1780
  key: "body",
@@ -2605,7 +1847,7 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2605
1847
  },
2606
1848
  ];
2607
1849
  const wireframeEnabled = readEffectiveTokenBoolean(previewEffectiveToken, "wireframe", true);
2608
- return (_jsxs(ConfigProvider, { theme: previewAntdTheme, children: [previewFontStacks.faceCss ? (_jsx("style", { href: "phi-theme-preview-faces", precedence: "default", dangerouslySetInnerHTML: { __html: previewFontStacks.faceCss } })) : null, _jsx(PhiCardControl, { size: "small", style: {
1850
+ return (_jsxs(PhiThemeScopeControl, { scope: "builder-theme-preview", mode: mode, token: previewEffectiveToken, components: previewShapedComponents, children: [previewFontStacks.faceCss ? (_jsx("style", { href: "phi-theme-preview-faces", precedence: "default", dangerouslySetInnerHTML: { __html: previewFontStacks.faceCss } })) : null, _jsx(PhiCardControl, { size: "small", style: {
2609
1851
  width: "100%",
2610
1852
  background: previewCardBackground,
2611
1853
  color: previewTextColor,
@@ -2651,8 +1893,9 @@ export function PhiBuilderBrandThemePreviewWidgetClient({ runtime, }) {
2651
1893
  background: previewCardBackground,
2652
1894
  padding: clientToken.paddingXS,
2653
1895
  }, children: [_jsx(PhiTypographyControl, { type: "secondary", style: { display: "block" }, children: item.label }), _jsx(PhiTypographyControl, { style: { display: "block", color: previewTextColor, fontFamily: item.family }, children: item.sample }), item.value ? (_jsx(PhiTypographyControl, { type: "secondary", style: { display: "block", fontFamily: item.family }, children: item.value })) : null] }, item.key))) })] }), _jsx(PhiFlexControl, { gap: clientToken.padding, wrap: "wrap", children: _jsxs(PhiFlexControl, { vertical: true, gap: clientToken.paddingSM, style: { flex: "1 1 260px", minWidth: 0 }, children: [_jsx(PhiTypographyControl, { presentation: "title", level: 5, style: { margin: 0, color: previewTextColor }, children: "Border Radius" }), _jsx(PhiFlexControl, { gap: clientToken.paddingXS, wrap: "wrap", children: radiusPreviewItems.map((item) => (_jsxs("div", { style: {
2654
- width: `calc(${clientToken.controlHeightLG} * 2)`,
2655
- minHeight: `calc(${clientToken.controlHeight} * 1.25)`,
1896
+ // The tokens are numbers; `calc(40 * 2)` is no length, and the sample lost its size.
1897
+ width: clientToken.controlHeightLG * 2,
1898
+ minHeight: clientToken.controlHeight * 1.25,
2656
1899
  border: `1px solid ${readEffectiveTokenString(previewEffectiveToken, "colorBorder", "rgba(0,0,0,0.15)")}`,
2657
1900
  borderRadius: item.value,
2658
1901
  background: previewCardBackground,