@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,49 +1,18 @@
1
- /**
2
- * usePresence Hook
3
- *
4
- * Provides document-level presence information with polling.
5
- */
6
1
  import { useState, useCallback, useEffect, useRef } from 'react';
7
2
  import { usePresenceContext } from '../core/PresenceContext.js';
8
- /**
9
- * Hook for consuming document-level presence data.
10
- *
11
- * @param options - Configuration options
12
- * @returns Presence state and operations
13
- *
14
- * @example
15
- * ```tsx
16
- * function CollaboratorList() {
17
- * const { actors, hasActiveAgents } = usePresence();
18
- *
19
- * return (
20
- * <div>
21
- * {hasActiveAgents && <span>Agents are working...</span>}
22
- * {actors.map(actor => (
23
- * <Avatar key={actor.id} name={actor.name} />
24
- * ))}
25
- * </div>
26
- * );
27
- * }
28
- * ```
29
- */
30
3
  export function usePresence(options = {}) {
31
4
  const { pollingInterval = 10000, includeSelf = false } = options;
32
5
  const { client, siteId, branchId, userId } = usePresenceContext();
33
6
  const [actors, setActors] = useState([]);
34
7
  const [isLoading, setIsLoading] = useState(true);
35
8
  const [error, setError] = useState(null);
36
- // Track mounted state to avoid state updates after unmount
37
9
  const mountedRef = useRef(true);
38
- // Ref for fetchPresence to avoid restarting polling interval
39
10
  const fetchPresenceRef = useRef(async () => { });
40
- // Fetch presence data
41
11
  const fetchPresence = useCallback(async () => {
42
12
  try {
43
13
  const branchPresence = await client.presence.getBranchPresence(siteId, branchId);
44
14
  if (!mountedRef.current)
45
15
  return;
46
- // Filter actors - optionally exclude self
47
16
  let filteredActors = branchPresence.actors;
48
17
  if (!includeSelf) {
49
18
  filteredActors = filteredActors.filter((actor) => actor.actorId !== userId);
@@ -62,20 +31,15 @@ export function usePresence(options = {}) {
62
31
  }
63
32
  }
64
33
  }, [client, siteId, branchId, userId, includeSelf]);
65
- // Keep ref in sync with callback
66
34
  useEffect(() => {
67
35
  fetchPresenceRef.current = fetchPresence;
68
36
  }, [fetchPresence]);
69
- // Manual refresh function
70
37
  const refresh = useCallback(async () => {
71
38
  await fetchPresence();
72
39
  }, [fetchPresence]);
73
- // Initial fetch and polling
74
40
  useEffect(() => {
75
41
  mountedRef.current = true;
76
- // Initial fetch
77
42
  void fetchPresenceRef.current();
78
- // Set up polling - use ref to avoid restarting interval when callback changes
79
43
  const intervalId = setInterval(() => {
80
44
  void fetchPresenceRef.current();
81
45
  }, pollingInterval);
@@ -84,7 +48,6 @@ export function usePresence(options = {}) {
84
48
  clearInterval(intervalId);
85
49
  };
86
50
  }, [pollingInterval]);
87
- // Derived values
88
51
  const editingActors = actors.filter((actor) => actor.state === 'editing');
89
52
  const humans = actors.filter((actor) => actor.role === 'human');
90
53
  const agents = actors.filter((actor) => actor.role === 'agent');
@@ -1 +1 @@
1
- {"version":3,"file":"usePresence.js","sourceRoot":"","sources":["../../src/collaboration/usePresence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePresence.js","sourceRoot":"","sources":["../../src/collaboration/usePresence.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,13 @@
1
- /**
2
- * useSitePresence Hook
3
- *
4
- * Provides site-level presence aggregation with polling.
5
- */
6
1
  import { useState, useCallback, useEffect, useRef } from 'react';
7
2
  import { usePresenceContext } from '../core/PresenceContext.js';
8
- /**
9
- * Hook for consuming site-level presence data.
10
- *
11
- * @param options - Configuration options
12
- * @returns Site presence state and operations
13
- *
14
- * @example
15
- * ```tsx
16
- * function SiteCollaborators() {
17
- * const { presence, activeBranches, totalActors } = useSitePresence();
18
- *
19
- * return (
20
- * <div>
21
- * <span>{totalActors} collaborators on this site</span>
22
- * {activeBranches.map(branch => (
23
- * <BranchBadge key={branch.branchId} name={branch.branchName} />
24
- * ))}
25
- * </div>
26
- * );
27
- * }
28
- * ```
29
- */
30
3
  export function useSitePresence(options = {}) {
31
4
  const { pollingInterval = 10000 } = options;
32
5
  const { client, siteId } = usePresenceContext();
33
6
  const [presence, setPresence] = useState(null);
34
7
  const [isLoading, setIsLoading] = useState(true);
35
8
  const [error, setError] = useState(null);
36
- // Track mounted state to avoid state updates after unmount
37
9
  const mountedRef = useRef(true);
38
- // Ref for fetchPresence to avoid restarting polling interval
39
10
  const fetchPresenceRef = useRef(async () => { });
40
- // Fetch presence data
41
11
  const fetchPresence = useCallback(async () => {
42
12
  try {
43
13
  const sitePresence = await client.presence.getSitePresence(siteId);
@@ -57,20 +27,15 @@ export function useSitePresence(options = {}) {
57
27
  }
58
28
  }
59
29
  }, [client, siteId]);
60
- // Keep ref in sync with callback
61
30
  useEffect(() => {
62
31
  fetchPresenceRef.current = fetchPresence;
63
32
  }, [fetchPresence]);
64
- // Manual refresh function
65
33
  const refresh = useCallback(async () => {
66
34
  await fetchPresence();
67
35
  }, [fetchPresence]);
68
- // Initial fetch and polling
69
36
  useEffect(() => {
70
37
  mountedRef.current = true;
71
- // Initial fetch
72
38
  void fetchPresenceRef.current();
73
- // Set up polling - use ref to avoid restarting interval when callback changes
74
39
  const intervalId = setInterval(() => {
75
40
  void fetchPresenceRef.current();
76
41
  }, pollingInterval);
@@ -79,7 +44,6 @@ export function useSitePresence(options = {}) {
79
44
  clearInterval(intervalId);
80
45
  };
81
46
  }, [pollingInterval]);
82
- // Derived values
83
47
  const activeBranches = presence?.branches ?? [];
84
48
  const totalActors = presence?.summary.totalActors ?? 0;
85
49
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useSitePresence.js","sourceRoot":"","sources":["../../src/collaboration/useSitePresence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSitePresence.js","sourceRoot":"","sources":["../../src/collaboration/useSitePresence.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAkDhE,MAAM,UAAU,eAAe,CAC7B,UAAkC,EAAE;IAEpC,MAAM,EAAE,eAAe,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEhD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAGvD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAGhC,MAAM,gBAAgB,GAAG,MAAM,CAAsB,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;IAGrE,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAEnE,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO;YAEhC,WAAW,CAAC,YAAY,CAAC,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO;YAChC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAGrB,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAC3C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAGpB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAGpB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAG1B,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAGhC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAClC,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC,EAAE,eAAe,CAAC,CAAC;QAEpB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,aAAa,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAGtB,MAAM,cAAc,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,QAAQ,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAEvD,OAAO;QACL,QAAQ;QACR,cAAc;QACd,WAAW;QACX,SAAS;QACT,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -5,9 +5,6 @@ function hashString(str) {
5
5
  }
6
6
  return hash >>> 0;
7
7
  }
8
- /**
9
- * Returns a stable HSL color string for a given user/actor ID.
10
- */
11
8
  export function getAvatarColor(id) {
12
9
  const hue = hashString(id ?? '') % 360;
13
10
  return `hsl(${hue}, 65%, 45%)`;
@@ -1 +1 @@
1
- {"version":3,"file":"avatarColor.js","sourceRoot":"","sources":["../../../src/collaboration/utils/avatarColor.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;IACvC,OAAO,OAAO,GAAG,aAAa,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"avatarColor.js","sourceRoot":"","sources":["../../../src/collaboration/utils/avatarColor.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;IACvC,OAAO,OAAO,GAAG,aAAa,CAAC;AACjC,CAAC"}
@@ -1,28 +1,8 @@
1
- /**
2
- * Focus Highlight Config Utility
3
- *
4
- * Creates a Puck config wrapper that adds visual focus highlighting
5
- * to show which components other actors are viewing or editing.
6
- *
7
- * IMPORTANT: This utility supports two modes:
8
- * 1. Context-based (preferred): Create config once, use FocusHighlightProvider to update highlights
9
- * 2. Direct focusMap (legacy): Pass focusMap directly, config recreated on each change
10
- *
11
- * The context-based approach prevents Puck re-renders when focus regions change.
12
- */
13
1
  import React from 'react';
14
2
  import { FocusHighlightContext } from '../../core/FocusHighlightContext.js';
15
- /**
16
- * Component wrapper that renders focus highlight from context.
17
- * This allows the highlight to change without recreating the config.
18
- */
19
3
  function FocusHighlightWrapper({ id, children, staticFocus, }) {
20
- // Try context first (for dynamic updates without config recreation)
21
4
  const context = React.useContext(FocusHighlightContext);
22
5
  const focus = context?.focusMap.get(id) ?? staticFocus;
23
- // Always render a stable wrapper div AND badge to avoid DOM insertions/removals
24
- // that can trigger browser scroll-into-view behavior.
25
- // When not focused, the wrapper has no visual effect and badge is hidden via CSS.
26
6
  const className = focus
27
7
  ? (focus.isEditing
28
8
  ? 'focus-region-highlight focus-region-highlight--editing'
@@ -34,57 +14,16 @@ function FocusHighlightWrapper({ id, children, staticFocus, }) {
34
14
  'data-actor-id': focus?.actorId,
35
15
  }, children, React.createElement('div', { className: 'focus-region-highlight__badge' }, focus ? focus.actorName.charAt(0).toUpperCase() : ''));
36
16
  }
37
- /**
38
- * Creates a Puck config with focus highlight wrappers.
39
- *
40
- * When used with FocusHighlightProvider (context mode), the config only needs
41
- * to be created once - highlights update via context without config recreation.
42
- *
43
- * When used without FocusHighlightProvider (legacy mode), pass focusMap directly
44
- * but this will cause config recreation on every focusMap change.
45
- *
46
- * @param config - The original Puck config
47
- * @param focusMap - Optional static focusMap for legacy mode (prefer using context instead)
48
- * @returns A new config with wrapped render functions that add focus highlighting
49
- *
50
- * @example Context mode (preferred - no flicker):
51
- * ```tsx
52
- * // Create config once with no focusMap
53
- * const highlightedConfig = useMemo(
54
- * () => createFocusHighlightConfig(baseConfig),
55
- * [baseConfig]
56
- * );
57
- *
58
- * // Wrap Puck with provider that can update without config recreation
59
- * <FocusHighlightProvider focusMap={focusMap}>
60
- * <Puck config={highlightedConfig} data={data} />
61
- * </FocusHighlightProvider>
62
- * ```
63
- *
64
- * @example Legacy mode (may cause flicker):
65
- * ```tsx
66
- * const focusMap = createFocusRegionMap(puckData, otherActors);
67
- * const highlightedConfig = createFocusHighlightConfig(baseConfig, focusMap);
68
- *
69
- * <Puck config={highlightedConfig} data={data} />
70
- * ```
71
- */
72
17
  export function createFocusHighlightConfig(config, focusMap) {
73
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
18
  const wrappedComponents = {};
75
19
  const components = config.components;
76
20
  for (const [componentName, componentConfig] of Object.entries(components)) {
77
- // Cast render to the function type we need
78
21
  const originalRender = componentConfig.render;
79
22
  wrappedComponents[componentName] = {
80
23
  ...componentConfig,
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
24
  render: (props) => {
83
25
  const id = props.id;
84
26
  const renderedContent = originalRender(props);
85
- // Use wrapper component for context-based focus detection
86
- // Pass static focus for legacy mode fallback
87
- // eslint-disable-next-line react/no-children-prop
88
27
  return React.createElement(FocusHighlightWrapper, {
89
28
  id,
90
29
  staticFocus: focusMap?.get(id),
@@ -1 +1 @@
1
- {"version":3,"file":"focusHighlightConfig.js","sourceRoot":"","sources":["../../../src/collaboration/utils/focusHighlightConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAS5E;;;GAGG;AACH,SAAS,qBAAqB,CAAC,EAC7B,EAAE,EACF,QAAQ,EACR,WAAW,GAKZ;IACC,oEAAoE;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC;IAEvD,gFAAgF;IAChF,sDAAsD;IACtD,kFAAkF;IAClF,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;YACd,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,wBAAwB,CAAC;QAC/B,CAAC,CAAC,yDAAyD,CAAC;IAE9D,OAAO,KAAK,CAAC,aAAa,CACxB,KAAK,EACL;QACE,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,EAAyB,CAAC,CAAC,CAAC,SAAS;QAClF,eAAe,EAAE,KAAK,EAAE,OAAO;KAChC,EACD,QAAQ,EACR,KAAK,CAAC,aAAa,CACjB,KAAK,EACL,EAAE,SAAS,EAAE,+BAA+B,EAAE,EAC9C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CACrD,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAkB,EAClB,QAAsC;IAEtC,8DAA8D;IAC9D,MAAM,iBAAiB,GAAwB,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiD,CAAC;IAE5E,KAAK,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,2CAA2C;QAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,MAGnB,CAAC;QAErB,iBAAiB,CAAC,aAAa,CAAC,GAAG;YACjC,GAAG,eAAe;YAClB,8DAA8D;YAC9D,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;gBACrB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAY,CAAC;gBAC9B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBAE9C,0DAA0D;gBAC1D,6CAA6C;gBAC7C,kDAAkD;gBAClD,OAAO,KAAK,CAAC,aAAa,CACxB,qBAAqB,EACrB;oBACE,EAAE;oBACF,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9B,QAAQ,EAAE,eAAe;iBAC1B,CACF,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"focusHighlightConfig.js","sourceRoot":"","sources":["../../../src/collaboration/utils/focusHighlightConfig.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAa5E,SAAS,qBAAqB,CAAC,EAC7B,EAAE,EACF,QAAQ,EACR,WAAW,GAKZ;IAEC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC;IAKvD,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;YACd,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,wBAAwB,CAAC;QAC/B,CAAC,CAAC,yDAAyD,CAAC;IAE9D,OAAO,KAAK,CAAC,aAAa,CACxB,KAAK,EACL;QACE,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,EAAyB,CAAC,CAAC,CAAC,SAAS;QAClF,eAAe,EAAE,KAAK,EAAE,OAAO;KAChC,EACD,QAAQ,EACR,KAAK,CAAC,aAAa,CACjB,KAAK,EACL,EAAE,SAAS,EAAE,+BAA+B,EAAE,EAC9C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CACrD,CACF,CAAC;AACJ,CAAC;AAqCD,MAAM,UAAU,0BAA0B,CACxC,MAAkB,EAClB,QAAsC;IAGtC,MAAM,iBAAiB,GAAwB,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiD,CAAC;IAE5E,KAAK,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAE1E,MAAM,cAAc,GAAG,eAAe,CAAC,MAGnB,CAAC;QAErB,iBAAiB,CAAC,aAAa,CAAC,GAAG;YACjC,GAAG,eAAe;YAElB,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;gBACrB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAY,CAAC;gBAC9B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBAK9C,OAAO,KAAK,CAAC,aAAa,CACxB,qBAAqB,EACrB;oBACE,EAAE;oBACF,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9B,QAAQ,EAAE,eAAe;iBAC1B,CACF,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACtD,CAAC"}
@@ -1,50 +1,19 @@
1
- /**
2
- * Focus Region Map Utilities
3
- *
4
- * Utilities for mapping focus region paths to component IDs
5
- * and creating focus highlight information from actor presence data.
6
- */
7
- /**
8
- * Convert a focus region path to a component ID.
9
- *
10
- * Supported path formats:
11
- * - "/content/N" - Content array at index N
12
- * - "/zones/ZoneName/N" - Zone array at index N
13
- *
14
- * @param data - Puck data containing content and zones
15
- * @param path - Focus region path (e.g., "/content/0" or "/zones/Header:left/1")
16
- * @returns Component ID if found, null otherwise
17
- *
18
- * @example
19
- * ```typescript
20
- * const id = pathToComponentId(puckData, '/content/0');
21
- * // Returns the ID of the first component in content array
22
- *
23
- * const zoneId = pathToComponentId(puckData, '/zones/Header:left/0');
24
- * // Returns the ID of the first component in Header:left zone
25
- * ```
26
- */
27
1
  export function pathToComponentId(data, path) {
28
2
  if (!path || path.length === 0) {
29
3
  return null;
30
4
  }
31
- // Parse content paths: /content/N
32
5
  const contentMatch = path.match(/^\/content\/(\d+)$/);
33
6
  if (contentMatch && contentMatch[1] !== undefined) {
34
7
  const index = parseInt(contentMatch[1], 10);
35
8
  const component = data.content[index];
36
9
  return component?.props?.id ?? null;
37
10
  }
38
- // Parse Puck's root zone path: /root/default-zone/N
39
- // Puck uses "root:default-zone" internally for the main content area
40
11
  const rootZoneMatch = path.match(/^\/root\/default-zone\/(\d+)$/);
41
12
  if (rootZoneMatch && rootZoneMatch[1] !== undefined) {
42
13
  const index = parseInt(rootZoneMatch[1], 10);
43
14
  const component = data.content[index];
44
15
  return component?.props?.id ?? null;
45
16
  }
46
- // Parse zone paths: /zones/ZoneName/N
47
- // Zone names can contain colons (e.g., "Header:left")
48
17
  const zoneMatch = path.match(/^\/zones\/(.+)\/(\d+)$/);
49
18
  if (zoneMatch && zoneMatch[1] !== undefined && zoneMatch[2] !== undefined) {
50
19
  const zoneName = zoneMatch[1];
@@ -59,30 +28,8 @@ export function pathToComponentId(data, path) {
59
28
  const component = zone[index];
60
29
  return component?.props?.id ?? null;
61
30
  }
62
- // Unknown path format
63
31
  return null;
64
32
  }
65
- /**
66
- * Create a map of component IDs to focus highlight information.
67
- *
68
- * Processes actor presence data to determine which components are being
69
- * focused on by which actors, including their display info and state.
70
- *
71
- * @param data - Puck data containing content and zones
72
- * @param actors - Array of actor presence information
73
- * @returns Map from component ID to focus highlight info
74
- *
75
- * @example
76
- * ```typescript
77
- * const focusMap = createFocusRegionMap(puckData, otherActors);
78
- *
79
- * // Check if a component is focused
80
- * const highlight = focusMap.get('hero-component-1');
81
- * if (highlight) {
82
- * console.log(`${highlight.actorName} is ${highlight.isEditing ? 'editing' : 'viewing'}`);
83
- * }
84
- * ```
85
- */
86
33
  export function createFocusRegionMap(data, actors) {
87
34
  const map = new Map();
88
35
  for (const actor of actors) {
@@ -90,10 +37,8 @@ export function createFocusRegionMap(data, actors) {
90
37
  for (const path of focusRegions) {
91
38
  const componentId = pathToComponentId(data, path);
92
39
  if (componentId === null) {
93
- // Skip invalid paths
94
40
  continue;
95
41
  }
96
- // Create highlight info for this component
97
42
  const highlight = {
98
43
  actorId: actor.actorId,
99
44
  actorName: actor.name,
@@ -105,41 +50,17 @@ export function createFocusRegionMap(data, actors) {
105
50
  }
106
51
  return map;
107
52
  }
108
- /**
109
- * Generate a consistent color from an actor ID.
110
- *
111
- * Uses the djb2 hash algorithm to generate a hex color that:
112
- * - Is deterministic (same ID always produces same color)
113
- * - Matches the avatar color algorithm in CollaboratorAvatars.tsx
114
- * - Has consistent saturation (65%) and lightness (45%) for readability
115
- *
116
- * @param actorId - Actor identifier
117
- * @returns Hex color string (e.g., "#6366f1")
118
- *
119
- * @example
120
- * ```typescript
121
- * const color = generateActorColor('user-alice');
122
- * // Returns a consistent hex color for this actor
123
- * ```
124
- */
125
53
  export function generateActorColor(actorId) {
126
- // djb2 hash algorithm - must match CollaboratorAvatars.tsx for consistent colors
127
54
  let hash = 5381;
128
55
  for (let i = 0; i < actorId.length; i++) {
129
56
  hash = (hash * 33) ^ actorId.charCodeAt(i);
130
57
  }
131
- hash = hash >>> 0; // Convert to unsigned 32-bit integer
132
- // Use hash to generate HSL color with fixed saturation/lightness
133
- // Must match CollaboratorAvatars.tsx: hsl(hue, 65%, 45%)
58
+ hash = hash >>> 0;
134
59
  const hue = hash % 360;
135
60
  const saturation = 65;
136
61
  const lightness = 45;
137
- // Convert HSL to hex
138
62
  return hslToHex(hue, saturation, lightness);
139
63
  }
140
- /**
141
- * Convert HSL color to hex string.
142
- */
143
64
  function hslToHex(h, s, l) {
144
65
  const sNorm = s / 100;
145
66
  const lNorm = l / 100;
@@ -1 +1 @@
1
- {"version":3,"file":"focusRegionMap.js","sourceRoot":"","sources":["../../../src/collaboration/utils/focusRegionMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focusRegionMap.js","sourceRoot":"","sources":["../../../src/collaboration/utils/focusRegionMap.ts"],"names":[],"mappings":"AA2CA,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,IAAY;IAC5D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACtD,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;IACtC,CAAC;IAID,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;IACtC,CAAC;IAID,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;IACtC,CAAC;IAGD,OAAO,IAAI,CAAC;AACd,CAAC;AAuBD,MAAM,UAAU,oBAAoB,CAClC,IAAc,EACd,MAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBAEzB,SAAS;YACX,CAAC;YAGD,MAAM,SAAS,GAAmB;gBAChC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;gBACxC,SAAS,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;aACrC,CAAC;YAEF,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAmBD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAEhD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC;IAIlB,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;IACvB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,SAAS,GAAG,EAAE,CAAC;IAGrB,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAKD,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC;IAEtB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrB,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAC9B,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAC/B,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAC/B,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAC/B,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC"}
@@ -1,17 +1,3 @@
1
- /**
2
- * Derives up to two uppercase initials from a display name, using the first and
3
- * last word ("Ana Maria Reyes" → "AR") to match the editor prototype's
4
- * collaborator avatars.
5
- *
6
- * Returns '' when the name has no usable characters, which callers treat as
7
- * "render the icon fallback instead" rather than drawing an empty circle.
8
- */
9
- /**
10
- * A word can only contribute an initial if it starts with a letter or an emoji.
11
- * Filtering per word rather than validating the finished pair matters: testing the
12
- * concatenation let one bad word discard the other's initial too, so "Alice Smith
13
- * (Contractor)" produced "A(" and fell all the way back to the generic icon.
14
- */
15
1
  const STARTS_WITH_LABEL_CHAR = /^[\p{L}\p{Extended_Pictographic}]/u;
16
2
  export function getInitials(name) {
17
3
  const words = (name ?? '')
@@ -1 +1 @@
1
- {"version":3,"file":"initials.js","sourceRoot":"","sources":["../../../src/collaboration/utils/initials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAEpE,MAAM,UAAU,WAAW,CAAC,IAA+B;IACzD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SACvB,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"initials.js","sourceRoot":"","sources":["../../../src/collaboration/utils/initials.ts"],"names":[],"mappings":"AAcA,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAEpE,MAAM,UAAU,WAAW,CAAC,IAA+B;IACzD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SACvB,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACtC,CAAC"}
@@ -1,29 +1,3 @@
1
- /**
2
- * Identity key for presence rosters.
3
- *
4
- * Lives here rather than beside selectHeaderCollaborators so P1PuckProvider can
5
- * import it without depending on the editor plugin.
6
- */
7
- /**
8
- * Identity key for the provider memo that publishes presence on the context.
9
- *
10
- * The context exposes `presence` through a getter so a focus-region broadcast
11
- * doesn't recreate it, which means consumers only observe new presence when that
12
- * memo's deps change. Actor *count* is not enough to detect a change:
13
- *
14
- * - a leave and a join in the same WS frame keeps the count identical, so the
15
- * header would keep rendering whoever left;
16
- * - `userNameResolver` filling in display names asynchronously rewrites `name`
17
- * and `avatar` without touching the count.
18
- *
19
- * Used for both rosters, so it covers the union of what each one renders:
20
- *
21
- * - human avatars (PresenceStack) use actorId, name, avatar and state — state
22
- * drives the live dot, and a transition changes neither count nor ids;
23
- * - agent chips (P1EditorSubheader, mapped in P1Plugin) use actorId, name,
24
- * intent, requestedById and requestedByName.
25
- *
26
- */
27
1
  export function presenceIdentityKey(actors) {
28
2
  if (!actors || actors.length === 0)
29
3
  return '';
@@ -1 +1 @@
1
- {"version":3,"file":"presenceIdentity.js","sourceRoot":"","sources":["../../../src/collaboration/utils/presenceIdentity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0C;IAC5E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT;QACE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,aAAa,IAAI,EAAE;QACrB,CAAC,CAAC,eAAe,IAAI,EAAE;KACxB,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjB;SACA,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"presenceIdentity.js","sourceRoot":"","sources":["../../../src/collaboration/utils/presenceIdentity.ts"],"names":[],"mappings":"AA6BA,MAAM,UAAU,mBAAmB,CAAC,MAA0C;IAC5E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT;QACE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,CAAC,aAAa,IAAI,EAAE;QACrB,CAAC,CAAC,eAAe,IAAI,EAAE;KACxB,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjB;SACA,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
@@ -1,44 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * FocusHighlightContext
4
- *
5
- * Provides focus highlight state to components without requiring config recreation.
6
- * This context allows the focusMap to change without recreating Puck config,
7
- * which prevents flickering during collaborative editing.
8
- */
9
2
  import { createContext, useContext, useMemo } from 'react';
10
- /**
11
- * Context for providing focus highlight state to wrapped components.
12
- */
13
3
  export const FocusHighlightContext = createContext(null);
14
- /**
15
- * Provider for focus highlight context.
16
- * Wrap your Puck editor with this to enable focus highlighting without config recreation.
17
- *
18
- * @example
19
- * ```tsx
20
- * const focusMap = createFocusRegionMap(data, otherActors);
21
- *
22
- * <FocusHighlightProvider focusMap={focusMap}>
23
- * <Puck config={stableConfig} data={data} />
24
- * </FocusHighlightProvider>
25
- * ```
26
- */
27
4
  export function FocusHighlightProvider({ focusMap, children, }) {
28
5
  const value = useMemo(() => ({ focusMap }), [focusMap]);
29
6
  return (_jsx(FocusHighlightContext.Provider, { value: value, children: children }));
30
7
  }
31
- /**
32
- * Hook to access focus highlight context.
33
- * Returns null if not within a FocusHighlightProvider.
34
- */
35
8
  export function useFocusHighlight() {
36
9
  return useContext(FocusHighlightContext);
37
10
  }
38
- /**
39
- * Hook to get focus highlight for a specific component ID.
40
- * Returns undefined if the component has no focus highlight.
41
- */
42
11
  export function useFocusHighlightForComponent(id) {
43
12
  const context = useFocusHighlight();
44
13
  return context?.focusMap.get(id);
@@ -1 +1 @@
1
- {"version":3,"file":"FocusHighlightContext.js","sourceRoot":"","sources":["../../src/core/FocusHighlightContext.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAWlE;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAoC,IAAI,CAAC,CAAC;AAY5F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,GACoB;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExD,OAAO,CACL,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACzC,QAAQ,GACsB,CAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,EAAU;IACtD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,OAAO,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"FocusHighlightContext.js","sourceRoot":"","sources":["../../src/core/FocusHighlightContext.tsx"],"names":[],"mappings":";AAQA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAclE,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAoC,IAAI,CAAC,CAAC;AAyB5F,MAAM,UAAU,sBAAsB,CAAC,EACrC,QAAQ,EACR,QAAQ,GACoB;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExD,OAAO,CACL,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACzC,QAAQ,GACsB,CAClC,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC;AAMD,MAAM,UAAU,6BAA6B,CAAC,EAAU;IACtD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,OAAO,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}