@dxos/plugin-space 0.10.0 → 0.11.1
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/PLUGIN.mdl +11 -0
- package/dist/lib/SpacePlugin.mjs +2 -0
- package/dist/lib/SpacePlugin.node.mjs +628 -0
- package/dist/lib/SpacePlugin.node.mjs.map +1 -0
- package/dist/lib/SpacePlugin.workerd.mjs +26 -0
- package/dist/lib/SpacePlugin.workerd.mjs.map +1 -0
- package/dist/lib/capabilities/node.mjs +10 -0
- package/dist/lib/capabilities/node.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +24 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-CollectionArticle.mjs +90 -0
- package/dist/lib/chunk-CollectionArticle.mjs.map +1 -0
- package/dist/lib/chunk-CollectionSection.mjs +21 -0
- package/dist/lib/chunk-CollectionSection.mjs.map +1 -0
- package/dist/lib/chunk-CreateObjectDialog.mjs +178 -0
- package/dist/lib/chunk-CreateObjectDialog.mjs.map +1 -0
- package/dist/lib/chunk-CreateSpaceDialog.mjs +68 -0
- package/dist/lib/chunk-CreateSpaceDialog.mjs.map +1 -0
- package/dist/lib/chunk-DefaultProperties.mjs +59 -0
- package/dist/lib/chunk-DefaultProperties.mjs.map +1 -0
- package/dist/lib/chunk-ImportSpaceDialog.mjs +58 -0
- package/dist/lib/chunk-ImportSpaceDialog.mjs.map +1 -0
- package/dist/lib/chunk-InlineSyncStatus.mjs +37 -0
- package/dist/lib/chunk-InlineSyncStatus.mjs.map +1 -0
- package/dist/lib/chunk-JoinDialog.mjs +65 -0
- package/dist/lib/chunk-JoinDialog.mjs.map +1 -0
- package/dist/lib/chunk-MembersContainer.mjs +263 -0
- package/dist/lib/chunk-MembersContainer.mjs.map +1 -0
- package/dist/lib/chunk-MergePreview.mjs +91 -0
- package/dist/lib/chunk-MergePreview.mjs.map +1 -0
- package/dist/lib/chunk-ObjectCardStack.mjs +68 -0
- package/dist/lib/chunk-ObjectCardStack.mjs.map +1 -0
- package/dist/lib/chunk-RecordArticle.mjs +106 -0
- package/dist/lib/chunk-RecordArticle.mjs.map +1 -0
- package/dist/lib/chunk-RelatedArticle.mjs +71 -0
- package/dist/lib/chunk-RelatedArticle.mjs.map +1 -0
- package/dist/lib/chunk-RenamePopover.mjs +94 -0
- package/dist/lib/chunk-RenamePopover.mjs.map +1 -0
- package/dist/lib/chunk-SchemaContainer.mjs +53 -0
- package/dist/lib/chunk-SchemaContainer.mjs.map +1 -0
- package/dist/lib/chunk-SmallPresenceLive.mjs +2 -0
- package/dist/lib/chunk-SpaceHomeArticle.mjs +82 -0
- package/dist/lib/chunk-SpaceHomeArticle.mjs.map +1 -0
- package/dist/lib/chunk-SpaceHomeDashboard.mjs +96 -0
- package/dist/lib/chunk-SpaceHomeDashboard.mjs.map +1 -0
- package/dist/lib/chunk-SpaceHomeRecent.mjs +79 -0
- package/dist/lib/chunk-SpaceHomeRecent.mjs.map +1 -0
- package/dist/lib/chunk-SpacePlugin.mjs +97 -0
- package/dist/lib/chunk-SpacePlugin.mjs.map +1 -0
- package/dist/lib/chunk-SpacePresence.mjs +155 -0
- package/dist/lib/chunk-SpacePresence.mjs.map +1 -0
- package/dist/lib/chunk-SpaceSettings.mjs +63 -0
- package/dist/lib/chunk-SpaceSettings.mjs.map +1 -0
- package/dist/lib/chunk-SpaceSettingsContainer.mjs +278 -0
- package/dist/lib/chunk-SpaceSettingsContainer.mjs.map +1 -0
- package/dist/lib/chunk-SyncStatus.mjs +166 -0
- package/dist/lib/chunk-SyncStatus.mjs.map +1 -0
- package/dist/lib/chunk-TypeArticle.mjs +469 -0
- package/dist/lib/chunk-TypeArticle.mjs.map +1 -0
- package/dist/lib/chunk-ViewEditor.mjs +78 -0
- package/dist/lib/chunk-ViewEditor.mjs.map +1 -0
- package/dist/lib/chunk-add-object.mjs +74 -0
- package/dist/lib/chunk-add-object.mjs.map +1 -0
- package/dist/lib/chunk-add-relation.mjs +16 -0
- package/dist/lib/chunk-add-relation.mjs.map +1 -0
- package/dist/lib/chunk-add-type.mjs +41 -0
- package/dist/lib/chunk-add-type.mjs.map +1 -0
- package/dist/lib/chunk-app-graph-builder.mjs +1056 -0
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
- package/dist/lib/chunk-close.mjs +11 -0
- package/dist/lib/chunk-close.mjs.map +1 -0
- package/dist/lib/chunk-collection-path.mjs +65 -0
- package/dist/lib/chunk-collection-path.mjs.map +1 -0
- package/dist/lib/chunk-create-object.mjs +80 -0
- package/dist/lib/chunk-create-object.mjs.map +1 -0
- package/dist/lib/chunk-create.mjs +62 -0
- package/dist/lib/chunk-create.mjs.map +1 -0
- package/dist/lib/chunk-definitions.mjs +466 -0
- package/dist/lib/chunk-definitions.mjs.map +1 -0
- package/dist/lib/chunk-delete-field.mjs +52 -0
- package/dist/lib/chunk-delete-field.mjs.map +1 -0
- package/dist/lib/chunk-delete.mjs +11 -0
- package/dist/lib/chunk-delete.mjs.map +1 -0
- package/dist/lib/chunk-duplicate-object.mjs +11 -0
- package/dist/lib/chunk-duplicate-object.mjs.map +1 -0
- package/dist/lib/chunk-errors.mjs +10 -0
- package/dist/lib/chunk-errors.mjs.map +1 -0
- package/dist/lib/chunk-export-space.mjs +24 -0
- package/dist/lib/chunk-export-space.mjs.map +1 -0
- package/dist/lib/chunk-find-duplicates.mjs +19 -0
- package/dist/lib/chunk-find-duplicates.mjs.map +1 -0
- package/dist/lib/chunk-get-share-link.mjs +29 -0
- package/dist/lib/chunk-get-share-link.mjs.map +1 -0
- package/dist/lib/chunk-helpers.mjs +14 -0
- package/dist/lib/chunk-helpers.mjs.map +1 -0
- package/dist/lib/chunk-identity-created.mjs +26 -0
- package/dist/lib/chunk-identity-created.mjs.map +1 -0
- package/dist/lib/chunk-import-space.mjs +16 -0
- package/dist/lib/chunk-import-space.mjs.map +1 -0
- package/dist/lib/chunk-join.mjs +35 -0
- package/dist/lib/chunk-join.mjs.map +1 -0
- package/dist/lib/chunk-merge-duplicates.mjs +62 -0
- package/dist/lib/chunk-merge-duplicates.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-5ZZS3KMK.mjs → chunk-meta.mjs} +15 -24
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-migrate.mjs +45 -0
- package/dist/lib/chunk-migrate.mjs.map +1 -0
- package/dist/lib/chunk-navigation-handler.mjs +63 -0
- package/dist/lib/chunk-navigation-handler.mjs.map +1 -0
- package/dist/lib/chunk-navigation-target-resolver.mjs +79 -0
- package/dist/lib/chunk-navigation-target-resolver.mjs.map +1 -0
- package/dist/lib/chunk-open-create-object.mjs +32 -0
- package/dist/lib/chunk-open-create-object.mjs.map +1 -0
- package/dist/lib/chunk-open-create-space.mjs +16 -0
- package/dist/lib/chunk-open-create-space.mjs.map +1 -0
- package/dist/lib/chunk-open-import-space.mjs +16 -0
- package/dist/lib/chunk-open-import-space.mjs.map +1 -0
- package/dist/lib/chunk-open-members.mjs +15 -0
- package/dist/lib/chunk-open-members.mjs.map +1 -0
- package/dist/lib/chunk-open-settings.mjs +15 -0
- package/dist/lib/chunk-open-settings.mjs.map +1 -0
- package/dist/lib/chunk-open.mjs +11 -0
- package/dist/lib/chunk-open.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +13 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-react-root.mjs +20 -0
- package/dist/lib/chunk-react-root.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +384 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-remove-objects.mjs +83 -0
- package/dist/lib/chunk-remove-objects.mjs.map +1 -0
- package/dist/lib/chunk-rename-object.mjs +18 -0
- package/dist/lib/chunk-rename-object.mjs.map +1 -0
- package/dist/lib/chunk-rename.mjs +18 -0
- package/dist/lib/chunk-rename.mjs.map +1 -0
- package/dist/lib/chunk-repair.mjs +28 -0
- package/dist/lib/chunk-repair.mjs.map +1 -0
- package/dist/lib/chunk-restore-field.mjs +50 -0
- package/dist/lib/chunk-restore-field.mjs.map +1 -0
- package/dist/lib/chunk-restore-objects.mjs +33 -0
- package/dist/lib/chunk-restore-objects.mjs.map +1 -0
- package/dist/lib/chunk-settings.mjs +23 -0
- package/dist/lib/chunk-settings.mjs.map +1 -0
- package/dist/lib/chunk-share.mjs +23 -0
- package/dist/lib/chunk-share.mjs.map +1 -0
- package/dist/lib/chunk-snapshot.mjs +24 -0
- package/dist/lib/chunk-snapshot.mjs.map +1 -0
- package/dist/lib/chunk-spaces-ready.mjs +242 -0
- package/dist/lib/chunk-spaces-ready.mjs.map +1 -0
- package/dist/lib/chunk-state.mjs +48 -0
- package/dist/lib/chunk-state.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +56 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/chunk-undo-mappings.mjs +40 -0
- package/dist/lib/chunk-undo-mappings.mjs.map +1 -0
- package/dist/lib/chunk-util.mjs +34 -0
- package/dist/lib/chunk-util.mjs.map +1 -0
- package/dist/lib/chunk-wait-for-object.mjs +16 -0
- package/dist/lib/chunk-wait-for-object.mjs.map +1 -0
- package/dist/lib/components.mjs +329 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-C2ULK22J.mjs → constants.mjs} +5 -10
- package/dist/lib/constants.mjs.map +1 -0
- package/dist/lib/containers.mjs +31 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/hooks.mjs +185 -0
- package/dist/lib/hooks.mjs.map +1 -0
- package/dist/lib/index.mjs +7 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations.mjs +8 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/testing.mjs +2 -0
- package/dist/lib/translations.mjs +350 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +60 -0
- package/dist/lib/types.mjs.map +1 -0
- package/dist/types/src/SpacePlugin.workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/SpaceFormFields.d.ts +10 -0
- package/dist/types/src/capabilities/SpaceFormFields.d.ts.map +1 -0
- package/dist/types/src/capabilities/SpaceSurfaces.d.ts +50 -0
- package/dist/types/src/capabilities/SpaceSurfaces.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +6 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts +7 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +2 -7
- package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +3 -2
- package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +5 -0
- package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +3 -1
- package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-target-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/navigation-target-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/repair.d.ts +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/capabilities/try-get-view.d.ts +7 -0
- package/dist/types/src/capabilities/try-get-view.d.ts.map +1 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts +1 -1
- package/dist/types/src/collection-path.d.ts +28 -0
- package/dist/types/src/collection-path.d.ts.map +1 -0
- package/dist/types/src/collection-path.test.d.ts +2 -0
- package/dist/types/src/collection-path.test.d.ts.map +1 -0
- package/dist/types/src/commands/space/export/export.d.ts +23 -0
- package/dist/types/src/commands/space/export/export.d.ts.map +1 -0
- package/dist/types/src/commands/space/export/export.test.d.ts +2 -0
- package/dist/types/src/commands/space/export/export.test.d.ts.map +1 -0
- package/dist/types/src/commands/space/export/index.d.ts +2 -0
- package/dist/types/src/commands/space/export/index.d.ts.map +1 -0
- package/dist/types/src/commands/space/import/import.d.ts +17 -0
- package/dist/types/src/commands/space/import/import.d.ts.map +1 -0
- package/dist/types/src/commands/space/import/import.test.d.ts +2 -0
- package/dist/types/src/commands/space/import/import.test.d.ts.map +1 -0
- package/dist/types/src/commands/space/import/index.d.ts +2 -0
- package/dist/types/src/commands/space/import/index.d.ts.map +1 -0
- package/dist/types/src/commands/space/index.d.ts +8 -1
- package/dist/types/src/commands/space/index.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/status.d.ts +7 -4
- package/dist/types/src/components/SyncStatus/status.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/status.test.d.ts +2 -0
- package/dist/types/src/components/SyncStatus/status.test.d.ts.map +1 -0
- package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts +4 -4
- package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts.map +1 -1
- package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts +4 -1
- package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts +4 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +420 -9
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts +4 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +423 -10
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ImportSpaceDialog/ImportSpaceDialog.d.ts +4 -1
- package/dist/types/src/containers/ImportSpaceDialog/ImportSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts +5 -2
- package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts +4 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +423 -10
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts +4 -1
- package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/containers/MergePreview/MergePreview.d.ts +16 -0
- package/dist/types/src/containers/MergePreview/MergePreview.d.ts.map +1 -0
- package/dist/types/src/containers/MergePreview/index.d.ts +2 -0
- package/dist/types/src/containers/MergePreview/index.d.ts.map +1 -0
- package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts +3 -2
- package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts.map +1 -1
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts +4 -1
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
- package/dist/types/src/containers/RecordArticle/RecordArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts +4 -1
- package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts.map +1 -1
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +4 -4
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -1
- package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts +4 -7
- package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/containers/SchemaContainer/use-query-space-types.d.ts +7 -0
- package/dist/types/src/containers/SchemaContainer/use-query-space-types.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +4 -11
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.d.ts +14 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.d.ts +15 -0
- package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.d.ts +20 -0
- package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeDashboard/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeDashboard/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +5 -8
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -1
- package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts +7 -4
- package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +419 -9
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts +4 -1
- package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettings/SpaceSettings.stories.d.ts +423 -10
- package/dist/types/src/containers/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +419 -9
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts +7 -2
- package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +434 -11
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/containers/TypeArticle/TypeArticle.d.ts +14 -0
- package/dist/types/src/containers/TypeArticle/TypeArticle.d.ts.map +1 -0
- package/dist/types/src/containers/TypeArticle/TypeArticle.stories.d.ts +45 -0
- package/dist/types/src/containers/TypeArticle/TypeArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/TypeArticle/duplicatesGroup.d.ts +19 -0
- package/dist/types/src/containers/TypeArticle/duplicatesGroup.d.ts.map +1 -0
- package/dist/types/src/containers/TypeArticle/index.d.ts +2 -0
- package/dist/types/src/containers/TypeArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/TypeArticle/useDuplicates.d.ts +34 -0
- package/dist/types/src/containers/TypeArticle/useDuplicates.d.ts.map +1 -0
- package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts +4 -1
- package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +3 -2
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts +30 -0
- package/dist/types/src/errors.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useEdgeStatus.d.ts +6 -0
- package/dist/types/src/hooks/useEdgeStatus.d.ts.map +1 -0
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/useStalled.d.ts +13 -0
- package/dist/types/src/hooks/useStalled.d.ts.map +1 -0
- package/dist/types/src/operations/create.d.ts.map +1 -1
- package/dist/types/src/operations/definitions.d.ts +29 -1
- package/dist/types/src/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/operations/find-duplicates.d.ts +5 -0
- package/dist/types/src/operations/find-duplicates.d.ts.map +1 -0
- package/dist/types/src/operations/helpers.d.ts +3 -0
- package/dist/types/src/operations/helpers.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/join.d.ts.map +1 -1
- package/dist/types/src/operations/merge-duplicates.d.ts +5 -0
- package/dist/types/src/operations/merge-duplicates.d.ts.map +1 -0
- package/dist/types/src/operations/open-settings.d.ts.map +1 -1
- package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +419 -9
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/type-section-path.d.ts +22 -0
- package/dist/types/src/type-section-path.d.ts.map +1 -0
- package/dist/types/src/type-section-path.test.d.ts +2 -0
- package/dist/types/src/type-section-path.test.d.ts.map +1 -0
- package/dist/types/src/types/capabilities.d.ts +22 -2
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/surface.d.ts +4 -4
- package/dist/types/src/types/surface.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +6 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +87 -72
- package/src/SpacePlugin.ts +6 -6
- package/src/SpacePlugin.workerd.ts +3 -1
- package/src/capabilities/SpaceFormFields.tsx +72 -0
- package/src/capabilities/SpaceSurfaces.tsx +219 -0
- package/src/capabilities/app-graph-builder/extensions/collections.ts +74 -21
- package/src/capabilities/app-graph-builder/extensions/companions.ts +10 -5
- package/src/capabilities/app-graph-builder/extensions/database.ts +64 -57
- package/src/capabilities/app-graph-builder/extensions/settings.ts +23 -13
- package/src/capabilities/app-graph-builder/extensions/shared.ts +3 -2
- package/src/capabilities/app-graph-builder/extensions/spaces.ts +6 -7
- package/src/capabilities/create-object.ts +1 -14
- package/src/capabilities/index.ts +4 -1
- package/src/capabilities/navigation-handler/navigation-handler.ts +27 -7
- package/src/capabilities/navigation-target-resolver.ts +77 -0
- package/src/capabilities/react-surface.ts +274 -0
- package/src/capabilities/spaces-ready.ts +31 -18
- package/src/capabilities/state.ts +3 -1
- package/src/capabilities/try-get-view.ts +24 -0
- package/src/collection-path.test.ts +161 -0
- package/src/collection-path.ts +97 -0
- package/src/commands/space/export/export.test.ts +68 -0
- package/src/commands/space/export/export.ts +118 -0
- package/src/commands/space/export/index.ts +5 -0
- package/src/commands/space/import/import.test.ts +80 -0
- package/src/commands/space/import/import.ts +65 -0
- package/src/commands/space/import/index.ts +5 -0
- package/src/commands/space/index.ts +16 -1
- package/src/components/AwaitingObject/AwaitingObject.tsx +10 -4
- package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +16 -18
- package/src/components/SyncStatus/status.test.ts +49 -0
- package/src/components/SyncStatus/status.ts +25 -12
- package/src/containers/CollectionArticle/CollectionArticle.tsx +5 -3
- package/src/containers/CollectionSection/CollectionSection.tsx +2 -0
- package/src/containers/CreateObjectDialog/CreateObjectDialog.stories.tsx +18 -4
- package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +13 -17
- package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +28 -19
- package/src/containers/DefaultProperties/DefaultProperties.tsx +4 -2
- package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +4 -2
- package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +7 -17
- package/src/containers/JoinDialog/JoinDialog.tsx +5 -3
- package/src/containers/MembersContainer/MembersContainer.tsx +2 -0
- package/src/containers/MergePreview/MergePreview.tsx +90 -0
- package/src/containers/MergePreview/index.ts +5 -0
- package/src/containers/ObjectCardStack/ObjectCardStack.tsx +46 -43
- package/src/containers/RecordArticle/RecordArticle.stories.tsx +2 -1
- package/src/containers/RecordArticle/RecordArticle.tsx +8 -4
- package/src/containers/RelatedArticle/RelatedArticle.tsx +7 -3
- package/src/containers/RenamePopover/RenamePopover.tsx +2 -0
- package/src/containers/SchemaContainer/SchemaContainer.tsx +4 -17
- package/src/containers/SchemaContainer/use-query-space-types.ts +28 -0
- package/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.tsx +116 -0
- package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +6 -5
- package/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.tsx +99 -0
- package/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.tsx +109 -0
- package/src/containers/SpaceHomeDashboard/index.ts +5 -0
- package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +17 -15
- package/src/containers/SpacePresence/SpacePresence.stories.tsx +4 -4
- package/src/containers/SpacePresence/SpacePresence.tsx +37 -36
- package/src/containers/SpaceSettings/SpaceSettings.tsx +3 -1
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +7 -2
- package/src/containers/SyncStatus/SyncStatus.stories.tsx +80 -1
- package/src/containers/SyncStatus/SyncStatus.tsx +36 -46
- package/src/containers/TypeArticle/TypeArticle.stories.tsx +249 -0
- package/src/containers/TypeArticle/TypeArticle.tsx +362 -0
- package/src/containers/TypeArticle/duplicatesGroup.tsx +150 -0
- package/src/containers/TypeArticle/index.ts +5 -0
- package/src/containers/TypeArticle/useDuplicates.ts +119 -0
- package/src/containers/ViewEditor/ViewEditor.tsx +3 -1
- package/src/containers/index.ts +3 -2
- package/src/errors.ts +6 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useEdgeStatus.ts +40 -0
- package/src/hooks/useInputSurfaceLookup.tsx +5 -4
- package/src/hooks/useRelatedObjects.ts +1 -1
- package/src/hooks/useStalled.ts +39 -0
- package/src/operations/add-object.ts +7 -7
- package/src/operations/create.ts +11 -3
- package/src/operations/definitions.ts +54 -1
- package/src/operations/find-duplicates.ts +33 -0
- package/src/operations/get-share-link.ts +1 -1
- package/src/operations/helpers.ts +11 -0
- package/src/operations/index.ts +2 -0
- package/src/operations/join.ts +6 -5
- package/src/operations/merge-duplicates.ts +51 -0
- package/src/operations/open-members.ts +3 -3
- package/src/operations/open-settings.ts +5 -3
- package/src/operations/remove-objects.ts +42 -3
- package/src/translations.ts +52 -11
- package/src/type-section-path.test.ts +48 -0
- package/src/type-section-path.ts +39 -0
- package/src/types/capabilities.ts +26 -2
- package/src/types/surface.ts +4 -8
- package/src/types/types.ts +7 -0
- package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs +0 -93
- package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +0 -7
- package/dist/lib/neutral/CollectionSection-BLYTGOKH.mjs +0 -19
- package/dist/lib/neutral/CollectionSection-BLYTGOKH.mjs.map +0 -7
- package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs +0 -221
- package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs.map +0 -7
- package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs +0 -61
- package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +0 -7
- package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs +0 -58
- package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs.map +0 -7
- package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs +0 -64
- package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +0 -7
- package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs +0 -49
- package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +0 -7
- package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs +0 -97
- package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs.map +0 -7
- package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs +0 -231
- package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs.map +0 -7
- package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs +0 -33
- package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs.map +0 -7
- package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs +0 -55
- package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +0 -7
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +0 -102
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +0 -7
- package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs +0 -69
- package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs.map +0 -7
- package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs +0 -104
- package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs.map +0 -7
- package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs +0 -53
- package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs.map +0 -7
- package/dist/lib/neutral/SmallPresenceLive-FW3AMEY5.mjs +0 -8
- package/dist/lib/neutral/SmallPresenceLive-FW3AMEY5.mjs.map +0 -7
- package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs +0 -78
- package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs.map +0 -7
- package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs +0 -89
- package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs.map +0 -7
- package/dist/lib/neutral/SpacePlugin.mjs +0 -10
- package/dist/lib/neutral/SpacePlugin.mjs.map +0 -7
- package/dist/lib/neutral/SpacePlugin.node.mjs +0 -838
- package/dist/lib/neutral/SpacePlugin.node.mjs.map +0 -7
- package/dist/lib/neutral/SpacePlugin.workerd.mjs +0 -34
- package/dist/lib/neutral/SpacePlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/SpacePresence-T37WH43Y.mjs +0 -11
- package/dist/lib/neutral/SpacePresence-T37WH43Y.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs +0 -60
- package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs +0 -279
- package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs.map +0 -7
- package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs +0 -147
- package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +0 -7
- package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs +0 -143
- package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs.map +0 -7
- package/dist/lib/neutral/ViewEditor-QXRUOKXR.mjs +0 -101
- package/dist/lib/neutral/ViewEditor-QXRUOKXR.mjs.map +0 -7
- package/dist/lib/neutral/add-object-H2N4AOQJ.mjs +0 -77
- package/dist/lib/neutral/add-object-H2N4AOQJ.mjs.map +0 -7
- package/dist/lib/neutral/add-relation-BGTLART5.mjs +0 -26
- package/dist/lib/neutral/add-relation-BGTLART5.mjs.map +0 -7
- package/dist/lib/neutral/add-type-JIDLRANR.mjs +0 -57
- package/dist/lib/neutral/add-type-JIDLRANR.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs +0 -1332
- package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -46
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/node.mjs +0 -15
- package/dist/lib/neutral/capabilities/node.mjs.map +0 -7
- package/dist/lib/neutral/chunk-52ASDNRA.mjs +0 -41
- package/dist/lib/neutral/chunk-52ASDNRA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-C2ULK22J.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F5KLUP2P.mjs +0 -115
- package/dist/lib/neutral/chunk-F5KLUP2P.mjs.map +0 -7
- package/dist/lib/neutral/chunk-G2KHP7FX.mjs +0 -8
- package/dist/lib/neutral/chunk-G2KHP7FX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LMUG6PEJ.mjs +0 -572
- package/dist/lib/neutral/chunk-LMUG6PEJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RAAHDTVF.mjs +0 -167
- package/dist/lib/neutral/chunk-RAAHDTVF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SPWAMXNR.mjs +0 -131
- package/dist/lib/neutral/chunk-SPWAMXNR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-U5WTDOMV.mjs +0 -8
- package/dist/lib/neutral/chunk-U5WTDOMV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V7JALUM3.mjs +0 -9
- package/dist/lib/neutral/chunk-V7JALUM3.mjs.map +0 -7
- package/dist/lib/neutral/close-5WEQZRNK.mjs +0 -17
- package/dist/lib/neutral/close-5WEQZRNK.mjs.map +0 -7
- package/dist/lib/neutral/components/index.mjs +0 -401
- package/dist/lib/neutral/components/index.mjs.map +0 -7
- package/dist/lib/neutral/constants.mjs +0 -16
- package/dist/lib/neutral/constants.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -55
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/create-QZ47FHQU.mjs +0 -75
- package/dist/lib/neutral/create-QZ47FHQU.mjs.map +0 -7
- package/dist/lib/neutral/create-object-ZU6FZW5X.mjs +0 -96
- package/dist/lib/neutral/create-object-ZU6FZW5X.mjs.map +0 -7
- package/dist/lib/neutral/delete-SPCU2VFM.mjs +0 -17
- package/dist/lib/neutral/delete-SPCU2VFM.mjs.map +0 -7
- package/dist/lib/neutral/delete-field-TAKJVEAD.mjs +0 -42
- package/dist/lib/neutral/delete-field-TAKJVEAD.mjs.map +0 -7
- package/dist/lib/neutral/duplicate-object-BUPZOO6S.mjs +0 -17
- package/dist/lib/neutral/duplicate-object-BUPZOO6S.mjs.map +0 -7
- package/dist/lib/neutral/export-space-S5SCAL4M.mjs +0 -34
- package/dist/lib/neutral/export-space-S5SCAL4M.mjs.map +0 -7
- package/dist/lib/neutral/get-share-link-CLM5IQRL.mjs +0 -41
- package/dist/lib/neutral/get-share-link-CLM5IQRL.mjs.map +0 -7
- package/dist/lib/neutral/hooks/index.mjs +0 -133
- package/dist/lib/neutral/hooks/index.mjs.map +0 -7
- package/dist/lib/neutral/identity-created-BEYMLBK4.mjs +0 -32
- package/dist/lib/neutral/identity-created-BEYMLBK4.mjs.map +0 -7
- package/dist/lib/neutral/import-space-LJQK3KT7.mjs +0 -28
- package/dist/lib/neutral/import-space-LJQK3KT7.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -62
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/join-FSODYIOC.mjs +0 -54
- package/dist/lib/neutral/join-FSODYIOC.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -8
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/migrate-WHM6LU7L.mjs +0 -52
- package/dist/lib/neutral/migrate-WHM6LU7L.mjs.map +0 -7
- package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs +0 -44
- package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs +0 -82
- package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs.map +0 -7
- package/dist/lib/neutral/open-JCXTL3SK.mjs +0 -17
- package/dist/lib/neutral/open-JCXTL3SK.mjs.map +0 -7
- package/dist/lib/neutral/open-create-object-WAIAU7TA.mjs +0 -42
- package/dist/lib/neutral/open-create-object-WAIAU7TA.mjs.map +0 -7
- package/dist/lib/neutral/open-create-space-VU47FWPZ.mjs +0 -24
- package/dist/lib/neutral/open-create-space-VU47FWPZ.mjs.map +0 -7
- package/dist/lib/neutral/open-import-space-GUHIEWYB.mjs +0 -24
- package/dist/lib/neutral/open-import-space-GUHIEWYB.mjs.map +0 -7
- package/dist/lib/neutral/open-members-MLLBHKUU.mjs +0 -23
- package/dist/lib/neutral/open-members-MLLBHKUU.mjs.map +0 -7
- package/dist/lib/neutral/open-settings-DTPZF4U4.mjs +0 -23
- package/dist/lib/neutral/open-settings-DTPZF4U4.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-YPIRQOH2.mjs +0 -13
- package/dist/lib/neutral/operation-handler-YPIRQOH2.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -13
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -18
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/react-root-YLYRCSAZ.mjs +0 -23
- package/dist/lib/neutral/react-root-YLYRCSAZ.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-LRA7GIFN.mjs +0 -367
- package/dist/lib/neutral/react-surface-LRA7GIFN.mjs.map +0 -7
- package/dist/lib/neutral/remove-objects-WEO66EDS.mjs +0 -55
- package/dist/lib/neutral/remove-objects-WEO66EDS.mjs.map +0 -7
- package/dist/lib/neutral/rename-Q6UNCBIM.mjs +0 -26
- package/dist/lib/neutral/rename-Q6UNCBIM.mjs.map +0 -7
- package/dist/lib/neutral/rename-object-2UCEGU7U.mjs +0 -26
- package/dist/lib/neutral/rename-object-2UCEGU7U.mjs.map +0 -7
- package/dist/lib/neutral/repair-HMH476U3.mjs +0 -32
- package/dist/lib/neutral/repair-HMH476U3.mjs.map +0 -7
- package/dist/lib/neutral/restore-field-6CQAFOXY.mjs +0 -40
- package/dist/lib/neutral/restore-field-6CQAFOXY.mjs.map +0 -7
- package/dist/lib/neutral/restore-objects-3VINLP7C.mjs +0 -39
- package/dist/lib/neutral/restore-objects-3VINLP7C.mjs.map +0 -7
- package/dist/lib/neutral/settings-5IBSYBVU.mjs +0 -28
- package/dist/lib/neutral/settings-5IBSYBVU.mjs.map +0 -7
- package/dist/lib/neutral/share-A4WPILNF.mjs +0 -31
- package/dist/lib/neutral/share-A4WPILNF.mjs.map +0 -7
- package/dist/lib/neutral/snapshot-HBYMAPA7.mjs +0 -30
- package/dist/lib/neutral/snapshot-HBYMAPA7.mjs.map +0 -7
- package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs +0 -281
- package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs.map +0 -7
- package/dist/lib/neutral/state-KMH2NUAL.mjs +0 -55
- package/dist/lib/neutral/state-KMH2NUAL.mjs.map +0 -7
- package/dist/lib/neutral/testing.mjs +0 -8
- package/dist/lib/neutral/testing.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -315
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -40
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/dist/lib/neutral/undo-mappings-P43EAUGI.mjs +0 -68
- package/dist/lib/neutral/undo-mappings-P43EAUGI.mjs.map +0 -7
- package/dist/lib/neutral/wait-for-object-U6P2NNWY.mjs +0 -23
- package/dist/lib/neutral/wait-for-object-U6P2NNWY.mjs.map +0 -7
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts +0 -6
- package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts.map +0 -1
- package/dist/types/src/containers/MenuFooter/index.d.ts +0 -2
- package/dist/types/src/containers/MenuFooter/index.d.ts.map +0 -1
- package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts +0 -16
- package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts.map +0 -1
- package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts +0 -21
- package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts.map +0 -1
- package/dist/types/src/containers/TypeCollectionArticle/index.d.ts +0 -2
- package/dist/types/src/containers/TypeCollectionArticle/index.d.ts.map +0 -1
- package/src/capabilities/navigation-resolver.ts +0 -94
- package/src/capabilities/react-surface.tsx +0 -395
- package/src/containers/MenuFooter/MenuFooter.tsx +0 -33
- package/src/containers/MenuFooter/index.ts +0 -5
- package/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.tsx +0 -116
- package/src/containers/TypeCollectionArticle/TypeCollectionArticle.tsx +0 -162
- package/src/containers/TypeCollectionArticle/index.ts +0 -5
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// Copyright 2025 DXOS.org
|
|
2
2
|
|
|
3
|
+
import * as Effect from 'effect/Effect';
|
|
4
|
+
|
|
3
5
|
import { Capability } from '@dxos/app-framework';
|
|
6
|
+
import { Type } from '@dxos/echo';
|
|
7
|
+
|
|
8
|
+
import { SpaceCapabilities } from '../types';
|
|
4
9
|
|
|
5
10
|
export type SpaceOperationConfig = {
|
|
6
11
|
createInvitationUrl: (invitationCode: string) => string;
|
|
@@ -8,3 +13,9 @@ export type SpaceOperationConfig = {
|
|
|
8
13
|
};
|
|
9
14
|
|
|
10
15
|
export const SpaceOperationConfig = Capability.make<SpaceOperationConfig>('org.dxos.plugin.space.operationConfig');
|
|
16
|
+
|
|
17
|
+
/** The contributed identity rule for a typename, or `undefined` when no plugin owns one. */
|
|
18
|
+
export const resolveIdentitySpec = Effect.fnUntraced(function* (typename: string) {
|
|
19
|
+
const specs = yield* Capability.getAll(SpaceCapabilities.IdentitySpec);
|
|
20
|
+
return specs.find((spec) => Type.getTypename(spec.type) === typename);
|
|
21
|
+
});
|
package/src/operations/index.ts
CHANGED
|
@@ -14,9 +14,11 @@ export const SpaceOperationHandlerSet = OperationHandlerSet.lazy(
|
|
|
14
14
|
() => import('./delete-field'),
|
|
15
15
|
() => import('./duplicate-object'),
|
|
16
16
|
() => import('./export-space'),
|
|
17
|
+
() => import('./find-duplicates'),
|
|
17
18
|
() => import('./get-share-link'),
|
|
18
19
|
() => import('./import-space'),
|
|
19
20
|
() => import('./join'),
|
|
21
|
+
() => import('./merge-duplicates'),
|
|
20
22
|
() => import('./migrate'),
|
|
21
23
|
() => import('./open'),
|
|
22
24
|
() => import('./open-create-object'),
|
package/src/operations/join.ts
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
// Copyright 2025 DXOS.org
|
|
2
2
|
|
|
3
3
|
import * as Effect from 'effect/Effect';
|
|
4
|
+
import * as Option from 'effect/Option';
|
|
4
5
|
|
|
5
|
-
import { Capability } from '@dxos/app-framework';
|
|
6
6
|
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
7
7
|
import { Operation } from '@dxos/compute';
|
|
8
|
-
import {
|
|
8
|
+
import { Identity } from '@dxos/halo';
|
|
9
|
+
import { HaloServicesLayer } from '@dxos/plugin-client';
|
|
9
10
|
|
|
10
11
|
import { meta } from '#meta';
|
|
11
12
|
|
|
12
13
|
import { JOIN_DIALOG } from '../constants';
|
|
13
|
-
import {
|
|
14
|
+
import type { JoinDialogProps } from '../containers/JoinDialog';
|
|
14
15
|
import { NoIdentityError } from '../errors';
|
|
15
16
|
import { SpaceOperation } from './definitions';
|
|
16
17
|
|
|
17
18
|
const handler: Operation.WithHandler<typeof SpaceOperation.Join> = SpaceOperation.Join.pipe(
|
|
18
19
|
Operation.withHandler(
|
|
19
20
|
Effect.fnUntraced(function* (input) {
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
21
|
+
const identity = yield* Identity.getSnapshot.pipe(Effect.provide(HaloServicesLayer));
|
|
22
|
+
if (Option.isNone(identity)) {
|
|
22
23
|
// Space invitations authenticate against a local identity; there is nothing to redeem without one.
|
|
23
24
|
yield* Effect.ignore(
|
|
24
25
|
Operation.invoke(LayoutOperation.AddToast, {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Copyright 2026 DXOS.org
|
|
2
|
+
|
|
3
|
+
import * as Effect from 'effect/Effect';
|
|
4
|
+
|
|
5
|
+
import { Operation } from '@dxos/compute';
|
|
6
|
+
import { Database, Filter, Obj, Query } from '@dxos/echo';
|
|
7
|
+
import { applyMerge, findDuplicates, planMerge } from '@dxos/extractor';
|
|
8
|
+
import { invariant } from '@dxos/invariant';
|
|
9
|
+
|
|
10
|
+
import { SpaceOperation } from './definitions';
|
|
11
|
+
import { resolveIdentitySpec } from './helpers';
|
|
12
|
+
|
|
13
|
+
const handler: Operation.WithHandler<typeof SpaceOperation.MergeDuplicates> = SpaceOperation.MergeDuplicates.pipe(
|
|
14
|
+
Operation.withHandler(
|
|
15
|
+
Effect.fnUntraced(function* ({ typename, objectIds, overrides }) {
|
|
16
|
+
const spec = yield* resolveIdentitySpec(typename);
|
|
17
|
+
invariant(spec, `No identity spec registered for ${typename}.`);
|
|
18
|
+
|
|
19
|
+
const { db } = yield* Database.Service;
|
|
20
|
+
// Re-resolve live proxies by id: the caller's objects crossed the operation boundary as
|
|
21
|
+
// snapshots, and a merge must mutate the reactive object the space actually holds.
|
|
22
|
+
const objects = yield* Database.query(Query.select(Filter.id(...objectIds))).run;
|
|
23
|
+
// The input arrives from a client that may be acting on a stale scan. Refuse a partial or
|
|
24
|
+
// mistyped set rather than merging whatever happened to resolve.
|
|
25
|
+
const requested = new Set(objectIds);
|
|
26
|
+
invariant(requested.size > 1, 'A merge needs at least two distinct members.');
|
|
27
|
+
invariant(objects.length === requested.size, 'Every member of a merge must still exist.');
|
|
28
|
+
invariant(
|
|
29
|
+
objects.every((object) => Obj.instanceOf(spec.type, object)),
|
|
30
|
+
`Every member of a merge must be a ${typename}.`,
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// The merge deletes the losers, so being asked to merge is not enough — the members must
|
|
34
|
+
// actually share identity. Re-deriving the group over just these objects (not the whole space)
|
|
35
|
+
// rejects a set that is unrelated or only partly connected, and yields the real shared keys.
|
|
36
|
+
const [group, ...rest] = findDuplicates(spec, objects);
|
|
37
|
+
invariant(
|
|
38
|
+
group && rest.length === 0 && group.objects.length === objects.length,
|
|
39
|
+
'A merge must be applied to a single duplicate group.',
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const plan = planMerge(spec, group);
|
|
43
|
+
const survivor = yield* applyMerge(db, spec, plan, overrides);
|
|
44
|
+
yield* Database.flush({ indexes: true });
|
|
45
|
+
|
|
46
|
+
return { survivorId: survivor.id, removedIds: plan.losers.map((loser) => loser.id) };
|
|
47
|
+
}),
|
|
48
|
+
),
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
export default handler;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as Effect from 'effect/Effect';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
|
|
6
6
|
import { Operation } from '@dxos/compute';
|
|
7
7
|
|
|
8
8
|
import { SpaceOperation } from './definitions';
|
|
@@ -11,8 +11,8 @@ const handler: Operation.WithHandler<typeof SpaceOperation.OpenMembers> = SpaceO
|
|
|
11
11
|
Operation.withHandler(
|
|
12
12
|
Effect.fnUntraced(function* (input) {
|
|
13
13
|
yield* Operation.invoke(LayoutOperation.Open, {
|
|
14
|
-
subject: [
|
|
15
|
-
workspace:
|
|
14
|
+
subject: [GraphPath.getSpacePath(input.space.id, 'settings')],
|
|
15
|
+
workspace: GraphPath.getSpacePath(input.space.id),
|
|
16
16
|
});
|
|
17
17
|
}),
|
|
18
18
|
),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as Effect from 'effect/Effect';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
|
|
6
6
|
import { Operation } from '@dxos/compute';
|
|
7
7
|
|
|
8
8
|
import { SpaceOperation } from './definitions';
|
|
@@ -11,8 +11,10 @@ const handler: Operation.WithHandler<typeof SpaceOperation.OpenSettings> = Space
|
|
|
11
11
|
Operation.withHandler(
|
|
12
12
|
Effect.fnUntraced(function* (input) {
|
|
13
13
|
yield* Operation.invoke(LayoutOperation.Open, {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
// The general settings panel node segment is `settings` (id-less `settings` url key), nested
|
|
15
|
+
// under the space settings section (also `settings`).
|
|
16
|
+
subject: [GraphPath.getSpacePath(input.space.id, 'settings', 'settings')],
|
|
17
|
+
workspace: GraphPath.getSpacePath(input.space.id),
|
|
16
18
|
});
|
|
17
19
|
}),
|
|
18
20
|
),
|
|
@@ -7,7 +7,7 @@ import { Capabilities } from '@dxos/app-framework';
|
|
|
7
7
|
import { AppAnnotation, AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
|
|
8
8
|
import { getSpace } from '@dxos/client/echo';
|
|
9
9
|
import { Operation } from '@dxos/compute';
|
|
10
|
-
import { Annotation, Collection, Entity, Obj } from '@dxos/echo';
|
|
10
|
+
import { Annotation, Collection, Entity, Filter, Obj, Query } from '@dxos/echo';
|
|
11
11
|
import { invariant } from '@dxos/invariant';
|
|
12
12
|
import { isNonNullable } from '@dxos/util';
|
|
13
13
|
|
|
@@ -37,8 +37,12 @@ const handler: Operation.WithHandler<typeof SpaceOperation.RemoveObjects> = Spac
|
|
|
37
37
|
: -1,
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
// `db.remove` cascades to objects owned via the ECHO parent edge, so those can have planks open
|
|
41
|
+
// too — a project's chats are the live case. Collected before the removal, while the parent
|
|
42
|
+
// edges still resolve; a plank left pointing at a removed object cannot be closed by the user.
|
|
43
|
+
const descendantIds = yield* collectOwnedDescendantIds(entities);
|
|
44
|
+
const wasActive = [...entities.map((entity) => entity.id), ...descendantIds]
|
|
45
|
+
.map((id) => layout.active.find((graphId) => graphId.endsWith(id)))
|
|
42
46
|
.filter(isNonNullable);
|
|
43
47
|
|
|
44
48
|
for (const entity of entities) {
|
|
@@ -69,3 +73,38 @@ const handler: Operation.WithHandler<typeof SpaceOperation.RemoveObjects> = Spac
|
|
|
69
73
|
),
|
|
70
74
|
);
|
|
71
75
|
export default handler;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Ids of every object owned (transitively, by the ECHO parent edge) by one of `entities` — i.e. what
|
|
79
|
+
* `db.remove` will cascade to. Must run before the removal, while the parent edges still resolve.
|
|
80
|
+
* Ownership nests arbitrarily deep, so the walk runs to exhaustion rather than to a depth cap; the
|
|
81
|
+
* visited set (seeded with the roots, so a parent edge looping back cannot re-enqueue one) is what
|
|
82
|
+
* bounds it on cyclic data.
|
|
83
|
+
*/
|
|
84
|
+
const collectOwnedDescendantIds = Effect.fnUntraced(function* (entities: readonly unknown[]) {
|
|
85
|
+
const roots: Obj.Unknown[] = entities.filter(Obj.isObject);
|
|
86
|
+
const visited = new Set(roots.map((object) => object.id));
|
|
87
|
+
const descendants = new Set<string>();
|
|
88
|
+
let frontier = roots;
|
|
89
|
+
while (frontier.length > 0) {
|
|
90
|
+
const next: Obj.Unknown[] = [];
|
|
91
|
+
for (const object of frontier) {
|
|
92
|
+
const db = Obj.getDatabase(object);
|
|
93
|
+
if (!db) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const children = yield* Effect.promise(() => db.query(Query.select(Filter.id(object.id)).children()).run());
|
|
98
|
+
for (const child of children) {
|
|
99
|
+
if (Obj.isObject(child) && !visited.has(child.id)) {
|
|
100
|
+
visited.add(child.id);
|
|
101
|
+
descendants.add(child.id);
|
|
102
|
+
next.push(child);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
frontier = next;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return [...descendants];
|
|
110
|
+
});
|
package/src/translations.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { Collection, Type } from '@dxos/echo';
|
|
6
6
|
import { type Resource } from '@dxos/react-ui';
|
|
7
|
-
import { Event, Message, Organization, Person, Pipeline,
|
|
7
|
+
import { Event, Message, Organization, Person, Pipeline, Task, TaskSet } from '@dxos/types';
|
|
8
8
|
|
|
9
9
|
import { meta } from '#meta';
|
|
10
10
|
|
|
@@ -89,16 +89,16 @@ export const translations = [
|
|
|
89
89
|
'delete-object.label': 'Delete pipeline',
|
|
90
90
|
'object-deleted.label': 'Pipeline deleted',
|
|
91
91
|
},
|
|
92
|
-
[Type.getTypename(
|
|
93
|
-
'typename.label': '
|
|
94
|
-
'typename.label_zero': '
|
|
95
|
-
'typename.label_one': '
|
|
96
|
-
'typename.label_other': '
|
|
97
|
-
'object-name.placeholder': 'New
|
|
98
|
-
'add-object.label': 'Add
|
|
99
|
-
'rename-object.label': 'Rename
|
|
100
|
-
'delete-object.label': 'Delete
|
|
101
|
-
'object-deleted.label': '
|
|
92
|
+
[Type.getTypename(TaskSet.TaskSet)]: {
|
|
93
|
+
'typename.label': 'Task set',
|
|
94
|
+
'typename.label_zero': 'Task sets',
|
|
95
|
+
'typename.label_one': 'Task set',
|
|
96
|
+
'typename.label_other': 'Task sets',
|
|
97
|
+
'object-name.placeholder': 'New task set',
|
|
98
|
+
'add-object.label': 'Add task set',
|
|
99
|
+
'rename-object.label': 'Rename task set',
|
|
100
|
+
'delete-object.label': 'Delete task set',
|
|
101
|
+
'object-deleted.label': 'Task set deleted',
|
|
102
102
|
},
|
|
103
103
|
[Type.getTypename(Task.Task)]: {
|
|
104
104
|
'typename.label': 'Task',
|
|
@@ -113,6 +113,8 @@ export const translations = [
|
|
|
113
113
|
},
|
|
114
114
|
[meta.profile.key]: {
|
|
115
115
|
'plugin.name': 'Spaces',
|
|
116
|
+
'navigation-failed-toast.title': 'Link could not be processed',
|
|
117
|
+
'navigation-failed-toast.description': 'Something went wrong while handling this link. Please try again.',
|
|
116
118
|
'add-object.label': 'Add object',
|
|
117
119
|
'first-run.message': 'Nothing selected.',
|
|
118
120
|
'create-space.label': 'Create space',
|
|
@@ -212,12 +214,15 @@ export const translations = [
|
|
|
212
214
|
'saving-locally.label': 'Writing to disk',
|
|
213
215
|
'downloading.label': 'Replicating from peers',
|
|
214
216
|
'uploading.label': 'Replicating to peers',
|
|
217
|
+
'stalled.label': 'Replication stalled',
|
|
218
|
+
'disconnected.label': 'Not connected (changes not replicated)',
|
|
215
219
|
'offline-persisted.label': 'Saved to disk (offline)',
|
|
216
220
|
'remote-synced.label': 'Synced with peers',
|
|
217
221
|
'syncing.label': 'Space syncing',
|
|
218
222
|
'show-all.label': 'Show all',
|
|
219
223
|
'no-sync-status.label': 'No space with missing objects.',
|
|
220
224
|
'create-space-dialog.title': 'Create Space',
|
|
225
|
+
'create-space-dialog.error.message': 'Failed to create space. Please try again.',
|
|
221
226
|
'create-object-dialog.title': 'Create {{object}}',
|
|
222
227
|
'space-input.placeholder': 'Select space',
|
|
223
228
|
'schema-input.placeholder': 'Select type',
|
|
@@ -285,6 +290,9 @@ export const translations = [
|
|
|
285
290
|
'repair-space.title': 'Repair Space',
|
|
286
291
|
'repair-space.description': 'Run repair operations on the space.',
|
|
287
292
|
'repair-space.label': 'Run repairs',
|
|
293
|
+
'reset-home.title': 'Reset home layout',
|
|
294
|
+
'reset-home.description': 'Restore all hidden sections on the space home page.',
|
|
295
|
+
'reset-home.label': 'Reset',
|
|
288
296
|
|
|
289
297
|
'danger-zone.title': 'Danger Zone',
|
|
290
298
|
'danger-zone.description': 'Destructive actions that cannot be undone.',
|
|
@@ -311,6 +319,29 @@ export const translations = [
|
|
|
311
319
|
'database-section.label': 'Database',
|
|
312
320
|
'collections-section.label': 'Collections',
|
|
313
321
|
'type-collection-empty.message': 'No objects of this type yet.',
|
|
322
|
+
'layout.label': 'Layout',
|
|
323
|
+
'layout-masonry.label': 'Cards',
|
|
324
|
+
'layout-table.label': 'Table',
|
|
325
|
+
'layout-duplicates.label': 'Duplicates',
|
|
326
|
+
'open-object.label': 'Open object',
|
|
327
|
+
'search-placeholder.label': 'Filter...',
|
|
328
|
+
'search-no-results.message': 'No matches.',
|
|
329
|
+
'item-count.label_zero': 'No items',
|
|
330
|
+
'item-count.label_one': '1 item',
|
|
331
|
+
'item-count.label_other': '{{count}} items',
|
|
332
|
+
'delete-selected.label_one': 'Delete {{count}} object',
|
|
333
|
+
'delete-selected.label_other': 'Delete {{count}} objects',
|
|
334
|
+
'merge-duplicates.label': 'Merge',
|
|
335
|
+
'skip-duplicates.label': 'Skip',
|
|
336
|
+
'previous-duplicate.label': 'Previous group',
|
|
337
|
+
'next-duplicate.label': 'Next group',
|
|
338
|
+
'rescan-duplicates.label': 'Rescan',
|
|
339
|
+
'duplicates-position.label': 'Group',
|
|
340
|
+
'confirm-merge.label': 'Confirm merge',
|
|
341
|
+
'cancel-merge.label': 'Cancel',
|
|
342
|
+
'duplicates-none.label': 'None',
|
|
343
|
+
'duplicates-none.message': 'No duplicates found.',
|
|
344
|
+
'duplicates-scanning.message': 'Scanning for duplicates…',
|
|
314
345
|
|
|
315
346
|
'search.placeholder': 'Search…',
|
|
316
347
|
'auth-code.message': 'Authorization code',
|
|
@@ -329,6 +360,16 @@ export const translations = [
|
|
|
329
360
|
'unnamed-collection.label': 'Unnamed',
|
|
330
361
|
'space-home-node.label': 'Home',
|
|
331
362
|
'space-home.recent.heading': 'Recent',
|
|
363
|
+
'space-home.dashboard.heading': 'Activity',
|
|
364
|
+
'space-home.dashboard.objects.label': 'Objects',
|
|
365
|
+
'space-home.dashboard.types.label': 'Types',
|
|
366
|
+
'space-home.dashboard.collections.label': 'Collections',
|
|
367
|
+
'space-home.dashboard.members.label': 'Members',
|
|
368
|
+
'space-home.dashboard.active-days.label': 'Active days',
|
|
369
|
+
'space-home.dashboard.plugins.label': 'Plugins',
|
|
370
|
+
'space-home.dashboard.range-all.label': 'All',
|
|
371
|
+
'space-home.dashboard.range-month.label': '30d',
|
|
372
|
+
'space-home.dashboard.range-week.label': '7d',
|
|
332
373
|
},
|
|
333
374
|
},
|
|
334
375
|
},
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import { describe, test } from 'vitest';
|
|
7
|
+
|
|
8
|
+
import { Key } from '@dxos/echo';
|
|
9
|
+
import { type GraphBuilder } from '@dxos/plugin-graph';
|
|
10
|
+
|
|
11
|
+
import { findTypeSectionPath } from './type-section-path';
|
|
12
|
+
|
|
13
|
+
const spaceId = Key.SpaceId.random();
|
|
14
|
+
const objectId = Key.EntityId.random();
|
|
15
|
+
|
|
16
|
+
describe('findTypeSectionPath', () => {
|
|
17
|
+
test('matches a grouped section by its trailing typename segment', ({ expect }) => {
|
|
18
|
+
const extensions = [staticBinding(['system', 'database']), staticBinding(['ai', 'dxos.org.type.Chat'])];
|
|
19
|
+
expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Chat', objectId })).toBe(
|
|
20
|
+
`root/${spaceId}/ai/dxos.org.type.Chat/${objectId}`,
|
|
21
|
+
);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('matches a space-direct section', ({ expect }) => {
|
|
25
|
+
const extensions = [staticBinding(['dxos.org.type.Project'])];
|
|
26
|
+
expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Project', objectId })).toBe(
|
|
27
|
+
`root/${spaceId}/dxos.org.type.Project/${objectId}`,
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('ignores dynamic resolvers, singletons, and unrelated static paths', ({ expect }) => {
|
|
32
|
+
const extensions: Array<Pick<GraphBuilder.BuilderExtension, 'url'>> = [
|
|
33
|
+
// Dynamic path (nested collections) — locates by runtime data, not a fixed section.
|
|
34
|
+
{ url: { key: 'object', kind: 'item', path: () => Effect.succeed(null) } },
|
|
35
|
+
// Singleton (settings page) — the trailing segment is the node itself, not a typename.
|
|
36
|
+
staticBinding(['dxos.org.type.Chat'], 'singleton'),
|
|
37
|
+
// Static but not this type's section.
|
|
38
|
+
staticBinding(['system', 'database']),
|
|
39
|
+
{ url: undefined },
|
|
40
|
+
];
|
|
41
|
+
expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Chat', objectId })).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
/** A static url binding as `createTypeSectionExtension` declares one. */
|
|
46
|
+
const staticBinding = (path: string[], kind: 'item' | 'singleton' = 'item') => ({
|
|
47
|
+
url: { key: path.at(-1) ?? 'key', kind, path },
|
|
48
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type CapabilityManager } from '@dxos/app-framework';
|
|
6
|
+
import { AppCapabilities, GraphPath } from '@dxos/app-toolkit';
|
|
7
|
+
import { type GraphBuilder } from '@dxos/plugin-graph';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The path under which the nav tree shows an object surfaced by a type section
|
|
11
|
+
* (`TypeSection.createTypeSectionExtension`): `root/<space>/[<group>/]<typename>/<id>`. Derived from
|
|
12
|
+
* the graph builder's registered url bindings rather than per-plugin wiring — a type section declares
|
|
13
|
+
* a static `path` ending in its typename, so the declaration every section already makes for URL
|
|
14
|
+
* resolution also answers "where does this type live in the tree". Returns undefined when no active
|
|
15
|
+
* extension declares a section for the typename.
|
|
16
|
+
*/
|
|
17
|
+
export const findTypeSectionPath = (
|
|
18
|
+
extensions: Iterable<Pick<GraphBuilder.BuilderExtension, 'url'>>,
|
|
19
|
+
{ spaceId, typename, objectId }: { spaceId: string; typename: string; objectId: string },
|
|
20
|
+
): string | undefined => {
|
|
21
|
+
for (const extension of extensions) {
|
|
22
|
+
const url = extension.url;
|
|
23
|
+
// Only item bindings with a static path locate objects at a fixed depth; dynamic resolvers
|
|
24
|
+
// (nested collections) and singletons (settings pages) address other shapes.
|
|
25
|
+
if (url?.kind === 'item' && Array.isArray(url.path) && url.path.at(-1) === typename) {
|
|
26
|
+
return GraphPath.getSpacePath(spaceId, ...url.path, objectId);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/** {@link findTypeSectionPath} against the app graph's live extension registry, absent-graph safe. */
|
|
33
|
+
export const resolveTypeSectionPath = (
|
|
34
|
+
capabilities: CapabilityManager.CapabilityManager,
|
|
35
|
+
params: { spaceId: string; typename: string; objectId: string },
|
|
36
|
+
): string | undefined => {
|
|
37
|
+
const builder = capabilities.getAll(AppCapabilities.AppGraph).at(0);
|
|
38
|
+
return builder ? findTypeSectionPath(Object.values(builder.getExtensions()), params) : undefined;
|
|
39
|
+
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type Atom } from '@effect-atom/atom
|
|
5
|
+
import { type Atom } from '@effect-atom/atom';
|
|
6
6
|
import type * as Effect from 'effect/Effect';
|
|
7
7
|
import * as Schema from 'effect/Schema';
|
|
8
8
|
import type { ComponentType } from 'react';
|
|
@@ -10,7 +10,7 @@ import type { ComponentType } from 'react';
|
|
|
10
10
|
import { Capability } from '@dxos/app-framework';
|
|
11
11
|
import { type Space } from '@dxos/client/echo';
|
|
12
12
|
import { type Operation } from '@dxos/compute';
|
|
13
|
-
import { type Collection, type Database, type Type } from '@dxos/echo';
|
|
13
|
+
import { type Collection, type Database, type Obj, type Type } from '@dxos/echo';
|
|
14
14
|
import { type PublicKey } from '@dxos/keys';
|
|
15
15
|
import { type Label } from '@dxos/ui-types/translations';
|
|
16
16
|
import { type ComplexMap, type Position } from '@dxos/util';
|
|
@@ -36,6 +36,18 @@ export namespace SpaceCapabilities {
|
|
|
36
36
|
/** Persisted state (stored in KVS/localStorage). */
|
|
37
37
|
export const State = Capability.make<Atom.Writable<SpaceState>>(`${meta.profile.key}.capability.state`);
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* A proposed merge awaiting confirmation. `preview` is detached (never added to the database),
|
|
41
|
+
* so abandoning the review writes nothing. Keyed by the type article's URI so the companion
|
|
42
|
+
* only shows a preview raised by the plank it is companion to.
|
|
43
|
+
*/
|
|
44
|
+
export type MergePreview = {
|
|
45
|
+
typeUri: string;
|
|
46
|
+
typename: string;
|
|
47
|
+
objectIds: string[];
|
|
48
|
+
preview: Obj.Unknown;
|
|
49
|
+
};
|
|
50
|
+
|
|
39
51
|
/** Ephemeral space plugin state (not persisted). */
|
|
40
52
|
export type SpaceEphemeralState = {
|
|
41
53
|
awaiting: string | undefined;
|
|
@@ -43,6 +55,9 @@ export namespace SpaceCapabilities {
|
|
|
43
55
|
navigableCollections: boolean;
|
|
44
56
|
viewersByObject: Record<string, ComplexMap<PublicKey, ObjectViewerProps>>;
|
|
45
57
|
viewersByIdentity: ComplexMap<PublicKey, Set<string>>;
|
|
58
|
+
mergePreview: MergePreview | undefined;
|
|
59
|
+
/** Bumped when a merge commits, so an open duplicates review knows to rescan. */
|
|
60
|
+
lastMergeAt: number | undefined;
|
|
46
61
|
};
|
|
47
62
|
|
|
48
63
|
/** Transient/ephemeral state (not persisted). */
|
|
@@ -90,6 +105,15 @@ export namespace SpaceCapabilities {
|
|
|
90
105
|
}>;
|
|
91
106
|
export const CreateObjectEntry = Capability.make<CreateObjectEntry>(`${meta.profile.key}.capability.create-object`);
|
|
92
107
|
|
|
108
|
+
/**
|
|
109
|
+
* The identity rule for a type — how to key an object for duplicate detection and how to merge
|
|
110
|
+
* two of them. Plugins that own a type contribute one (e.g. plugin-crm for Person); the type
|
|
111
|
+
* article only offers its Duplicates tab for types that have one.
|
|
112
|
+
*/
|
|
113
|
+
export const IdentitySpec = Capability.make<import('@dxos/extractor').IdentitySpec<any>>(
|
|
114
|
+
`${meta.profile.key}.capability.identity-spec`,
|
|
115
|
+
);
|
|
116
|
+
|
|
93
117
|
/** Props passed to a `CreateObjectEntry.customPanel`. */
|
|
94
118
|
export type CreateObjectCustomPanelProps = {
|
|
95
119
|
target: Database.Database | Collection.Collection;
|
package/src/types/surface.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Role } from '@dxos/app-framework';
|
|
6
6
|
import { type Obj } from '@dxos/echo';
|
|
7
7
|
import { type Space } from '@dxos/react-client/echo';
|
|
8
8
|
|
|
@@ -10,22 +10,18 @@ import { type Space } from '@dxos/react-client/echo';
|
|
|
10
10
|
* Surface role token for the Home article's scrollable content region. Contributors render
|
|
11
11
|
* top-to-bottom (e.g. Welcome, Recent objects, starter-prompt cards).
|
|
12
12
|
*/
|
|
13
|
-
export const SpaceHomeContent:
|
|
14
|
-
'org.dxos.plugin.space.role.homeContent',
|
|
15
|
-
);
|
|
13
|
+
export const SpaceHomeContent: Role.Role<{ space: Space }> = Role.make('org.dxos.plugin.space.role.homeContent');
|
|
16
14
|
|
|
17
15
|
/**
|
|
18
16
|
* Surface role token for the Home article's pinned-bottom region (the assistant prompt).
|
|
19
17
|
* Rendered with `limit={1}` so only a single prompt contributor mounts.
|
|
20
18
|
*/
|
|
21
|
-
export const SpaceHomePinBottom:
|
|
22
|
-
'org.dxos.plugin.space.role.homePinBottom',
|
|
23
|
-
);
|
|
19
|
+
export const SpaceHomePinBottom: Role.Role<{ space: Space }> = Role.make('org.dxos.plugin.space.role.homePinBottom');
|
|
24
20
|
|
|
25
21
|
/**
|
|
26
22
|
* Surface role token for assistant prompts (consumed by plugin-assistant).
|
|
27
23
|
* Owned by plugin-space to avoid a circular dependency.
|
|
28
24
|
*/
|
|
29
|
-
export const Prompts:
|
|
25
|
+
export const Prompts: Role.Role<{ subject: Obj.Any; attendableId: string }> = Role.make(
|
|
30
26
|
'org.dxos.plugin.assistant.role.prompts',
|
|
31
27
|
);
|
package/src/types/types.ts
CHANGED
|
@@ -55,6 +55,13 @@ export type SpacePluginOptions = {
|
|
|
55
55
|
*/
|
|
56
56
|
invitationProp?: string;
|
|
57
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Whether the navigation handler consumes invitation codes from URL query params.
|
|
60
|
+
* Disable when another plugin (e.g. plugin-onboarding) owns the invitation URL flow.
|
|
61
|
+
* @default true
|
|
62
|
+
*/
|
|
63
|
+
invitationUrlHandler?: boolean;
|
|
64
|
+
|
|
58
65
|
/**
|
|
59
66
|
* Whether to send observability events.
|
|
60
67
|
*/
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/containers/CollectionArticle/CollectionArticle.tsx
|
|
4
|
-
import React, { useCallback, useMemo } from "react";
|
|
5
|
-
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
6
|
-
import { LayoutOperation, Paths } from "@dxos/app-toolkit";
|
|
7
|
-
import { Obj } from "@dxos/echo";
|
|
8
|
-
import { ScrollArea, toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
9
|
-
import { Card, Icon } from "@dxos/react-ui";
|
|
10
|
-
import { Mosaic } from "@dxos/react-ui-mosaic";
|
|
11
|
-
import { SearchPanel, useSearchListResults } from "@dxos/react-ui-search";
|
|
12
|
-
import { getStyles } from "@dxos/ui-theme";
|
|
13
|
-
import { meta } from "#meta";
|
|
14
|
-
var CollectionArticle = ({ subject, attendableId }) => {
|
|
15
|
-
const { t } = useTranslation(meta.profile.key);
|
|
16
|
-
const { items, handleSearch } = useCollectionItems(subject, attendableId);
|
|
17
|
-
return /* @__PURE__ */ React.createElement(SearchPanel, {
|
|
18
|
-
onSearch: handleSearch
|
|
19
|
-
}, /* @__PURE__ */ React.createElement(Mosaic.Container, {
|
|
20
|
-
asChild: true
|
|
21
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
|
|
22
|
-
centered: true,
|
|
23
|
-
padding: true,
|
|
24
|
-
thin: true
|
|
25
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
|
|
26
|
-
classNames: "gap-1",
|
|
27
|
-
draggable: false,
|
|
28
|
-
items,
|
|
29
|
-
getId: (item) => item.id,
|
|
30
|
-
Tile: ObjectTile
|
|
31
|
-
})))));
|
|
32
|
-
};
|
|
33
|
-
var ObjectTile = ({ data: item }) => {
|
|
34
|
-
const { t } = useTranslation(meta.profile.key);
|
|
35
|
-
const { invokePromise } = useOperationInvoker();
|
|
36
|
-
const typename = Obj.getTypename(item.object) ?? "";
|
|
37
|
-
const label = Obj.getLabel(item.object) ?? toLocalizedString([
|
|
38
|
-
"object-name.placeholder",
|
|
39
|
-
{
|
|
40
|
-
ns: typename,
|
|
41
|
-
defaultValue: item.id
|
|
42
|
-
}
|
|
43
|
-
], t);
|
|
44
|
-
const styles = item.iconHue ? getStyles(item.iconHue) : void 0;
|
|
45
|
-
const handleClick = useCallback(() => void invokePromise(LayoutOperation.Open, {
|
|
46
|
-
subject: [
|
|
47
|
-
item.targetPath
|
|
48
|
-
]
|
|
49
|
-
}), [
|
|
50
|
-
invokePromise,
|
|
51
|
-
item.targetPath
|
|
52
|
-
]);
|
|
53
|
-
return /* @__PURE__ */ React.createElement(Card.Root, {
|
|
54
|
-
fullWidth: true,
|
|
55
|
-
role: "button",
|
|
56
|
-
classNames: "cursor-pointer",
|
|
57
|
-
onClick: handleClick
|
|
58
|
-
}, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
|
|
59
|
-
icon: item.icon,
|
|
60
|
-
classNames: styles?.fg
|
|
61
|
-
})), /* @__PURE__ */ React.createElement(Card.Title, null, label), /* @__PURE__ */ React.createElement(Card.Menu, null)));
|
|
62
|
-
};
|
|
63
|
-
var useCollectionItems = (collection, attendableId) => {
|
|
64
|
-
const objects = useMemo(() => (collection.objects ?? []).map((ref) => ref.target).filter((obj) => Obj.isObject(obj)), [
|
|
65
|
-
collection.objects
|
|
66
|
-
]);
|
|
67
|
-
const items = useMemo(() => objects.map((obj) => {
|
|
68
|
-
const iconAnnotation = Obj.getIcon(obj);
|
|
69
|
-
const targetPath = attendableId ? Paths.getCollectionObjectPath(attendableId, obj.id) : Paths.getObjectPathFromObject(obj);
|
|
70
|
-
return {
|
|
71
|
-
id: Obj.getURI(obj),
|
|
72
|
-
object: obj,
|
|
73
|
-
targetPath,
|
|
74
|
-
icon: iconAnnotation?.icon ?? "ph--circle-dashed--regular",
|
|
75
|
-
iconHue: iconAnnotation?.hue
|
|
76
|
-
};
|
|
77
|
-
}), [
|
|
78
|
-
objects,
|
|
79
|
-
attendableId
|
|
80
|
-
]);
|
|
81
|
-
const { results, handleSearch } = useSearchListResults({
|
|
82
|
-
items,
|
|
83
|
-
extract: (item) => Obj.getLabel(item.object) ?? item.id
|
|
84
|
-
});
|
|
85
|
-
return {
|
|
86
|
-
items: results,
|
|
87
|
-
handleSearch
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
export {
|
|
91
|
-
CollectionArticle as default
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=CollectionArticle-BMH7SZ7Q.mjs.map
|