@pantheon-systems/puck-css 0.12.0 → 0.13.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.
- package/README.md +1 -1
- package/dist/agent/components/AgentActionButton.js +0 -13
- package/dist/agent/components/AgentActionButton.js.map +1 -1
- package/dist/agent/components/AgentActionModal.js +0 -13
- package/dist/agent/components/AgentActionModal.js.map +1 -1
- package/dist/agent/components/AgentStatusPanel.js +0 -10
- package/dist/agent/components/AgentStatusPanel.js.map +1 -1
- package/dist/agent/components/index.js +0 -5
- package/dist/agent/components/index.js.map +1 -1
- package/dist/agent/useAgentEdit.js +0 -12
- package/dist/agent/useAgentEdit.js.map +1 -1
- package/dist/agent/useAgentTrigger.js +0 -29
- package/dist/agent/useAgentTrigger.js.map +1 -1
- package/dist/auth/P1AuthProvider.d.ts +9 -2
- package/dist/auth/P1AuthProvider.d.ts.map +1 -1
- package/dist/auth/P1AuthProvider.js +21 -44
- package/dist/auth/P1AuthProvider.js.map +1 -1
- package/dist/auth/P1LoginPage.js +0 -18
- package/dist/auth/P1LoginPage.js.map +1 -1
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/logout.d.ts +23 -0
- package/dist/auth/logout.d.ts.map +1 -0
- package/dist/auth/logout.js +14 -0
- package/dist/auth/logout.js.map +1 -0
- package/dist/auth/storage-keys.d.ts +5 -0
- package/dist/auth/storage-keys.d.ts.map +1 -0
- package/dist/auth/storage-keys.js +3 -0
- package/dist/auth/storage-keys.js.map +1 -0
- package/dist/collaboration/components/AgentActivityBanner.js +0 -15
- package/dist/collaboration/components/AgentActivityBanner.js.map +1 -1
- package/dist/collaboration/components/CollaboratorAvatars.js +0 -17
- package/dist/collaboration/components/CollaboratorAvatars.js.map +1 -1
- package/dist/collaboration/components/FocusRegionHighlight.js +0 -9
- package/dist/collaboration/components/FocusRegionHighlight.js.map +1 -1
- package/dist/collaboration/components/PresenceIndicator.js +0 -9
- package/dist/collaboration/components/PresenceIndicator.js.map +1 -1
- package/dist/collaboration/useBranchPresence.js +0 -36
- package/dist/collaboration/useBranchPresence.js.map +1 -1
- package/dist/collaboration/useFocusRegionReporting.js +0 -75
- package/dist/collaboration/useFocusRegionReporting.js.map +1 -1
- package/dist/collaboration/usePresence.js +0 -37
- package/dist/collaboration/usePresence.js.map +1 -1
- package/dist/collaboration/useSitePresence.js +0 -36
- package/dist/collaboration/useSitePresence.js.map +1 -1
- package/dist/collaboration/utils/avatarColor.js +0 -3
- package/dist/collaboration/utils/avatarColor.js.map +1 -1
- package/dist/collaboration/utils/focusHighlightConfig.js +0 -61
- package/dist/collaboration/utils/focusHighlightConfig.js.map +1 -1
- package/dist/collaboration/utils/focusRegionMap.js +1 -80
- package/dist/collaboration/utils/focusRegionMap.js.map +1 -1
- package/dist/collaboration/utils/initials.js +0 -14
- package/dist/collaboration/utils/initials.js.map +1 -1
- package/dist/collaboration/utils/presenceIdentity.js +0 -26
- package/dist/collaboration/utils/presenceIdentity.js.map +1 -1
- package/dist/core/FocusHighlightContext.js +0 -31
- package/dist/core/FocusHighlightContext.js.map +1 -1
- package/dist/core/NotificationContext.js +2 -67
- package/dist/core/NotificationContext.js.map +1 -1
- package/dist/core/P1PuckContext.js +0 -31
- package/dist/core/P1PuckContext.js.map +1 -1
- package/dist/core/PresenceContext.js +0 -18
- package/dist/core/PresenceContext.js.map +1 -1
- package/dist/core/config.js +0 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/featureConfig.js +0 -32
- package/dist/core/featureConfig.js.map +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.js +0 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/debounce.js +0 -18
- package/dist/core/utils/debounce.js.map +1 -1
- package/dist/core/utils/requestError.js +0 -5
- package/dist/core/utils/requestError.js.map +1 -1
- package/dist/core/utils/retry.js +0 -31
- package/dist/core/utils/retry.js.map +1 -1
- package/dist/core/utils/throttle.js +0 -24
- package/dist/core/utils/throttle.js.map +1 -1
- package/dist/data/cross-reference-resolve.js +0 -6
- package/dist/data/cross-reference-resolve.js.map +1 -1
- package/dist/data/cross-reference.js +0 -15
- package/dist/data/cross-reference.js.map +1 -1
- package/dist/data/css-queries/css-query-registry.d.ts +2 -2
- package/dist/data/css-queries/css-query-registry.js +1 -1
- package/dist/data/css-queries/css-query-registry.js.map +1 -1
- package/dist/data/dal/index.js +0 -21
- package/dist/data/dal/index.js.map +1 -1
- package/dist/data/dal/init.js +0 -40
- package/dist/data/dal/init.js.map +1 -1
- package/dist/data/dal/p1-store.d.ts.map +1 -1
- package/dist/data/dal/p1-store.js +11 -41
- package/dist/data/dal/p1-store.js.map +1 -1
- package/dist/data/data-list-block/create-data-list-block.js +0 -7
- package/dist/data/data-list-block/create-data-list-block.js.map +1 -1
- package/dist/data/data-list-block/utils.js +0 -1
- package/dist/data/data-list-block/utils.js.map +1 -1
- package/dist/data/fields/pds-field-helpers.js +1 -4
- package/dist/data/fields/pds-field-helpers.js.map +1 -1
- package/dist/data/fields/visible-when.js +0 -5
- package/dist/data/fields/visible-when.js.map +1 -1
- package/dist/data/fields.js +0 -12
- package/dist/data/fields.js.map +1 -1
- package/dist/data/get-page.js +0 -1
- package/dist/data/get-page.js.map +1 -1
- package/dist/data/page-editor-meta.js +0 -7
- package/dist/data/page-editor-meta.js.map +1 -1
- package/dist/data/page-store.js +0 -32
- package/dist/data/page-store.js.map +1 -1
- package/dist/data/page-structure.js +0 -3
- package/dist/data/page-structure.js.map +1 -1
- package/dist/data/paths.js +0 -16
- package/dist/data/paths.js.map +1 -1
- package/dist/data/remote-datasources/fetch-http-json.js +0 -5
- package/dist/data/remote-datasources/fetch-http-json.js.map +1 -1
- package/dist/data/remote-datasources/loader.js +0 -21
- package/dist/data/remote-datasources/loader.js.map +1 -1
- package/dist/data/remote-datasources/remote-datasource-registry.js +0 -4
- package/dist/data/remote-datasources/remote-datasource-registry.js.map +1 -1
- package/dist/data/resolve-data-templates.js +0 -24
- package/dist/data/resolve-data-templates.js.map +1 -1
- package/dist/data/route-templates.js +0 -29
- package/dist/data/route-templates.js.map +1 -1
- package/dist/data/semantic-ops.js +0 -11
- package/dist/data/semantic-ops.js.map +1 -1
- package/dist/data/styles.js +0 -2
- package/dist/data/styles.js.map +1 -1
- package/dist/data/template-autocomplete.js +0 -8
- package/dist/data/template-autocomplete.js.map +1 -1
- package/dist/data/utils.d.ts +2 -0
- package/dist/data/utils.d.ts.map +1 -1
- package/dist/data/utils.js +3 -1
- package/dist/data/utils.js.map +1 -1
- package/dist/editor/P1App.d.ts.map +1 -1
- package/dist/editor/P1App.js +6 -45
- package/dist/editor/P1App.js.map +1 -1
- package/dist/editor/P1PuckProvider.d.ts +1 -1
- package/dist/editor/P1PuckProvider.js +39 -556
- package/dist/editor/P1PuckProvider.js.map +1 -1
- package/dist/editor/aiPanelStore.js +0 -7
- package/dist/editor/aiPanelStore.js.map +1 -1
- package/dist/editor/components/BranchSelector.js +0 -21
- package/dist/editor/components/BranchSelector.js.map +1 -1
- package/dist/editor/components/CollapsibleSectionHeader.js +1 -4
- package/dist/editor/components/CollapsibleSectionHeader.js.map +1 -1
- package/dist/editor/components/DraggableRow.js +0 -1
- package/dist/editor/components/DraggableRow.js.map +1 -1
- package/dist/editor/components/EditorReloadOverlay.d.ts +16 -0
- package/dist/editor/components/EditorReloadOverlay.d.ts.map +1 -0
- package/dist/editor/components/EditorReloadOverlay.js +13 -0
- package/dist/editor/components/EditorReloadOverlay.js.map +1 -0
- package/dist/editor/components/NotificationContainer.js +0 -20
- package/dist/editor/components/NotificationContainer.js.map +1 -1
- package/dist/editor/components/OutlinePanel.js +1 -12
- package/dist/editor/components/OutlinePanel.js.map +1 -1
- package/dist/editor/components/P1InspectorFields.d.ts.map +1 -1
- package/dist/editor/components/P1InspectorFields.js +12 -14
- package/dist/editor/components/P1InspectorFields.js.map +1 -1
- package/dist/editor/components/P1TemplateFields.js +6 -12
- package/dist/editor/components/P1TemplateFields.js.map +1 -1
- package/dist/editor/components/PanelHeader.d.ts.map +1 -1
- package/dist/editor/components/PanelHeader.js +3 -2
- package/dist/editor/components/PanelHeader.js.map +1 -1
- package/dist/editor/components/PublishButton.js +0 -21
- package/dist/editor/components/PublishButton.js.map +1 -1
- package/dist/editor/components/PuckDataCapture.js +0 -14
- package/dist/editor/components/PuckDataCapture.js.map +1 -1
- package/dist/editor/components/PuckDataSynchronizer.js +0 -67
- package/dist/editor/components/PuckDataSynchronizer.js.map +1 -1
- package/dist/editor/components/PuckSelectionTracker.js +0 -62
- package/dist/editor/components/PuckSelectionTracker.js.map +1 -1
- package/dist/editor/components/SaveIndicator.js +0 -41
- package/dist/editor/components/SaveIndicator.js.map +1 -1
- package/dist/editor/components/Toast.js +1 -32
- package/dist/editor/components/Toast.js.map +1 -1
- package/dist/editor/components/VersionBannerOverride.js +2 -14
- package/dist/editor/components/VersionBannerOverride.js.map +1 -1
- package/dist/editor/components/collapsibleSectionContext.js +0 -10
- package/dist/editor/components/collapsibleSectionContext.js.map +1 -1
- package/dist/editor/components/componentIconName.js +0 -23
- package/dist/editor/components/componentIconName.js.map +1 -1
- package/dist/editor/components/connectable.js +0 -5
- package/dist/editor/components/connectable.js.map +1 -1
- package/dist/editor/components/merge-preview/MergePreviewRenderer.js +2 -74
- package/dist/editor/components/merge-preview/MergePreviewRenderer.js.map +1 -1
- package/dist/editor/components/merge-preview/ScaledContent.js +0 -6
- package/dist/editor/components/merge-preview/ScaledContent.js.map +1 -1
- package/dist/editor/components/merge-preview/index.js +0 -5
- package/dist/editor/components/merge-preview/index.js.map +1 -1
- package/dist/editor/components/outlineTree.js +0 -31
- package/dist/editor/components/outlineTree.js.map +1 -1
- package/dist/editor/components/useDragReorder.js +0 -1
- package/dist/editor/components/useDragReorder.js.map +1 -1
- package/dist/editor/defaultPlugins.d.ts +1 -1
- package/dist/editor/defaultPlugins.js +1 -1
- package/dist/editor/logout-store.d.ts +13 -0
- package/dist/editor/logout-store.d.ts.map +1 -0
- package/dist/editor/logout-store.js +23 -0
- package/dist/editor/logout-store.js.map +1 -0
- package/dist/editor/plugin/P1Plugin.d.ts +6 -3
- package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
- package/dist/editor/plugin/P1Plugin.js +20 -170
- package/dist/editor/plugin/P1Plugin.js.map +1 -1
- package/dist/editor/plugin/context-sync-key.js +0 -19
- package/dist/editor/plugin/context-sync-key.js.map +1 -1
- package/dist/editor/plugin/createP1Overrides.js +1 -49
- package/dist/editor/plugin/createP1Overrides.js.map +1 -1
- package/dist/editor/plugin/document-sync-plugin.js +0 -50
- package/dist/editor/plugin/document-sync-plugin.js.map +1 -1
- package/dist/editor/plugin/fieldGuidance.js +0 -5
- package/dist/editor/plugin/fieldGuidance.js.map +1 -1
- package/dist/editor/plugin/index.js +0 -6
- package/dist/editor/plugin/index.js.map +1 -1
- package/dist/editor/plugin/selectHeaderCollaborators.js +0 -8
- package/dist/editor/plugin/selectHeaderCollaborators.js.map +1 -1
- package/dist/editor/presets.js +2 -2
- package/dist/editor/thumbnails/LiveThumbnail.js +1 -49
- package/dist/editor/thumbnails/LiveThumbnail.js.map +1 -1
- package/dist/editor/thumbnails/ThumbnailCard.js +0 -25
- package/dist/editor/thumbnails/ThumbnailCard.js.map +1 -1
- package/dist/editor/thumbnails/buildLiveThumbnailDrawer.js +0 -21
- package/dist/editor/thumbnails/buildLiveThumbnailDrawer.js.map +1 -1
- package/dist/editor/thumbnails/humanizeComponentName.js +0 -17
- package/dist/editor/thumbnails/humanizeComponentName.js.map +1 -1
- package/dist/editor/thumbnails/resolveLiveThumbnailDrawer.js +0 -11
- package/dist/editor/thumbnails/resolveLiveThumbnailDrawer.js.map +1 -1
- package/dist/editor/thumbnails/thumbnailCache.js +0 -38
- package/dist/editor/thumbnails/thumbnailCache.js.map +1 -1
- package/dist/editor/useAutoSave.js +0 -32
- package/dist/editor/useAutoSave.js.map +1 -1
- package/dist/editor/useBranches.js +0 -30
- package/dist/editor/useBranches.js.map +1 -1
- package/dist/editor/useComponentRegistry.d.ts +1 -1
- package/dist/editor/useComponentRegistry.js +0 -28
- package/dist/editor/useComponentRegistry.js.map +1 -1
- package/dist/editor/useDocuments.js +0 -51
- package/dist/editor/useDocuments.js.map +1 -1
- package/dist/editor/useMergePreview.js +8 -12
- package/dist/editor/useMergePreview.js.map +1 -1
- package/dist/editor/useP1Editor.d.ts +27 -7
- package/dist/editor/useP1Editor.d.ts.map +1 -1
- package/dist/editor/useP1Editor.js +106 -239
- package/dist/editor/useP1Editor.js.map +1 -1
- package/dist/editor/useP1Overrides.js +15 -50
- package/dist/editor/useP1Overrides.js.map +1 -1
- package/dist/editor/useP1Plugin.d.ts +7 -3
- package/dist/editor/useP1Plugin.d.ts.map +1 -1
- package/dist/editor/useP1Plugin.js +28 -56
- package/dist/editor/useP1Plugin.js.map +1 -1
- package/dist/editor/useRealtime.d.ts +15 -3
- package/dist/editor/useRealtime.d.ts.map +1 -1
- package/dist/editor/useRealtime.js +12 -91
- package/dist/editor/useRealtime.js.map +1 -1
- package/dist/editor/useResponsivePanels.js +2 -35
- package/dist/editor/useResponsivePanels.js.map +1 -1
- package/dist/editor/useSidebarScrollPreservation.js +0 -14
- package/dist/editor/useSidebarScrollPreservation.js.map +1 -1
- package/dist/editor/utils/buildThumbnailOverride.js +0 -9
- package/dist/editor/utils/buildThumbnailOverride.js.map +1 -1
- package/dist/editor/utils/componentRegistry.d.ts +6 -11
- package/dist/editor/utils/componentRegistry.d.ts.map +1 -1
- package/dist/editor/utils/componentRegistry.js +1 -71
- package/dist/editor/utils/componentRegistry.js.map +1 -1
- package/dist/editor/utils/createStablePluginArray.js +0 -27
- package/dist/editor/utils/createStablePluginArray.js.map +1 -1
- package/dist/editor/utils/path.js +0 -6
- package/dist/editor/utils/path.js.map +1 -1
- package/dist/editor/utils/puckYjsBinding.d.ts +1 -1
- package/dist/editor/utils/puckYjsBinding.js +0 -99
- package/dist/editor/utils/puckYjsBinding.js.map +1 -1
- package/dist/editor/utils/restoreDocumentVersion.js +0 -12
- package/dist/editor/utils/restoreDocumentVersion.js.map +1 -1
- package/dist/editor/utils/sanitizeRichtextDefaults.js +0 -26
- package/dist/editor/utils/sanitizeRichtextDefaults.js.map +1 -1
- package/dist/editor/utils/snapshotToPuckData.js +0 -8
- package/dist/editor/utils/snapshotToPuckData.js.map +1 -1
- package/dist/editor/utils/syncComponentRegistry.d.ts +2 -2
- package/dist/editor/utils/syncComponentRegistry.js +1 -76
- package/dist/editor/utils/syncComponentRegistry.js.map +1 -1
- package/dist/editor/utils/syncComponentRegistryWriteOnly.d.ts +7 -7
- package/dist/editor/utils/syncComponentRegistryWriteOnly.js +0 -22
- package/dist/editor/utils/syncComponentRegistryWriteOnly.js.map +1 -1
- package/dist/editor/utils/templatePath.js +0 -5
- package/dist/editor/utils/templatePath.js.map +1 -1
- package/dist/features/content-type-templates/editor/useTemplatePermissions.js +0 -3
- package/dist/features/content-type-templates/editor/useTemplatePermissions.js.map +1 -1
- package/dist/features/content-type-templates/hooks/useTemplateList.js +0 -30
- package/dist/features/content-type-templates/hooks/useTemplateList.js.map +1 -1
- package/dist/features/content-type-templates/index.js +0 -8
- package/dist/features/content-type-templates/index.js.map +1 -1
- package/dist/features/content-type-templates/permissions/createPuckPermissions.js +1 -43
- package/dist/features/content-type-templates/permissions/createPuckPermissions.js.map +1 -1
- package/dist/features/content-type-templates/permissions/role-permissions.js +0 -29
- package/dist/features/content-type-templates/permissions/role-permissions.js.map +1 -1
- package/dist/features/content-type-templates/permissions/useContentRole.js +0 -24
- package/dist/features/content-type-templates/permissions/useContentRole.js.map +1 -1
- package/dist/features/content-type-templates/permissions/useResolveContentRole.d.ts +5 -5
- package/dist/features/content-type-templates/permissions/useResolveContentRole.js +2 -22
- package/dist/features/content-type-templates/permissions/useResolveContentRole.js.map +1 -1
- package/dist/features/content-type-templates/stores/index.js +0 -5
- package/dist/features/content-type-templates/stores/index.js.map +1 -1
- package/dist/features/content-type-templates/stores/template-store-api.js +0 -14
- package/dist/features/content-type-templates/stores/template-store-api.js.map +1 -1
- package/dist/features/content-type-templates/stores/template-store.d.ts +1 -1
- package/dist/features/content-type-templates/stores/template-store.js +0 -12
- package/dist/features/content-type-templates/stores/template-store.js.map +1 -1
- package/dist/features/content-type-templates/types.js +0 -5
- package/dist/features/content-type-templates/types.js.map +1 -1
- package/dist/features/content-type-templates/ui/ActionBarPinButton.js +12 -21
- package/dist/features/content-type-templates/ui/ActionBarPinButton.js.map +1 -1
- package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js +0 -23
- package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js.map +1 -1
- package/dist/features/content-type-templates/ui/TemplateSelector.js +0 -19
- package/dist/features/content-type-templates/ui/TemplateSelector.js.map +1 -1
- package/dist/features/content-type-templates/validation/structural-validation.js +0 -40
- package/dist/features/content-type-templates/validation/structural-validation.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -43
- package/dist/index.js.map +1 -1
- package/dist/merge/components/conflict-notifications/ConflictNotificationToast.js +0 -19
- package/dist/merge/components/conflict-notifications/ConflictNotificationToast.js.map +1 -1
- package/dist/merge/components/conflict-notifications/index.js +0 -5
- package/dist/merge/components/conflict-notifications/index.js.map +1 -1
- package/dist/merge/components/conflict-notifications/useConflictNotifications.js +0 -48
- package/dist/merge/components/conflict-notifications/useConflictNotifications.js.map +1 -1
- package/dist/merge/components/conflict-resolution/ComponentConflictGroup.js +0 -36
- package/dist/merge/components/conflict-resolution/ComponentConflictGroup.js.map +1 -1
- package/dist/merge/components/conflict-resolution/PuckFieldResolutionPanel.js +0 -40
- package/dist/merge/components/conflict-resolution/PuckFieldResolutionPanel.js.map +1 -1
- package/dist/merge/components/conflict-resolution/RenderedResolutionPreview.js +0 -21
- package/dist/merge/components/conflict-resolution/RenderedResolutionPreview.js.map +1 -1
- package/dist/merge/components/conflict-resolution/index.js +0 -5
- package/dist/merge/components/conflict-resolution/index.js.map +1 -1
- package/dist/merge/components/merge-resolution/CherryPickVisualPanel.js +0 -44
- package/dist/merge/components/merge-resolution/CherryPickVisualPanel.js.map +1 -1
- package/dist/merge/components/merge-resolution/ComponentClickOverlay.js +0 -24
- package/dist/merge/components/merge-resolution/ComponentClickOverlay.js.map +1 -1
- package/dist/merge/components/merge-resolution/DocumentResolutionDetail.d.ts.map +1 -1
- package/dist/merge/components/merge-resolution/DocumentResolutionDetail.js +6 -31
- package/dist/merge/components/merge-resolution/DocumentResolutionDetail.js.map +1 -1
- package/dist/merge/components/merge-resolution/index.js +0 -3
- package/dist/merge/components/merge-resolution/index.js.map +1 -1
- package/dist/merge/useMergeResolution.d.ts +1 -1
- package/dist/merge/useMergeResolution.d.ts.map +1 -1
- package/dist/merge/useMergeResolution.js +6 -75
- package/dist/merge/useMergeResolution.js.map +1 -1
- package/dist/merge/utils/namespacePuckData.d.ts.map +1 -1
- package/dist/merge/utils/namespacePuckData.js +8 -8
- package/dist/merge/utils/namespacePuckData.js.map +1 -1
- package/dist/merge/utils/puckFieldClassifier.js +0 -183
- package/dist/merge/utils/puckFieldClassifier.js.map +1 -1
- package/dist/p1/editor/connect/connect-preview-config.js +0 -5
- package/dist/p1/editor/connect/connect-preview-config.js.map +1 -1
- package/dist/p1/editor/connect/field-connect-plugin.js +0 -6
- package/dist/p1/editor/connect/field-connect-plugin.js.map +1 -1
- package/dist/p1/editor/editor-preview-resolve.js +0 -13
- package/dist/p1/editor/editor-preview-resolve.js.map +1 -1
- package/dist/p1/editor/hooks/api-hooks.js +0 -7
- package/dist/p1/editor/hooks/api-hooks.js.map +1 -1
- package/dist/p1/editor/hooks/useLiveEditorContext.js +0 -12
- package/dist/p1/editor/hooks/useLiveEditorContext.js.map +1 -1
- package/dist/p1/editor/hooks/useLiveRemoteDatasources.js +0 -22
- package/dist/p1/editor/hooks/useLiveRemoteDatasources.js.map +1 -1
- package/dist/p1/editor/hooks/useP1Plugins.js +0 -5
- package/dist/p1/editor/hooks/useP1Plugins.js.map +1 -1
- package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js +0 -7
- package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js.map +1 -1
- package/dist/p1/editor/template-autocomplete-layer.js +0 -4
- package/dist/p1/editor/template-autocomplete-layer.js.map +1 -1
- package/dist/pds/components/AgentChip.js +0 -3
- package/dist/pds/components/AgentChip.js.map +1 -1
- package/dist/pds/components/CreatePageModal.js +1 -97
- package/dist/pds/components/CreatePageModal.js.map +1 -1
- package/dist/pds/components/LoadingMessage.d.ts.map +1 -1
- package/dist/pds/components/LoadingMessage.js +2 -1
- package/dist/pds/components/LoadingMessage.js.map +1 -1
- package/dist/pds/components/LoadingMessage.module.css +2 -21
- package/dist/pds/components/LoadingOverlay.d.ts +17 -0
- package/dist/pds/components/LoadingOverlay.d.ts.map +1 -0
- package/dist/pds/components/LoadingOverlay.js +7 -0
- package/dist/pds/components/LoadingOverlay.js.map +1 -0
- package/dist/pds/components/LoadingOverlay.module.css +28 -0
- package/dist/pds/components/P1EditorHeader.d.ts +9 -2
- package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
- package/dist/pds/components/P1EditorHeader.js +6 -26
- package/dist/pds/components/P1EditorHeader.js.map +1 -1
- package/dist/pds/components/P1EditorHeader.module.css +26 -0
- package/dist/pds/components/PageNavigator.js +0 -16
- package/dist/pds/components/PageNavigator.js.map +1 -1
- package/dist/pds/components/PresenceStack.js +0 -9
- package/dist/pds/components/PresenceStack.js.map +1 -1
- package/dist/pds/components/PublishControl.js +0 -6
- package/dist/pds/components/PublishControl.js.map +1 -1
- package/dist/pds/components/WorkstreamSwitcher.js +1 -25
- package/dist/pds/components/WorkstreamSwitcher.js.map +1 -1
- package/dist/pds/index.d.ts +2 -0
- package/dist/pds/index.d.ts.map +1 -1
- package/dist/pds/index.js +1 -29
- package/dist/pds/index.js.map +1 -1
- package/dist/pds/theme/pds-core-content.js +0 -5
- package/dist/pds/theme/pds-core-content.js.map +1 -1
- package/dist/pds/utils/deriveDocState.js +0 -1
- package/dist/pds/utils/deriveDocState.js.map +1 -1
- package/dist/pds/utils/deriveLiveDocState.js +0 -13
- package/dist/pds/utils/deriveLiveDocState.js.map +1 -1
- package/dist/registry-sync.js +0 -4
- package/dist/registry-sync.js.map +1 -1
- package/dist/server.js +0 -7
- package/dist/server.js.map +1 -1
- package/dist/versioning/components/ReadOnlyFieldsGuard.js +0 -3
- package/dist/versioning/components/ReadOnlyFieldsGuard.js.map +1 -1
- package/dist/versioning/components/VersionBannerActions.js +0 -1
- package/dist/versioning/components/VersionBannerActions.js.map +1 -1
- package/dist/versioning/components/version-compare/BranchDiffHeader.js +0 -7
- package/dist/versioning/components/version-compare/BranchDiffHeader.js.map +1 -1
- package/dist/versioning/components/version-compare/BranchMergeCompare.js +0 -19
- package/dist/versioning/components/version-compare/BranchMergeCompare.js.map +1 -1
- package/dist/versioning/components/version-compare/ComponentNode.js +0 -8
- package/dist/versioning/components/version-compare/ComponentNode.js.map +1 -1
- package/dist/versioning/components/version-compare/ComponentTree.js +0 -10
- package/dist/versioning/components/version-compare/ComponentTree.js.map +1 -1
- package/dist/versioning/components/version-compare/DiffHeader.js +0 -3
- package/dist/versioning/components/version-compare/DiffHeader.js.map +1 -1
- package/dist/versioning/components/version-compare/DocumentDiffList.js +0 -14
- package/dist/versioning/components/version-compare/DocumentDiffList.js.map +1 -1
- package/dist/versioning/components/version-compare/PropDiffPanel.js +0 -7
- package/dist/versioning/components/version-compare/PropDiffPanel.js.map +1 -1
- package/dist/versioning/components/version-compare/PropDiffRow.js +0 -3
- package/dist/versioning/components/version-compare/PropDiffRow.js.map +1 -1
- package/dist/versioning/components/version-compare/PropValueDisplay.js +0 -22
- package/dist/versioning/components/version-compare/PropValueDisplay.js.map +1 -1
- package/dist/versioning/components/version-compare/VersionComparePage.js +0 -13
- package/dist/versioning/components/version-compare/VersionComparePage.js.map +1 -1
- package/dist/versioning/components/version-compare/VisualBranchCompare.js +0 -17
- package/dist/versioning/components/version-compare/VisualBranchCompare.js.map +1 -1
- package/dist/versioning/components/version-compare/VisualVersionCompare.js +0 -23
- package/dist/versioning/components/version-compare/VisualVersionCompare.js.map +1 -1
- package/dist/versioning/components/version-compare/index.js +0 -5
- package/dist/versioning/components/version-compare/index.js.map +1 -1
- package/dist/versioning/components/version-history/AgentCheckpointBadge.js +0 -14
- package/dist/versioning/components/version-history/AgentCheckpointBadge.js.map +1 -1
- package/dist/versioning/components/version-history/VersionItem.js +0 -7
- package/dist/versioning/components/version-history/VersionItem.js.map +1 -1
- package/dist/versioning/components/version-history/index.js +0 -5
- package/dist/versioning/components/version-history/index.js.map +1 -1
- package/dist/versioning/useCheckpoints.js +0 -28
- package/dist/versioning/useCheckpoints.js.map +1 -1
- package/dist/versioning/useVersions.js +0 -31
- package/dist/versioning/useVersions.js.map +1 -1
- package/dist/versioning/utils/branchDiff.js +0 -93
- package/dist/versioning/utils/branchDiff.js.map +1 -1
- package/dist/versioning/utils/diff.js +0 -79
- package/dist/versioning/utils/diff.js.map +1 -1
- package/dist/versioning/utils/formatVersionDate.js +0 -12
- package/dist/versioning/utils/formatVersionDate.js.map +1 -1
- package/dist/versioning/utils/highlightConfig.js +0 -42
- package/dist/versioning/utils/highlightConfig.js.map +1 -1
- package/dist/versioning/utils/versionKind.js +0 -10
- package/dist/versioning/utils/versionKind.js.map +1 -1
- package/package.json +7 -7
- package/src/pds/theme/PuckEditorTheme.css +5 -5
- package/src/styles.css +1 -1
- package/src/pds/theme/PuckEditorTheme.test.ts +0 -195
- package/src/pds/theme/pds-core-content.ts +0 -8
|
@@ -1,73 +1,38 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useP1Overrides Hook
|
|
3
|
-
*
|
|
4
|
-
* Creates referentially stable Puck overrides for P1 integration.
|
|
5
|
-
* Internally reads getters and callbacks from P1PuckProvider context
|
|
6
|
-
* and wires them to createP1Overrides with correct options.
|
|
7
|
-
*/
|
|
8
1
|
import { useRef, useMemo } from 'react';
|
|
9
2
|
import { useP1Puck } from '../core/P1PuckContext.js';
|
|
10
3
|
import { createP1Overrides } from './plugin/createP1Overrides.js';
|
|
11
|
-
/**
|
|
12
|
-
* Creates referentially stable Puck overrides for P1 integration.
|
|
13
|
-
*
|
|
14
|
-
* Reads stable getters and callbacks from P1PuckProvider context and
|
|
15
|
-
* wires them to createP1Overrides. Uses a Proxy pattern to keep the
|
|
16
|
-
* overrides object referentially stable across re-renders.
|
|
17
|
-
*
|
|
18
|
-
* Must be used inside a P1PuckProvider.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Optional customization
|
|
21
|
-
* @returns Stable PuckOverrides instance
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```tsx
|
|
25
|
-
* function Editor() {
|
|
26
|
-
* const overrides = useP1Overrides({
|
|
27
|
-
* onPublishSuccess: (cp) => console.log('Published:', cp.name),
|
|
28
|
-
* });
|
|
29
|
-
* return <Puck overrides={overrides} config={config} data={data} />;
|
|
30
|
-
* }
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
4
|
export function useP1Overrides(options = {}) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
const fc = css.featureConfig;
|
|
5
|
+
const ccr = useP1Puck();
|
|
6
|
+
const fc = ccr.featureConfig;
|
|
37
7
|
const overridesOptions = {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
onRetrySave: css.saveNow,
|
|
8
|
+
getSaveStatus: ccr.getSaveStatus,
|
|
9
|
+
getLastSaved: ccr.getLastSaved,
|
|
10
|
+
getSaveError: ccr.getSaveError,
|
|
11
|
+
onRetrySave: ccr.saveNow,
|
|
43
12
|
showDefaultPublish: options.showDefaultPublish,
|
|
44
13
|
showSaveIndicator: fc?.enableAutoSave ?? true,
|
|
45
|
-
isViewingHistoricalVersion:
|
|
46
|
-
viewingVersion:
|
|
47
|
-
onReturnToLatest:
|
|
48
|
-
// Presence/Agent features — gated by featureConfig flags
|
|
14
|
+
isViewingHistoricalVersion: ccr.isViewingHistoricalVersion,
|
|
15
|
+
viewingVersion: ccr.viewingVersion,
|
|
16
|
+
onReturnToLatest: ccr.returnToLatest,
|
|
49
17
|
showCollaboratorAvatars: options.showCollaboratorAvatars
|
|
50
|
-
?? ((fc?.enableCollaboratorAvatars ?? true) &&
|
|
51
|
-
presence: (fc?.enableCollaboratorAvatars ?? true) ?
|
|
18
|
+
?? ((fc?.enableCollaboratorAvatars ?? true) && ccr.presence !== null),
|
|
19
|
+
presence: (fc?.enableCollaboratorAvatars ?? true) ? ccr.presence?.actors : undefined,
|
|
52
20
|
showAgentActivityBanner: options.showAgentActivityBanner
|
|
53
|
-
?? ((fc?.enableAgentBanner ?? true) &&
|
|
21
|
+
?? ((fc?.enableAgentBanner ?? true) && ccr.hasActiveAgents),
|
|
54
22
|
activeAgents: (fc?.enableAgentBanner ?? true)
|
|
55
|
-
?
|
|
23
|
+
? ccr.presence?.agents?.filter(a => a.state === 'editing')
|
|
56
24
|
: undefined,
|
|
57
|
-
isAgentEditing: (fc?.enableAgentBanner ?? true) &&
|
|
58
|
-
onStopAgent: options.onStopAgent ??
|
|
25
|
+
isAgentEditing: (fc?.enableAgentBanner ?? true) && ccr.hasActiveAgents,
|
|
26
|
+
onStopAgent: options.onStopAgent ?? ccr.stopAgent,
|
|
59
27
|
publishedStatus: options.publishedStatus,
|
|
60
28
|
};
|
|
61
|
-
// Store options in a ref updated each render
|
|
62
29
|
const optionsRef = useRef(overridesOptions);
|
|
63
30
|
optionsRef.current = overridesOptions;
|
|
64
|
-
// Create a stable Proxy-backed options object
|
|
65
31
|
const stableOptions = useMemo(() => new Proxy({}, {
|
|
66
32
|
get(_target, prop) {
|
|
67
33
|
return optionsRef.current[prop];
|
|
68
34
|
},
|
|
69
35
|
}), []);
|
|
70
|
-
// Create overrides once with stable proxy options
|
|
71
36
|
const overrides = useMemo(() => createP1Overrides(stableOptions), [stableOptions]);
|
|
72
37
|
return overrides;
|
|
73
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useP1Overrides.js","sourceRoot":"","sources":["../../src/editor/useP1Overrides.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useP1Overrides.js","sourceRoot":"","sources":["../../src/editor/useP1Overrides.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA6ClE,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAGxB,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC;IAE7B,MAAM,gBAAgB,GAAuB;QAE3C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,WAAW,EAAE,GAAG,CAAC,OAAO;QACxB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,iBAAiB,EAAE,EAAE,EAAE,cAAc,IAAI,IAAI;QAC7C,0BAA0B,EAAE,GAAG,CAAC,0BAA0B;QAC1D,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,gBAAgB,EAAE,GAAG,CAAC,cAAc;QAEpC,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;eACnD,CAAC,CAAC,EAAE,EAAE,yBAAyB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;QACvE,QAAQ,EAAE,CAAC,EAAE,EAAE,yBAAyB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS;QACpF,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;eACnD,CAAC,CAAC,EAAE,EAAE,iBAAiB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC;QAC7D,YAAY,EAAE,CAAC,EAAE,EAAE,iBAAiB,IAAI,IAAI,CAAC;YAC3C,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;YAC1D,CAAC,CAAC,SAAS;QACb,cAAc,EAAE,CAAC,EAAE,EAAE,iBAAiB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe;QACtE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;QACjD,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC;IAGF,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,UAAU,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAGtC,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,IAAI,KAAK,CAAC,EAAwB,EAAE;QAClC,GAAG,CAAC,OAAO,EAAE,IAAY;YACvB,OAAQ,UAAU,CAAC,OAA8C,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;KACF,CAAC,EACJ,EAAE,CACH,CAAC;IAGF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useP1Plugin Hook
|
|
3
3
|
*
|
|
4
|
-
* Creates a referentially stable
|
|
4
|
+
* Creates a referentially stable P1 plugin instance for Puck.
|
|
5
5
|
* Internally reads context values and wires them through a Proxy pattern
|
|
6
6
|
* so the plugin object never changes identity, avoiding Puck re-renders.
|
|
7
7
|
*/
|
|
@@ -80,7 +80,11 @@ export interface UseP1PluginOptions {
|
|
|
80
80
|
/** Currently authenticated user */
|
|
81
81
|
currentUser?: CurrentUser;
|
|
82
82
|
/** Callback when user logs out */
|
|
83
|
-
onLogout?: () => void
|
|
83
|
+
onLogout?: () => void | Promise<void>;
|
|
84
|
+
/** Message shown in the header when a logout attempt failed. */
|
|
85
|
+
logoutError?: string | null;
|
|
86
|
+
/** True while a logout is in flight; disables the menu item. */
|
|
87
|
+
isLoggingOut?: boolean;
|
|
84
88
|
/** Callback for Compare with Live action */
|
|
85
89
|
onCompareWithLive?: () => void;
|
|
86
90
|
/** Callback for the publish action. When omitted, context's publishDocument is used. */
|
|
@@ -98,7 +102,7 @@ export interface UseP1PluginOptions {
|
|
|
98
102
|
documentSyncStore?: Pick<DocumentSyncStore, 'getAppliedKey'>;
|
|
99
103
|
}
|
|
100
104
|
/**
|
|
101
|
-
* Creates a referentially stable
|
|
105
|
+
* Creates a referentially stable P1 plugin for Puck.
|
|
102
106
|
*
|
|
103
107
|
* Reads branches, documents, and other state from P1PuckProvider context.
|
|
104
108
|
* The returned plugin object is stable across re-renders — it uses a Proxy
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useP1Plugin.d.ts","sourceRoot":"","sources":["../../src/editor/useP1Plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAEnF,OAAO,KAAK,EAAmB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"useP1Plugin.d.ts","sourceRoot":"","sources":["../../src/editor/useP1Plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* useP1Plugin Hook
|
|
3
|
-
*
|
|
4
|
-
* Creates a referentially stable CSS plugin instance for Puck.
|
|
5
|
-
* Internally reads context values and wires them through a Proxy pattern
|
|
6
|
-
* so the plugin object never changes identity, avoiding Puck re-renders.
|
|
7
|
-
*/
|
|
8
|
-
import { useRef, useMemo } from 'react';
|
|
1
|
+
import { useRef, useMemo, useState, useEffect } from 'react';
|
|
9
2
|
import { useP1Puck } from '../core/P1PuckContext.js';
|
|
10
3
|
import { createP1Plugin } from './plugin/P1Plugin.js';
|
|
11
|
-
|
|
12
|
-
* Creates a referentially stable CSS plugin for Puck.
|
|
13
|
-
*
|
|
14
|
-
* Reads branches, documents, and other state from P1PuckProvider context.
|
|
15
|
-
* The returned plugin object is stable across re-renders — it uses a Proxy
|
|
16
|
-
* pattern to always delegate to the latest options without changing identity.
|
|
17
|
-
*
|
|
18
|
-
* Must be used inside a P1PuckProvider.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Optional customization (selection tracking, version display, etc.)
|
|
21
|
-
* @returns A stable PuckPlugin instance
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```tsx
|
|
25
|
-
* function Editor() {
|
|
26
|
-
* const plugin = useP1Plugin();
|
|
27
|
-
* return <Puck plugins={[plugin]} config={config} data={data} />;
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
4
|
+
import { createLogoutStore } from './logout-store.js';
|
|
31
5
|
export function useP1Plugin(options = {}) {
|
|
32
|
-
const
|
|
33
|
-
const fc =
|
|
6
|
+
const ccr = useP1Puck();
|
|
7
|
+
const fc = ccr.featureConfig ?? {
|
|
34
8
|
enableBranchSelector: true,
|
|
35
9
|
enableDocumentBrowser: true,
|
|
36
10
|
enableVersionHistory: true,
|
|
@@ -44,27 +18,32 @@ export function useP1Plugin(options = {}) {
|
|
|
44
18
|
presenceEnabled: true,
|
|
45
19
|
agentModeEnabled: false,
|
|
46
20
|
};
|
|
47
|
-
|
|
48
|
-
|
|
21
|
+
const [logoutStore] = useState(createLogoutStore);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
logoutStore.set({
|
|
24
|
+
isLoggingOut: options.isLoggingOut ?? false,
|
|
25
|
+
error: options.logoutError ?? null,
|
|
26
|
+
});
|
|
27
|
+
}, [logoutStore, options.isLoggingOut, options.logoutError]);
|
|
49
28
|
const pluginOptions = {
|
|
50
|
-
branches: fc.enableBranchSelector ?
|
|
51
|
-
currentBranch: fc.enableBranchSelector ?
|
|
52
|
-
onBranchSwitch: fc.enableBranchSelector ?
|
|
53
|
-
getHasUnsavedChanges:
|
|
54
|
-
documents: fc.enableDocumentBrowser ?
|
|
55
|
-
selectedDocumentPath: options.selectedDocumentPath ??
|
|
29
|
+
branches: fc.enableBranchSelector ? ccr.branches : [],
|
|
30
|
+
currentBranch: fc.enableBranchSelector ? ccr.currentBranch : null,
|
|
31
|
+
onBranchSwitch: fc.enableBranchSelector ? ccr.switchBranch : () => { },
|
|
32
|
+
getHasUnsavedChanges: ccr.getHasUnsavedChanges,
|
|
33
|
+
documents: fc.enableDocumentBrowser ? ccr.documents : [],
|
|
34
|
+
selectedDocumentPath: options.selectedDocumentPath ?? ccr.currentDocument?.path ?? null,
|
|
56
35
|
onDocumentSelect: fc.enableDocumentBrowser
|
|
57
|
-
? (options.onDocumentSelect ??
|
|
36
|
+
? (options.onDocumentSelect ?? ccr.loadDocument) : undefined,
|
|
58
37
|
onDocumentCreate: fc.enableDocumentBrowser
|
|
59
|
-
? (options.onDocumentCreate ??
|
|
38
|
+
? (options.onDocumentCreate ?? ccr.createDocument) : undefined,
|
|
60
39
|
onGenerateWithAI: options.onGenerateWithAI,
|
|
61
40
|
showAIPanelToggle: options.showAIPanelToggle,
|
|
62
|
-
templates:
|
|
63
|
-
templatesLoading:
|
|
64
|
-
onCreateTemplate:
|
|
41
|
+
templates: ccr.templates,
|
|
42
|
+
templatesLoading: ccr.templatesLoading,
|
|
43
|
+
onCreateTemplate: ccr.createTemplate,
|
|
65
44
|
onDocumentDelete: fc.enableDocumentBrowser
|
|
66
|
-
? (options.onDocumentDelete ??
|
|
67
|
-
documentsLoading:
|
|
45
|
+
? (options.onDocumentDelete ?? ccr.deleteDocument) : undefined,
|
|
46
|
+
documentsLoading: ccr.documentsLoading,
|
|
68
47
|
versions: fc.enableVersionHistory ? options.versions : undefined,
|
|
69
48
|
versionsLoading: fc.enableVersionHistory ? options.versionsLoading : false,
|
|
70
49
|
publishedStatus: options.publishedStatus,
|
|
@@ -72,30 +51,25 @@ export function useP1Plugin(options = {}) {
|
|
|
72
51
|
onVersionSelect: fc.enableVersionHistory ? options.onVersionSelect : undefined,
|
|
73
52
|
onRestoreVersion: fc.enableVersionHistory ? options.onRestoreVersion : undefined,
|
|
74
53
|
canRevert: fc.enableVersionHistory ? (options.canRevert ?? false) : false,
|
|
75
|
-
// Context-based sync is the default — no need for getter or legacy sync
|
|
76
54
|
useContextSync: true,
|
|
77
55
|
documentSyncStore: options.documentSyncStore,
|
|
78
|
-
// Selection tracking
|
|
79
56
|
onSelectionChange: options.onSelectionChange,
|
|
80
|
-
// Merge comparison — gated by enableMergeControl
|
|
81
57
|
puckConfig: options.puckConfig,
|
|
82
58
|
onCompareWithLive: fc.enableMergeControl ? options.onCompareWithLive : undefined,
|
|
83
|
-
// Presence/Agent features — gated by featureConfig flags
|
|
84
59
|
showPresenceIndicator: fc.enableCollaboratorAvatars
|
|
85
60
|
? options.showPresenceIndicator : false,
|
|
86
61
|
presence: fc.enableCollaboratorAvatars
|
|
87
|
-
? (options.presence ??
|
|
62
|
+
? (options.presence ?? ccr.presence?.actors) : undefined,
|
|
88
63
|
showAgentActivity: fc.enableAgentBanner ? options.showAgentActivity : false,
|
|
89
64
|
activeAgents: fc.enableAgentBanner
|
|
90
|
-
? (options.activeAgents ??
|
|
65
|
+
? (options.activeAgents ?? ccr.presence?.agents?.filter(a => a.state === 'editing'))
|
|
91
66
|
: undefined,
|
|
92
67
|
showAgentActions: options.showAgentActions,
|
|
93
68
|
availableAgents: options.availableAgents,
|
|
94
69
|
onAgentAction: options.onAgentAction,
|
|
95
|
-
onStopAgent:
|
|
70
|
+
onStopAgent: ccr.stopAgent,
|
|
96
71
|
showFocusRegions: fc.enableFocusHighlighting ? options.showFocusRegions : false,
|
|
97
72
|
agentEditingRegions: options.agentEditingRegions,
|
|
98
|
-
// P1 Editor Header / Subheader
|
|
99
73
|
siteName: options.siteName,
|
|
100
74
|
siteMenuItems: options.siteMenuItems,
|
|
101
75
|
siteId: options.siteId,
|
|
@@ -103,21 +77,19 @@ export function useP1Plugin(options = {}) {
|
|
|
103
77
|
logoUrl: options.logoUrl,
|
|
104
78
|
currentUser: options.currentUser,
|
|
105
79
|
onLogout: options.onLogout,
|
|
80
|
+
logoutStore,
|
|
106
81
|
onPublish: fc.enablePublishButton ? options.onPublish : undefined,
|
|
107
82
|
onReviewAndPublish: options.onReviewAndPublish,
|
|
108
83
|
onCreateWorkstream: options.onCreateWorkstream,
|
|
109
84
|
onCreateBranch: options.onCreateBranch,
|
|
110
85
|
};
|
|
111
|
-
// Store options in a ref updated each render
|
|
112
86
|
const optionsRef = useRef(pluginOptions);
|
|
113
87
|
optionsRef.current = pluginOptions;
|
|
114
|
-
// Create a stable Proxy-backed options object that always reads from the ref
|
|
115
88
|
const stableOptions = useMemo(() => new Proxy({}, {
|
|
116
89
|
get(_target, prop) {
|
|
117
90
|
return optionsRef.current[prop];
|
|
118
91
|
},
|
|
119
92
|
}), []);
|
|
120
|
-
// Create plugin once with stable proxy options
|
|
121
93
|
const plugin = useMemo(() => createP1Plugin(stableOptions), [stableOptions]);
|
|
122
94
|
return plugin;
|
|
123
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useP1Plugin.js","sourceRoot":"","sources":["../../src/editor/useP1Plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useP1Plugin.js","sourceRoot":"","sources":["../../src/editor/useP1Plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Phase 3.2: useRealtime Hook
|
|
3
3
|
*
|
|
4
4
|
* React hook for real-time collaborative editing with Puck.
|
|
5
|
-
* Manages WebSocket connection and
|
|
5
|
+
* Manages WebSocket connection and real-time document synchronization.
|
|
6
6
|
*/
|
|
7
7
|
import type { PuckData, ActorPresence, ActorState, PublishResult } from '@pantheon-systems/css-client';
|
|
8
8
|
/**
|
|
@@ -33,7 +33,7 @@ export interface UseRealtimeParams {
|
|
|
33
33
|
* Initial data to seed the Y.Doc with before connecting.
|
|
34
34
|
* When provided, the Y.Doc will be populated with this data before
|
|
35
35
|
* the WebSocket connects, allowing the server to send only a delta
|
|
36
|
-
* instead of the full
|
|
36
|
+
* instead of the full document state. This eliminates the redundant
|
|
37
37
|
* full-doc re-render on page load.
|
|
38
38
|
*
|
|
39
39
|
* Tracked via ref (not in effect deps) to avoid triggering reconnection
|
|
@@ -65,6 +65,18 @@ export interface UseRealtimeParams {
|
|
|
65
65
|
* Called after the local Y.Doc is cleared, before automatic reconnection.
|
|
66
66
|
*/
|
|
67
67
|
onServerReload?: () => void;
|
|
68
|
+
/**
|
|
69
|
+
* Callback when the server closes with code 4002 (client lineage diverged).
|
|
70
|
+
* Reconnection is halted; caller should reseed from REST and reconnect.
|
|
71
|
+
*/
|
|
72
|
+
onBaselineReset?: () => void;
|
|
73
|
+
/**
|
|
74
|
+
* External reset key: incrementing this tears down the current client and
|
|
75
|
+
* builds a fresh one with a new Y.Doc. Owned by the caller so that the REST
|
|
76
|
+
* refetch can complete and update `initialData` BEFORE the new client seeds
|
|
77
|
+
* its Y.Doc — preventing the new client from reseeding stale in-memory data.
|
|
78
|
+
*/
|
|
79
|
+
resetKey?: number;
|
|
68
80
|
}
|
|
69
81
|
/**
|
|
70
82
|
* Return value from the useRealtime hook.
|
|
@@ -113,7 +125,7 @@ export interface UseRealtimeReturn {
|
|
|
113
125
|
waitForDelivery: () => Promise<void>;
|
|
114
126
|
/**
|
|
115
127
|
* Request the server to publish the current document via WebSocket.
|
|
116
|
-
* The
|
|
128
|
+
* The server handles flush + publish internally, eliminating
|
|
117
129
|
* client-side orchestration and race conditions.
|
|
118
130
|
* @returns Promise that resolves with the publish result
|
|
119
131
|
* @throws Error if not connected or if timeout expires
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRealtime.d.ts","sourceRoot":"","sources":["../../src/editor/useRealtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMvG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IAEf,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE9B,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAE1C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAE3E;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE9C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useRealtime.d.ts","sourceRoot":"","sources":["../../src/editor/useRealtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMvG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IAEf,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,iBAAiB;IACjB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE9B,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAE1C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAE3E;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE9C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC;IAEnB,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,KAAK,IAAI,CAAC;IAErG,qFAAqF;IACrF,WAAW,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC;IAEnC,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAEjD;;;OAGG;IACH,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAE5C;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAuQxE"}
|
|
@@ -1,67 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 3.2: useRealtime Hook
|
|
3
|
-
*
|
|
4
|
-
* React hook for real-time collaborative editing with Puck.
|
|
5
|
-
* Manages WebSocket connection and Yjs CRDT synchronization.
|
|
6
|
-
*/
|
|
7
1
|
import { useState, useEffect, useLayoutEffect, useRef, useCallback } from 'react';
|
|
8
2
|
import { RealtimeClient } from '@pantheon-systems/css-client';
|
|
9
3
|
import { createPuckYjsBinding, } from './utils/puckYjsBinding.js';
|
|
10
|
-
/**
|
|
11
|
-
* Hook for real-time collaborative editing with Puck.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```tsx
|
|
15
|
-
* function Editor() {
|
|
16
|
-
* const realtime = useRealtime({
|
|
17
|
-
* baseUrl: 'wss://api.example.com',
|
|
18
|
-
* siteId: 'site-123',
|
|
19
|
-
* branchId: 'branch-456',
|
|
20
|
-
* documentPath: 'pages/home',
|
|
21
|
-
* actorId: 'user-789',
|
|
22
|
-
* actorType: 'user',
|
|
23
|
-
* enabled: true,
|
|
24
|
-
* onRemoteUpdate: (data) => setPuckData(data),
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* return (
|
|
28
|
-
* <Puck
|
|
29
|
-
* data={puckData}
|
|
30
|
-
* onChange={(data) => {
|
|
31
|
-
* setPuckData(data);
|
|
32
|
-
* realtime.applyLocalChange(data);
|
|
33
|
-
* }}
|
|
34
|
-
* />
|
|
35
|
-
* );
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
4
|
export function useRealtime(params) {
|
|
40
|
-
const { baseUrl, apiKey, tokenRefresher, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled = true, onRemoteUpdate, onPresenceUpdate, onFocusRegionBroadcast, onServerReload, } = params;
|
|
5
|
+
const { baseUrl, apiKey, tokenRefresher, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled = true, onRemoteUpdate, onPresenceUpdate, onFocusRegionBroadcast, onServerReload, onBaselineReset, resetKey = 0, } = params;
|
|
41
6
|
const [connected, setConnected] = useState(false);
|
|
42
7
|
const [error, setError] = useState(null);
|
|
43
8
|
const [presenceViaWebSocket, setPresenceViaWebSocket] = useState(false);
|
|
44
|
-
// Track the document path that the active connection is bound to.
|
|
45
|
-
// Captured at connection time, cleared on disconnect. Used to prevent
|
|
46
|
-
// cross-document state bleed: callers can compare this against their
|
|
47
|
-
// current document path before sending data through the binding.
|
|
48
9
|
const connectedDocumentPathRef = useRef(null);
|
|
49
|
-
// Refs to avoid recreating callbacks
|
|
50
10
|
const clientRef = useRef(null);
|
|
51
11
|
const bindingRef = useRef(null);
|
|
52
12
|
const onRemoteUpdateRef = useRef(onRemoteUpdate);
|
|
53
13
|
const onPresenceUpdateRef = useRef(onPresenceUpdate);
|
|
54
14
|
const onFocusRegionBroadcastRef = useRef(onFocusRegionBroadcast);
|
|
55
15
|
const onServerReloadRef = useRef(onServerReload);
|
|
56
|
-
|
|
57
|
-
// latest version without needing to be recreated on reference changes.
|
|
16
|
+
const onBaselineResetRef = useRef(onBaselineReset);
|
|
58
17
|
const tokenRefresherRef = useRef(tokenRefresher);
|
|
59
18
|
tokenRefresherRef.current = tokenRefresher;
|
|
60
19
|
const initialDataRef = useRef(params.initialData);
|
|
61
|
-
// Keep ref in sync but do NOT add to effect deps — changing data
|
|
62
|
-
// during editing must not trigger a WebSocket reconnection.
|
|
63
20
|
initialDataRef.current = params.initialData;
|
|
64
|
-
// Keep callback refs up to date
|
|
65
21
|
useEffect(() => {
|
|
66
22
|
onRemoteUpdateRef.current = onRemoteUpdate;
|
|
67
23
|
}, [onRemoteUpdate]);
|
|
@@ -74,12 +30,9 @@ export function useRealtime(params) {
|
|
|
74
30
|
useEffect(() => {
|
|
75
31
|
onServerReloadRef.current = onServerReload;
|
|
76
32
|
}, [onServerReload]);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// where PuckDataSynchronizer dispatches setData during a document switch, Puck
|
|
81
|
-
// fires onChange, and saveData sends data through a stale binding that still
|
|
82
|
-
// points to the previous document's Y.Doc — causing cross-document state bleed.
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
onBaselineResetRef.current = onBaselineReset;
|
|
35
|
+
}, [onBaselineReset]);
|
|
83
36
|
useLayoutEffect(() => {
|
|
84
37
|
return () => {
|
|
85
38
|
connectedDocumentPathRef.current = null;
|
|
@@ -88,22 +41,14 @@ export function useRealtime(params) {
|
|
|
88
41
|
clientRef.current?.disconnect();
|
|
89
42
|
clientRef.current = null;
|
|
90
43
|
};
|
|
91
|
-
}, [baseUrl, apiKey, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled]);
|
|
92
|
-
// Effect to manage connection lifecycle
|
|
44
|
+
}, [baseUrl, apiKey, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled, resetKey]);
|
|
93
45
|
useEffect(() => {
|
|
94
|
-
// Don't connect if disabled, no document path, or missing required params
|
|
95
46
|
if (!enabled || !documentPath || !branchId || !siteId) {
|
|
96
47
|
return;
|
|
97
48
|
}
|
|
98
|
-
// Create new client
|
|
99
|
-
// NOTE: We don't use RealtimeClient.onUpdate because it would cause double callbacks.
|
|
100
|
-
// The Puck-Yjs binding observer already handles remote updates properly by checking
|
|
101
|
-
// transaction origin to distinguish local vs remote changes.
|
|
102
49
|
const client = new RealtimeClient({
|
|
103
50
|
baseUrl,
|
|
104
51
|
apiKey,
|
|
105
|
-
// Use ref-wrapped refresher so the client always calls the latest version
|
|
106
|
-
// without needing to be recreated when the function reference changes.
|
|
107
52
|
tokenRefresher: tokenRefresherRef.current
|
|
108
53
|
? () => {
|
|
109
54
|
const refresher = tokenRefresherRef.current;
|
|
@@ -111,26 +56,14 @@ export function useRealtime(params) {
|
|
|
111
56
|
}
|
|
112
57
|
: undefined,
|
|
113
58
|
onConnect: () => {
|
|
114
|
-
// Guard: ignore callbacks from stale clients.
|
|
115
|
-
// When dependencies change, the old client is destroyed and a new one
|
|
116
|
-
// created. The old WebSocket's close event fires asynchronously and may
|
|
117
|
-
// arrive AFTER the new client has already connected. Without this guard,
|
|
118
|
-
// the stale onDisconnect would overwrite the new client's connection
|
|
119
|
-
// state (connectedDocumentPathRef, connected, presenceViaWebSocket),
|
|
120
|
-
// permanently breaking sync in one direction and corrupting presence.
|
|
121
59
|
if (clientRef.current !== client)
|
|
122
60
|
return;
|
|
123
|
-
// Capture the document path this connection is bound to.
|
|
124
|
-
// documentPath here is from the effect closure — it's the value
|
|
125
|
-
// that was current when this effect ran, which is the document
|
|
126
|
-
// the WebSocket was created for.
|
|
127
61
|
connectedDocumentPathRef.current = documentPath;
|
|
128
62
|
setConnected(true);
|
|
129
63
|
setPresenceViaWebSocket(true);
|
|
130
64
|
setError(null);
|
|
131
65
|
},
|
|
132
66
|
onDisconnect: () => {
|
|
133
|
-
// Guard: ignore callbacks from stale clients (see onConnect comment).
|
|
134
67
|
if (clientRef.current !== client)
|
|
135
68
|
return;
|
|
136
69
|
connectedDocumentPathRef.current = null;
|
|
@@ -140,7 +73,6 @@ export function useRealtime(params) {
|
|
|
140
73
|
onError: (err) => {
|
|
141
74
|
setError(err);
|
|
142
75
|
},
|
|
143
|
-
// onUpdate intentionally omitted - binding handles this
|
|
144
76
|
onPresenceUpdate: (actors) => {
|
|
145
77
|
onPresenceUpdateRef.current?.(actors);
|
|
146
78
|
},
|
|
@@ -150,24 +82,20 @@ export function useRealtime(params) {
|
|
|
150
82
|
onServerReload: () => {
|
|
151
83
|
onServerReloadRef.current?.();
|
|
152
84
|
},
|
|
85
|
+
onBaselineReset: () => {
|
|
86
|
+
if (clientRef.current !== client)
|
|
87
|
+
return;
|
|
88
|
+
onBaselineResetRef.current?.();
|
|
89
|
+
},
|
|
153
90
|
});
|
|
154
91
|
clientRef.current = client;
|
|
155
|
-
// Create Puck-Yjs binding - this is the ONLY place that calls onRemoteUpdate
|
|
156
|
-
// The binding observes Yjs changes and filters out local changes (origin === 'local')
|
|
157
92
|
const binding = createPuckYjsBinding(client.getYDoc(), (data) => {
|
|
158
93
|
onRemoteUpdateRef.current?.(data);
|
|
159
94
|
});
|
|
160
95
|
bindingRef.current = binding;
|
|
161
|
-
// Seed Y.Doc with initial REST data before connecting.
|
|
162
|
-
// This populates the client's Y.Doc so the server can send a delta
|
|
163
|
-
// instead of the full CRDT state on initial connect.
|
|
164
|
-
// Safe because:
|
|
165
|
-
// - applyLocalChange uses LOCAL_ORIGIN (observer ignores local changes)
|
|
166
|
-
// - this.ws is null at this point (update listener won't try to send)
|
|
167
96
|
if (initialDataRef.current) {
|
|
168
97
|
binding.applyLocalChange(initialDataRef.current);
|
|
169
98
|
}
|
|
170
|
-
// Connect to the document session
|
|
171
99
|
client.connect({
|
|
172
100
|
siteId,
|
|
173
101
|
branchId,
|
|
@@ -176,7 +104,6 @@ export function useRealtime(params) {
|
|
|
176
104
|
actorType,
|
|
177
105
|
sessionId,
|
|
178
106
|
});
|
|
179
|
-
// Cleanup on unmount or when dependencies change
|
|
180
107
|
return () => {
|
|
181
108
|
connectedDocumentPathRef.current = null;
|
|
182
109
|
binding.destroy();
|
|
@@ -186,8 +113,7 @@ export function useRealtime(params) {
|
|
|
186
113
|
setConnected(false);
|
|
187
114
|
setPresenceViaWebSocket(false);
|
|
188
115
|
};
|
|
189
|
-
}, [baseUrl, apiKey, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled]);
|
|
190
|
-
// Apply local change function
|
|
116
|
+
}, [baseUrl, apiKey, siteId, branchId, documentPath, actorId, actorType, sessionId, enabled, resetKey]);
|
|
191
117
|
const applyLocalChange = useCallback((data, puckActions) => {
|
|
192
118
|
if (bindingRef.current) {
|
|
193
119
|
if (puckActions && puckActions.length > 0 && clientRef.current) {
|
|
@@ -196,7 +122,6 @@ export function useRealtime(params) {
|
|
|
196
122
|
bindingRef.current.applyLocalChange(data);
|
|
197
123
|
}
|
|
198
124
|
}, [connected]);
|
|
199
|
-
// Get current snapshot from Yjs document
|
|
200
125
|
const getSnapshot = useCallback(() => {
|
|
201
126
|
if (clientRef.current) {
|
|
202
127
|
const snapshot = clientRef.current.getSnapshot();
|
|
@@ -206,27 +131,23 @@ export function useRealtime(params) {
|
|
|
206
131
|
}
|
|
207
132
|
return null;
|
|
208
133
|
}, []);
|
|
209
|
-
// Send focus regions update to server
|
|
210
134
|
const sendFocusRegions = useCallback((regions) => {
|
|
211
135
|
if (clientRef.current) {
|
|
212
136
|
return clientRef.current.sendFocusRegions(regions);
|
|
213
137
|
}
|
|
214
138
|
return false;
|
|
215
139
|
}, []);
|
|
216
|
-
// Send presence heartbeat to server
|
|
217
140
|
const sendHeartbeat = useCallback((state) => {
|
|
218
141
|
if (clientRef.current) {
|
|
219
142
|
clientRef.current.sendHeartbeat(state);
|
|
220
143
|
}
|
|
221
144
|
}, []);
|
|
222
|
-
// Wait for delivery acknowledgment from server
|
|
223
145
|
const waitForDelivery = useCallback(() => {
|
|
224
146
|
if (clientRef.current) {
|
|
225
147
|
return clientRef.current.waitForDelivery();
|
|
226
148
|
}
|
|
227
149
|
return Promise.reject(new Error('Not connected'));
|
|
228
150
|
}, []);
|
|
229
|
-
// Request publish via WebSocket (DO handles flush + publish)
|
|
230
151
|
const requestPublish = useCallback(() => {
|
|
231
152
|
if (clientRef.current) {
|
|
232
153
|
return clientRef.current.requestPublish();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRealtime.js","sourceRoot":"","sources":["../../src/editor/useRealtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useRealtime.js","sourceRoot":"","sources":["../../src/editor/useRealtime.ts"],"names":[],"mappings":"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"}
|