@pantheon-systems/puck-css 0.12.0 → 0.14.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 (559) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/components/AgentActionButton.js +0 -13
  3. package/dist/agent/components/AgentActionButton.js.map +1 -1
  4. package/dist/agent/components/AgentActionModal.js +0 -13
  5. package/dist/agent/components/AgentActionModal.js.map +1 -1
  6. package/dist/agent/components/AgentStatusPanel.js +0 -10
  7. package/dist/agent/components/AgentStatusPanel.js.map +1 -1
  8. package/dist/agent/components/index.js +0 -5
  9. package/dist/agent/components/index.js.map +1 -1
  10. package/dist/agent/useAgentEdit.js +0 -12
  11. package/dist/agent/useAgentEdit.js.map +1 -1
  12. package/dist/agent/useAgentTrigger.js +0 -29
  13. package/dist/agent/useAgentTrigger.js.map +1 -1
  14. package/dist/auth/P1AuthProvider.d.ts +9 -2
  15. package/dist/auth/P1AuthProvider.d.ts.map +1 -1
  16. package/dist/auth/P1AuthProvider.js +21 -44
  17. package/dist/auth/P1AuthProvider.js.map +1 -1
  18. package/dist/auth/P1LoginPage.js +0 -18
  19. package/dist/auth/P1LoginPage.js.map +1 -1
  20. package/dist/auth/index.d.ts +2 -0
  21. package/dist/auth/index.d.ts.map +1 -1
  22. package/dist/auth/index.js +1 -9
  23. package/dist/auth/index.js.map +1 -1
  24. package/dist/auth/logout.d.ts +23 -0
  25. package/dist/auth/logout.d.ts.map +1 -0
  26. package/dist/auth/logout.js +14 -0
  27. package/dist/auth/logout.js.map +1 -0
  28. package/dist/auth/storage-keys.d.ts +5 -0
  29. package/dist/auth/storage-keys.d.ts.map +1 -0
  30. package/dist/auth/storage-keys.js +3 -0
  31. package/dist/auth/storage-keys.js.map +1 -0
  32. package/dist/collaboration/components/AgentActivityBanner.js +0 -15
  33. package/dist/collaboration/components/AgentActivityBanner.js.map +1 -1
  34. package/dist/collaboration/components/CollaboratorAvatars.js +0 -17
  35. package/dist/collaboration/components/CollaboratorAvatars.js.map +1 -1
  36. package/dist/collaboration/components/FocusRegionHighlight.js +0 -9
  37. package/dist/collaboration/components/FocusRegionHighlight.js.map +1 -1
  38. package/dist/collaboration/components/PresenceIndicator.js +0 -9
  39. package/dist/collaboration/components/PresenceIndicator.js.map +1 -1
  40. package/dist/collaboration/useBranchPresence.js +0 -36
  41. package/dist/collaboration/useBranchPresence.js.map +1 -1
  42. package/dist/collaboration/useFocusRegionReporting.js +0 -75
  43. package/dist/collaboration/useFocusRegionReporting.js.map +1 -1
  44. package/dist/collaboration/usePresence.js +0 -37
  45. package/dist/collaboration/usePresence.js.map +1 -1
  46. package/dist/collaboration/useSitePresence.js +0 -36
  47. package/dist/collaboration/useSitePresence.js.map +1 -1
  48. package/dist/collaboration/utils/avatarColor.js +0 -3
  49. package/dist/collaboration/utils/avatarColor.js.map +1 -1
  50. package/dist/collaboration/utils/focusHighlightConfig.js +0 -61
  51. package/dist/collaboration/utils/focusHighlightConfig.js.map +1 -1
  52. package/dist/collaboration/utils/focusRegionMap.js +1 -80
  53. package/dist/collaboration/utils/focusRegionMap.js.map +1 -1
  54. package/dist/collaboration/utils/initials.js +0 -14
  55. package/dist/collaboration/utils/initials.js.map +1 -1
  56. package/dist/collaboration/utils/presenceIdentity.js +0 -26
  57. package/dist/collaboration/utils/presenceIdentity.js.map +1 -1
  58. package/dist/core/FocusHighlightContext.js +0 -31
  59. package/dist/core/FocusHighlightContext.js.map +1 -1
  60. package/dist/core/NotificationContext.js +2 -67
  61. package/dist/core/NotificationContext.js.map +1 -1
  62. package/dist/core/P1PuckContext.js +0 -31
  63. package/dist/core/P1PuckContext.js.map +1 -1
  64. package/dist/core/PresenceContext.js +0 -18
  65. package/dist/core/PresenceContext.js.map +1 -1
  66. package/dist/core/config.js +0 -11
  67. package/dist/core/config.js.map +1 -1
  68. package/dist/core/featureConfig.js +0 -32
  69. package/dist/core/featureConfig.js.map +1 -1
  70. package/dist/core/index.d.ts +1 -1
  71. package/dist/core/index.d.ts.map +1 -1
  72. package/dist/core/plugin-types.d.ts +9 -0
  73. package/dist/core/plugin-types.d.ts.map +1 -1
  74. package/dist/core/types.d.ts +7 -1
  75. package/dist/core/types.d.ts.map +1 -1
  76. package/dist/core/types.js +0 -3
  77. package/dist/core/types.js.map +1 -1
  78. package/dist/core/utils/debounce.js +0 -18
  79. package/dist/core/utils/debounce.js.map +1 -1
  80. package/dist/core/utils/requestError.js +0 -5
  81. package/dist/core/utils/requestError.js.map +1 -1
  82. package/dist/core/utils/retry.js +0 -31
  83. package/dist/core/utils/retry.js.map +1 -1
  84. package/dist/core/utils/throttle.js +0 -24
  85. package/dist/core/utils/throttle.js.map +1 -1
  86. package/dist/data/cross-reference-resolve.js +0 -6
  87. package/dist/data/cross-reference-resolve.js.map +1 -1
  88. package/dist/data/cross-reference.js +0 -15
  89. package/dist/data/cross-reference.js.map +1 -1
  90. package/dist/data/css-queries/css-query-registry.d.ts +2 -2
  91. package/dist/data/css-queries/css-query-registry.js +1 -1
  92. package/dist/data/css-queries/css-query-registry.js.map +1 -1
  93. package/dist/data/dal/index.js +0 -21
  94. package/dist/data/dal/index.js.map +1 -1
  95. package/dist/data/dal/init.js +0 -40
  96. package/dist/data/dal/init.js.map +1 -1
  97. package/dist/data/dal/p1-store.d.ts.map +1 -1
  98. package/dist/data/dal/p1-store.js +11 -41
  99. package/dist/data/dal/p1-store.js.map +1 -1
  100. package/dist/data/data-list-block/builtin-components/cards.d.ts +1 -0
  101. package/dist/data/data-list-block/builtin-components/cards.d.ts.map +1 -1
  102. package/dist/data/data-list-block/builtin-components/cards.js +16 -16
  103. package/dist/data/data-list-block/builtin-components/cards.js.map +1 -1
  104. package/dist/data/data-list-block/builtin-components/listing.d.ts +1 -0
  105. package/dist/data/data-list-block/builtin-components/listing.d.ts.map +1 -1
  106. package/dist/data/data-list-block/builtin-components/listing.js +4 -3
  107. package/dist/data/data-list-block/builtin-components/listing.js.map +1 -1
  108. package/dist/data/data-list-block/builtin-components/rows.d.ts +1 -0
  109. package/dist/data/data-list-block/builtin-components/rows.d.ts.map +1 -1
  110. package/dist/data/data-list-block/builtin-components/rows.js +3 -3
  111. package/dist/data/data-list-block/builtin-components/rows.js.map +1 -1
  112. package/dist/data/data-list-block/create-data-list-block.d.ts +1 -0
  113. package/dist/data/data-list-block/create-data-list-block.d.ts.map +1 -1
  114. package/dist/data/data-list-block/create-data-list-block.js +7 -11
  115. package/dist/data/data-list-block/create-data-list-block.js.map +1 -1
  116. package/dist/data/data-list-block/data-list.css +314 -0
  117. package/dist/data/data-list-block/utils.js +0 -1
  118. package/dist/data/data-list-block/utils.js.map +1 -1
  119. package/dist/data/fields/pds-field-helpers.js +1 -4
  120. package/dist/data/fields/pds-field-helpers.js.map +1 -1
  121. package/dist/data/fields/visible-when.js +0 -5
  122. package/dist/data/fields/visible-when.js.map +1 -1
  123. package/dist/data/fields.d.ts.map +1 -1
  124. package/dist/data/fields.js +7 -14
  125. package/dist/data/fields.js.map +1 -1
  126. package/dist/data/get-page.js +0 -1
  127. package/dist/data/get-page.js.map +1 -1
  128. package/dist/data/page-editor-meta.js +0 -7
  129. package/dist/data/page-editor-meta.js.map +1 -1
  130. package/dist/data/page-store.js +0 -32
  131. package/dist/data/page-store.js.map +1 -1
  132. package/dist/data/page-structure.js +0 -3
  133. package/dist/data/page-structure.js.map +1 -1
  134. package/dist/data/paths.d.ts +6 -0
  135. package/dist/data/paths.d.ts.map +1 -1
  136. package/dist/data/paths.js +3 -16
  137. package/dist/data/paths.js.map +1 -1
  138. package/dist/data/query-provider.d.ts +14 -0
  139. package/dist/data/query-provider.d.ts.map +1 -1
  140. package/dist/data/query-provider.js +20 -9
  141. package/dist/data/query-provider.js.map +1 -1
  142. package/dist/data/remote-datasources/fetch-http-json.js +0 -5
  143. package/dist/data/remote-datasources/fetch-http-json.js.map +1 -1
  144. package/dist/data/remote-datasources/loader.js +0 -21
  145. package/dist/data/remote-datasources/loader.js.map +1 -1
  146. package/dist/data/remote-datasources/remote-datasource-registry.js +0 -4
  147. package/dist/data/remote-datasources/remote-datasource-registry.js.map +1 -1
  148. package/dist/data/resolve-data-templates.js +0 -24
  149. package/dist/data/resolve-data-templates.js.map +1 -1
  150. package/dist/data/route-templates.js +0 -29
  151. package/dist/data/route-templates.js.map +1 -1
  152. package/dist/data/semantic-ops.js +0 -11
  153. package/dist/data/semantic-ops.js.map +1 -1
  154. package/dist/data/styles.js +0 -2
  155. package/dist/data/styles.js.map +1 -1
  156. package/dist/data/template-autocomplete.js +0 -8
  157. package/dist/data/template-autocomplete.js.map +1 -1
  158. package/dist/data/utils.d.ts +16 -0
  159. package/dist/data/utils.d.ts.map +1 -1
  160. package/dist/data/utils.js +21 -1
  161. package/dist/data/utils.js.map +1 -1
  162. package/dist/editor/P1App.d.ts.map +1 -1
  163. package/dist/editor/P1App.js +6 -45
  164. package/dist/editor/P1App.js.map +1 -1
  165. package/dist/editor/P1PuckProvider.d.ts +1 -1
  166. package/dist/editor/P1PuckProvider.d.ts.map +1 -1
  167. package/dist/editor/P1PuckProvider.js +54 -561
  168. package/dist/editor/P1PuckProvider.js.map +1 -1
  169. package/dist/editor/aiPanelStore.js +0 -7
  170. package/dist/editor/aiPanelStore.js.map +1 -1
  171. package/dist/editor/components/BranchSelector.js +0 -21
  172. package/dist/editor/components/BranchSelector.js.map +1 -1
  173. package/dist/editor/components/CollapsibleSectionHeader.js +1 -4
  174. package/dist/editor/components/CollapsibleSectionHeader.js.map +1 -1
  175. package/dist/editor/components/DraggableRow.js +0 -1
  176. package/dist/editor/components/DraggableRow.js.map +1 -1
  177. package/dist/editor/components/EditorReloadOverlay.d.ts +16 -0
  178. package/dist/editor/components/EditorReloadOverlay.d.ts.map +1 -0
  179. package/dist/editor/components/EditorReloadOverlay.js +13 -0
  180. package/dist/editor/components/EditorReloadOverlay.js.map +1 -0
  181. package/dist/editor/components/NotificationContainer.js +0 -20
  182. package/dist/editor/components/NotificationContainer.js.map +1 -1
  183. package/dist/editor/components/OutlinePanel.js +1 -12
  184. package/dist/editor/components/OutlinePanel.js.map +1 -1
  185. package/dist/editor/components/P1InspectorFields.d.ts.map +1 -1
  186. package/dist/editor/components/P1InspectorFields.js +12 -14
  187. package/dist/editor/components/P1InspectorFields.js.map +1 -1
  188. package/dist/editor/components/P1TemplateFields.js +6 -12
  189. package/dist/editor/components/P1TemplateFields.js.map +1 -1
  190. package/dist/editor/components/PanelHeader.d.ts.map +1 -1
  191. package/dist/editor/components/PanelHeader.js +3 -2
  192. package/dist/editor/components/PanelHeader.js.map +1 -1
  193. package/dist/editor/components/PublishButton.js +0 -21
  194. package/dist/editor/components/PublishButton.js.map +1 -1
  195. package/dist/editor/components/PuckDataCapture.js +0 -14
  196. package/dist/editor/components/PuckDataCapture.js.map +1 -1
  197. package/dist/editor/components/PuckDataSynchronizer.js +0 -67
  198. package/dist/editor/components/PuckDataSynchronizer.js.map +1 -1
  199. package/dist/editor/components/PuckSelectionTracker.js +0 -62
  200. package/dist/editor/components/PuckSelectionTracker.js.map +1 -1
  201. package/dist/editor/components/SaveIndicator.js +0 -41
  202. package/dist/editor/components/SaveIndicator.js.map +1 -1
  203. package/dist/editor/components/Toast.js +1 -32
  204. package/dist/editor/components/Toast.js.map +1 -1
  205. package/dist/editor/components/VersionBannerOverride.d.ts +7 -1
  206. package/dist/editor/components/VersionBannerOverride.d.ts.map +1 -1
  207. package/dist/editor/components/VersionBannerOverride.js +17 -24
  208. package/dist/editor/components/VersionBannerOverride.js.map +1 -1
  209. package/dist/editor/components/collapsibleSectionContext.js +0 -10
  210. package/dist/editor/components/collapsibleSectionContext.js.map +1 -1
  211. package/dist/editor/components/componentIconName.js +0 -23
  212. package/dist/editor/components/componentIconName.js.map +1 -1
  213. package/dist/editor/components/connectable.js +0 -5
  214. package/dist/editor/components/connectable.js.map +1 -1
  215. package/dist/editor/components/merge-preview/MergePreviewRenderer.js +2 -74
  216. package/dist/editor/components/merge-preview/MergePreviewRenderer.js.map +1 -1
  217. package/dist/editor/components/merge-preview/ScaledContent.js +0 -6
  218. package/dist/editor/components/merge-preview/ScaledContent.js.map +1 -1
  219. package/dist/editor/components/merge-preview/index.js +0 -5
  220. package/dist/editor/components/merge-preview/index.js.map +1 -1
  221. package/dist/editor/components/outlineTree.js +0 -31
  222. package/dist/editor/components/outlineTree.js.map +1 -1
  223. package/dist/editor/components/useDragReorder.js +0 -1
  224. package/dist/editor/components/useDragReorder.js.map +1 -1
  225. package/dist/editor/composePlugins.d.ts +9 -3
  226. package/dist/editor/composePlugins.d.ts.map +1 -1
  227. package/dist/editor/composePlugins.js +3 -8
  228. package/dist/editor/composePlugins.js.map +1 -1
  229. package/dist/editor/defaultPlugins.d.ts +1 -1
  230. package/dist/editor/defaultPlugins.d.ts.map +1 -1
  231. package/dist/editor/defaultPlugins.js +3 -1
  232. package/dist/editor/defaultPlugins.js.map +1 -1
  233. package/dist/editor/freshFieldTypes.d.ts +12 -0
  234. package/dist/editor/freshFieldTypes.d.ts.map +1 -0
  235. package/dist/editor/freshFieldTypes.js +11 -0
  236. package/dist/editor/freshFieldTypes.js.map +1 -0
  237. package/dist/editor/logout-store.d.ts +13 -0
  238. package/dist/editor/logout-store.d.ts.map +1 -0
  239. package/dist/editor/logout-store.js +23 -0
  240. package/dist/editor/logout-store.js.map +1 -0
  241. package/dist/editor/plugin/P1Plugin.d.ts +16 -3
  242. package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
  243. package/dist/editor/plugin/P1Plugin.js +21 -171
  244. package/dist/editor/plugin/P1Plugin.js.map +1 -1
  245. package/dist/editor/plugin/context-sync-key.js +0 -19
  246. package/dist/editor/plugin/context-sync-key.js.map +1 -1
  247. package/dist/editor/plugin/createP1Overrides.js +1 -49
  248. package/dist/editor/plugin/createP1Overrides.js.map +1 -1
  249. package/dist/editor/plugin/document-sync-plugin.js +0 -50
  250. package/dist/editor/plugin/document-sync-plugin.js.map +1 -1
  251. package/dist/editor/plugin/fieldGuidance.js +0 -5
  252. package/dist/editor/plugin/fieldGuidance.js.map +1 -1
  253. package/dist/editor/plugin/index.js +0 -6
  254. package/dist/editor/plugin/index.js.map +1 -1
  255. package/dist/editor/plugin/selectHeaderCollaborators.js +0 -8
  256. package/dist/editor/plugin/selectHeaderCollaborators.js.map +1 -1
  257. package/dist/editor/presets.js +2 -2
  258. package/dist/editor/stablePluginDeps.d.ts +9 -0
  259. package/dist/editor/stablePluginDeps.d.ts.map +1 -0
  260. package/dist/editor/stablePluginDeps.js +15 -0
  261. package/dist/editor/stablePluginDeps.js.map +1 -0
  262. package/dist/editor/thumbnails/LiveThumbnail.js +1 -49
  263. package/dist/editor/thumbnails/LiveThumbnail.js.map +1 -1
  264. package/dist/editor/thumbnails/ThumbnailCard.js +0 -25
  265. package/dist/editor/thumbnails/ThumbnailCard.js.map +1 -1
  266. package/dist/editor/thumbnails/buildLiveThumbnailDrawer.js +0 -21
  267. package/dist/editor/thumbnails/buildLiveThumbnailDrawer.js.map +1 -1
  268. package/dist/editor/thumbnails/humanizeComponentName.js +0 -17
  269. package/dist/editor/thumbnails/humanizeComponentName.js.map +1 -1
  270. package/dist/editor/thumbnails/resolveLiveThumbnailDrawer.js +0 -11
  271. package/dist/editor/thumbnails/resolveLiveThumbnailDrawer.js.map +1 -1
  272. package/dist/editor/thumbnails/thumbnailCache.js +0 -38
  273. package/dist/editor/thumbnails/thumbnailCache.js.map +1 -1
  274. package/dist/editor/useAutoSave.js +0 -32
  275. package/dist/editor/useAutoSave.js.map +1 -1
  276. package/dist/editor/useBranches.js +0 -30
  277. package/dist/editor/useBranches.js.map +1 -1
  278. package/dist/editor/useComponentRegistry.d.ts +1 -1
  279. package/dist/editor/useComponentRegistry.js +0 -28
  280. package/dist/editor/useComponentRegistry.js.map +1 -1
  281. package/dist/editor/useDocuments.js +0 -51
  282. package/dist/editor/useDocuments.js.map +1 -1
  283. package/dist/editor/useMergePreview.js +8 -12
  284. package/dist/editor/useMergePreview.js.map +1 -1
  285. package/dist/editor/useP1Editor.d.ts +35 -7
  286. package/dist/editor/useP1Editor.d.ts.map +1 -1
  287. package/dist/editor/useP1Editor.js +146 -243
  288. package/dist/editor/useP1Editor.js.map +1 -1
  289. package/dist/editor/useP1Overrides.js +15 -50
  290. package/dist/editor/useP1Overrides.js.map +1 -1
  291. package/dist/editor/useP1Plugin.d.ts +10 -4
  292. package/dist/editor/useP1Plugin.d.ts.map +1 -1
  293. package/dist/editor/useP1Plugin.js +34 -56
  294. package/dist/editor/useP1Plugin.js.map +1 -1
  295. package/dist/editor/useRealtime.d.ts +15 -3
  296. package/dist/editor/useRealtime.d.ts.map +1 -1
  297. package/dist/editor/useRealtime.js +12 -91
  298. package/dist/editor/useRealtime.js.map +1 -1
  299. package/dist/editor/useResponsivePanels.js +2 -35
  300. package/dist/editor/useResponsivePanels.js.map +1 -1
  301. package/dist/editor/useSidebarScrollPreservation.js +0 -14
  302. package/dist/editor/useSidebarScrollPreservation.js.map +1 -1
  303. package/dist/editor/utils/buildThumbnailOverride.js +0 -9
  304. package/dist/editor/utils/buildThumbnailOverride.js.map +1 -1
  305. package/dist/editor/utils/componentRegistry.d.ts +6 -11
  306. package/dist/editor/utils/componentRegistry.d.ts.map +1 -1
  307. package/dist/editor/utils/componentRegistry.js +1 -71
  308. package/dist/editor/utils/componentRegistry.js.map +1 -1
  309. package/dist/editor/utils/createStablePluginArray.js +0 -27
  310. package/dist/editor/utils/createStablePluginArray.js.map +1 -1
  311. package/dist/editor/utils/path.js +0 -6
  312. package/dist/editor/utils/path.js.map +1 -1
  313. package/dist/editor/utils/puckYjsBinding.d.ts +1 -1
  314. package/dist/editor/utils/puckYjsBinding.js +0 -99
  315. package/dist/editor/utils/puckYjsBinding.js.map +1 -1
  316. package/dist/editor/utils/restoreDocumentVersion.js +0 -12
  317. package/dist/editor/utils/restoreDocumentVersion.js.map +1 -1
  318. package/dist/editor/utils/sanitizeRichtextDefaults.js +0 -26
  319. package/dist/editor/utils/sanitizeRichtextDefaults.js.map +1 -1
  320. package/dist/editor/utils/snapshotToPuckData.js +0 -8
  321. package/dist/editor/utils/snapshotToPuckData.js.map +1 -1
  322. package/dist/editor/utils/syncComponentRegistry.d.ts +2 -2
  323. package/dist/editor/utils/syncComponentRegistry.js +1 -76
  324. package/dist/editor/utils/syncComponentRegistry.js.map +1 -1
  325. package/dist/editor/utils/syncComponentRegistryWriteOnly.d.ts +7 -7
  326. package/dist/editor/utils/syncComponentRegistryWriteOnly.js +0 -22
  327. package/dist/editor/utils/syncComponentRegistryWriteOnly.js.map +1 -1
  328. package/dist/editor/utils/templatePath.js +0 -5
  329. package/dist/editor/utils/templatePath.js.map +1 -1
  330. package/dist/features/content-type-templates/editor/useTemplatePermissions.js +0 -3
  331. package/dist/features/content-type-templates/editor/useTemplatePermissions.js.map +1 -1
  332. package/dist/features/content-type-templates/hooks/useTemplateList.js +0 -30
  333. package/dist/features/content-type-templates/hooks/useTemplateList.js.map +1 -1
  334. package/dist/features/content-type-templates/index.js +0 -8
  335. package/dist/features/content-type-templates/index.js.map +1 -1
  336. package/dist/features/content-type-templates/permissions/createPuckPermissions.js +1 -43
  337. package/dist/features/content-type-templates/permissions/createPuckPermissions.js.map +1 -1
  338. package/dist/features/content-type-templates/permissions/role-permissions.d.ts +8 -0
  339. package/dist/features/content-type-templates/permissions/role-permissions.d.ts.map +1 -1
  340. package/dist/features/content-type-templates/permissions/role-permissions.js +3 -29
  341. package/dist/features/content-type-templates/permissions/role-permissions.js.map +1 -1
  342. package/dist/features/content-type-templates/permissions/useContentRole.js +0 -24
  343. package/dist/features/content-type-templates/permissions/useContentRole.js.map +1 -1
  344. package/dist/features/content-type-templates/permissions/useResolveContentRole.d.ts +5 -5
  345. package/dist/features/content-type-templates/permissions/useResolveContentRole.js +2 -22
  346. package/dist/features/content-type-templates/permissions/useResolveContentRole.js.map +1 -1
  347. package/dist/features/content-type-templates/stores/index.js +0 -5
  348. package/dist/features/content-type-templates/stores/index.js.map +1 -1
  349. package/dist/features/content-type-templates/stores/template-store-api.js +0 -14
  350. package/dist/features/content-type-templates/stores/template-store-api.js.map +1 -1
  351. package/dist/features/content-type-templates/stores/template-store.d.ts +1 -1
  352. package/dist/features/content-type-templates/stores/template-store.js +0 -12
  353. package/dist/features/content-type-templates/stores/template-store.js.map +1 -1
  354. package/dist/features/content-type-templates/types.js +0 -5
  355. package/dist/features/content-type-templates/types.js.map +1 -1
  356. package/dist/features/content-type-templates/ui/ActionBarPinButton.js +12 -21
  357. package/dist/features/content-type-templates/ui/ActionBarPinButton.js.map +1 -1
  358. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js +0 -23
  359. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js.map +1 -1
  360. package/dist/features/content-type-templates/ui/TemplateSelector.js +0 -19
  361. package/dist/features/content-type-templates/ui/TemplateSelector.js.map +1 -1
  362. package/dist/features/content-type-templates/validation/structural-validation.js +0 -40
  363. package/dist/features/content-type-templates/validation/structural-validation.js.map +1 -1
  364. package/dist/features/localization/authority.d.ts +26 -0
  365. package/dist/features/localization/authority.d.ts.map +1 -0
  366. package/dist/features/localization/authority.js +17 -0
  367. package/dist/features/localization/authority.js.map +1 -0
  368. package/dist/features/localization/index.d.ts +11 -0
  369. package/dist/features/localization/index.d.ts.map +1 -0
  370. package/dist/features/localization/index.js +7 -0
  371. package/dist/features/localization/index.js.map +1 -0
  372. package/dist/features/localization/prop-target.d.ts +26 -0
  373. package/dist/features/localization/prop-target.d.ts.map +1 -0
  374. package/dist/features/localization/prop-target.js +15 -0
  375. package/dist/features/localization/prop-target.js.map +1 -0
  376. package/dist/features/localization/puck-overrides.d.ts +12 -0
  377. package/dist/features/localization/puck-overrides.d.ts.map +1 -0
  378. package/dist/features/localization/puck-overrides.js +12 -0
  379. package/dist/features/localization/puck-overrides.js.map +1 -0
  380. package/dist/features/localization/relation.d.ts +14 -0
  381. package/dist/features/localization/relation.d.ts.map +1 -0
  382. package/dist/features/localization/relation.js +7 -0
  383. package/dist/features/localization/relation.js.map +1 -0
  384. package/dist/features/localization/translatable.d.ts +24 -0
  385. package/dist/features/localization/translatable.d.ts.map +1 -0
  386. package/dist/features/localization/translatable.js +30 -0
  387. package/dist/features/localization/translatable.js.map +1 -0
  388. package/dist/features/localization/types.d.ts +17 -0
  389. package/dist/features/localization/types.d.ts.map +1 -0
  390. package/dist/features/localization/types.js +2 -0
  391. package/dist/features/localization/types.js.map +1 -0
  392. package/dist/features/localization/ui/AuthorityFieldControl.d.ts +32 -0
  393. package/dist/features/localization/ui/AuthorityFieldControl.d.ts.map +1 -0
  394. package/dist/features/localization/ui/AuthorityFieldControl.js +36 -0
  395. package/dist/features/localization/ui/AuthorityFieldControl.js.map +1 -0
  396. package/dist/features/localization/ui/TranslatabilityToggle.d.ts +17 -0
  397. package/dist/features/localization/ui/TranslatabilityToggle.d.ts.map +1 -0
  398. package/dist/features/localization/ui/TranslatabilityToggle.js +16 -0
  399. package/dist/features/localization/ui/TranslatabilityToggle.js.map +1 -0
  400. package/dist/features/localization/useLocalizationData.d.ts +37 -0
  401. package/dist/features/localization/useLocalizationData.d.ts.map +1 -0
  402. package/dist/features/localization/useLocalizationData.js +88 -0
  403. package/dist/features/localization/useLocalizationData.js.map +1 -0
  404. package/dist/index.d.ts +6 -4
  405. package/dist/index.d.ts.map +1 -1
  406. package/dist/index.js +2 -43
  407. package/dist/index.js.map +1 -1
  408. package/dist/merge/components/conflict-notifications/ConflictNotificationToast.js +0 -19
  409. package/dist/merge/components/conflict-notifications/ConflictNotificationToast.js.map +1 -1
  410. package/dist/merge/components/conflict-notifications/index.js +0 -5
  411. package/dist/merge/components/conflict-notifications/index.js.map +1 -1
  412. package/dist/merge/components/conflict-notifications/useConflictNotifications.js +0 -48
  413. package/dist/merge/components/conflict-notifications/useConflictNotifications.js.map +1 -1
  414. package/dist/merge/components/conflict-resolution/ComponentConflictGroup.js +0 -36
  415. package/dist/merge/components/conflict-resolution/ComponentConflictGroup.js.map +1 -1
  416. package/dist/merge/components/conflict-resolution/PuckFieldResolutionPanel.js +0 -40
  417. package/dist/merge/components/conflict-resolution/PuckFieldResolutionPanel.js.map +1 -1
  418. package/dist/merge/components/conflict-resolution/RenderedResolutionPreview.js +0 -21
  419. package/dist/merge/components/conflict-resolution/RenderedResolutionPreview.js.map +1 -1
  420. package/dist/merge/components/conflict-resolution/index.js +0 -5
  421. package/dist/merge/components/conflict-resolution/index.js.map +1 -1
  422. package/dist/merge/components/merge-resolution/CherryPickVisualPanel.js +0 -44
  423. package/dist/merge/components/merge-resolution/CherryPickVisualPanel.js.map +1 -1
  424. package/dist/merge/components/merge-resolution/ComponentClickOverlay.js +0 -24
  425. package/dist/merge/components/merge-resolution/ComponentClickOverlay.js.map +1 -1
  426. package/dist/merge/components/merge-resolution/DocumentResolutionDetail.d.ts.map +1 -1
  427. package/dist/merge/components/merge-resolution/DocumentResolutionDetail.js +6 -31
  428. package/dist/merge/components/merge-resolution/DocumentResolutionDetail.js.map +1 -1
  429. package/dist/merge/components/merge-resolution/index.js +0 -3
  430. package/dist/merge/components/merge-resolution/index.js.map +1 -1
  431. package/dist/merge/useMergeResolution.d.ts +1 -1
  432. package/dist/merge/useMergeResolution.d.ts.map +1 -1
  433. package/dist/merge/useMergeResolution.js +6 -75
  434. package/dist/merge/useMergeResolution.js.map +1 -1
  435. package/dist/merge/utils/namespacePuckData.d.ts.map +1 -1
  436. package/dist/merge/utils/namespacePuckData.js +8 -8
  437. package/dist/merge/utils/namespacePuckData.js.map +1 -1
  438. package/dist/merge/utils/puckFieldClassifier.js +0 -183
  439. package/dist/merge/utils/puckFieldClassifier.js.map +1 -1
  440. package/dist/p1/editor/connect/connect-preview-config.js +0 -5
  441. package/dist/p1/editor/connect/connect-preview-config.js.map +1 -1
  442. package/dist/p1/editor/connect/field-connect-plugin.js +0 -6
  443. package/dist/p1/editor/connect/field-connect-plugin.js.map +1 -1
  444. package/dist/p1/editor/editor-preview-resolve.js +0 -13
  445. package/dist/p1/editor/editor-preview-resolve.js.map +1 -1
  446. package/dist/p1/editor/hooks/api-hooks.js +0 -7
  447. package/dist/p1/editor/hooks/api-hooks.js.map +1 -1
  448. package/dist/p1/editor/hooks/useLiveEditorContext.d.ts.map +1 -1
  449. package/dist/p1/editor/hooks/useLiveEditorContext.js +2 -13
  450. package/dist/p1/editor/hooks/useLiveEditorContext.js.map +1 -1
  451. package/dist/p1/editor/hooks/useLiveRemoteDatasources.js +0 -22
  452. package/dist/p1/editor/hooks/useLiveRemoteDatasources.js.map +1 -1
  453. package/dist/p1/editor/hooks/useP1Plugins.js +0 -5
  454. package/dist/p1/editor/hooks/useP1Plugins.js.map +1 -1
  455. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js +0 -7
  456. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js.map +1 -1
  457. package/dist/p1/editor/template-autocomplete-layer.js +0 -4
  458. package/dist/p1/editor/template-autocomplete-layer.js.map +1 -1
  459. package/dist/pds/components/AgentChip.js +0 -3
  460. package/dist/pds/components/AgentChip.js.map +1 -1
  461. package/dist/pds/components/CreatePageModal.js +1 -97
  462. package/dist/pds/components/CreatePageModal.js.map +1 -1
  463. package/dist/pds/components/LoadingMessage.d.ts.map +1 -1
  464. package/dist/pds/components/LoadingMessage.js +2 -1
  465. package/dist/pds/components/LoadingMessage.js.map +1 -1
  466. package/dist/pds/components/LoadingMessage.module.css +2 -21
  467. package/dist/pds/components/LoadingOverlay.d.ts +17 -0
  468. package/dist/pds/components/LoadingOverlay.d.ts.map +1 -0
  469. package/dist/pds/components/LoadingOverlay.js +7 -0
  470. package/dist/pds/components/LoadingOverlay.js.map +1 -0
  471. package/dist/pds/components/LoadingOverlay.module.css +28 -0
  472. package/dist/pds/components/P1EditorHeader.d.ts +9 -2
  473. package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
  474. package/dist/pds/components/P1EditorHeader.js +6 -26
  475. package/dist/pds/components/P1EditorHeader.js.map +1 -1
  476. package/dist/pds/components/P1EditorHeader.module.css +26 -0
  477. package/dist/pds/components/PageNavigator.js +0 -16
  478. package/dist/pds/components/PageNavigator.js.map +1 -1
  479. package/dist/pds/components/PageNotFound.d.ts +27 -0
  480. package/dist/pds/components/PageNotFound.d.ts.map +1 -0
  481. package/dist/pds/components/PageNotFound.js +24 -0
  482. package/dist/pds/components/PageNotFound.js.map +1 -0
  483. package/dist/pds/components/PageNotFound.module.css +51 -0
  484. package/dist/pds/components/PresenceStack.js +0 -9
  485. package/dist/pds/components/PresenceStack.js.map +1 -1
  486. package/dist/pds/components/PublishControl.js +0 -6
  487. package/dist/pds/components/PublishControl.js.map +1 -1
  488. package/dist/pds/components/WorkstreamSwitcher.js +1 -25
  489. package/dist/pds/components/WorkstreamSwitcher.js.map +1 -1
  490. package/dist/pds/index.d.ts +4 -0
  491. package/dist/pds/index.d.ts.map +1 -1
  492. package/dist/pds/index.js +2 -29
  493. package/dist/pds/index.js.map +1 -1
  494. package/dist/pds/theme/pds-core-content.js +0 -5
  495. package/dist/pds/theme/pds-core-content.js.map +1 -1
  496. package/dist/pds/utils/deriveDocState.js +0 -1
  497. package/dist/pds/utils/deriveDocState.js.map +1 -1
  498. package/dist/pds/utils/deriveLiveDocState.js +0 -13
  499. package/dist/pds/utils/deriveLiveDocState.js.map +1 -1
  500. package/dist/registry-sync.js +0 -4
  501. package/dist/registry-sync.js.map +1 -1
  502. package/dist/server.js +0 -7
  503. package/dist/server.js.map +1 -1
  504. package/dist/versioning/components/ReadOnlyFieldsGuard.js +0 -3
  505. package/dist/versioning/components/ReadOnlyFieldsGuard.js.map +1 -1
  506. package/dist/versioning/components/VersionBannerActions.js +0 -1
  507. package/dist/versioning/components/VersionBannerActions.js.map +1 -1
  508. package/dist/versioning/components/version-compare/BranchDiffHeader.js +0 -7
  509. package/dist/versioning/components/version-compare/BranchDiffHeader.js.map +1 -1
  510. package/dist/versioning/components/version-compare/BranchMergeCompare.js +0 -19
  511. package/dist/versioning/components/version-compare/BranchMergeCompare.js.map +1 -1
  512. package/dist/versioning/components/version-compare/ComponentNode.js +0 -8
  513. package/dist/versioning/components/version-compare/ComponentNode.js.map +1 -1
  514. package/dist/versioning/components/version-compare/ComponentTree.js +0 -10
  515. package/dist/versioning/components/version-compare/ComponentTree.js.map +1 -1
  516. package/dist/versioning/components/version-compare/DiffHeader.js +0 -3
  517. package/dist/versioning/components/version-compare/DiffHeader.js.map +1 -1
  518. package/dist/versioning/components/version-compare/DocumentDiffList.js +0 -14
  519. package/dist/versioning/components/version-compare/DocumentDiffList.js.map +1 -1
  520. package/dist/versioning/components/version-compare/PropDiffPanel.js +0 -7
  521. package/dist/versioning/components/version-compare/PropDiffPanel.js.map +1 -1
  522. package/dist/versioning/components/version-compare/PropDiffRow.js +0 -3
  523. package/dist/versioning/components/version-compare/PropDiffRow.js.map +1 -1
  524. package/dist/versioning/components/version-compare/PropValueDisplay.js +0 -22
  525. package/dist/versioning/components/version-compare/PropValueDisplay.js.map +1 -1
  526. package/dist/versioning/components/version-compare/VersionComparePage.js +0 -13
  527. package/dist/versioning/components/version-compare/VersionComparePage.js.map +1 -1
  528. package/dist/versioning/components/version-compare/VisualBranchCompare.js +0 -17
  529. package/dist/versioning/components/version-compare/VisualBranchCompare.js.map +1 -1
  530. package/dist/versioning/components/version-compare/VisualVersionCompare.js +0 -23
  531. package/dist/versioning/components/version-compare/VisualVersionCompare.js.map +1 -1
  532. package/dist/versioning/components/version-compare/index.js +0 -5
  533. package/dist/versioning/components/version-compare/index.js.map +1 -1
  534. package/dist/versioning/components/version-history/AgentCheckpointBadge.js +0 -14
  535. package/dist/versioning/components/version-history/AgentCheckpointBadge.js.map +1 -1
  536. package/dist/versioning/components/version-history/VersionItem.js +0 -7
  537. package/dist/versioning/components/version-history/VersionItem.js.map +1 -1
  538. package/dist/versioning/components/version-history/index.js +0 -5
  539. package/dist/versioning/components/version-history/index.js.map +1 -1
  540. package/dist/versioning/useCheckpoints.js +0 -28
  541. package/dist/versioning/useCheckpoints.js.map +1 -1
  542. package/dist/versioning/useVersions.js +0 -31
  543. package/dist/versioning/useVersions.js.map +1 -1
  544. package/dist/versioning/utils/branchDiff.js +0 -93
  545. package/dist/versioning/utils/branchDiff.js.map +1 -1
  546. package/dist/versioning/utils/diff.js +0 -79
  547. package/dist/versioning/utils/diff.js.map +1 -1
  548. package/dist/versioning/utils/formatVersionDate.js +0 -12
  549. package/dist/versioning/utils/formatVersionDate.js.map +1 -1
  550. package/dist/versioning/utils/highlightConfig.js +0 -42
  551. package/dist/versioning/utils/highlightConfig.js.map +1 -1
  552. package/dist/versioning/utils/versionKind.js +0 -10
  553. package/dist/versioning/utils/versionKind.js.map +1 -1
  554. package/package.json +7 -7
  555. package/src/data/data-list-block/data-list.css +314 -0
  556. package/src/pds/theme/PuckEditorTheme.css +5 -5
  557. package/src/styles.css +1 -1
  558. package/src/pds/theme/PuckEditorTheme.test.ts +0 -195
  559. package/src/pds/theme/pds-core-content.ts +0 -8
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * syncComponentRegistry
3
3
  *
4
- * Serialises ComponentDescriptor objects to CSS documents under the
4
+ * Serialises ComponentDescriptor objects to backend documents under the
5
5
  * /_registry/ path prefix, hash-checking to skip unchanged components.
6
6
  *
7
7
  * Extracted from useComponentRegistry.ts (verbatim, renamed) so it can run
@@ -19,7 +19,7 @@ export declare const COMPONENT_PREFIX = "_registry/components/";
19
19
  export declare const INDEX_PATH = "_registry/index";
20
20
  /**
21
21
  * Maximum age of the registry index's last full per-component verification
22
- * (PCC-3430) before the fast path is forced to re-verify every component's
22
+ * before the fast path is forced to re-verify every component's
23
23
  * actual document content instead of trusting the index's hashes map alone.
24
24
  * Bounds how long an index/document desync can persist undetected.
25
25
  */
@@ -1,51 +1,19 @@
1
- /**
2
- * syncComponentRegistry
3
- *
4
- * Serialises ComponentDescriptor objects to CSS documents under the
5
- * /_registry/ path prefix, hash-checking to skip unchanged components.
6
- *
7
- * Extracted from useComponentRegistry.ts (verbatim, renamed) so it can run
8
- * outside React — the browser hook and a headless CI sync script both call
9
- * this same function. No React import here by design.
10
- */
11
1
  import { ConflictError } from '@pantheon-systems/css-client';
12
2
  import { buildRegistryIndex, } from './componentRegistry.js';
13
- // =============================================================================
14
- // Registry path helpers
15
- // =============================================================================
16
3
  const REGISTRY_PREFIX = '_registry/';
17
4
  export const COMPONENT_PREFIX = '_registry/components/';
18
5
  export const INDEX_PATH = '_registry/index';
19
- /**
20
- * Maximum age of the registry index's last full per-component verification
21
- * (PCC-3430) before the fast path is forced to re-verify every component's
22
- * actual document content instead of trusting the index's hashes map alone.
23
- * Bounds how long an index/document desync can persist undetected.
24
- */
25
- export const REGISTRY_VERIFICATION_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
6
+ export const REGISTRY_VERIFICATION_INTERVAL_MS = 24 * 60 * 60 * 1000;
26
7
  export function componentPath(name) {
27
8
  return `${COMPONENT_PREFIX}${name}`;
28
9
  }
29
- /**
30
- * Comparison key for matching a component name against server state.
31
- *
32
- * The server's normalizePath lowercases every document path on write, so a
33
- * component registered as HeroBlock lists back at _registry/components/heroblock.
34
- * Every in-memory lookup that matches descriptor names against path-derived
35
- * names (or index hash keys) must go through this key, or PascalCase components
36
- * never match their own documents and re-register on every load. Stored
37
- * formats are unchanged — index hashes stay keyed by original names, and
38
- * componentPath still sends the original name (the server normalizes it).
39
- */
40
10
  function registryComponentKey(name) {
41
11
  return name.toLowerCase();
42
12
  }
43
13
  export async function syncComponentRegistry(client, siteId, branchId, descriptors) {
44
- // Step 1: List all existing registry documents
45
14
  const existingDocs = (await client.documents.list(siteId, branchId, {
46
15
  pathPrefix: REGISTRY_PREFIX,
47
16
  }));
48
- // Step 2: Build lookup maps for existing component docs
49
17
  const docByName = new Map();
50
18
  let indexDoc;
51
19
  for (const doc of existingDocs) {
@@ -57,8 +25,6 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
57
25
  docByName.set(registryComponentKey(name), doc);
58
26
  }
59
27
  }
60
- // Names that collide case-insensitively share one server document (the
61
- // server lowercases paths) and will silently overwrite each other.
62
28
  const namesByKey = new Map();
63
29
  for (const descriptor of descriptors) {
64
30
  const key = registryComponentKey(descriptor.name);
@@ -69,15 +35,6 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
69
35
  console.warn('[syncComponentRegistry] Component names collide case-insensitively and will share one registry document (last write wins):', names);
70
36
  }
71
37
  }
72
- // Step 3: Resolve stored hashes — fast path (from index) or legacy (per-component).
73
- //
74
- // Fast path: if the index version has a `hashes` map, read all hashes from it
75
- // in a single request instead of fetching each component version individually.
76
- // This collapses N simultaneous getLatest calls (one per component) into 1.
77
- //
78
- // Legacy fallback: index exists but has no `hashes` field (written by an older
79
- // version of this hook), or no index exists yet. Falls back to per-component
80
- // fetches so existing registries continue to work on the first run after deploy.
81
38
  const storedHashByName = new Map();
82
39
  let gotHashesFromIndex = false;
83
40
  let existingVerifiedAt;
@@ -100,13 +57,6 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
100
57
  console.debug('[syncComponentRegistry] Fast path: loaded', storedHashByName.size, 'hashes from index');
101
58
  }
102
59
  else if (verificationIsStale) {
103
- // PCC-3430: the fast path trusts `hashes` without ever reading the
104
- // documents it describes. If an entry ever comes to record a hash
105
- // that doesn't match its document's real content (e.g. an
106
- // out-of-band revert the index was never told about), the fast path
107
- // has no way to detect this on its own and would skip forever.
108
- // Periodically forcing a real per-component check bounds how long
109
- // such a desync can persist instead of letting it stick indefinitely.
110
60
  console.debug('[syncComponentRegistry] Registry verification is stale — forcing per-component fetch to self-heal any index/document desync');
111
61
  }
112
62
  else {
@@ -121,7 +71,6 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
121
71
  console.debug('[syncComponentRegistry] No index document found — will create one after registration');
122
72
  }
123
73
  if (!gotHashesFromIndex) {
124
- // Legacy path: fetch each component version individually to get stored hash.
125
74
  console.debug('[syncComponentRegistry] Legacy path: fetching', docByName.size, 'component versions individually');
126
75
  await Promise.all(Array.from(docByName.entries()).map(async ([name, doc]) => {
127
76
  try {
@@ -132,27 +81,14 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
132
81
  }
133
82
  }
134
83
  catch {
135
- // Version fetch failure → treat as hash mismatch, will overwrite
136
84
  }
137
85
  }));
138
86
  }
139
- // Step 4: Write only changed/new descriptors
140
87
  let registered = 0;
141
88
  let skipped = 0;
142
89
  await Promise.all(descriptors.map(async (descriptor) => {
143
90
  const storedHash = storedHashByName.get(registryComponentKey(descriptor.name));
144
91
  const existingDoc = docByName.get(registryComponentKey(descriptor.name));
145
- // Skip only when the hash is unchanged AND the component document still
146
- // exists on this branch. A hash-only check is unsafe: the index can drift
147
- // out of sync with on-disk component docs (e.g. a partial historical
148
- // write, an out-of-band deletion, or branch CoW interactions where the
149
- // index was inherited but its referenced component docs were not). In
150
- // that case the index reports a matching hash for a name whose document
151
- // is missing, and the registry stays permanently stuck at fewer
152
- // components than the running config defines. Requiring `existingDoc`
153
- // forces the missing component through the create path on the next run,
154
- // which self-heals the desync and rewrites the index from the full
155
- // descriptor set.
156
92
  if (existingDoc !== undefined && storedHash === descriptor.descriptorHash) {
157
93
  skipped++;
158
94
  return;
@@ -188,24 +124,13 @@ export async function syncComponentRegistry(client, siteId, branchId, descriptor
188
124
  registered++;
189
125
  }));
190
126
  console.debug('[syncComponentRegistry] Registration complete:', 'registered =', registered, 'skipped =', skipped, 'total =', descriptors.length, '| gotHashesFromIndex =', gotHashesFromIndex);
191
- // Detect hash instability: if we got hashes from the index but still had to register
192
- // components, log which components had mismatched hashes.
193
127
  if (gotHashesFromIndex && registered > 0) {
194
128
  const changed = descriptors.filter(d => storedHashByName.get(registryComponentKey(d.name)) !== d.descriptorHash);
195
129
  console.warn('[syncComponentRegistry] Hash mismatch detected for', changed.length, 'component(s) despite index being present.', 'These components will trigger a full re-registration on every load if their hashes are unstable:', changed.map(d => ({ name: d.name, stored: storedHashByName.get(registryComponentKey(d.name)), computed: d.descriptorHash })));
196
130
  }
197
- // Step 5: Write index when something changed, index doesn't exist yet, OR the existing
198
- // index lacks the `hashes` field (legacy format). The third condition promotes legacy
199
- // indexes to the fast-path format so that the next startup can skip per-component fetches.
200
131
  const indexNeedsWrite = registered > 0 || indexDoc === undefined || !gotHashesFromIndex;
201
132
  console.debug('[syncComponentRegistry] indexNeedsWrite =', indexNeedsWrite, '(registered > 0:', registered > 0, ', no indexDoc:', indexDoc === undefined, ', legacy format:', !gotHashesFromIndex, ')');
202
133
  if (indexNeedsWrite) {
203
- // A per-component verification just ran whenever we didn't trust the
204
- // fast path (missing index, legacy format, or forced by staleness) —
205
- // stamp verifiedAt as confirmed now. Otherwise carry the existing value
206
- // forward: a fast-path-only run (skips + a changed component or two)
207
- // doesn't verify every component's actual content, so it must not reset
208
- // the clock on the next forced verification.
209
134
  const verifiedAt = !gotHashesFromIndex ? new Date().toISOString() : existingVerifiedAt;
210
135
  const index = buildRegistryIndex(descriptors, siteId, branchId, verifiedAt);
211
136
  let indexDocId;
@@ -1 +1 @@
1
- {"version":3,"file":"syncComponentRegistry.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EACL,kBAAkB,GAGnB,MAAM,wBAAwB,CAAC;AAYhC,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,MAAM,eAAe,GAAG,YAAY,CAAC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAEjF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,gBAAgB,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,WAAkC;IAElC,+CAA+C;IAC/C,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;QAClE,UAAU,EAAE,eAAe;KAC5B,CAAC,CAAmB,CAAC;IAEtB,wDAAwD;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,IAAI,QAAkC,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,QAAQ,GAAG,GAAG,CAAC;QACjB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACrD,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CACV,4HAA4H,EAC5H,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,EAAE;IACF,8EAA8E;IAC9E,+EAA+E;IAC/E,4EAA4E;IAC5E,EAAE;IACF,+EAA+E;IAC/E,6EAA6E;IAC7E,iFAAiF;IACjF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,kBAAsC,CAAC;IAE3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpF,MAAM,aAAa,GAAG,YAAY,CAAC,QAAkC,CAAC;YACtE,IAAI,OAAO,aAAa,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACjD,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC;YAChD,CAAC;YACD,MAAM,YAAY,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7F,MAAM,mBAAmB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,iCAAiC,CAAC;YAE5H,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3G,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;gBACD,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACzG,CAAC;iBAAM,IAAI,mBAAmB,EAAE,CAAC;gBAC/B,mEAAmE;gBACnE,kEAAkE;gBAClE,0DAA0D;gBAC1D,oEAAoE;gBACpE,+DAA+D;gBAC/D,kEAAkE;gBAClE,sEAAsE;gBACtE,OAAO,CAAC,KAAK,CAAC,6HAA6H,CAAC,CAAC;YAC/I,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,oHAAoH,CAAC,CAAC;YACtI,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2FAA2F,EAAE,GAAG,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,6EAA6E;QAC7E,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,SAAS,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;QAClH,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAwC,CAAC;gBAClE,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;oBAChD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,wEAAwE;QACxE,0EAA0E;QAC1E,qEAAqE;QACrE,uEAAuE;QACvE,sEAAsE;QACtE,wEAAwE;QACxE,gEAAgE;QAChE,sEAAsE;QACtE,wEAAwE;QACxE,mEAAmE;QACnE,kBAAkB;QAClB,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,cAAc,EAAE,CAAC;YAC1E,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,KAAa,CAAC;QAElB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;oBAC3C,MAAM;oBACN,QAAQ;oBACR,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;iBACrC,CAAC,CAAC;gBACH,KAAK,GAAI,MAAuB,CAAC,EAAE,CAAC;YACtC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1F,KAAK,GAAI,QAAyB,CAAC,EAAE,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YACnC,UAAU,EAAE,KAAK;YACjB,QAAQ;YACR,QAAQ,EAAE,UAAgD;SAC3D,CAAC,CAAC;QAEH,UAAU,EAAE,CAAC;IACf,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,KAAK,CACX,gDAAgD,EAChD,cAAc,EAAE,UAAU,EAC1B,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,WAAW,CAAC,MAAM,EAC7B,wBAAwB,EAAE,kBAAkB,CAC7C,CAAC;IAEF,qFAAqF;IACrF,0DAA0D;IAC1D,IAAI,kBAAkB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CACV,oDAAoD,EAAE,OAAO,CAAC,MAAM,EAAE,2CAA2C,EACjH,kGAAkG,EAClG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAC7H,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,sFAAsF;IACtF,2FAA2F;IAC3F,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC;IACxF,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,GAAG,CAAC,EAAE,gBAAgB,EAAE,QAAQ,KAAK,SAAS,EAAE,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAExM,IAAI,eAAe,EAAE,CAAC;QACpB,qEAAqE;QACrE,qEAAqE;QACrE,wEAAwE;QACxE,qEAAqE;QACrE,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,UAAU,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACvF,MAAM,KAAK,GAAkB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3F,IAAI,UAAkB,CAAC;QACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC1F,UAAU,GAAI,WAA4B,CAAC,EAAE,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBACtE,UAAU,GAAI,QAAyB,CAAC,EAAE,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YACnC,UAAU,EAAE,UAAU;YACtB,QAAQ;YACR,QAAQ,EAAE,KAA2C;SACtD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"syncComponentRegistry.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistry.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,13 @@
4
4
  * A write-only variant of syncComponentRegistry for callers holding a
5
5
  * write:registry-scoped token, which has no read access at all by design
6
6
  * (see collaborative-state-system's §0 write:registry scope). Skips the
7
- * existence/hash-check reads entirely and always creates-or-versions every
8
- * descriptor, relying on the backend's upsert-on-conflict behavior for
9
- * _registry/* paths (a live conflict on these paths creates a new version
10
- * instead of erroring). Every run rewrites every component + the index,
11
- * whether or not anything changedaccepted as a low-volume cost (the CI
12
- * workflow only triggers on pushes touching component code) in exchange for
13
- * a token that genuinely cannot read anything.
7
+ * existence/hash-check reads entirely and posts every descriptor on every
8
+ * run, relying on the backend's upsert-on-conflict behavior for _registry/*
9
+ * paths. The backend compares the posted content against what the branch
10
+ * already stores and writes a version only when it differs, so posting
11
+ * unconditionally costs nothing but the request the skip-if-unchanged
12
+ * decision moved to the one side that can read, keeping this token unable
13
+ * to read anything.
14
14
  *
15
15
  * The interactive editor keeps using syncComponentRegistry, unmodified,
16
16
  * with its skip-if-unchanged behavior — this variant is CI-only.
@@ -1,20 +1,3 @@
1
- /**
2
- * syncComponentRegistryWriteOnly
3
- *
4
- * A write-only variant of syncComponentRegistry for callers holding a
5
- * write:registry-scoped token, which has no read access at all by design
6
- * (see collaborative-state-system's §0 write:registry scope). Skips the
7
- * existence/hash-check reads entirely and always creates-or-versions every
8
- * descriptor, relying on the backend's upsert-on-conflict behavior for
9
- * _registry/* paths (a live conflict on these paths creates a new version
10
- * instead of erroring). Every run rewrites every component + the index,
11
- * whether or not anything changed — accepted as a low-volume cost (the CI
12
- * workflow only triggers on pushes touching component code) in exchange for
13
- * a token that genuinely cannot read anything.
14
- *
15
- * The interactive editor keeps using syncComponentRegistry, unmodified,
16
- * with its skip-if-unchanged behavior — this variant is CI-only.
17
- */
18
1
  import { buildRegistryIndex } from './componentRegistry.js';
19
2
  import { componentPath, INDEX_PATH } from './syncComponentRegistry.js';
20
3
  export async function syncComponentRegistryWriteOnly(client, siteId, branchId, descriptors) {
@@ -24,11 +7,6 @@ export async function syncComponentRegistryWriteOnly(client, siteId, branchId, d
24
7
  path: componentPath(descriptor.name),
25
8
  snapshot: descriptor,
26
9
  })));
27
- // Every descriptor above was just unconditionally rewritten with its true
28
- // current content — that IS a full per-component verification, the
29
- // strongest one possible (PCC-3430). Stamping verifiedAt here means the
30
- // next editor load can trust the fast path immediately instead of forcing
31
- // an unnecessary per-component fetch right after this run.
32
10
  const index = buildRegistryIndex(descriptors, siteId, branchId, new Date().toISOString());
33
11
  await client.documents.create({
34
12
  siteId,
@@ -1 +1 @@
1
- {"version":3,"file":"syncComponentRegistryWriteOnly.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistryWriteOnly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,kBAAkB,EAAgD,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMvE,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,WAAkC;IAElC,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC7B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QACtB,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,UAAgD;KAC3D,CAAC,CACH,CACF,CAAC;IAEF,0EAA0E;IAC1E,mEAAmE;IACnE,wEAAwE;IACxE,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,KAAK,GAAkB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACzG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC5B,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAA2C;KACtD,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"syncComponentRegistryWriteOnly.js","sourceRoot":"","sources":["../../../src/editor/utils/syncComponentRegistryWriteOnly.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,kBAAkB,EAAgD,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMvE,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,WAAkC;IAElC,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC7B,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QACtB,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,UAAgD;KAC3D,CAAC,CACH,CACF,CAAC;IAOF,MAAM,KAAK,GAAkB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACzG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC5B,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,KAA2C;KACtD,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AACvC,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * Resolve the template being edited from a document path. Templates are stored
3
- * as documents at `_registry/templates/<name>`; returns the matching template
4
- * (by name) or null for ordinary pages.
5
- */
6
1
  export function templateFromRegistryPath(path, templates) {
7
2
  if (!path || !templates)
8
3
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"templatePath.js","sourceRoot":"","sources":["../../../src/editor/utils/templatePath.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAA+B,EAC/B,SAAwC;IAExC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"templatePath.js","sourceRoot":"","sources":["../../../src/editor/utils/templatePath.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,wBAAwB,CACtC,IAA+B,EAC/B,SAAwC;IAExC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * useTemplatePermissions Hook
3
- */
4
1
  import { useMemo } from 'react';
5
2
  import { getPermissionsForRole, mergePermissions, } from '../permissions/role-permissions.js';
6
3
  export function useTemplatePermissions(role, isHistoricalVersion) {
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplatePermissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/editor/useTemplatePermissions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,UAAU,sBAAsB,CACpC,IAAiB,EACjB,mBAA4B;IAE5B,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"useTemplatePermissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/editor/useTemplatePermissions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,UAAU,sBAAsB,CACpC,IAAiB,EACjB,mBAA4B;IAE5B,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -1,38 +1,9 @@
1
- /**
2
- * useTemplateList Hook
3
- *
4
- * Fetches and manages the list of templates for a site/branch.
5
- */
6
1
  import { useState, useEffect, useCallback } from 'react';
7
- /**
8
- * Hook to fetch and manage template list.
9
- *
10
- * @param client - P1Client instance
11
- * @param siteId - Site ID
12
- * @param branchId - Branch ID
13
- * @returns Template list state and refresh function
14
- *
15
- * @example
16
- * ```tsx
17
- * const { templates, loading, error, refresh } = useTemplateList(client, siteId, branchId);
18
- *
19
- * if (loading) return <div>Loading templates...</div>;
20
- * if (error) return <div>Error: {error.message}</div>;
21
- *
22
- * return (
23
- * <ul>
24
- * {templates.map(t => <li key={t.id}>{t.label}</li>)}
25
- * </ul>
26
- * );
27
- * ```
28
- */
29
2
  export function useTemplateList(client, siteId, branchId) {
30
3
  const [templates, setTemplates] = useState([]);
31
4
  const [loading, setLoading] = useState(true);
32
5
  const [error, setError] = useState(null);
33
6
  const fetchTemplates = useCallback(async (signal) => {
34
- // No branch resolved yet (the branch list is still in flight, or it failed):
35
- // calling through would build a URL with an empty branch segment.
36
7
  if (!client.templates || !branchId) {
37
8
  setTemplates([]);
38
9
  setLoading(false);
@@ -62,7 +33,6 @@ export function useTemplateList(client, siteId, branchId) {
62
33
  fetchTemplates(controller.signal);
63
34
  return () => controller.abort();
64
35
  }, [fetchTemplates]);
65
- // Expose refresh function
66
36
  const refresh = useCallback(async () => {
67
37
  await fetchTemplates();
68
38
  }, [fetchTemplates]);
@@ -1 +1 @@
1
- {"version":3,"file":"useTemplateList.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/hooks/useTemplateList.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAezD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAgB,EAChB,MAAc,EACd,QAAgB;IAEhB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,MAAoB,EAAE,EAAE;QAChE,6EAA6E;QAC7E,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,0BAA0B;IAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,SAAS;QACT,OAAO;QACP,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useTemplateList.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/hooks/useTemplateList.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAqCzD,MAAM,UAAU,eAAe,CAC7B,MAAgB,EAChB,MAAc,EACd,QAAgB;IAEhB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,MAAoB,EAAE,EAAE;QAGhE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,YAAY,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAGrB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO;QACL,SAAS;QACT,OAAO;QACP,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -1,11 +1,3 @@
1
- /**
2
- * Content Type Templates Feature
3
- *
4
- * Enables site admins to define structural templates for documents
5
- * and enforce structural conformance via role-based permissions.
6
- *
7
- * Feature-gated via enableContentTypeTemplates flag (default: true).
8
- */
9
1
  export { createInMemoryTemplateStore, createApiTemplateStore } from './stores/index.js';
10
2
  export { getPermissionsForRole, canPerformStructuralAction, canEditProps, canOverrideUrl, mergePermissions, } from './permissions/role-permissions.js';
11
3
  export { useContentRole } from './permissions/useContentRole.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/content-type-templates/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGxF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/content-type-templates/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGxF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC"}
@@ -1,43 +1,3 @@
1
- /**
2
- * Puck Permissions Resolver
3
- *
4
- * Creates a resolvePermissions function for Puck that enforces template constraints.
5
- */
6
- /**
7
- * Create a Puck permissions resolver based on template and user role.
8
- *
9
- * A canvas component is pinned when its own `props.id` is a slot id that maps
10
- * to `true` in `root.props._pinMap` and has a matching component instance in
11
- * the template's content or zones. A same-typed component with a different id
12
- * (a local copy or duplicate) is never locked.
13
- *
14
- * Permission logic:
15
- * - **Pinned components**: drag=false, delete=false for all roles
16
- * - **Non-pinned components**:
17
- * - Admin/Editor: full permissions
18
- * - Junior Editor: no structural permissions (drag/delete/insert/duplicate)
19
- * - **Blank pages (no template)**:
20
- * - Admin/Editor: full permissions
21
- * - Junior Editor: no structural permissions
22
- * - **Historical versions**: all structural permissions false for all roles
23
- *
24
- * @param template - Template this document is bound to (null for blank pages;
25
- * a metadata-only summary carries no pins)
26
- * @param role - User's content role
27
- * @param isHistoricalVersion - Whether viewing a historical version (read-only)
28
- * @returns Permission resolver function for Puck
29
- *
30
- * @example
31
- * ```tsx
32
- * const resolvePermissions = createPuckPermissions(template, 'editor', false);
33
- *
34
- * <Puck
35
- * config={puckConfig}
36
- * data={puckData}
37
- * resolvePermissions={resolvePermissions}
38
- * />
39
- * ```
40
- */
41
1
  export function createPuckPermissions(template, role, isHistoricalVersion) {
42
2
  const pinnedSlotIds = new Set();
43
3
  if (template && 'content' in template) {
@@ -66,10 +26,9 @@ export function createPuckPermissions(template, role, isHistoricalVersion) {
66
26
  }
67
27
  }
68
28
  return (item) => {
69
- // Historical versions: all structural permissions false
70
29
  if (isHistoricalVersion) {
71
30
  return {
72
- edit: true, // Can still view props in read-only mode
31
+ edit: true,
73
32
  drag: false,
74
33
  delete: false,
75
34
  insert: false,
@@ -77,7 +36,6 @@ export function createPuckPermissions(template, role, isHistoricalVersion) {
77
36
  };
78
37
  }
79
38
  const juniorEditorRestricted = role === 'junior-editor';
80
- // Pinned slot: locked for all roles when the item carries a pinned slot id
81
39
  const itemId = item.props?.id;
82
40
  if (typeof itemId === 'string' && pinnedSlotIds.has(itemId)) {
83
41
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"createPuckPermissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/createPuckPermissions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyCH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA2C,EAC3C,IAAiB,EACjB,mBAA4B;IAE5B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACxC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,MAAM,EAAE,GAAI,IAAqC,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC7D,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;wBAC3B,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3C,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAc,EAAmB,EAAE;QACzC,wDAAwD;QACxD,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO;gBACL,IAAI,EAAE,IAAI,EAAE,yCAAyC;gBACrD,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,sBAAsB,GAAG,IAAI,KAAK,eAAe,CAAC;QAExD,2EAA2E;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC,sBAAsB;gBAC/B,SAAS,EAAE,CAAC,sBAAsB;aACnC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,CAAC,sBAAsB;YAC7B,MAAM,EAAE,CAAC,sBAAsB;YAC/B,MAAM,EAAE,CAAC,sBAAsB;YAC/B,SAAS,EAAE,CAAC,sBAAsB;SACnC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createPuckPermissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/createPuckPermissions.ts"],"names":[],"mappings":"AAgFA,MAAM,UAAU,qBAAqB,CACnC,QAA2C,EAC3C,IAAiB,EACjB,mBAA4B;IAE5B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACxC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,MAAM,EAAE,GAAI,IAAqC,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC7D,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;wBAC3B,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3C,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAc,EAAmB,EAAE;QAEzC,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,sBAAsB,GAAG,IAAI,KAAK,eAAe,CAAC;QAGxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC,sBAAsB;gBAC/B,SAAS,EAAE,CAAC,sBAAsB;aACnC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,CAAC,sBAAsB;YAC7B,MAAM,EAAE,CAAC,sBAAsB;YAC/B,MAAM,EAAE,CAAC,sBAAsB;YAC/B,SAAS,EAAE,CAAC,sBAAsB;SACnC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -32,6 +32,14 @@ export declare function getPermissionsForRole(role: ContentRole): ComponentPermi
32
32
  * Check if a role can perform structural actions (add/remove/move components).
33
33
  */
34
34
  export declare function canPerformStructuralAction(role: ContentRole): boolean;
35
+ /**
36
+ * Check if a role can create pages.
37
+ *
38
+ * Adding a page is structural site editing, not content editing: a junior-editor may
39
+ * change what is on a page but not what pages exist. Advisory only — the backend
40
+ * decides, and rejects a write this lets through.
41
+ */
42
+ export declare function canCreatePages(role: ContentRole): boolean;
35
43
  /**
36
44
  * Check if a role can edit component props.
37
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"role-permissions.d.ts","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/role-permissions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4BAA4B;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kCAAkC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,oBAAoB,CA4B7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAGrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,oBAAoB,EACnC,mBAAmB,EAAE,OAAO,GAC3B,oBAAoB,CAatB"}
1
+ {"version":3,"file":"role-permissions.d.ts","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/role-permissions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4BAA4B;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kCAAkC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,oBAAoB,CA4B7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAGrE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,oBAAoB,EACnC,mBAAmB,EAAE,OAAO,GAC3B,oBAAoB,CAatB"}
@@ -1,16 +1,3 @@
1
- /**
2
- * Role-Based Permissions
3
- *
4
- * Permission calculations for content editing roles.
5
- */
6
- /**
7
- * Get permissions for a content role.
8
- *
9
- * - admin: Full access - can create/edit templates, full structural control
10
- * - editor: Pinned components locked (cannot move/delete), can add/remove non-pinned
11
- * - author: Same component permissions as editor
12
- * - junior-editor: View/edit props only, no structural changes
13
- */
14
1
  export function getPermissionsForRole(role) {
15
2
  switch (role) {
16
3
  case 'admin':
@@ -40,34 +27,21 @@ export function getPermissionsForRole(role) {
40
27
  };
41
28
  }
42
29
  }
43
- /**
44
- * Check if a role can perform structural actions (add/remove/move components).
45
- */
46
30
  export function canPerformStructuralAction(role) {
47
31
  const perms = getPermissionsForRole(role);
48
32
  return perms.canAddComponents || perms.canRemoveComponents || perms.canMoveComponents;
49
33
  }
50
- /**
51
- * Check if a role can edit component props.
52
- */
34
+ export function canCreatePages(role) {
35
+ return role !== 'junior-editor';
36
+ }
53
37
  export function canEditProps(role) {
54
38
  return getPermissionsForRole(role).canEditProps;
55
39
  }
56
- /**
57
- * Check if a role can override default URL pattern.
58
- */
59
40
  export function canOverrideUrl(role) {
60
41
  return getPermissionsForRole(role).canOverrideUrl;
61
42
  }
62
- /**
63
- * Merge template-based permissions with historical version lock.
64
- *
65
- * When viewing a historical version, all editing is disabled.
66
- * This combines with role-based permissions to enforce the most restrictive policy.
67
- */
68
43
  export function mergePermissions(templatePerms, isHistoricalVersion) {
69
44
  if (isHistoricalVersion) {
70
- // Historical versions are read-only
71
45
  return {
72
46
  canAddComponents: false,
73
47
  canRemoveComponents: false,
@@ -1 +1 @@
1
- {"version":3,"file":"role-permissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/role-permissions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO;gBACL,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO;gBACL,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,gBAAgB,EAAE,KAAK;gBACvB,mBAAmB,EAAE,KAAK;gBAC1B,iBAAiB,EAAE,KAAK;gBACxB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,KAAK;aACtB,CAAC;IACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAiB;IAC1D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAAmC,EACnC,mBAA4B;IAE5B,IAAI,mBAAmB,EAAE,CAAC;QACxB,oCAAoC;QACpC,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"role-permissions.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/role-permissions.ts"],"names":[],"mappings":"AAgCA,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO;gBACL,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO;gBACL,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,gBAAgB,EAAE,KAAK;gBACvB,mBAAmB,EAAE,KAAK;gBAC1B,iBAAiB,EAAE,KAAK;gBACxB,YAAY,EAAE,IAAI;gBAClB,cAAc,EAAE,KAAK;aACtB,CAAC;IACN,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,0BAA0B,CAAC,IAAiB;IAC1D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACxF,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,IAAI,KAAK,eAAe,CAAC;AAClC,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAClD,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AACpD,CAAC;AAQD,MAAM,UAAU,gBAAgB,CAC9B,aAAmC,EACnC,mBAA4B;IAE5B,IAAI,mBAAmB,EAAE,CAAC;QAExB,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,29 +1,5 @@
1
- /**
2
- * useContentRole Hook
3
- *
4
- * React hook for managing content editing role and permissions.
5
- */
6
1
  import { useMemo } from 'react';
7
2
  import { getPermissionsForRole } from './role-permissions.js';
8
- /**
9
- * Hook for managing content editing role and permissions.
10
- *
11
- * @param role - Content editing role (defaults to 'admin')
12
- * @returns Current role and computed permissions
13
- *
14
- * @example
15
- * ```tsx
16
- * function Editor() {
17
- * const { role, permissions } = useContentRole('editor');
18
- *
19
- * if (!permissions.canAddComponents) {
20
- * return <div>Read-only mode</div>;
21
- * }
22
- *
23
- * return <PuckEditor />;
24
- * }
25
- * ```
26
- */
27
3
  export function useContentRole(role = 'admin') {
28
4
  const permissions = useMemo(() => getPermissionsForRole(role), [role]);
29
5
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useContentRole.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/useContentRole.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAA6B,MAAM,uBAAuB,CAAC;AAYzF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,OAAoB,OAAO;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,OAAO;QACL,IAAI;QACJ,WAAW;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useContentRole.js","sourceRoot":"","sources":["../../../../src/features/content-type-templates/permissions/useContentRole.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAA6B,MAAM,uBAAuB,CAAC;AA+BzF,MAAM,UAAU,cAAc,CAAC,OAAoB,OAAO;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,OAAO;QACL,IAAI;QACJ,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * useResolveContentRole Hook
3
3
  *
4
- * Auto-detects the user's ContentRole by querying the CSS backend's
4
+ * Auto-detects the user's ContentRole by querying the backend's
5
5
  * auth/me endpoint with site context. Falls back to the provided
6
6
  * default role if the backend doesn't return role info.
7
7
  *
8
- * CSS backend role mapping:
8
+ * Backend role mapping:
9
9
  * - ADMIN → 'admin'
10
10
  * - EDITOR → 'editor'
11
11
  * - VIEWER → 'junior-editor' (read-only structural access)
12
12
  * - NO_ACCESS → 'junior-editor' (most restrictive)
13
13
  */
14
14
  import type { ContentRole } from '../types.js';
15
- type CssRoleName = 'ADMIN' | 'EDITOR' | 'VIEWER' | 'NO_ACCESS';
16
- declare function mapCssRoleToContentRole(cssRole: CssRoleName): ContentRole;
15
+ type CcrRoleName = 'ADMIN' | 'EDITOR' | 'VIEWER' | 'NO_ACCESS';
16
+ declare function mapCssRoleToContentRole(ccrRole: CcrRoleName): ContentRole;
17
17
  export interface UseResolveContentRoleOptions {
18
18
  baseUrl: string;
19
19
  siteId: string;
@@ -27,7 +27,7 @@ export interface UseResolveContentRoleReturn {
27
27
  resolved: boolean;
28
28
  }
29
29
  /**
30
- * Hook to auto-resolve the user's ContentRole from the CSS backend.
30
+ * Hook to auto-resolve the user's ContentRole from the backend.
31
31
  *
32
32
  * Calls GET /api/sites/{siteId}/auth/role (when available) to determine
33
33
  * the user's effective role. Falls back to the provided fallbackRole