@phis/ui 0.4.1 → 0.4.3

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 (246) hide show
  1. package/components/cms/phi-cms-layout-renderer.js +4 -3
  2. package/components/cms/phi-cms-page-render-scope.d.ts +4 -5
  3. package/components/cms/phi-cms-page-render-scope.js +43 -22
  4. package/components/cms/phi-cms-render-diagnostic-client.js +7 -3
  5. package/components/cms/phi-cms-render-error-boundary.js +2 -1
  6. package/components/controls/phi-bullet-list-control.js +31 -2
  7. package/components/controls/phi-ribbon-control.d.ts +29 -0
  8. package/components/controls/phi-ribbon-control.js +53 -0
  9. package/components/controls/phi-table-control.d.ts +3 -0
  10. package/components/controls/phi-table-control.js +13 -1
  11. package/components/controls/phi-tree-control.js +3 -3
  12. package/components/forms/shared-form-provider-registry.js +1 -4
  13. package/components/media/asset-collection-runtime.js +6 -16
  14. package/components/media/media-font-metrics.d.ts +3 -0
  15. package/components/media/media-font-metrics.js +43 -0
  16. package/components/media/phi-area-upload-widget.js +53 -97
  17. package/components/media/phi-image-preview-data.d.ts +13 -0
  18. package/components/media/phi-image-preview-data.js +184 -9
  19. package/components/media/phi-media-picker-binding.js +16 -13
  20. package/components/media/phi-media-upload.d.ts +15 -8
  21. package/components/media/phi-media-upload.js +18 -9
  22. package/components/media/phi-site-font-assets.js +7 -8
  23. package/components/overlays/phi-overlay-container-client.js +16 -1
  24. package/components/regions/presets/phi-settings-page-shell-tree.js +48 -1
  25. package/components/runtime/runtime-controller-materialization.js +12 -1
  26. package/components/state/scoped-state-store.js +20 -3
  27. package/components/tables/client/phi-table-binding.d.ts +2 -1
  28. package/components/tables/client/phi-table-binding.js +45 -21
  29. package/components/trees/client/phi-tree-binding.js +19 -11
  30. package/components/widgets/client/bullet-list-entries-editor.d.ts +26 -0
  31. package/components/widgets/client/bullet-list-entries-editor.js +103 -0
  32. package/components/widgets/config/choice-shared.js +12 -13
  33. package/components/widgets/config/command-buttons.d.ts +5 -1
  34. package/components/widgets/config/command-buttons.js +38 -81
  35. package/components/widgets/config/control-signal-config.d.ts +3 -1
  36. package/components/widgets/config/control-signal-config.js +19 -17
  37. package/components/widgets/config/image-source-parser.d.ts +1 -0
  38. package/components/widgets/config/image-source-parser.js +7 -8
  39. package/components/widgets/config/mask.d.ts +6 -1
  40. package/components/widgets/config/mask.js +24 -1
  41. package/components/widgets/config/parser-primitives.js +72 -0
  42. package/components/widgets/config/stack-tabs.d.ts +1 -1
  43. package/components/widgets/config/stack-tabs.js +2 -3
  44. package/components/widgets/config/strict-config-reader.d.ts +40 -0
  45. package/components/widgets/config/strict-config-reader.js +174 -0
  46. package/components/widgets/label-sets/effects.js +2 -0
  47. package/components/widgets/label-types/effects.d.ts +1 -0
  48. package/components/widgets/label-types/effects.js +1 -0
  49. package/components/widgets/navigation-descriptor-resolver.server.js +20 -8
  50. package/components/widgets/shared/bullet-list-vocabulary.d.ts +17 -1
  51. package/components/widgets/shared/bullet-list-vocabulary.js +19 -2
  52. package/components/widgets/shared/card-body-client.d.ts +16 -4
  53. package/components/widgets/shared/card-body-client.js +81 -24
  54. package/components/widgets/shared/card-vocabulary.d.ts +21 -4
  55. package/components/widgets/shared/card-vocabulary.js +28 -2
  56. package/components/widgets/shared/markdown-body-client.d.ts +2 -1
  57. package/components/widgets/shared/markdown-body-client.js +3 -1
  58. package/components/widgets/shared/markdown-render.js +8 -1
  59. package/components/widgets/signals/control-signal-capabilities.d.ts +0 -18
  60. package/components/widgets/signals/control-signal-capabilities.js +10 -22
  61. package/components/workspace/catalog-store.d.ts +4 -3
  62. package/components/workspace/catalog-store.js +6 -5
  63. package/gateway/dashboard-cards-route.js +1 -0
  64. package/gateway/internal-references.d.ts +6 -1
  65. package/gateway/internal-references.js +48 -23
  66. package/gateway/site-cms-write-validation.d.ts +9 -0
  67. package/gateway/site-cms-write-validation.js +78 -0
  68. package/gateway/site-proxy.js +19 -3
  69. package/helpers/renderable-block-serialization.js +1 -1
  70. package/next/config.d.mts +3 -0
  71. package/next/config.mjs +28 -1
  72. package/package.json +2 -2
  73. package/plugins/runtime/phi-slot-child-viewport-effects-observer.js +5 -1
  74. package/plugins/runtime-modules/accounting/presets.d.ts +9 -0
  75. package/plugins/runtime-modules/accounting/presets.js +37 -0
  76. package/plugins/runtime-modules/accounting/server.d.ts +1 -4
  77. package/plugins/runtime-modules/accounting/server.js +4 -7
  78. package/plugins/runtime-modules/app/presets.d.ts +18 -0
  79. package/plugins/runtime-modules/app/presets.js +67 -0
  80. package/plugins/runtime-modules/app/server.d.ts +1 -4
  81. package/plugins/runtime-modules/app/server.js +4 -7
  82. package/plugins/runtime-modules/asset/controller/runtime.js +2 -2
  83. package/plugins/runtime-modules/asset/services/collection.js +9 -1
  84. package/plugins/runtime-modules/asset/services/options.js +2 -2
  85. package/plugins/runtime-modules/builder/area-settings-answer.js +2 -1
  86. package/plugins/runtime-modules/builder/authoring-canvas.js +6 -6
  87. package/plugins/runtime-modules/builder/cards.js +3 -5
  88. package/plugins/runtime-modules/builder/clients/builder-region-overrides.js +3 -3
  89. package/plugins/runtime-modules/builder/clients/canvas-widget.js +15 -54
  90. package/plugins/runtime-modules/builder/clients/inspector-config-field.d.ts +4 -1
  91. package/plugins/runtime-modules/builder/clients/inspector-config-field.js +5 -34
  92. package/plugins/runtime-modules/builder/clients/inspector-link-target-field.js +1 -1
  93. package/plugins/runtime-modules/builder/clients/inspector-section-widget.js +8 -8
  94. package/plugins/runtime-modules/builder/clients/inspector-title.js +6 -6
  95. package/plugins/runtime-modules/builder/clients/layout-inspector.d.ts +1 -1
  96. package/plugins/runtime-modules/builder/clients/layout-inspector.js +11 -25
  97. package/plugins/runtime-modules/builder/clients/mode-switch.js +1 -1
  98. package/plugins/runtime-modules/builder/clients/pages-header.js +11 -11
  99. package/plugins/runtime-modules/builder/clients/pages-workspace.js +1 -1
  100. package/plugins/runtime-modules/builder/clients/region-visibility-fields.js +1 -1
  101. package/plugins/runtime-modules/builder/clients/runtime-module-authoring-boundary.js +1 -1
  102. package/plugins/runtime-modules/builder/clients/shells-workspace.js +15 -31
  103. package/plugins/runtime-modules/builder/clients/structure-canvas.js +1 -1
  104. package/plugins/runtime-modules/builder/clients/use-region-draft-hydration.d.ts +26 -0
  105. package/plugins/runtime-modules/builder/clients/use-region-draft-hydration.js +36 -0
  106. package/plugins/runtime-modules/builder/clients/widget-effects-editor.js +1 -1
  107. package/plugins/runtime-modules/builder/clients/widget-inspector.js +1 -0
  108. package/plugins/runtime-modules/builder/clients/workspace-scope-boundary.js +2 -2
  109. package/plugins/runtime-modules/builder/cms-instance-allocator.js +8 -28
  110. package/plugins/runtime-modules/builder/controller/client.d.ts +0 -15
  111. package/plugins/runtime-modules/builder/controller/definition.d.ts +0 -15
  112. package/plugins/runtime-modules/builder/controller/definition.js +0 -8
  113. package/plugins/runtime-modules/builder/controller/draft-command-controller.d.ts +1 -2
  114. package/plugins/runtime-modules/builder/controller/draft-command-controller.js +11 -30
  115. package/plugins/runtime-modules/builder/controller/draft-status-controller.js +15 -2
  116. package/plugins/runtime-modules/builder/controller/inspector-controller.d.ts +1 -2
  117. package/plugins/runtime-modules/builder/controller/inspector-controller.js +4 -7
  118. package/plugins/runtime-modules/builder/controller/page-controller.d.ts +1 -2
  119. package/plugins/runtime-modules/builder/controller/page-controller.js +16 -68
  120. package/plugins/runtime-modules/builder/controller/server-definition.d.ts +0 -15
  121. package/plugins/runtime-modules/builder/controller/signal-wiring-controller.d.ts +2 -5
  122. package/plugins/runtime-modules/builder/controller/signal-wiring-controller.js +6 -50
  123. package/plugins/runtime-modules/builder/controller/workspace-controller.d.ts +2 -3
  124. package/plugins/runtime-modules/builder/controller/workspace-controller.js +89 -153
  125. package/plugins/runtime-modules/builder/data-providers.d.ts +1 -0
  126. package/plugins/runtime-modules/builder/data-providers.js +1 -0
  127. package/plugins/runtime-modules/builder/definition.d.ts +1 -0
  128. package/plugins/runtime-modules/builder/developer-workspace-store.d.ts +64 -30
  129. package/plugins/runtime-modules/builder/developer-workspace-store.js +255 -61
  130. package/plugins/runtime-modules/builder/edit-scaffold-drawer.js +1 -1
  131. package/plugins/runtime-modules/builder/history.d.ts +3 -1
  132. package/plugins/runtime-modules/builder/options-providers.js +3 -2
  133. package/plugins/runtime-modules/builder/page-catalog-client.js +19 -7
  134. package/plugins/runtime-modules/builder/page-meta-form.js +1 -0
  135. package/plugins/runtime-modules/builder/page-references-provider.js +1 -1
  136. package/plugins/runtime-modules/builder/persistence.js +33 -69
  137. package/plugins/runtime-modules/builder/public-route-collisions.d.ts +2 -2
  138. package/plugins/runtime-modules/builder/public-route-collisions.js +6 -19
  139. package/plugins/runtime-modules/builder/render-root-node-preview.server.js +20 -3
  140. package/plugins/runtime-modules/builder/render-root-node-scaffold.js +3 -3
  141. package/plugins/runtime-modules/builder/runtime-module-selection.d.ts +2 -12
  142. package/plugins/runtime-modules/builder/runtime-module-selection.js +16 -42
  143. package/plugins/runtime-modules/builder/services/navigation-table.js +9 -15
  144. package/plugins/runtime-modules/builder/services/page-source-tree.js +8 -8
  145. package/plugins/runtime-modules/builder/services/runtime-modules-table.js +10 -10
  146. package/plugins/runtime-modules/builder/services/signal-routes-table.js +3 -3
  147. package/plugins/runtime-modules/builder/signal-route-selection.d.ts +1 -2
  148. package/plugins/runtime-modules/builder/signal-route-selection.js +2 -2
  149. package/plugins/runtime-modules/builder/signal-wiring-options.js +3 -2
  150. package/plugins/runtime-modules/builder/structure-dnd.js +8 -61
  151. package/plugins/runtime-modules/builder/trees/phi-default-builder-area-preset-tree.js +13 -10
  152. package/plugins/runtime-modules/builder/widgets/structure-region/built-in.js +12 -18
  153. package/plugins/runtime-modules/builder/workspace-catalog-actions.d.ts +55 -0
  154. package/plugins/runtime-modules/builder/workspace-catalog-actions.js +142 -0
  155. package/plugins/runtime-modules/client-manifests/common.js +1 -1
  156. package/plugins/runtime-modules/{runtime-calendar-adapters.js → core/calendar-adapters.js} +2 -2
  157. package/plugins/runtime-modules/{client-calendar-adapters/core.js → core/client-calendar-adapters.js} +1 -1
  158. package/plugins/runtime-modules/core/content-entries/table.js +1 -1
  159. package/plugins/runtime-modules/core/data-providers.d.ts +3 -0
  160. package/plugins/runtime-modules/core/data-providers.js +2 -1
  161. package/plugins/runtime-modules/core/definition.d.ts +3 -0
  162. package/plugins/runtime-modules/core/definition.js +1 -1
  163. package/plugins/runtime-modules/core/messaging/data-providers.d.ts +1 -0
  164. package/plugins/runtime-modules/core/messaging/data-providers.js +1 -0
  165. package/plugins/runtime-modules/core/messaging/thread-inbox-table.js +1 -1
  166. package/plugins/runtime-modules/core/server.js +1 -1
  167. package/plugins/runtime-modules/core/themes.d.ts +44 -0
  168. package/plugins/runtime-modules/core/themes.js +12 -0
  169. package/plugins/runtime-modules/core/widgets/card/collection-view-binding.js +25 -9
  170. package/plugins/runtime-modules/core/widgets/card/config.d.ts +296 -254
  171. package/plugins/runtime-modules/core/widgets/card/config.js +52 -3
  172. package/plugins/runtime-modules/core/widgets/card/editor.js +30 -3
  173. package/plugins/runtime-modules/core/widgets/card/server.d.ts +3 -0
  174. package/plugins/runtime-modules/core/widgets/card/server.js +31 -3
  175. package/plugins/runtime-modules/core/widgets/collection-view/asset-binding.js +7 -6
  176. package/plugins/runtime-modules/core/widgets/collection-view/config.js +9 -2
  177. package/plugins/runtime-modules/core/widgets/description/config.d.ts +1 -25
  178. package/plugins/runtime-modules/core/widgets/description/editor.js +4 -61
  179. package/plugins/runtime-modules/core/widgets/entry-list/config.d.ts +1 -25
  180. package/plugins/runtime-modules/core/widgets/gallery/config.d.ts +1 -25
  181. package/plugins/runtime-modules/core/widgets/image/config.js +2 -2
  182. package/plugins/runtime-modules/core/widgets/markdown/config.d.ts +3 -1
  183. package/plugins/runtime-modules/core/widgets/markdown/config.js +14 -0
  184. package/plugins/runtime-modules/core/widgets/markdown/editor.js +2 -3
  185. package/plugins/runtime-modules/core/widgets/result/config.d.ts +4 -25
  186. package/plugins/runtime-modules/core/widgets/result/config.js +2 -0
  187. package/plugins/runtime-modules/core/widgets/result/server.js +25 -19
  188. package/plugins/runtime-modules/core/widgets/simple-text/config.d.ts +1 -25
  189. package/plugins/runtime-modules/core/widgets/slot-upload/client.js +11 -2
  190. package/plugins/runtime-modules/core/widgets/table/client.js +8 -4
  191. package/plugins/runtime-modules/core/widgets/table/config.d.ts +3 -83
  192. package/plugins/runtime-modules/core/widgets/table/config.js +302 -452
  193. package/plugins/runtime-modules/core/widgets/tree/config.js +5 -2
  194. package/plugins/runtime-modules/dashboard/card-rows.d.ts +5 -0
  195. package/plugins/runtime-modules/dashboard/card-rows.js +59 -0
  196. package/plugins/runtime-modules/dashboard/clients/dashboard-card-view.js +4 -6
  197. package/plugins/runtime-modules/dashboard/services/collection.js +17 -7
  198. package/plugins/runtime-modules/groups/data-providers.d.ts +2 -0
  199. package/plugins/runtime-modules/groups/data-providers.js +3 -3
  200. package/plugins/runtime-modules/groups/definition.d.ts +2 -0
  201. package/plugins/runtime-modules/localization/data-providers.d.ts +3 -0
  202. package/plugins/runtime-modules/localization/data-providers.js +2 -0
  203. package/plugins/runtime-modules/localization/definition.d.ts +3 -0
  204. package/plugins/runtime-modules/localization/services/table.js +3 -7
  205. package/plugins/runtime-modules/observability/data-providers.d.ts +1 -0
  206. package/plugins/runtime-modules/observability/data-providers.js +1 -0
  207. package/plugins/runtime-modules/observability/definition.d.ts +1 -0
  208. package/plugins/runtime-modules/observability/module.d.ts +1 -0
  209. package/plugins/runtime-modules/observability/services/table.js +1 -1
  210. package/plugins/runtime-modules/phi-default-site-area-preset-tree.js +2 -105
  211. package/plugins/runtime-modules/public/presets.d.ts +115 -0
  212. package/plugins/runtime-modules/{area-base-presets.js → public/presets.js} +19 -119
  213. package/plugins/runtime-modules/public/server.d.ts +1 -4
  214. package/plugins/runtime-modules/public/server.js +4 -7
  215. package/plugins/runtime-modules/public/trees/phi-default-pub-error-page-tree.js +7 -8
  216. package/plugins/runtime-modules/public-base-page-references.d.ts +1 -1
  217. package/plugins/runtime-modules/public-base-page-references.js +1 -1
  218. package/plugins/runtime-modules/revisions/controller/client.js +11 -11
  219. package/plugins/runtime-modules/revisions/services/table.js +3 -3
  220. package/plugins/runtime-modules/theme/trees/phi-default-builder-theme-page-tree.js +22 -0
  221. package/plugins/runtime-modules/theme/widgets/brand-controls/client.d.ts +2 -1
  222. package/plugins/runtime-modules/theme/widgets/brand-controls/client.js +93 -58
  223. package/plugins/runtime-modules/theme/widgets/brand-controls/config.d.ts +2 -1
  224. package/plugins/runtime-modules/theme/widgets/brand-controls/config.js +23 -22
  225. package/plugins/runtime-modules/theme/widgets/brand-controls/plugin.js +1 -1
  226. package/plugins/runtime-modules/theme-descriptors.js +1 -1
  227. package/plugins/runtime-modules/user-management/data-providers.d.ts +2 -0
  228. package/plugins/runtime-modules/user-management/data-providers.js +1 -0
  229. package/plugins/runtime-modules/user-management/definition.d.ts +2 -0
  230. package/styles/control-shape.css +11 -11
  231. package/styles/controls.css +29 -3
  232. package/styles/layout.css +16 -7
  233. package/types/cms-config.js +142 -185
  234. package/types/cms-plugins.d.ts +4 -11
  235. package/types/core-widget-placements.d.ts +17 -3
  236. package/types/dashboard-cards.d.ts +9 -0
  237. package/types/media.d.ts +0 -3
  238. package/types/renderable-block.d.ts +6 -1
  239. package/types/table-widget.d.ts +9 -0
  240. package/types/table-widget.js +20 -0
  241. package/types.d.ts +1 -1
  242. package/widget-config.d.ts +2 -0
  243. package/widget-config.js +6 -0
  244. package/plugins/runtime-modules/area-base-presets.d.ts +0 -139
  245. /package/plugins/runtime-modules/{runtime-calendar-adapters.d.ts → core/calendar-adapters.d.ts} +0 -0
  246. /package/plugins/runtime-modules/{client-calendar-adapters/core.d.ts → core/client-calendar-adapters.d.ts} +0 -0
@@ -13,16 +13,16 @@ import { collectPhiDeveloperBuilderPageKeys, collectPhiDeveloperBuilderPageStora
13
13
  import { createPhiDeveloperBuilderInitialPageDrafts, createPhiDeveloperBuilderPageDraft, PhiBuilderPageExistsError, } from "../persistence";
14
14
  import { describePhiBuilderPageAddressConflict, findPhiBuilderSitePageAddressConflict, } from "../page-address-rule";
15
15
  import { PHI_BUILDER_AREA_SEARCH_PARAM, PHI_BUILDER_PAGE_SEARCH_PARAM, } from "../../../../helpers/cms-scope-search-params";
16
- import { builderWorkspaceStore, mergePhiDeveloperRegionDrafts, resetPhiBuilderSelectionToPage, getPhiDeveloperBuilderStateSnapshot, } from "../developer-workspace-store";
16
+ import { mergePhiDeveloperRegionDrafts, openPhiBuilderPage, setPhiBuilderPageMetaDraft, startPhiBuilderNewPageDrafts, getPhiDeveloperBuilderStateSnapshot, } from "../developer-workspace-store";
17
17
  import { getPhiBuilderRegionDraftKey } from "../region-keys";
18
18
  import { capturePhiBuilderWorkspaceHistoryState, createPhiBuilderHistoryContext, phiBuilderHistory, } from "../history";
19
19
  import { createPhiBuilderControllerAddress } from "../controller/address";
20
20
  import { PHI_SIGNAL_VALUE_SCHEMAS } from "../../../../types/signals";
21
21
  import { readPhiRuntimeFormValuesSignalValue } from "../../../../components/forms/runtime-form-state";
22
22
  import { emitPhiPageTitleInputSignal } from "../page-title-signal";
23
- import { phiWorkspaceCatalogStore } from "../../../../components/workspace/catalog-store";
23
+ import { addPhiWorkspaceCustomPage, storePhiWorkspacePersistedPages, } from "../workspace-catalog-actions";
24
24
  import { usePhiPathname } from "../../../../components/runtime/use-phi-pathname";
25
- export function usePhiBuilderPageController({ emitCapability, defaultArea, effectiveArea, effectivePageKey, pageMetaLabels, state, }) {
25
+ export function usePhiBuilderPageController({ emitCapability, effectiveArea, effectivePageKey, pageMetaLabels, state, }) {
26
26
  const { showMessage } = usePhiApplicationFeedback();
27
27
  const router = useRouter();
28
28
  const pathname = usePhiPathname();
@@ -59,25 +59,10 @@ export function usePhiBuilderPageController({ emitCapability, defaultArea, effec
59
59
  }, [effectiveArea, emitSignal, resolvePageTitleForInput]);
60
60
  async function reloadPersistedPageCatalog(area) {
61
61
  const pages = await loadPhiBuilderPersistedPageCatalog(area, { refresh: true });
62
- phiWorkspaceCatalogStore.patch(defaultArea, (current) => ({
63
- ...current,
64
- persistedPageCatalogByArea: {
65
- ...current.persistedPageCatalogByArea,
66
- [area]: pages,
67
- },
68
- pageCatalogHydratedByArea: {
69
- ...current.pageCatalogHydratedByArea,
70
- [area]: true,
71
- },
72
- }));
62
+ storePhiWorkspacePersistedPages(area, pages);
73
63
  }
74
64
  function navigateToBuilderPage(pageKey) {
75
- phiWorkspaceCatalogStore.patch(defaultArea, (current) => ({
76
- ...current,
77
- area: effectiveArea,
78
- pageKey,
79
- }));
80
- builderWorkspaceStore.patch(defaultArea, (current) => resetPhiBuilderSelectionToPage(current, pageKey, { closePages: true }));
65
+ openPhiBuilderPage(effectiveArea, pageKey, { closePages: true });
81
66
  if (typeof pathname === "string") {
82
67
  const nextSearchParams = new URLSearchParams(searchParams.toString());
83
68
  nextSearchParams.set(PHI_BUILDER_AREA_SEARCH_PARAM, effectiveArea);
@@ -180,22 +165,8 @@ export function usePhiBuilderPageController({ emitCapability, defaultArea, effec
180
165
  })
181
166
  : null;
182
167
  const pageMetaDraftKey = getPhiBuilderRegionDraftKey(effectiveArea, "page_meta", effectivePageKey);
183
- const historyBefore = capturePhiBuilderWorkspaceHistoryState(getPhiDeveloperBuilderStateSnapshot(defaultArea));
184
- // replace writes the whole tool state, so it must read the tool state -- not the merged view.
185
- const current = builderWorkspaceStore.getSnapshot(defaultArea);
186
- const next = {
187
- ...current,
188
- pageMetaDrafts: {
189
- ...current.pageMetaDrafts,
190
- [pageMetaDraftKey]: {
191
- ...(current.pageMetaDrafts[pageMetaDraftKey] ?? {}),
192
- title: editedTitle,
193
- description,
194
- ...indexPatch,
195
- },
196
- },
197
- };
198
- builderWorkspaceStore.replace(defaultArea, next);
168
+ const historyBefore = capturePhiBuilderWorkspaceHistoryState(getPhiDeveloperBuilderStateSnapshot());
169
+ setPhiBuilderPageMetaDraft(pageMetaDraftKey, { title: editedTitle, description, ...indexPatch });
199
170
  phiBuilderHistory.record(createPhiBuilderHistoryContext({
200
171
  workspace: "pages",
201
172
  area: effectiveArea,
@@ -208,13 +179,13 @@ export function usePhiBuilderPageController({ emitCapability, defaultArea, effec
208
179
  },
209
180
  after: {
210
181
  kind: "workspace",
211
- state: capturePhiBuilderWorkspaceHistoryState(getPhiDeveloperBuilderStateSnapshot(defaultArea)),
182
+ state: capturePhiBuilderWorkspaceHistoryState(getPhiDeveloperBuilderStateSnapshot()),
212
183
  },
213
184
  });
214
185
  emitPageTitleInputValue(effectivePageKey, editedTitle);
215
186
  if (pathResult) {
216
187
  await reloadPersistedPageCatalog(effectiveArea);
217
- const refreshed = getPhiDeveloperBuilderStateSnapshot(defaultArea);
188
+ const refreshed = getPhiDeveloperBuilderStateSnapshot();
218
189
  const refreshedPages = resolvePhiBuilderActivePageCatalog(effectiveArea, refreshed.modulePresetPagesByArea, refreshed.customPages, refreshed.persistedPageCatalogByArea);
219
190
  const nextPageKey = resolvePhiBuilderPageKeyFromCatalogPath(effectiveArea, pathResult.path, refreshedPages);
220
191
  if (nextPageKey)
@@ -275,36 +246,13 @@ export function usePhiBuilderPageController({ emitCapability, defaultArea, effec
275
246
  pathname,
276
247
  });
277
248
  mergePhiDeveloperRegionDrafts(nextDrafts);
278
- phiWorkspaceCatalogStore.patch(defaultArea, (current) => ({
279
- ...current,
280
- customPages: {
281
- ...current.customPages,
282
- [effectiveArea]: [
283
- ...(current.customPages[effectiveArea] ?? []),
284
- {
285
- key: requestedKey,
286
- title,
287
- storagePath: requestedStoragePath,
288
- },
289
- ],
290
- },
291
- }));
249
+ addPhiWorkspaceCustomPage(effectiveArea, { key: requestedKey, title, storagePath: requestedStoragePath });
292
250
  // The page's meta and delete drafts are edits in progress, so they stay with the Builder.
293
- builderWorkspaceStore.patch(defaultArea, (current) => ({
294
- ...current,
295
- pageMetaDrafts: {
296
- ...current.pageMetaDrafts,
297
- [getPhiBuilderRegionDraftKey(effectiveArea, "page_meta", requestedKey)]: {
298
- title,
299
- description,
300
- ...indexPatch,
301
- },
302
- },
303
- deletedPageDrafts: {
304
- ...current.deletedPageDrafts,
305
- [getPhiBuilderRegionDraftKey(effectiveArea, "page_delete", requestedKey)]: false,
306
- },
307
- }));
251
+ startPhiBuilderNewPageDrafts({
252
+ metaDraftKey: getPhiBuilderRegionDraftKey(effectiveArea, "page_meta", requestedKey),
253
+ meta: { title, description, ...indexPatch },
254
+ deleteDraftKey: getPhiBuilderRegionDraftKey(effectiveArea, "page_delete", requestedKey),
255
+ });
308
256
  await reloadPersistedPageCatalog(effectiveArea);
309
257
  navigateToBuilderPage(requestedKey);
310
258
  emitPageTitleInputValue(requestedKey, title);
@@ -315,7 +263,7 @@ export function usePhiBuilderPageController({ emitCapability, defaultArea, effec
315
263
  if (error instanceof PhiBuilderPageExistsError && !error.tombstoned) {
316
264
  // Somebody created it meanwhile: open that Page rather than failing on the path it holds.
317
265
  await reloadPersistedPageCatalog(effectiveArea);
318
- const refreshed = getPhiDeveloperBuilderStateSnapshot(defaultArea);
266
+ const refreshed = getPhiDeveloperBuilderStateSnapshot();
319
267
  const refreshedPages = resolvePhiBuilderActivePageCatalog(effectiveArea, refreshed.modulePresetPagesByArea, refreshed.customPages, refreshed.persistedPageCatalogByArea);
320
268
  const existingKey = resolvePhiBuilderPageKeyFromCatalogPath(effectiveArea, error.path, refreshedPages);
321
269
  if (existingKey)
@@ -33,20 +33,10 @@ export declare const PHI_BUILDER_RUNTIME_CONTROLLER_SERVER_DEFINITION: {
33
33
  allowedMountScopes: "area"[];
34
34
  runtimeSignals: {
35
35
  emits: ({
36
- id: string;
37
- action: "start";
38
- valueType: "json";
39
- valueSchema: `${string}/signals/${string}`;
40
- } | {
41
36
  id: string;
42
37
  action: "change";
43
38
  valueType: "json";
44
39
  valueSchema: `${string}/signals/${string}`;
45
- } | {
46
- id: string;
47
- action: "stop";
48
- valueType: "json";
49
- valueSchema: `${string}/signals/${string}`;
50
40
  } | {
51
41
  id: string;
52
42
  action: "activate";
@@ -70,11 +60,6 @@ export declare const PHI_BUILDER_RUNTIME_CONTROLLER_SERVER_DEFINITION: {
70
60
  action: "change";
71
61
  valueType: "boolean";
72
62
  valueSchema?: undefined;
73
- } | {
74
- id: string;
75
- action: "drop";
76
- valueType: "json";
77
- valueSchema: `${string}/signals/${string}`;
78
63
  })[];
79
64
  listens: ({
80
65
  id: string;
@@ -1,7 +1,4 @@
1
1
  import { type PhiSignalRouteSet } from "../../../../types/signals";
2
- import type { PhiDeveloperBuilderArea } from "../developer-workspace-types";
3
- export declare function patchPhiBuilderSignalWiringSession(defaultArea: PhiDeveloperBuilderArea, values: Record<string, unknown>): void;
4
- export declare function resetPhiBuilderSignalWiringSession(defaultArea: PhiDeveloperBuilderArea): void;
5
2
  export type PhiBuilderSignalWiringResult = {
6
3
  kind: "applied";
7
4
  routes: PhiSignalRouteSet;
@@ -19,7 +16,7 @@ export type PhiBuilderSignalWiringResult = {
19
16
  * selection change, and a route whose value the receiver cannot read is worse than no route at all --
20
17
  * nothing reports it at runtime.
21
18
  */
22
- export declare function resolvePhiBuilderSignalWiringRoutes(defaultArea: PhiDeveloperBuilderArea): PhiBuilderSignalWiringResult;
19
+ export declare function resolvePhiBuilderSignalWiringRoutes(): PhiBuilderSignalWiringResult;
23
20
  /**
24
21
  * Removes one route from the selected block by its key.
25
22
  *
@@ -27,4 +24,4 @@ export declare function resolvePhiBuilderSignalWiringRoutes(defaultArea: PhiDeve
27
24
  * so its rows come straight from the draft config rather than from a staged copy. Removing therefore
28
25
  * writes to the same place Apply does, and the Table is reloaded afterwards.
29
26
  */
30
- export declare function resolvePhiBuilderSignalWiringRoutesWithout(defaultArea: PhiDeveloperBuilderArea, routeKey: string): PhiSignalRouteSet | null;
27
+ export declare function resolvePhiBuilderSignalWiringRoutesWithout(routeKey: string): PhiSignalRouteSet | null;
@@ -1,52 +1,8 @@
1
1
  "use client";
2
2
  import { createPhiSignalRouteKey, readPhiSignalRouteSet, PHI_SIGNAL_VALUE_SCHEMAS, } from "../../../../types/signals";
3
- import { builderWorkspaceStore, getPhiDeveloperBuilderStateSnapshot } from "../developer-workspace-store";
3
+ import { getPhiDeveloperBuilderStateSnapshot } from "../developer-workspace-store";
4
4
  import { getPhiDeveloperSelectedSignalRoutes } from "../signal-route-selection";
5
5
  import { phiSignalCapabilitiesMatch, resolvePhiBuilderReceiverSignalEndpoints, resolvePhiBuilderSelectedSignalEndpoints, } from "../signal-wiring-options";
6
- const EMPTY_SESSION = {
7
- senderAddress: null,
8
- senderCapabilityId: null,
9
- receiverAddress: null,
10
- receiverCapabilityId: null,
11
- fieldKey: null,
12
- };
13
- function readOptionalString(value) {
14
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
15
- }
16
- export function patchPhiBuilderSignalWiringSession(defaultArea, values) {
17
- builderWorkspaceStore.patch(defaultArea, (current) => {
18
- const senderAddress = readOptionalString(values.senderAddress) ?? current.signalWiring.senderAddress;
19
- // A cascade only holds if the values below the one that moved are dropped: keeping a capability that
20
- // belongs to the previous endpoint would build a route the runtime silently ignores.
21
- const senderChanged = senderAddress !== current.signalWiring.senderAddress;
22
- const senderCapabilityId = senderChanged
23
- ? null
24
- : readOptionalString(values.senderCapabilityId) ?? current.signalWiring.senderCapabilityId;
25
- const capabilityChanged = senderCapabilityId !== current.signalWiring.senderCapabilityId;
26
- const receiverAddress = senderChanged || capabilityChanged
27
- ? null
28
- : readOptionalString(values.receiverAddress) ?? current.signalWiring.receiverAddress;
29
- const receiverChanged = receiverAddress !== current.signalWiring.receiverAddress;
30
- return {
31
- ...current,
32
- signalWiring: {
33
- senderAddress,
34
- senderCapabilityId,
35
- receiverAddress,
36
- receiverCapabilityId: senderChanged || capabilityChanged || receiverChanged
37
- ? null
38
- : readOptionalString(values.receiverCapabilityId) ?? current.signalWiring.receiverCapabilityId,
39
- // The field belongs to the receiver's input, so it falls with everything above it.
40
- fieldKey: senderChanged || capabilityChanged || receiverChanged
41
- ? null
42
- : readOptionalString(values.fieldKey) ?? current.signalWiring.fieldKey,
43
- },
44
- };
45
- });
46
- }
47
- export function resetPhiBuilderSignalWiringSession(defaultArea) {
48
- builderWorkspaceStore.patch(defaultArea, (current) => ({ ...current, signalWiring: { ...EMPTY_SESSION } }));
49
- }
50
6
  function routesAreEquivalent(left, right) {
51
7
  return left.capabilityId === right.capabilityId && left.scope === right.scope &&
52
8
  left.channel === right.channel && left.action === right.action && left.valueType === right.valueType &&
@@ -61,8 +17,8 @@ function routesAreEquivalent(left, right) {
61
17
  * selection change, and a route whose value the receiver cannot read is worse than no route at all --
62
18
  * nothing reports it at runtime.
63
19
  */
64
- export function resolvePhiBuilderSignalWiringRoutes(defaultArea) {
65
- const state = getPhiDeveloperBuilderStateSnapshot(defaultArea);
20
+ export function resolvePhiBuilderSignalWiringRoutes() {
21
+ const state = getPhiDeveloperBuilderStateSnapshot();
66
22
  const session = state.signalWiring;
67
23
  if (!session.senderAddress || !session.senderCapabilityId || !session.receiverAddress || !session.receiverCapabilityId) {
68
24
  return { kind: "incomplete" };
@@ -95,7 +51,7 @@ export function resolvePhiBuilderSignalWiringRoutes(defaultArea) {
95
51
  receiver: receiver.address,
96
52
  ...(wantsFieldKey && session.fieldKey ? { fieldKey: session.fieldKey } : {}),
97
53
  };
98
- const current = getPhiDeveloperSelectedSignalRoutes(defaultArea) ?? {};
54
+ const current = getPhiDeveloperSelectedSignalRoutes() ?? {};
99
55
  if ([...(current.emits ?? []), ...(current.listens ?? [])].some((candidate) => routesAreEquivalent(candidate, route))) {
100
56
  return { kind: "duplicate" };
101
57
  }
@@ -112,8 +68,8 @@ export function resolvePhiBuilderSignalWiringRoutes(defaultArea) {
112
68
  * so its rows come straight from the draft config rather than from a staged copy. Removing therefore
113
69
  * writes to the same place Apply does, and the Table is reloaded afterwards.
114
70
  */
115
- export function resolvePhiBuilderSignalWiringRoutesWithout(defaultArea, routeKey) {
116
- const current = getPhiDeveloperSelectedSignalRoutes(defaultArea) ?? {};
71
+ export function resolvePhiBuilderSignalWiringRoutesWithout(routeKey) {
72
+ const current = getPhiDeveloperSelectedSignalRoutes() ?? {};
117
73
  const emits = (current.emits ?? []).filter((route) => route.routeKey !== routeKey);
118
74
  const listens = (current.listens ?? []).filter((route) => route.routeKey !== routeKey);
119
75
  if (emits.length === (current.emits ?? []).length && listens.length === (current.listens ?? []).length) {
@@ -1,6 +1,6 @@
1
1
  import { type PhiSignalRouteSet } from "../../../../types/signals";
2
2
  import type { PhiRuntimeModuleDefinition, PhiRuntimeModuleId } from "../../../../types/cms-plugins";
3
- import type { PhiDeveloperBuilderArea, PhiDeveloperBuilderRegionDraft } from "../developer-workspace-types";
3
+ import type { PhiDeveloperBuilderRegionDraft } from "../developer-workspace-types";
4
4
  import type { PhiAreaRootRoute, PhiAreaMeta } from "../../../../helpers/cms-area-config";
5
5
  import type { PhiWorkspaceCatalogState } from "../../../../components/workspace/catalog-state";
6
6
  import { type PhiBuilderPageMetaPresentationLabels } from "../controller/definition";
@@ -8,7 +8,6 @@ import type { PhiCmsTreeControllerSettings } from "../../../../types/cms";
8
8
  import { type PhiHistoryLabels } from "../../../../components/widgets/label-types/history";
9
9
  export type { PhiBuilderPageRegionKey, PhiBuilderRegionKey, PhiBuilderShellRegionKey, } from "../region-keys";
10
10
  export type PhiDeveloperBuilderWorkspaceControllerProps = {
11
- defaultArea?: PhiDeveloperBuilderArea;
12
11
  shellPresetDraftsByArea?: Record<string, Record<string, PhiDeveloperBuilderRegionDraft>>;
13
12
  runtimeModuleDefinitions?: readonly PhiRuntimeModuleDefinition[];
14
13
  runtimeModuleIdsByArea?: Record<string, PhiRuntimeModuleId[]>;
@@ -27,4 +26,4 @@ export type PhiDeveloperBuilderWorkspaceControllerProps = {
27
26
  historyLabels: PhiHistoryLabels;
28
27
  signalRoutes?: PhiSignalRouteSet | null;
29
28
  };
30
- export declare function PhiDeveloperBuilderWorkspaceController({ defaultArea, shellPresetDraftsByArea, runtimeModuleDefinitions, runtimeModuleIdsByArea, modulePresetPagesByArea, areaPresetSourcesByArea, navigationSurfacesByArea, unresolvedModuleIdsByArea, serverUnavailableModules, publicRouteClaims, publicRoutePaths, areaRootRoutesByArea, areaMetaByArea, areaControllerSettingsByArea, pageMetaLabels, historyLabels, signalRoutes, }: PhiDeveloperBuilderWorkspaceControllerProps): import("react").JSX.Element;
29
+ export declare function PhiDeveloperBuilderWorkspaceController({ shellPresetDraftsByArea, runtimeModuleDefinitions, runtimeModuleIdsByArea, modulePresetPagesByArea, areaPresetSourcesByArea, navigationSurfacesByArea, unresolvedModuleIdsByArea, serverUnavailableModules, publicRouteClaims, publicRoutePaths, areaRootRoutesByArea, areaMetaByArea, areaControllerSettingsByArea, pageMetaLabels, historyLabels, signalRoutes, }: PhiDeveloperBuilderWorkspaceControllerProps): import("react").JSX.Element;