@dxos/plugin-space 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112
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/dist/lib/neutral/{CollectionArticle-S3OF5KJ7.mjs → CollectionArticle-BMH7SZ7Q.mjs} +9 -12
- package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +7 -0
- package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs → CollectionSection-BLYTGOKH.mjs} +2 -2
- package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs.map → CollectionSection-BLYTGOKH.mjs.map} +3 -3
- package/dist/lib/neutral/{CreateObjectDialog-66R3K6I3.mjs → CreateObjectDialog-4VMOUKM7.mjs} +10 -10
- package/dist/lib/neutral/CreateObjectDialog-4VMOUKM7.mjs.map +7 -0
- package/dist/lib/neutral/{CreateSpaceDialog-CDGSEIJB.mjs → CreateSpaceDialog-WWNUTLVK.mjs} +6 -6
- package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +7 -0
- package/dist/lib/neutral/{ImportSpaceDialog-7GKV4OTF.mjs → ImportSpaceDialog-CSSRTFAO.mjs} +4 -4
- package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +7 -0
- package/dist/lib/neutral/{InlineSyncStatus-TBJKZCH7.mjs → InlineSyncStatus-UOUTAPCU.mjs} +4 -4
- package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +7 -0
- package/dist/lib/neutral/{JoinDialog-SSFKRFTJ.mjs → JoinDialog-QZGNRJ4P.mjs} +16 -9
- package/dist/lib/neutral/JoinDialog-QZGNRJ4P.mjs.map +7 -0
- package/dist/lib/neutral/{MembersContainer-KMCQDWCS.mjs → MembersContainer-OWCAMBKS.mjs} +5 -5
- package/dist/lib/neutral/MembersContainer-OWCAMBKS.mjs.map +7 -0
- package/dist/lib/neutral/{MenuFooter-5JT7V5FZ.mjs → MenuFooter-QCNFUIAO.mjs} +6 -6
- package/dist/lib/neutral/MenuFooter-QCNFUIAO.mjs.map +7 -0
- package/dist/lib/neutral/{ObjectCardStack-IXNU3HEN.mjs → ObjectCardStack-DHVDRNRK.mjs} +4 -4
- package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +7 -0
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +102 -0
- package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +7 -0
- package/dist/lib/neutral/{RelatedArticle-YDNGUDAJ.mjs → RelatedArticle-YRCRBIYU.mjs} +11 -9
- package/dist/lib/neutral/RelatedArticle-YRCRBIYU.mjs.map +7 -0
- package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs +96 -0
- package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs.map +7 -0
- package/dist/lib/neutral/{SchemaContainer-Q4BP6X2M.mjs → SchemaContainer-2NK5YB5O.mjs} +2 -2
- package/dist/lib/neutral/SchemaContainer-2NK5YB5O.mjs.map +7 -0
- package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs → SmallPresenceLive-L4H7WJOA.mjs} +2 -2
- package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs +78 -0
- package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs.map +7 -0
- package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs +83 -0
- package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs.map +7 -0
- package/dist/lib/neutral/SpacePlugin.mjs +1 -1
- package/dist/lib/neutral/SpacePlugin.node.mjs +4 -4
- package/dist/lib/neutral/SpacePlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs → SpacePresence-PDTEDHDE.mjs} +2 -2
- package/dist/lib/neutral/{SpaceSettings-YAHBOY5T.mjs → SpaceSettings-IVTCSLNT.mjs} +6 -6
- package/dist/lib/neutral/SpaceSettings-IVTCSLNT.mjs.map +7 -0
- package/dist/lib/neutral/{SpaceSettingsContainer-IB34TEOB.mjs → SpaceSettingsContainer-QAFQ4LWC.mjs} +8 -8
- package/dist/lib/neutral/SpaceSettingsContainer-QAFQ4LWC.mjs.map +7 -0
- package/dist/lib/neutral/{SyncStatus-CWOXWDDZ.mjs → SyncStatus-J7CHLO5O.mjs} +3 -3
- package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +7 -0
- package/dist/lib/neutral/{add-object-QYOMCBJA.mjs → add-object-S64XELC3.mjs} +10 -10
- package/dist/lib/neutral/add-object-S64XELC3.mjs.map +7 -0
- package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs → add-relation-GWSE42BU.mjs} +3 -3
- package/dist/lib/neutral/{add-type-CZVKSEIW.mjs → add-type-C3KYE6PI.mjs} +3 -3
- package/dist/lib/neutral/{app-graph-builder-SQGCUCDO.mjs → app-graph-builder-TMAD2ZTH.mjs} +128 -71
- package/dist/lib/neutral/app-graph-builder-TMAD2ZTH.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +13 -15
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/capabilities/node.mjs +2 -2
- package/dist/lib/neutral/{chunk-EEXRKYOD.mjs → chunk-2LTGSUGQ.mjs} +2 -2
- package/dist/lib/neutral/{chunk-EEXRKYOD.mjs.map → chunk-2LTGSUGQ.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-2RPQHHD7.mjs +17 -0
- package/dist/lib/neutral/chunk-2RPQHHD7.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5ZZS3KMK.mjs +46 -0
- package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-K34BPPQE.mjs → chunk-DSYEB2UN.mjs} +29 -17
- package/dist/lib/neutral/chunk-DSYEB2UN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YY62663T.mjs → chunk-F2VJ6VBV.mjs} +3 -3
- package/dist/lib/neutral/chunk-F2VJ6VBV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JHZGRYGS.mjs → chunk-G2KHP7FX.mjs} +2 -2
- package/dist/lib/neutral/{chunk-JHZGRYGS.mjs.map → chunk-G2KHP7FX.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-I5JXVBXX.mjs +8 -0
- package/dist/lib/neutral/{chunk-BBQR23DW.mjs → chunk-LY6XK5MV.mjs} +105 -128
- package/dist/lib/neutral/chunk-LY6XK5MV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7WUJENBF.mjs → chunk-PSCIOT7Q.mjs} +4 -4
- package/dist/lib/neutral/chunk-PSCIOT7Q.mjs.map +7 -0
- package/dist/lib/neutral/{close-FGQN37PK.mjs → close-YZHFYPUN.mjs} +3 -3
- package/dist/lib/neutral/components/index.mjs +7 -7
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +23 -21
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-EPIFSRJA.mjs → create-XKU2W6QC.mjs} +6 -6
- package/dist/lib/neutral/create-XKU2W6QC.mjs.map +7 -0
- package/dist/lib/neutral/{delete-LIA5M3WI.mjs → delete-EFM7CAVO.mjs} +3 -3
- package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs → delete-field-ONAPFFO5.mjs} +3 -3
- package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs → duplicate-object-OJRPFV5I.mjs} +3 -3
- package/dist/lib/neutral/{export-space-VWJHVXWF.mjs → export-space-M5RNVUQX.mjs} +3 -3
- package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs → get-share-link-FUQBJPSQ.mjs} +4 -4
- package/dist/lib/neutral/hooks/index.mjs +16 -4
- package/dist/lib/neutral/hooks/index.mjs.map +3 -3
- package/dist/lib/neutral/{identity-created-57RML5XT.mjs → identity-created-QMV4DANW.mjs} +4 -4
- package/dist/lib/neutral/identity-created-QMV4DANW.mjs.map +7 -0
- package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs → import-space-L3AUIARM.mjs} +3 -3
- package/dist/lib/neutral/index.mjs +12 -6
- package/dist/lib/neutral/{join-Z5K4OAIG.mjs → join-VY3QYBU7.mjs} +4 -4
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{migrate-G7I52UKD.mjs → migrate-WPUISBC4.mjs} +3 -3
- package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs → navigation-handler-IKXZGMII.mjs} +4 -4
- package/dist/lib/neutral/{navigation-resolver-IFVQRCGU.mjs → navigation-resolver-VBPGMFCE.mjs} +7 -7
- package/dist/lib/neutral/navigation-resolver-VBPGMFCE.mjs.map +7 -0
- package/dist/lib/neutral/{open-CPWVZSI4.mjs → open-RRYULTSY.mjs} +3 -3
- package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs → open-create-object-BRUVFZSY.mjs} +4 -4
- package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs → open-create-space-ARLQWW65.mjs} +4 -4
- package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs → open-import-space-65H57JXX.mjs} +4 -4
- package/dist/lib/neutral/{open-members-BEXOSSBS.mjs → open-members-677P6KD3.mjs} +6 -6
- package/dist/lib/neutral/open-members-677P6KD3.mjs.map +7 -0
- package/dist/lib/neutral/{open-settings-RHDBW2K5.mjs → open-settings-PRBSGO6D.mjs} +6 -6
- package/dist/lib/neutral/open-settings-PRBSGO6D.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +3 -3
- package/dist/lib/neutral/plugin.mjs +4 -4
- package/dist/lib/neutral/{react-root-2DJPZQT4.mjs → react-root-YLYRCSAZ.mjs} +2 -2
- package/dist/lib/neutral/{react-root-2DJPZQT4.mjs.map → react-root-YLYRCSAZ.mjs.map} +3 -3
- package/dist/lib/neutral/{react-surface-LYCTOQLY.mjs → react-surface-5EQ6X4CL.mjs} +48 -70
- package/dist/lib/neutral/react-surface-5EQ6X4CL.mjs.map +7 -0
- package/dist/lib/neutral/{remove-objects-OWDMA4IF.mjs → remove-objects-PWJJI36V.mjs} +5 -5
- package/dist/lib/neutral/remove-objects-PWJJI36V.mjs.map +7 -0
- package/dist/lib/neutral/{rename-SR6BBSPU.mjs → rename-4727PKI4.mjs} +8 -7
- package/dist/lib/neutral/rename-4727PKI4.mjs.map +7 -0
- package/dist/lib/neutral/{rename-object-5H6E5AOX.mjs → rename-object-FXUAB5FN.mjs} +8 -7
- package/dist/lib/neutral/rename-object-FXUAB5FN.mjs.map +7 -0
- package/dist/lib/neutral/{repair-PSYRVSJ6.mjs → repair-HMH476U3.mjs} +3 -3
- package/dist/lib/neutral/repair-HMH476U3.mjs.map +7 -0
- package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs → restore-field-3ICSIHGA.mjs} +3 -3
- package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs → restore-objects-V2BTEWN3.mjs} +3 -3
- package/dist/lib/neutral/{settings-Q32EQCHX.mjs → settings-5IBSYBVU.mjs} +3 -3
- package/dist/lib/neutral/{settings-Q32EQCHX.mjs.map → settings-5IBSYBVU.mjs.map} +3 -3
- package/dist/lib/neutral/{share-5Y4NZA75.mjs → share-ZOZPAUGI.mjs} +3 -3
- package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs → snapshot-ZC5PU55W.mjs} +3 -3
- package/dist/lib/neutral/{spaces-ready-GBF72QJH.mjs → spaces-ready-EXPCJD4N.mjs} +11 -11
- package/dist/lib/neutral/spaces-ready-EXPCJD4N.mjs.map +7 -0
- package/dist/lib/neutral/{state-DPBOZRAW.mjs → state-KMH2NUAL.mjs} +2 -2
- package/dist/lib/neutral/state-KMH2NUAL.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +1 -1
- package/dist/lib/neutral/translations.mjs +4 -2
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +9 -3
- package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs → undo-mappings-P43EAUGI.mjs} +5 -5
- package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs.map → undo-mappings-P43EAUGI.mjs.map} +3 -3
- package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs → wait-for-object-WURK2SLQ.mjs} +3 -3
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +12 -0
- package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -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/shared.d.ts +0 -1
- 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 +13 -1
- package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +10 -54
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/node.d.ts +3 -33
- package/dist/types/src/capabilities/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/commands/database/add.d.ts.map +1 -1
- package/dist/types/src/commands/queue/query.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts +20 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +1 -2
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +20 -0
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +1 -1
- package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +12 -0
- package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -0
- package/dist/types/src/containers/RenamePopover/index.d.ts +3 -0
- package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +15 -0
- package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeArticle/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +22 -0
- package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceHomeRecent/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceHomeRecent/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +20 -0
- package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +20 -0
- package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +20 -0
- package/dist/types/src/containers/SyncStatus/SyncStatus.stories.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/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/useRelatedObjects.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +28 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-object.d.ts.map +1 -1
- package/dist/types/src/operations/helpers.d.ts.map +1 -1
- package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
- package/dist/types/src/operations/rename-object.d.ts.map +1 -1
- package/dist/types/src/operations/rename.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +20 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/src/types/form.d.ts +7 -1
- package/dist/types/src/types/form.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/surface.d.ts +26 -0
- package/dist/types/src/types/surface.d.ts.map +1 -0
- package/dist/types/src/types/types.d.ts +7 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +35 -0
- package/package.json +51 -50
- package/src/SpacePlugin.test.ts +1 -1
- package/src/SpacePlugin.ts +1 -7
- package/src/capabilities/app-graph-builder/extensions/collections.ts +44 -24
- package/src/capabilities/app-graph-builder/extensions/companions.ts +3 -3
- package/src/capabilities/app-graph-builder/extensions/database.ts +17 -14
- package/src/capabilities/app-graph-builder/extensions/settings.ts +9 -9
- package/src/capabilities/app-graph-builder/extensions/shared.ts +5 -20
- package/src/capabilities/app-graph-builder/extensions/spaces.ts +49 -26
- package/src/capabilities/identity-created.ts +3 -3
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/navigation-resolver.ts +6 -13
- package/src/capabilities/react-root.tsx +1 -1
- package/src/capabilities/react-surface.tsx +58 -88
- package/src/capabilities/repair.ts +4 -2
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/spaces-ready.ts +8 -15
- package/src/capabilities/state.ts +1 -1
- package/src/capabilities/undo-mappings.ts +3 -3
- package/src/commands/database/add.ts +4 -2
- package/src/commands/queue/query.ts +4 -3
- package/src/components/AwaitingObject/AwaitingObject.tsx +1 -1
- package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +2 -2
- package/src/components/ForeignKeys/ForeignKeys.tsx +1 -1
- package/src/components/SpaceSettings/SpaceSettings.tsx +3 -3
- package/src/constants.ts +5 -6
- package/src/containers/CollectionArticle/CollectionArticle.tsx +10 -6
- package/src/containers/CollectionSection/CollectionSection.tsx +1 -1
- package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +10 -7
- package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -5
- package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +3 -3
- package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +3 -3
- package/src/containers/JoinDialog/JoinDialog.tsx +13 -11
- package/src/containers/MembersContainer/MembersContainer.tsx +5 -5
- package/src/containers/MenuFooter/MenuFooter.tsx +3 -3
- package/src/containers/ObjectCardStack/ObjectCardStack.tsx +3 -3
- package/src/containers/RecordArticle/RecordArticle.tsx +67 -8
- package/src/containers/RelatedArticle/RelatedArticle.tsx +17 -13
- package/src/containers/RenamePopover/RenamePopover.tsx +112 -0
- package/src/containers/RenamePopover/index.ts +6 -0
- package/src/containers/SchemaContainer/SchemaContainer.tsx +1 -1
- package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +100 -0
- package/src/containers/SpaceHomeArticle/index.ts +5 -0
- package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +101 -0
- package/src/containers/SpaceHomeRecent/index.ts +5 -0
- package/src/containers/SpacePresence/SpacePresence.tsx +1 -1
- package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +7 -7
- package/src/containers/SyncStatus/SyncStatus.tsx +2 -2
- package/src/containers/index.ts +3 -2
- package/src/hooks/useInputSurfaceLookup.tsx +3 -2
- package/src/hooks/useRelatedObjects.ts +13 -1
- package/src/meta.ts +2 -27
- package/src/operations/add-object.ts +7 -14
- package/src/operations/create.ts +2 -2
- package/src/operations/definitions.ts +1 -1
- package/src/operations/helpers.ts +1 -1
- package/src/operations/open-members.ts +3 -3
- package/src/operations/open-settings.ts +3 -3
- package/src/operations/remove-objects.ts +3 -2
- package/src/operations/rename-object.ts +3 -2
- package/src/operations/rename.ts +3 -2
- package/src/translations.ts +3 -1
- package/src/types/capabilities.ts +8 -8
- package/src/types/events.ts +5 -5
- package/src/types/form.ts +5 -1
- package/src/types/index.ts +1 -0
- package/src/types/surface.ts +31 -0
- package/src/types/types.ts +9 -1
- package/src/util.ts +3 -3
- package/dist/lib/neutral/CollectionArticle-S3OF5KJ7.mjs.map +0 -7
- package/dist/lib/neutral/CreateObjectDialog-66R3K6I3.mjs.map +0 -7
- package/dist/lib/neutral/CreateSpaceDialog-CDGSEIJB.mjs.map +0 -7
- package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs +0 -59
- package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs.map +0 -7
- package/dist/lib/neutral/ImportSpaceDialog-7GKV4OTF.mjs.map +0 -7
- package/dist/lib/neutral/InlineSyncStatus-TBJKZCH7.mjs.map +0 -7
- package/dist/lib/neutral/JoinDialog-SSFKRFTJ.mjs.map +0 -7
- package/dist/lib/neutral/MembersContainer-KMCQDWCS.mjs.map +0 -7
- package/dist/lib/neutral/MenuFooter-5JT7V5FZ.mjs.map +0 -7
- package/dist/lib/neutral/ObjectCardStack-IXNU3HEN.mjs.map +0 -7
- package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs +0 -51
- package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs.map +0 -7
- package/dist/lib/neutral/RelatedArticle-YDNGUDAJ.mjs.map +0 -7
- package/dist/lib/neutral/SchemaContainer-Q4BP6X2M.mjs.map +0 -7
- package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs +0 -56
- package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs.map +0 -7
- package/dist/lib/neutral/SpaceSettingsContainer-IB34TEOB.mjs.map +0 -7
- package/dist/lib/neutral/SyncStatus-CWOXWDDZ.mjs.map +0 -7
- package/dist/lib/neutral/add-object-QYOMCBJA.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-SQGCUCDO.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs +0 -81
- package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4RTSNTDC.mjs +0 -37
- package/dist/lib/neutral/chunk-4RTSNTDC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7WUJENBF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B7DBIARR.mjs +0 -8
- package/dist/lib/neutral/chunk-BBQR23DW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F5MESIRH.mjs +0 -19
- package/dist/lib/neutral/chunk-F5MESIRH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-K34BPPQE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YY62663T.mjs.map +0 -7
- package/dist/lib/neutral/create-EPIFSRJA.mjs.map +0 -7
- package/dist/lib/neutral/identity-created-57RML5XT.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-IFVQRCGU.mjs.map +0 -7
- package/dist/lib/neutral/open-members-BEXOSSBS.mjs.map +0 -7
- package/dist/lib/neutral/open-settings-RHDBW2K5.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-LYCTOQLY.mjs.map +0 -7
- package/dist/lib/neutral/remove-objects-OWDMA4IF.mjs.map +0 -7
- package/dist/lib/neutral/rename-SR6BBSPU.mjs.map +0 -7
- package/dist/lib/neutral/rename-object-5H6E5AOX.mjs.map +0 -7
- package/dist/lib/neutral/repair-PSYRVSJ6.mjs.map +0 -7
- package/dist/lib/neutral/spaces-ready-GBF72QJH.mjs.map +0 -7
- package/dist/lib/neutral/state-DPBOZRAW.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts +0 -7
- package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts.map +0 -1
- package/dist/types/src/containers/EntityRenamePopover/index.d.ts +0 -2
- package/dist/types/src/containers/EntityRenamePopover/index.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +0 -7
- package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +0 -2
- package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +0 -1
- package/src/capabilities/app-graph-serializer.ts +0 -85
- package/src/containers/EntityRenamePopover/EntityRenamePopover.tsx +0 -52
- package/src/containers/EntityRenamePopover/index.ts +0 -5
- package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +0 -54
- package/src/containers/SpaceRenamePopover/index.ts +0 -5
- /package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs.map → SmallPresenceLive-L4H7WJOA.mjs.map} +0 -0
- /package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs.map → SpacePresence-PDTEDHDE.mjs.map} +0 -0
- /package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs.map → add-relation-GWSE42BU.mjs.map} +0 -0
- /package/dist/lib/neutral/{add-type-CZVKSEIW.mjs.map → add-type-C3KYE6PI.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-B7DBIARR.mjs.map → chunk-I5JXVBXX.mjs.map} +0 -0
- /package/dist/lib/neutral/{close-FGQN37PK.mjs.map → close-YZHFYPUN.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-LIA5M3WI.mjs.map → delete-EFM7CAVO.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs.map → delete-field-ONAPFFO5.mjs.map} +0 -0
- /package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs.map → duplicate-object-OJRPFV5I.mjs.map} +0 -0
- /package/dist/lib/neutral/{export-space-VWJHVXWF.mjs.map → export-space-M5RNVUQX.mjs.map} +0 -0
- /package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs.map → get-share-link-FUQBJPSQ.mjs.map} +0 -0
- /package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs.map → import-space-L3AUIARM.mjs.map} +0 -0
- /package/dist/lib/neutral/{join-Z5K4OAIG.mjs.map → join-VY3QYBU7.mjs.map} +0 -0
- /package/dist/lib/neutral/{migrate-G7I52UKD.mjs.map → migrate-WPUISBC4.mjs.map} +0 -0
- /package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs.map → navigation-handler-IKXZGMII.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-CPWVZSI4.mjs.map → open-RRYULTSY.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs.map → open-create-object-BRUVFZSY.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs.map → open-create-space-ARLQWW65.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs.map → open-import-space-65H57JXX.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs.map → restore-field-3ICSIHGA.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs.map → restore-objects-V2BTEWN3.mjs.map} +0 -0
- /package/dist/lib/neutral/{share-5Y4NZA75.mjs.map → share-ZOZPAUGI.mjs.map} +0 -0
- /package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs.map → snapshot-ZC5PU55W.mjs.map} +0 -0
- /package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs.map → wait-for-object-WURK2SLQ.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts", "../../../src/capabilities/app-graph-builder/extensions/spaces.ts", "../../../src/capabilities/app-graph-builder/extensions/shared.ts", "../../../src/capabilities/app-graph-builder/extensions/database.ts", "../../../src/capabilities/app-graph-builder/extensions/collections.ts", "../../../src/capabilities/app-graph-builder/extensions/companions.ts", "../../../src/capabilities/app-graph-builder/extensions/settings.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { type SpacePluginOptions } from '#types';\n\nimport {\n createCollectionExtensions,\n createCompanionExtensions,\n createDatabaseExtensions,\n createSettingsExtensions,\n createSpaceExtensions,\n} from './extensions';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ shareableLinkOrigin = window.location.origin }: SpacePluginOptions = {}) {\n const extensions = yield* Effect.all([\n createSpaceExtensions(),\n createSettingsExtensions(),\n createDatabaseExtensions(),\n createCollectionExtensions({ shareableLinkOrigin }),\n createCompanionExtensions(),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions.flat());\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, AppNodeMatcher, AppSpace, Paths } from '@dxos/app-toolkit';\nimport { type Space, SpaceState } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Filter, Obj } from '@dxos/echo';\nimport { Migrations } from '@dxos/migrations';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { CreateAtom, Graph, GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { SpaceArchive } from '@dxos/protocols/proto/dxos/client/services';\nimport { Expando } from '@dxos/schema';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\nimport { SPACE_HOME_NODE_TYPE, SPACE_TYPE, SpaceCapabilities } from '#types';\n\nimport { SHARED, getSpaceDisplayName } from '../../../util';\nimport {\n CAN_DROP_SPACE,\n CREATE_OBJECT_IN_SPACE_LABEL,\n MIGRATE_SPACE_LABEL,\n RENAME_SPACE_LABEL,\n checkPendingMigration,\n spaceActionsCache,\n spaceRearrangeCache,\n} from './shared';\n\n//\n// Extension Factory\n//\n\n// The label tuple must be a module-level singleton: connectors re-evaluate whenever the matched\n// node emits, and a tuple rebuilt inline each time creates a new array reference, causing the graph\n// to re-emit the node and remount the Home article on every evaluation.\nconst SPACE_HOME_NODE_LABEL = ['space-home-node.label', { ns: meta.profile.key }] as const;\n\n/** Creates space-related extensions: primary actions, space nodes, space actions, and the Home node. */\nexport const createSpaceExtensions = Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n return yield* Effect.all([\n GraphBuilder.createExtension({\n id: 'spaceHome',\n position: 'first',\n match: AppNodeMatcher.whenSpace,\n connector: (space) =>\n Effect.succeed([\n {\n id: Paths.SPACE_HOME_SEGMENT,\n type: SPACE_HOME_NODE_TYPE,\n data: SPACE_HOME_NODE_TYPE,\n properties: {\n label: SPACE_HOME_NODE_LABEL,\n icon: 'ph--house--regular',\n iconHue: 'cyan',\n position: 'first',\n draggable: false,\n droppable: false,\n space,\n },\n } satisfies Node.NodeArg<typeof SPACE_HOME_NODE_TYPE>,\n ]),\n }),\n\n GraphBuilder.createExtension({\n id: 'primaryActions',\n position: 'first',\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n Node.makeAction({\n id: SpaceOperation.OpenCreateSpace.meta.key,\n data: () => Operation.invoke(SpaceOperation.OpenCreateSpace),\n properties: {\n label: ['create-space.label', { ns: meta.profile.key }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'menu',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.Join.meta.key,\n data: () => Operation.invoke(SpaceOperation.Join, {}),\n properties: {\n label: ['join-space.label', { ns: meta.profile.key }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'menu',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.OpenImportSpace.meta.key,\n data: () => Operation.invoke(SpaceOperation.OpenImportSpace),\n properties: {\n label: ['import-space.label', { ns: meta.profile.key }],\n icon: 'ph--upload--regular',\n testId: 'spacePlugin.importSpace',\n },\n }),\n Node.makeAction({\n id: `${SpaceOperation.ExportSpace.meta.key}.binary`,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);\n if (space) {\n yield* Operation.invoke(SpaceOperation.ExportSpace, { space, format: SpaceArchive.Format.BINARY });\n }\n }),\n properties: {\n label: ['export-space-binary.label', { ns: meta.profile.key }],\n icon: 'ph--download--regular',\n testId: 'spacePlugin.exportSpaceBinary',\n },\n }),\n Node.makeAction({\n id: `${SpaceOperation.ExportSpace.meta.key}.json`,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);\n if (space) {\n yield* Operation.invoke(SpaceOperation.ExportSpace, { space, format: SpaceArchive.Format.JSON });\n }\n }),\n properties: {\n label: ['export-space-json.label', { ns: meta.profile.key }],\n icon: 'ph--download--regular',\n testId: 'spacePlugin.exportSpaceJson',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.OpenMembers.meta.key,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);\n if (space) {\n yield* Operation.invoke(SpaceOperation.OpenMembers, { space });\n }\n }),\n properties: {\n label: ['share-space.label', { ns: meta.profile.key }],\n icon: 'ph--users--regular',\n testId: 'spacePlugin.shareSpace',\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n },\n }),\n Node.makeAction({\n id: SpaceOperation.OpenSettings.meta.key,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = AppSpace.getActiveSpace(client, capabilities) ?? AppSpace.getPersonalSpace(client);\n if (space) {\n yield* Operation.invoke(SpaceOperation.OpenSettings, { space });\n }\n }),\n properties: {\n label: ['open-current-space-settings.label', { ns: meta.profile.key }],\n icon: 'ph--faders--regular',\n keyBinding: {\n macos: 'meta+shift+,',\n windows: 'ctrl+shift+,',\n },\n },\n }),\n ]),\n }),\n\n GraphBuilder.createExtension({\n id: 'spaces',\n match: NodeMatcher.whenRoot,\n connector: (_node, get) => {\n const client = capabilities.get(ClientCapabilities.Client);\n const stateAtom = capabilities.get(SpaceCapabilities.State);\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const spacesAtom = CreateAtom.fromObservable(client.spaces);\n\n const spaces = get(spacesAtom);\n const personalSpace = AppSpace.getPersonalSpace(client);\n\n if (!spaces || !personalSpace) {\n return Effect.succeed([]);\n }\n\n const settingsAtom = capabilities.get(SpaceCapabilities.Settings);\n const settings = get(settingsAtom);\n const state = get(stateAtom);\n const ephemeralState = get(ephemeralAtom);\n\n try {\n const [spacesOrder] = get(personalSpace.db.query(Filter.type(Expando.Expando, { key: SHARED })).atom);\n const { graph } = capabilities.get(AppCapabilities.AppGraph);\n\n const spacesOrderSnapshot = spacesOrder ? get(Obj.atom(spacesOrder)) : undefined;\n const order: string[] = (spacesOrderSnapshot as any)?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n\n const spaceStates = spaces.map((space) => get(CreateAtom.fromObservable(space.state)));\n\n spaces.forEach((space) => {\n if (space.state.get() === SpaceState.SPACE_READY) {\n get(Obj.atom(space.properties));\n }\n });\n\n return Effect.succeed(\n [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((sortA, sortB) => orderMap.get(sortA.id)! - orderMap.get(sortB.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space, idx) => spaceStates[idx] !== SpaceState.SPACE_INACTIVE)\n .filter(\n (space) =>\n space.tags.length === 0 || AppSpace.isPersonalSpace(space) || AppSpace.isExemplarSpace(space),\n )\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: ephemeralState.navigableCollections,\n personal: AppSpace.isPersonalSpace(space),\n namesCache: state.spaceNames,\n graph,\n spacesOrder,\n }),\n ),\n );\n } catch {\n return Effect.succeed([]);\n }\n },\n // TODO(graph-path-ids): Resolver temporarily disabled; redesign needed for path-based IDs.\n // resolver: (id, get) => { ... },\n }),\n\n GraphBuilder.createExtension({\n id: 'actions',\n match: AppNodeMatcher.whenSpace,\n actions: (space, get) => {\n const [client] = get(capabilities.atom(ClientCapabilities.Client));\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n\n if (!client) {\n return Effect.succeed([]);\n }\n\n // Recompute actions when a migration completes (state transition or versionProperty stamp).\n get(CreateAtom.fromObservable(space.state));\n if (space.state.get() === SpaceState.SPACE_READY) {\n get(Obj.atom(space.properties));\n }\n\n return Effect.succeed(\n constructSpaceActions({\n space,\n migrating: ephemeralState.sdkMigrationRunning[space.id],\n }),\n );\n },\n }),\n ]);\n});\n\n//\n// Helpers\n//\n\n/** Builds an app-graph node for a space, including settings children and optional rearrange handler. */\nconst constructSpaceNode = ({\n space,\n navigable = false,\n personal,\n namesCache,\n graph,\n spacesOrder,\n}: {\n space: Space;\n navigable?: boolean;\n personal?: boolean;\n namesCache?: Record<string, string>;\n graph?: Graph.ExpandableGraph;\n spacesOrder?: Obj.Any;\n}) => {\n const hasPendingMigration = checkPendingMigration(space);\n\n let onRearrange: ((nextOrder: Space[]) => void) | undefined;\n if (graph && spacesOrder) {\n onRearrange = spaceRearrangeCache.get(space.id);\n if (!onRearrange) {\n onRearrange = (nextOrder: Space[]) => {\n Graph.sortEdges(\n graph,\n Node.RootId,\n 'outbound',\n nextOrder.map(({ id }) => id),\n );\n\n Obj.update(spacesOrder, (spacesOrder: any) => {\n spacesOrder.order = nextOrder.map(({ id }) => id);\n });\n };\n spaceRearrangeCache.set(space.id, onRearrange);\n }\n }\n\n return Node.make({\n id: space.id,\n type: SPACE_TYPE,\n cacheable: AppNode.CACHEABLE_PROPS,\n data: space,\n properties: {\n label: getSpaceDisplayName(space, { personal, namesCache }),\n description: space.state.get() === SpaceState.SPACE_READY && space.properties.description,\n hue: space.state.get() === SpaceState.SPACE_READY && space.properties.hue,\n icon:\n space.state.get() === SpaceState.SPACE_READY && space.properties.icon\n ? `ph--${space.properties.icon}--regular`\n : undefined,\n iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,\n disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n disposition: 'workspace',\n testId: 'spacePlugin.space',\n onRearrange,\n canDrop: CAN_DROP_SPACE,\n },\n });\n};\n\n/** Builds the action list for a space node (migrate, create object, rename). */\nconst constructSpaceActions = ({ space, migrating }: { space: Space; migrating?: boolean }) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const isMigrating = migrating || Migrations.running(space);\n\n const cached = spaceActionsCache.get(space.id);\n if (\n cached &&\n cached.state === state &&\n cached.hasPendingMigration === hasPendingMigration &&\n cached.migrating === isMigrating\n ) {\n return cached.actions;\n }\n\n const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [];\n\n if (hasPendingMigration) {\n actions.push(\n Node.make({\n id: SpaceOperation.Migrate.meta.key,\n type: Node.ActionGroupType,\n data: () => Operation.invoke(SpaceOperation.Migrate, { space }),\n properties: {\n label: MIGRATE_SPACE_LABEL,\n icon: 'ph--database--regular',\n disposition: 'list-item-primary',\n disabled: isMigrating,\n },\n }),\n );\n }\n\n if (state === SpaceState.SPACE_READY && !hasPendingMigration) {\n actions.push(\n Node.makeAction({\n id: SpaceOperation.OpenCreateObject.meta.key,\n data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: space.db }),\n properties: {\n label: CREATE_OBJECT_IN_SPACE_LABEL,\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n testId: 'spacePlugin.createObject',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.Rename.meta.key,\n data: (params?: Node.InvokeProps) =>\n Operation.invoke(SpaceOperation.Rename, { space, caller: `${params?.caller}:${params?.parent?.id}` }),\n properties: {\n label: RENAME_SPACE_LABEL,\n icon: 'ph--pencil-simple-line--regular',\n keyBinding: {\n macos: 'shift+F6',\n windows: 'shift+F6',\n },\n },\n }),\n );\n }\n\n spaceActionsCache.set(space.id, { state, hasPendingMigration, migrating: isMigrating, actions });\n return actions;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Option from 'effect/Option';\n\nimport { type Space, SpaceState, isSpace } from '@dxos/client/echo';\nimport { type Operation } from '@dxos/compute';\nimport { Annotation, Filter, Obj, Type } from '@dxos/echo';\nimport { MigrationVersionAnnotation, Migrations } from '@dxos/migrations';\nimport { type Node } from '@dxos/plugin-graph';\nimport { type TreeData } from '@dxos/react-ui-list';\nimport type { EchoViewRefPath } from '@dxos/schema';\nimport { ViewAnnotation, getTypeURIFromQuery } from '@dxos/schema';\nimport { type Label } from '@dxos/ui-types/translations';\n\nimport { meta } from '#meta';\n\n//\n// Virtual Node Types\n//\n\nexport const TYPES_SECTION_TYPE = `${meta.profile.key}.types`;\nexport const COLLECTIONS_SECTION_TYPE = `${meta.profile.key}.collections`;\nexport const TYPE_COLLECTION_TYPE = `${meta.profile.key}.type-collection`;\nexport const STATIC_SCHEMA_TYPE = `${meta.profile.key}.static-schema`;\n\n//\n// Constants\n//\n\n/** Shared translation namespace descriptor. */\nexport const META_NS: { ns: string } = { ns: meta.profile.key };\n\n//\n// Stable Callbacks\n//\n\nexport const BLOCK_REORDER_ABOVE = (_source: TreeData, instruction: any) => instruction.type === 'reorder-above';\nexport const CAN_DROP_SPACE = (source: TreeData) => Obj.isObject(source.item.data) || isSpace(source.item.data);\n\n//\n// Caches (space-specific, not moved to app-toolkit)\n//\n\nexport const spaceActionsCache = new Map<\n string,\n {\n state: SpaceState;\n hasPendingMigration: boolean;\n migrating: boolean;\n actions: Node.NodeArg<Node.ActionData<Operation.Service>>[];\n }\n>();\nexport const spaceRearrangeCache = new Map<string, (nextOrder: Space[]) => void>();\n\n//\n// Static Labels\n//\n\nexport const ADD_VIEW_TO_SCHEMA_LABEL: Label = ['add-view-to-schema.label', META_NS];\nexport const COPY_LINK_LABEL: Label = ['copy-link.label', META_NS];\nexport const CREATE_OBJECT_IN_COLLECTION_LABEL: Label = ['create-object-in-collection.label', META_NS];\nexport const CREATE_OBJECT_IN_SPACE_LABEL: Label = ['create-object-in-space.label', META_NS];\nexport const EXPOSE_OBJECT_LABEL: Label = ['expose-object.label', META_NS];\nexport const MIGRATE_SPACE_LABEL: Label = ['migrate-space.label', META_NS];\nexport const NEW_TYPE_LABEL: Label = ['new-type.label', META_NS];\nexport const REMOVE_FROM_COLLECTION_LABEL: Label = ['remove-from-collection.label', META_NS];\nexport const RENAME_SPACE_LABEL: Label = ['rename-space.label', META_NS];\nexport const SETTINGS_PANEL_LABEL: Label = ['settings-panel.label', META_NS];\nexport const SNAPSHOT_BY_SCHEMA_LABEL: Label = ['snapshot-by-schema.label', META_NS];\n\n//\n// Helpers\n//\n\nexport const checkPendingMigration = (space: Space) => {\n return (\n space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||\n (space.state.get() === SpaceState.SPACE_READY &&\n !!Migrations.targetVersion &&\n Annotation.get(space.properties, MigrationVersionAnnotation).pipe(Option.getOrUndefined) !==\n Migrations.targetVersion)\n );\n};\n\nexport const downloadBlob = async (blob: Blob, filename: string) => {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n\n document.body.appendChild(anchor);\n anchor.click();\n\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n};\n\n//\n// View Index\n//\n\n/**\n * Index of view objects grouped by their target type URI.\n */\nexport type ViewIndex = {\n /** Type URIs that have at least one straightforward view targeting them. */\n typeUrisWithViews: Set<string>;\n /** View objects targeting a specific type URI. */\n getViewsForTypeUri: (typeUri: string) => Obj.Any[];\n /** True when the schema has `ViewAnnotation` and that path resolves non-null on `object`; false otherwise (no annotation, or null/undefined path — e.g. Kanban with unset `view`). */\n isView: (object: Obj.Any) => boolean;\n};\n\n/**\n * Builds an index of view objects by scanning view-annotated schemas and resolving the target\n * type URI from each view's query AST. Only straightforward views whose query resolves to a\n * type URI via getTypeURIFromQuery are included.\n */\n// TODO(wittjosiah): Make reactive to schema registry changes (currently only object/view mutations trigger updates).\nexport const buildViewIndex = (get: Atom.Context, space: Space, schemas: Type.AnyEntity[]): ViewIndex => {\n const viewSchemas = schemas.filter((schema) => ViewAnnotation.has(schema));\n\n const viewsByTypeUri = new Map<string, Obj.Any[]>();\n // Object IDs whose `ViewAnnotation` path resolves to a non-null value.\n // Used by `isView` to distinguish view instances from regular instances of\n // the same schema (e.g. items-variant Kanban vs view-variant Kanban).\n const viewObjectIds = new Set<string>();\n\n if (viewSchemas.length > 0) {\n const filter = Filter.or(...viewSchemas.map((schema) => Filter.type(schema)));\n const viewObjects = get(space.db.query(filter).atom);\n\n for (const viewObject of viewObjects) {\n if (!Obj.isObject(viewObject)) {\n continue;\n }\n const holderType = Obj.getType(viewObject);\n const path = holderType\n ? ViewAnnotation.get(Type.getSchema(holderType)).pipe(Option.getOrElse(() => [] as EchoViewRefPath))\n : ([] as EchoViewRefPath);\n\n if (path.length === 0) {\n continue;\n }\n\n const viewSnapshot = get(Obj.atom(viewObject));\n let holder: unknown = viewSnapshot;\n for (const segment of path) {\n holder =\n holder == null || typeof holder !== 'object' ? undefined : (holder as Record<string, unknown>)[segment];\n }\n // Path resolved to a non-null value → this instance is a \"view\". Path\n // resolved to null/undefined → it's a regular object that happens to\n // be of a view-annotated schema.\n if (holder != null) {\n viewObjectIds.add(viewObject.id);\n }\n\n const viewTarget = holder != null ? get(Obj.atom(holder as Obj.Any)) : undefined;\n const typeUri = getTypeURIFromQuery(viewTarget?.query?.ast);\n if (typeUri) {\n const existing = viewsByTypeUri.get(typeUri) ?? [];\n existing.push(viewObject);\n viewsByTypeUri.set(typeUri, existing);\n }\n }\n }\n\n return {\n typeUrisWithViews: new Set(viewsByTypeUri.keys()),\n getViewsForTypeUri: (typeUri) => viewsByTypeUri.get(typeUri) ?? [],\n isView: (object) => viewObjectIds.has(object.id),\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { Capability, type CapabilityManager } from '@dxos/app-framework';\nimport { AppNode, AppNodeMatcher, LayoutOperation, Paths } from '@dxos/app-toolkit';\nimport { type Space, SpaceState, isSpace } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Annotation, Collection, Entity, Filter, Obj, Query, Scope, Type } from '@dxos/echo';\nimport { HiddenAnnotation } from '@dxos/echo/Annotation';\nimport { type URI } from '@dxos/keys';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { CreateAtom, GraphBuilder, Node } from '@dxos/plugin-graph';\nimport { ViewAnnotation } from '@dxos/schema';\nimport { createFilename, isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\nimport { SpaceCapabilities } from '#types';\n\nimport { makeCreateObjectEntryForDatabaseType } from '../../../util';\nimport {\n ADD_VIEW_TO_SCHEMA_LABEL,\n BLOCK_REORDER_ABOVE,\n SNAPSHOT_BY_SCHEMA_LABEL,\n STATIC_SCHEMA_TYPE,\n TYPES_SECTION_TYPE,\n TYPE_COLLECTION_TYPE,\n buildViewIndex,\n downloadBlob,\n} from './shared';\n\n//\n// Extension Factory\n//\n\n/** Creates database extensions: types section, schema nodes, schema children, and schema actions. */\nexport const createDatabaseExtensions = Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n return yield* Effect.all([\n // Types section virtual node under each space.\n GraphBuilder.createExtension({\n id: 'typesSection',\n match: AppNodeMatcher.whenSpace,\n connector: (space, get) => {\n const spaceState = get(CreateAtom.fromObservable(space.state));\n if (spaceState !== SpaceState.SPACE_READY) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed([\n AppNode.makeSection({\n id: Paths.Segments.types,\n type: TYPES_SECTION_TYPE,\n label: ['types-section.label', { ns: meta.profile.key }],\n icon: 'ph--database--regular',\n space,\n position: 'last',\n testId: 'spacePlugin.typesSection',\n }),\n ]);\n },\n }),\n\n // Schema nodes under the Types virtual node.\n GraphBuilder.createExtension({\n id: 'types',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === TYPES_SECTION_TYPE && space ? Option.some(space) : Option.none();\n },\n connector: (space, get) => {\n // Persisted types live in the space db; static/runtime types live in the shared registry.\n // Fan across both so the space's own types appear without leaking other spaces' types.\n const allSchemas = get(\n space.db.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry())).atom,\n );\n\n const userSchemas = allSchemas.filter((type) => {\n if (Type.isRelation(type)) {\n return false;\n }\n if (Type.isTypeKind(type)) {\n return false;\n }\n const schema = Type.getSchema(type);\n if (HiddenAnnotation.get(schema).pipe(Option.getOrElse(() => false))) {\n return false;\n }\n if (Type.getTypename(type) === Type.getTypename(Collection.Collection)) {\n return false;\n }\n return true;\n });\n\n const viewIndex = buildViewIndex(get, space, allSchemas);\n\n const visibleSchemas = userSchemas.filter((schema) => {\n if (Type.getDatabase(schema) != null) {\n return true;\n }\n const typeUri = Type.getURI(schema);\n const objects = get(space.db.query(Filter.type(typeUri)).atom);\n if (ViewAnnotation.has(schema)) {\n return objects.some((obj) => !viewIndex.isView(obj));\n }\n return objects.length > 0 || viewIndex.typeUrisWithViews.has(typeUri);\n });\n\n return Effect.succeed(visibleSchemas.map((schema) => createSchemaNode({ schema, space, get })));\n },\n }),\n\n // {All} virtual node + view objects under each schema node.\n GraphBuilder.createExtension({\n id: 'schemaChildren',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return space && Type.isType(node.data) ? Option.some({ space, schema: node.data }) : Option.none();\n },\n connector: ({ space, schema }, get) => {\n const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);\n const schemas = client ? get(client.graph.registry.query(Filter.type(Type.Type)).atom) : [];\n\n const slug = Paths.getTypeSlug(schema);\n const typeUri = Type.getURI(schema);\n\n // {All} virtual node.\n const allNode = Node.make({\n id: 'all',\n type: TYPE_COLLECTION_TYPE,\n data: { space, typeUri },\n properties: {\n label: ['type-collection-all.label', { ns: meta.profile.key }],\n icon: 'ph--list--regular',\n iconHue: 'neutral',\n role: 'branch',\n testId: `spacePlugin.typeCollectionAll.${slug}`,\n selectable: false,\n draggable: false,\n droppable: false,\n childrenDroppable: false,\n blockInstruction: BLOCK_REORDER_ABOVE,\n },\n });\n\n // View objects for this schema.\n const viewIndex = buildViewIndex(get, space, schemas);\n const viewNodes = viewIndex\n .getViewsForTypeUri(typeUri)\n .map((object: Obj.Unknown) =>\n AppNode.makeObject({\n get,\n db: space.db,\n object,\n droppable: false,\n }),\n )\n .filter(isNonNullable);\n\n return Effect.succeed([allNode, ...viewNodes]);\n },\n }),\n\n // Objects of the schema type under the {All} node.\n GraphBuilder.createExtension({\n id: 'typeCollectionObjects',\n match: (node) => {\n if (node.type !== TYPE_COLLECTION_TYPE || !node.data?.space || !node.data?.typeUri) {\n return Option.none();\n }\n return Option.some({ space: node.data.space as Space, typeUri: node.data.typeUri as URI.URI });\n },\n connector: ({ space, typeUri }, get) => {\n const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);\n const schemas = client ? get(client.graph.registry.query(Filter.type(Type.Type)).atom) : [];\n const viewIndex = buildViewIndex(get, space, schemas);\n const objects = get(space.db.query(Filter.type(typeUri)).atom).filter(\n (object: Obj.Unknown) => !viewIndex.isView(object) && !Obj.getParent(object),\n );\n\n return Effect.succeed(\n objects\n .map((object: Obj.Unknown) => {\n get(Obj.atom(object));\n return AppNode.makeObject({\n get,\n db: space.db,\n object,\n droppable: false,\n });\n })\n .filter(isNonNullable)\n .toSorted((nodeA, nodeB) => {\n const labelA = typeof nodeA.properties.label === 'string' ? nodeA.properties.label : '';\n const labelB = typeof nodeB.properties.label === 'string' ? nodeB.properties.label : '';\n return labelA.localeCompare(labelB);\n }),\n );\n },\n }),\n\n // Actions for schema nodes.\n GraphBuilder.createExtension({\n id: 'schemaActions',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return space && Type.isType(node.data) ? Option.some({ space, schema: node.data }) : Option.none();\n },\n actions: ({ space, schema }, get) => {\n const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);\n const schemas = client ? get(client.graph.registry.query(Filter.type(Type.Type)).atom) : [];\n\n const targetUri = Type.getURI(schema);\n const viewIndex = buildViewIndex(get, space, schemas);\n const deletable = Type.getDatabase(schema) != null && viewIndex.getViewsForTypeUri(targetUri).length === 0;\n\n return Effect.succeed(createSchemaActions({ type: schema, space, deletable, capabilities }));\n },\n }),\n ]);\n});\n\n//\n// Helpers\n//\n\n/** Returns schemas keyed uniquely by typename, preferring later entries. */\nconst uniqueSchemasByTypename = <TSchema extends Type.AnyEntity>(schemas: TSchema[]): TSchema[] => {\n const uniqueSchemas = new Map<string, TSchema>();\n for (const schema of schemas) {\n uniqueSchemas.set(Type.getTypename(schema), schema);\n }\n\n return [...uniqueSchemas.values()];\n};\n\n/** Builds a graph node for a schema in the Types subtree. */\nconst createSchemaNode = ({\n schema,\n space,\n get,\n}: {\n schema: Type.AnyEntity;\n space: Space;\n get: Atom.Context;\n}): Node.NodeArg<Type.AnyEntity> => {\n const typename = Type.getTypename(schema);\n // The node id doubles as the `types/<slug>` path segment, so it must be slash- and colon-free:\n // a stored schema's entity id, or a static schema's typename.\n const slug = Paths.getTypeSlug(schema);\n const iconAnnotation =\n Type.getDatabase(schema) == null\n ? Option.getOrUndefined(Annotation.IconAnnotation.get(Type.getSchema(schema)))\n : undefined;\n const { label, nodeId } = Match.value(schema).pipe(\n Match.when(\n (value: Type.AnyEntity) => Type.getDatabase(value) != null,\n (mutableSchema) => {\n // Type.AnyEntity has KindId=Type at the type level but is a valid ECHO entity at runtime.\n const snapshot = get(Entity.atom(mutableSchema as unknown as Entity.Unknown));\n return {\n label: (snapshot as { name?: string }).name || [\n 'object-name.placeholder',\n { ns: Type.getTypename(Type.Type) },\n ],\n nodeId: slug,\n };\n },\n ),\n Match.orElse(() => ({\n label: AppNode.getDynamicLabel('typename.label', typename, { count: 2, defaultValue: typename }),\n nodeId: slug,\n })),\n );\n const icon =\n Type.getDatabase(schema) != null ? 'ph--cube--regular' : (iconAnnotation?.icon ?? 'ph--circle-dashed--regular');\n const iconHue = Type.getDatabase(schema) != null ? 'neutral' : iconAnnotation?.hue;\n return Node.make({\n id: nodeId,\n type: STATIC_SCHEMA_TYPE,\n data: schema,\n properties: {\n label,\n icon,\n iconHue,\n role: 'branch',\n testId: `spacePlugin.schemaNode.${typename}`,\n selectable: false,\n draggable: false,\n droppable: false,\n childrenDroppable: false,\n space,\n },\n });\n};\n\n/** Builds schema actions (add view, rename, delete, snapshot). */\nconst createSchemaActions = ({\n type,\n space,\n deletable,\n capabilities,\n}: {\n type: Type.AnyEntity;\n space: Space;\n deletable: boolean;\n capabilities: CapabilityManager.CapabilityManager;\n}) => {\n const typename = Type.getTypename(type);\n const createEntry = capabilities\n .getAll(SpaceCapabilities.CreateObjectEntry)\n .find((entry: SpaceCapabilities.CreateObjectEntry) => entry.id === typename);\n\n // For database-persisted object schemas without a dedicated capability, synthesize a generic entry.\n const resolvedEntry: SpaceCapabilities.CreateObjectEntry | undefined =\n createEntry ??\n (Type.getDatabase(type) != null && Type.isObject(type) ? makeCreateObjectEntryForDatabaseType(type) : undefined);\n const createObjectFn = resolvedEntry?.createObject;\n const inputSchema = resolvedEntry?.inputSchema;\n\n const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [\n ...(createObjectFn\n ? [\n Node.makeAction({\n id: SpaceOperation.OpenCreateObject.meta.key,\n data: Effect.fnUntraced(function* () {\n if (inputSchema) {\n yield* Operation.invoke(SpaceOperation.OpenCreateObject, {\n target: space.db,\n typename,\n });\n } else {\n const result = yield* createObjectFn({}, { db: space.db, target: space.db }).pipe(\n Effect.provideService(Capability.Service, capabilities),\n );\n if (result.subject.length > 0) {\n yield* Operation.invoke(LayoutOperation.Open, {\n subject: [...result.subject],\n navigation: 'immediate',\n });\n }\n }\n }),\n properties: {\n // Static plugin types carry a per-typename `add-object.label` (e.g. \"Add event\");\n // database types have no such namespace, so fall back to the plugin's generic label.\n label: AppNode.getDynamicLabel(\n 'add-object.label',\n Type.getDatabase(type) != null ? meta.profile.key : typename,\n ),\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n testId: 'spacePlugin.createObject',\n },\n }),\n ]\n : []),\n Node.makeAction({\n id: `${SpaceOperation.AddObject.meta.key}-view`,\n data: () =>\n Operation.invoke(SpaceOperation.OpenCreateObject, {\n target: space.db,\n views: true,\n initialFormValues: { typename: Type.getTypename(type) },\n }),\n properties: {\n label: ADD_VIEW_TO_SCHEMA_LABEL,\n icon: 'ph--circles-three-plus--regular',\n disposition: 'list-item',\n testId: 'spacePlugin.addViewToSchema',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.RenameObject.meta.key,\n data: (params?: Node.InvokeProps) =>\n Type.getDatabase(type) != null\n ? Operation.invoke(SpaceOperation.RenameObject, {\n object: type,\n caller: `${params?.caller}:${params?.parent?.id}`,\n })\n : Effect.fail(new Error('Cannot rename immutable schema')),\n properties: {\n label: AppNode.getDynamicLabel('rename-object.label', Type.getTypename(Type.Type)),\n icon: 'ph--pencil-simple-line--regular',\n disabled: Type.getDatabase(type) == null,\n disposition: 'list-item',\n testId: 'spacePlugin.renameObject',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.RemoveObjects.meta.key,\n data: () =>\n Type.getDatabase(type) != null\n ? Operation.invoke(SpaceOperation.RemoveObjects, {\n objects: [type],\n })\n : Effect.succeed(undefined),\n properties: {\n label: AppNode.getDynamicLabel('delete-object.label', Type.getTypename(Type.Type)),\n icon: 'ph--trash--regular',\n disposition: 'list-item',\n disabled: !deletable,\n testId: 'spacePlugin.deleteObject',\n },\n }),\n Node.makeAction({\n id: SpaceOperation.Snapshot.meta.key,\n data: Effect.fnUntraced(function* () {\n const result = yield* Operation.invoke(SpaceOperation.Snapshot, {\n db: space.db,\n query: Query.select(Filter.type(type)).ast,\n });\n if (result.snapshot) {\n yield* Effect.tryPromise(() =>\n downloadBlob(result.snapshot, createFilename({ parts: [space.id, Type.getTypename(type)], ext: 'json' })),\n );\n }\n }),\n properties: {\n label: SNAPSHOT_BY_SCHEMA_LABEL,\n icon: 'ph--camera--regular',\n disposition: 'list-item',\n },\n }),\n ];\n\n return actions;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppAnnotation, AppCapabilities, AppNode, AppNodeMatcher, LayoutOperation, Paths } from '@dxos/app-toolkit';\nimport { SpaceState, isSpace } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Annotation, Collection, Obj, Type } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { CreateAtom, Graph, GraphBuilder, Node } from '@dxos/plugin-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\nimport { SpaceCapabilities } from '#types';\n\nimport {\n COLLECTIONS_SECTION_TYPE,\n COPY_LINK_LABEL,\n CREATE_OBJECT_IN_COLLECTION_LABEL,\n EXPOSE_OBJECT_LABEL,\n REMOVE_FROM_COLLECTION_LABEL,\n} from './shared';\n\n//\n// Extension Factory\n//\n\n/** Creates collection-related extensions: collections section, collections, objects, and object actions. */\nexport const createCollectionExtensions = Effect.fnUntraced(function* ({\n shareableLinkOrigin,\n}: {\n shareableLinkOrigin: string;\n}) {\n const capabilities = yield* Capability.Service;\n\n return yield* Effect.all([\n // Collections section virtual node under each space.\n GraphBuilder.createExtension({\n id: 'collectionsSection',\n match: AppNodeMatcher.whenSpace,\n connector: (space, get) => {\n const spaceState = get(CreateAtom.fromObservable(space.state));\n if (spaceState !== SpaceState.SPACE_READY) {\n return Effect.succeed([]);\n }\n\n get(Obj.atom(space.properties));\n const collectionRef = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(\n Option.getOrUndefined,\n );\n if (collectionRef) {\n get(Obj.atom(collectionRef));\n }\n const rootCollection = collectionRef?.target;\n const collectionPartials = rootCollection\n ? AppNode.getCollectionGraphNodePartials({ db: space.db, collection: rootCollection })\n : undefined;\n\n return Effect.succeed([\n Node.make({\n id: Paths.Segments.collections,\n type: COLLECTIONS_SECTION_TYPE,\n data: null,\n properties: {\n label: ['collections-section.label', { ns: meta.profile.key }],\n icon: 'ph--folder--regular',\n iconHue: 'amber',\n role: 'branch',\n position: 'first',\n testId: 'spacePlugin.collectionsSection',\n draggable: false,\n droppable: false,\n space,\n ...collectionPartials,\n },\n }),\n ]);\n },\n }),\n\n // Root collection objects under the Collections virtual node.\n GraphBuilder.createExtension({\n id: 'collections',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === COLLECTIONS_SECTION_TYPE && space ? Option.some(space) : Option.none();\n },\n connector: (space, get) => {\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n\n get(Obj.atom(space.properties));\n const collectionRef = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(\n Option.getOrUndefined,\n );\n const collection = collectionRef ? get(Obj.atom(collectionRef)) : undefined;\n if (!collection) {\n return Effect.succeed([]);\n }\n\n const rawRefs = collection.objects ?? [];\n\n const objects = rawRefs\n .map((ref: any) => {\n get(Obj.atom(ref));\n return ref.target;\n })\n .filter(isNonNullable);\n\n return Effect.succeed(\n objects\n .map((object: Obj.Unknown) =>\n AppNode.makeObject({\n get,\n db: space.db,\n object,\n navigable: ephemeralState.navigableCollections,\n parentCollection: collectionRef?.target,\n }),\n )\n .filter(isNonNullable),\n );\n },\n }),\n\n // Children of Collection.Collection nodes.\n GraphBuilder.createExtension({\n id: 'objects',\n match: (node) => (Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none()),\n connector: (collection, get) => {\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n const db = Obj.getDatabase(collection);\n\n const collectionSnapshot = get(Obj.atom(collection));\n const refs = collectionSnapshot.objects ?? [];\n\n const objects = refs\n .map((ref: any) => {\n get(Obj.atom(ref));\n return ref.target;\n })\n .filter(isNonNullable);\n\n return Effect.succeed(\n objects\n .map(\n (object: Obj.Unknown) =>\n db &&\n AppNode.makeObject({\n get,\n object,\n db,\n navigable: ephemeralState.navigableCollections,\n parentCollection: collection,\n }),\n )\n .filter(isNonNullable),\n );\n },\n // TODO(graph-path-ids): Resolver temporarily disabled; redesign needed for path-based IDs.\n // resolver: (id, get) => { ... },\n }),\n\n // Object actions.\n GraphBuilder.createExtension({\n id: 'objectActions',\n match: (node) => {\n return node.data != null &&\n Obj.getDatabase(node.data) &&\n Obj.isObject(node.data) &&\n Obj.getTypename(node.data) === node.type\n ? Option.some({ object: node.data, nodeId: node.id })\n : Option.none();\n },\n actions: ({ object, nodeId }, get) => {\n const deletable = !Type.isType(object);\n\n const [appGraph] = get(capabilities.atom(AppCapabilities.AppGraph));\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n\n if (!appGraph) {\n return Effect.succeed([]);\n }\n\n const parentId = nodeId.substring(0, nodeId.lastIndexOf('/'));\n const parentNode = Option.getOrUndefined(Graph.getNode(appGraph.graph, parentId));\n const parentCollection =\n parentNode && Obj.instanceOf(Collection.Collection, parentNode.data) ? parentNode.data : undefined;\n\n return Effect.succeed(\n constructObjectActions({\n object,\n nodeId,\n deletable,\n navigable: ephemeralState.navigableCollections,\n shareableLinkOrigin,\n parentCollection,\n }),\n );\n },\n }),\n\n // Action on the collections section header to create a new collection.\n GraphBuilder.createExtension({\n id: 'collectionsSectionActions',\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return node.type === COLLECTIONS_SECTION_TYPE && space ? Option.some(space) : Option.none();\n },\n actions: (space) =>\n Effect.succeed([\n Node.makeAction({\n id: 'create-collection',\n data: () =>\n Operation.invoke(SpaceOperation.OpenCreateObject, {\n target: space.db,\n typename: Type.getTypename(Collection.Collection),\n }),\n properties: {\n label: ['add-object.label', { ns: Type.getTypename(Collection.Collection) }],\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n },\n }),\n ]),\n }),\n ]);\n});\n\n//\n// Helpers\n//\n\n/** Builds the action list for an ECHO object node. */\nconst constructObjectActions = ({\n object,\n nodeId,\n deletable = true,\n navigable = false,\n shareableLinkOrigin,\n parentCollection,\n}: {\n object: Obj.Unknown;\n nodeId: string;\n shareableLinkOrigin: string;\n deletable?: boolean;\n navigable?: boolean;\n parentCollection?: Collection.Collection;\n}) => {\n const db = Obj.getDatabase(object);\n invariant(db, 'Database not found');\n const typename = Obj.getTypename(object);\n invariant(typename, 'Object has no typename');\n\n const actions: Node.NodeArg<Node.ActionData<Operation.Service | Capability.Service>>[] = [\n ...(Obj.instanceOf(Collection.Collection, object)\n ? [\n Node.makeAction({\n id: SpaceOperation.OpenCreateObject.meta.key,\n data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: object, targetNodeId: nodeId }),\n properties: {\n label: CREATE_OBJECT_IN_COLLECTION_LABEL,\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n testId: 'spacePlugin.createObject',\n },\n }),\n ]\n : []),\n Node.makeAction({\n id: SpaceOperation.RenameObject.meta.key,\n data: (params?: Node.InvokeProps) =>\n Operation.invoke(SpaceOperation.RenameObject, { object, caller: `${params?.caller}:${params?.parent?.id}` }),\n properties: {\n label: AppNode.getDynamicLabel('rename-object.label', typename, { defaultValue: 'Rename' }),\n icon: 'ph--pencil-simple-line--regular',\n disposition: 'list-item',\n testId: 'spacePlugin.renameObject',\n },\n }),\n ...(parentCollection && !Obj.instanceOf(Collection.Collection, object)\n ? [\n Node.makeAction({\n id: 'removeFromCollection',\n data: () =>\n Effect.gen(function* () {\n const index = parentCollection.objects.findIndex((ref: any) => ref.target === object);\n if (index !== -1) {\n const layout = yield* Capabilities.getAtomValue(AppCapabilities.Layout);\n const isActive = layout.active.includes(nodeId);\n\n Obj.update(parentCollection, (parentCollection) => {\n parentCollection.objects.splice(index, 1);\n });\n\n if (isActive) {\n yield* Operation.invoke(LayoutOperation.Open, {\n subject: [Paths.getObjectPathFromObject(object)],\n });\n }\n }\n }),\n properties: {\n label: REMOVE_FROM_COLLECTION_LABEL,\n icon: 'ph--minus-circle--regular',\n disposition: 'list-item',\n testId: 'spacePlugin.removeFromCollection',\n },\n }),\n ]\n : []),\n Node.makeAction({\n id: SpaceOperation.RemoveObjects.meta.key,\n data: () =>\n Operation.invoke(SpaceOperation.RemoveObjects, {\n objects: [object],\n target: parentCollection,\n }),\n properties: {\n label: AppNode.getDynamicLabel('delete-object.label', typename, { defaultValue: 'Delete' }),\n icon: 'ph--trash--regular',\n disposition: 'list-item',\n disabled: !deletable,\n testId: 'spacePlugin.deleteObject',\n },\n }),\n ...(navigable || !Obj.instanceOf(Collection.Collection, object)\n ? [\n Node.makeAction({\n id: 'copyLink',\n data: () =>\n Effect.promise(async () => {\n const url = new URL(Paths.toUrlPath(nodeId), shareableLinkOrigin);\n await navigator.clipboard.writeText(url.toString());\n }),\n properties: {\n label: COPY_LINK_LABEL,\n icon: 'ph--link--regular',\n disposition: 'list-item',\n testId: 'spacePlugin.copyLink',\n },\n }),\n ]\n : []),\n Node.makeAction({\n id: LayoutOperation.Expose.meta.key,\n data: () => Operation.invoke(LayoutOperation.Expose, { subject: Paths.getObjectPathFromObject(object) }),\n properties: {\n label: EXPOSE_OBJECT_LABEL,\n icon: 'ph--eye--regular',\n disposition: 'heading-list-item',\n testId: 'spacePlugin.exposeObject',\n },\n }),\n ];\n\n return actions;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { AppNode } from '@dxos/app-toolkit';\nimport { Obj, Type } from '@dxos/echo';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { linkedSegment } from '@dxos/react-ui-attention';\nimport type { EchoViewRefPath } from '@dxos/schema';\nimport { ViewAnnotation } from '@dxos/schema';\n\nimport { meta } from '#meta';\n\n//\n// Extension Factory\n//\n\n/** Creates companion panel extensions: object settings and selected-objects. */\n// NOTE: Explicit annotation required: d.ts emit cannot portably name the inferred @dxos/plugin-graph types (TS2883).\nexport const createCompanionExtensions: () => Effect.Effect<GraphBuilder.BuilderExtension[][]> = Effect.fnUntraced(\n function* () {\n return yield* Effect.all([\n // Object settings plank companion.\n GraphBuilder.createExtension({\n id: 'settings',\n match: NodeMatcher.whenEchoObjectMatches,\n connector: (node) =>\n Effect.succeed([\n AppNode.makeCompanion({\n id: linkedSegment('settings'),\n label: ['object-properties.label', { ns: meta.profile.key }],\n icon: 'ph--sliders--regular',\n data: 'settings', // TODO(burdon): Change to 'object-properties'.\n position: 'last',\n }),\n ]),\n }),\n\n // Related objects plank companion.\n GraphBuilder.createExtension({\n id: 'related',\n match: NodeMatcher.whenEchoObjectMatches,\n connector: (node) =>\n Effect.succeed([\n AppNode.makeCompanion({\n id: linkedSegment('related'),\n label: ['companion-related.label', { ns: meta.profile.key }],\n icon: 'ph--graph--regular',\n data: 'related',\n position: 'last',\n }),\n ]),\n }),\n\n // View selected objects companion.\n GraphBuilder.createExtension({\n id: 'selectedObjects',\n match: (node) => {\n if (!Obj.isObject(node.data)) {\n return Option.none();\n }\n\n const type = Obj.getType(node.data);\n const path = type\n ? ViewAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => [] as EchoViewRefPath))\n : [];\n const isEchoViewBacked = type && path.length > 0 ? ViewAnnotation.hasRefAlongPath(node.data, path) : false;\n\n if (!isEchoViewBacked) {\n return Option.none();\n }\n\n return Option.some(node);\n },\n connector: (node) =>\n Effect.succeed([\n AppNode.makeCompanion({\n id: linkedSegment('selected-objects'),\n label: ['companion-selected-objects.label', { ns: meta.profile.key }],\n icon: 'ph--tree-view--regular',\n data: 'selected-objects',\n }),\n ]),\n }),\n ]);\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { AppNode, AppNodeMatcher, AppSpace } from '@dxos/app-toolkit';\nimport { GraphBuilder, Node } from '@dxos/plugin-graph';\n\nimport { meta } from '#meta';\nimport { SETTINGS_SECTION_ID, SETTINGS_SECTION_TYPE } from '#types';\n\n//\n// Extension Factory\n//\n\n/**\n * Settings section attached directly under each Space node, plus its children.\n *\n * The virtual `settings` section is pinned to the top via `position: 'first'`\n * so it sits above the un-positioned middle band (collections, mailboxes,\n * automations, integrations, etc.). It groups the panels contributed by this\n * plugin (general, members) and by other plugins (automation, functions).\n */\nexport const createSettingsExtensions = Effect.fnUntraced(function* () {\n const sectionExtension = yield* GraphBuilder.createExtension({\n id: 'settingsSection',\n match: AppNodeMatcher.whenSpace,\n connector: (space) =>\n Effect.succeed([\n AppNode.makeSection({\n id: SETTINGS_SECTION_ID,\n type: SETTINGS_SECTION_TYPE,\n label: ['settings-section.label', { ns: meta.profile.key }],\n icon: 'ph--sliders--regular',\n iconHue: 'indigo',\n space,\n position: 'first',\n testId: 'spacePlugin.settings',\n }),\n ]),\n });\n\n const childrenExtension = yield* GraphBuilder.createExtension({\n id: 'settingsSections',\n match: AppNodeMatcher.whenSpaceSettings,\n connector: (space) => {\n const personal = AppSpace.isPersonalSpace(space);\n return Effect.succeed([\n Node.make({\n id: 'general',\n type: `${meta.profile.key}.general`,\n data: `${meta.profile.key}.general`,\n properties: {\n label: ['space-settings-properties.label', { ns: meta.profile.key }],\n icon: 'ph--brackets-curly--regular',\n iconHue: 'indigo',\n space,\n testId: 'spacePlugin.general',\n },\n }),\n ...(!personal\n ? [\n Node.make({\n id: 'members',\n type: `${meta.profile.key}.members`,\n data: `${meta.profile.key}.members`,\n properties: {\n label: ['members-panel.label', { ns: meta.profile.key }],\n icon: 'ph--users--regular',\n iconHue: 'indigo',\n space,\n testId: 'spacePlugin.members',\n },\n }),\n ]\n : []),\n ]);\n },\n });\n\n return [sectionExtension, childrenExtension];\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "Capability", "AppCapabilities", "Effect", "Capability", "AppCapabilities", "AppNode", "AppNodeMatcher", "AppSpace", "Paths", "SpaceState", "Operation", "Filter", "Obj", "Migrations", "ClientCapabilities", "CreateAtom", "Graph", "GraphBuilder", "Node", "NodeMatcher", "SpaceArchive", "Expando", "meta", "SpaceOperation", "SPACE_HOME_NODE_TYPE", "SPACE_TYPE", "SpaceCapabilities", "Option", "SpaceState", "isSpace", "Annotation", "Filter", "Obj", "Type", "MigrationVersionAnnotation", "Migrations", "ViewAnnotation", "getTypeURIFromQuery", "meta", "TYPES_SECTION_TYPE", "profile", "key", "COLLECTIONS_SECTION_TYPE", "TYPE_COLLECTION_TYPE", "STATIC_SCHEMA_TYPE", "META_NS", "ns", "BLOCK_REORDER_ABOVE", "_source", "instruction", "type", "CAN_DROP_SPACE", "source", "isObject", "item", "data", "spaceActionsCache", "Map", "spaceRearrangeCache", "ADD_VIEW_TO_SCHEMA_LABEL", "COPY_LINK_LABEL", "CREATE_OBJECT_IN_COLLECTION_LABEL", "CREATE_OBJECT_IN_SPACE_LABEL", "EXPOSE_OBJECT_LABEL", "MIGRATE_SPACE_LABEL", "REMOVE_FROM_COLLECTION_LABEL", "META_NS", "RENAME_SPACE_LABEL", "SNAPSHOT_BY_SCHEMA_LABEL", "META_NS", "checkPendingMigration", "space", "state", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "SPACE_READY", "Migrations", "targetVersion", "Annotation", "properties", "MigrationVersionAnnotation", "pipe", "getOrUndefined", "downloadBlob", "blob", "filename", "url", "URL", "createObjectURL", "anchor", "document", "createElement", "href", "download", "body", "appendChild", "click", "removeChild", "revokeObjectURL", "buildViewIndex", "schemas", "viewSchemas", "filter", "schema", "ViewAnnotation", "has", "viewsByTypeUri", "Map", "viewObjectIds", "Set", "length", "Filter", "or", "map", "type", "viewObjects", "db", "query", "atom", "viewObject", "Obj", "isObject", "holderType", "getType", "path", "Type", "getSchema", "getOrElse", "viewSnapshot", "holder", "segment", "undefined", "add", "id", "viewTarget", "typeUri", "getTypeURIFromQuery", "ast", "existing", "push", "set", "typeUrisWithViews", "keys", "getViewsForTypeUri", "isView", "object", "SPACE_HOME_NODE_LABEL", "ns", "meta", "profile", "key", "createSpaceExtensions", "fnUntraced", "capabilities", "Capability", "Service", "all", "GraphBuilder", "createExtension", "id", "position", "match", "AppNodeMatcher", "whenSpace", "connector", "space", "succeed", "Paths", "SPACE_HOME_SEGMENT", "type", "SPACE_HOME_NODE_TYPE", "data", "properties", "label", "icon", "iconHue", "draggable", "droppable", "NodeMatcher", "whenRoot", "actions", "Node", "makeAction", "SpaceOperation", "OpenCreateSpace", "Operation", "invoke", "testId", "disposition", "Join", "OpenImportSpace", "ExportSpace", "client", "get", "ClientCapabilities", "Client", "AppSpace", "getActiveSpace", "getPersonalSpace", "format", "SpaceArchive", "Format", "BINARY", "JSON", "OpenMembers", "keyBinding", "macos", "windows", "OpenSettings", "_node", "stateAtom", "SpaceCapabilities", "State", "ephemeralAtom", "EphemeralState", "spacesAtom", "CreateAtom", "fromObservable", "spaces", "personalSpace", "settingsAtom", "Settings", "settings", "state", "ephemeralState", "spacesOrder", "db", "query", "Filter", "Expando", "SHARED", "atom", "graph", "AppCapabilities", "AppGraph", "spacesOrderSnapshot", "Obj", "undefined", "order", "orderMap", "Map", "map", "index", "spaceStates", "forEach", "SpaceState", "SPACE_READY", "filter", "has", "sort", "sortA", "sortB", "idx", "SPACE_INACTIVE", "tags", "length", "isPersonalSpace", "isExemplarSpace", "constructSpaceNode", "navigable", "navigableCollections", "personal", "namesCache", "spaceNames", "constructSpaceActions", "migrating", "sdkMigrationRunning", "hasPendingMigration", "checkPendingMigration", "onRearrange", "spaceRearrangeCache", "nextOrder", "Graph", "sortEdges", "RootId", "update", "set", "make", "SPACE_TYPE", "cacheable", "AppNode", "CACHEABLE_PROPS", "getSpaceDisplayName", "description", "hue", "disabled", "canDrop", "CAN_DROP_SPACE", "isMigrating", "Migrations", "running", "cached", "spaceActionsCache", "push", "Migrate", "ActionGroupType", "MIGRATE_SPACE_LABEL", "OpenCreateObject", "target", "CREATE_OBJECT_IN_SPACE_LABEL", "Rename", "params", "caller", "parent", "RENAME_SPACE_LABEL", "Effect", "Match", "Option", "Capability", "AppNode", "AppNodeMatcher", "LayoutOperation", "Paths", "SpaceState", "isSpace", "Operation", "Annotation", "Collection", "Entity", "Filter", "Obj", "Query", "Scope", "Type", "HiddenAnnotation", "ClientCapabilities", "CreateAtom", "GraphBuilder", "Node", "ViewAnnotation", "createFilename", "isNonNullable", "meta", "SpaceOperation", "SpaceCapabilities", "createDatabaseExtensions", "fnUntraced", "capabilities", "Capability", "Service", "all", "GraphBuilder", "createExtension", "id", "match", "AppNodeMatcher", "whenSpace", "connector", "space", "get", "spaceState", "CreateAtom", "fromObservable", "state", "SpaceState", "SPACE_READY", "succeed", "AppNode", "makeSection", "Paths", "Segments", "types", "type", "TYPES_SECTION_TYPE", "label", "ns", "meta", "profile", "key", "icon", "position", "testId", "node", "isSpace", "properties", "undefined", "some", "none", "allSchemas", "db", "query", "Query", "select", "Filter", "Type", "from", "Scope", "registry", "atom", "userSchemas", "filter", "isRelation", "isTypeKind", "schema", "getSchema", "HiddenAnnotation", "pipe", "getOrElse", "getTypename", "Collection", "viewIndex", "buildViewIndex", "visibleSchemas", "getDatabase", "typeUri", "getURI", "objects", "ViewAnnotation", "has", "obj", "isView", "length", "typeUrisWithViews", "map", "createSchemaNode", "isType", "data", "client", "ClientCapabilities", "Client", "at", "schemas", "graph", "slug", "getTypeSlug", "allNode", "Node", "make", "TYPE_COLLECTION_TYPE", "iconHue", "role", "selectable", "draggable", "droppable", "childrenDroppable", "blockInstruction", "BLOCK_REORDER_ABOVE", "viewNodes", "getViewsForTypeUri", "object", "makeObject", "isNonNullable", "Obj", "getParent", "toSorted", "nodeA", "nodeB", "labelA", "labelB", "localeCompare", "actions", "targetUri", "deletable", "createSchemaActions", "createSchemaNode", "schema", "space", "get", "typename", "Type", "getTypename", "slug", "Paths", "getTypeSlug", "iconAnnotation", "getDatabase", "getOrUndefined", "Annotation", "IconAnnotation", "getSchema", "undefined", "label", "nodeId", "value", "pipe", "when", "mutableSchema", "snapshot", "Entity", "atom", "name", "ns", "orElse", "AppNode", "getDynamicLabel", "count", "defaultValue", "icon", "iconHue", "hue", "Node", "make", "id", "type", "STATIC_SCHEMA_TYPE", "data", "properties", "role", "testId", "selectable", "draggable", "droppable", "childrenDroppable", "createSchemaActions", "deletable", "capabilities", "createEntry", "getAll", "SpaceCapabilities", "CreateObjectEntry", "find", "entry", "resolvedEntry", "isObject", "makeCreateObjectEntryForDatabaseType", "createObjectFn", "createObject", "inputSchema", "actions", "makeAction", "SpaceOperation", "OpenCreateObject", "meta", "key", "fnUntraced", "Operation", "invoke", "target", "db", "result", "provideService", "Capability", "Service", "subject", "length", "LayoutOperation", "Open", "navigation", "profile", "disposition", "AddObject", "views", "initialFormValues", "ADD_VIEW_TO_SCHEMA_LABEL", "RenameObject", "params", "object", "caller", "parent", "fail", "Error", "disabled", "RemoveObjects", "objects", "succeed", "Snapshot", "query", "Query", "select", "Filter", "ast", "tryPromise", "downloadBlob", "createFilename", "parts", "ext", "SNAPSHOT_BY_SCHEMA_LABEL", "Effect", "Option", "Capabilities", "Capability", "AppAnnotation", "AppCapabilities", "AppNode", "AppNodeMatcher", "LayoutOperation", "Paths", "SpaceState", "isSpace", "Operation", "Annotation", "Collection", "Obj", "Type", "invariant", "CreateAtom", "Graph", "GraphBuilder", "Node", "isNonNullable", "meta", "SpaceOperation", "SpaceCapabilities", "Capability", "GraphBuilder", "createExtension", "AppNodeMatcher", "whenSpace", "connector", "spaceState", "SpaceState", "succeed", "Obj", "space", "properties", "collectionRef", "get", "rootCollection", "db", "collection", "undefined", "Node", "Paths", "Segments", "type", "COLLECTIONS_SECTION_TYPE", "data", "label", "meta", "icon", "iconHue", "role", "position", "testId", "draggable", "droppable", "collectionPartials", "node", "isSpace", "ephemeralState", "SpaceCapabilities", "Annotation", "objects", "ref", "target", "filter", "isNonNullable", "Effect", "AppNode", "object", "navigable", "parentCollection", "instanceOf", "ephemeralAtom", "capabilities", "EphemeralState", "getDatabase", "collectionSnapshot", "refs", "atom", "nodeId", "none", "actions", "appGraph", "substring", "parentNode", "Collection", "constructObjectActions", "deletable", "shareableLinkOrigin", "Operation", "typename", "Type", "getTypename", "disposition", "invariant", "makeAction", "SpaceOperation", "OpenCreateObject", "key", "targetNodeId", "id", "params", "caller", "parent", "defaultValue", "index", "layout", "Capabilities", "getAtomValue", "AppCapabilities", "Layout", "isActive", "update", "splice", "subject", "getObjectPathFromObject", "disabled", "navigator", "clipboard", "writeText", "LayoutOperation", "Effect", "Option", "AppNode", "Obj", "Type", "GraphBuilder", "NodeMatcher", "linkedSegment", "ViewAnnotation", "meta", "createCompanionExtensions", "fnUntraced", "all", "createExtension", "id", "match", "whenEchoObjectMatches", "connector", "node", "succeed", "makeCompanion", "label", "ns", "profile", "key", "icon", "data", "position", "isObject", "none", "type", "getType", "path", "get", "getSchema", "pipe", "getOrElse", "isEchoViewBacked", "length", "hasRefAlongPath", "some", "Effect", "AppNode", "AppNodeMatcher", "AppSpace", "GraphBuilder", "Node", "meta", "SETTINGS_SECTION_ID", "SETTINGS_SECTION_TYPE", "createSettingsExtensions", "fnUntraced", "sectionExtension", "createExtension", "id", "match", "whenSpace", "connector", "space", "succeed", "makeSection", "type", "label", "ns", "profile", "key", "icon", "iconHue", "position", "testId", "childrenExtension", "whenSpaceSettings", "personal", "isPersonalSpace", "make", "data", "properties", "Capability", "makeModule", "fnUntraced", "shareableLinkOrigin", "window", "location", "origin", "extensions", "all", "createSpaceExtensions", "createSettingsExtensions", "createDatabaseExtensions", "createCollectionExtensions", "createCompanionExtensions", "contributes", "AppCapabilities", "AppGraphBuilder", "flat"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
makeCreateObjectEntryForDatabaseType
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-PSCIOT7Q.mjs";
|
|
4
|
+
import "../chunk-DSYEB2UN.mjs";
|
|
5
5
|
import "../chunk-J5LGTIGS.mjs";
|
|
6
6
|
|
|
7
7
|
// src/capabilities/index.ts
|
|
@@ -9,28 +9,26 @@ import { Capability as Capability3 } from "@dxos/app-framework";
|
|
|
9
9
|
|
|
10
10
|
// src/capabilities/app-graph-builder/index.ts
|
|
11
11
|
import { Capability } from "@dxos/app-framework";
|
|
12
|
-
var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-
|
|
12
|
+
var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-TMAD2ZTH.mjs"));
|
|
13
13
|
|
|
14
14
|
// src/capabilities/navigation-handler/index.ts
|
|
15
15
|
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
16
|
-
var NavigationHandler = Capability2.lazy("NavigationHandler", () => import("../navigation-handler-
|
|
16
|
+
var NavigationHandler = Capability2.lazy("NavigationHandler", () => import("../navigation-handler-IKXZGMII.mjs"));
|
|
17
17
|
|
|
18
18
|
// src/capabilities/index.ts
|
|
19
|
-
var AppGraphSerializer = Capability3.lazy("AppGraphSerializer", () => import("../app-graph-serializer-IBPPU5VR.mjs"));
|
|
20
19
|
var CreateObject = Capability3.lazy("CreateObject", () => import("../create-object-22WUOWZQ.mjs"));
|
|
21
|
-
var IdentityCreated = Capability3.lazy("IdentityCreated", () => import("../identity-created-
|
|
22
|
-
var NavigationResolver = Capability3.lazy("NavigationResolver", () => import("../navigation-resolver-
|
|
20
|
+
var IdentityCreated = Capability3.lazy("IdentityCreated", () => import("../identity-created-QMV4DANW.mjs"));
|
|
21
|
+
var NavigationResolver = Capability3.lazy("NavigationResolver", () => import("../navigation-resolver-VBPGMFCE.mjs"));
|
|
23
22
|
var OperationHandler = Capability3.lazy("OperationHandler", () => import("../operation-handler-YPIRQOH2.mjs"));
|
|
24
|
-
var ReactRoot = Capability3.lazy("ReactRoot", () => import("../react-root-
|
|
25
|
-
var ReactSurface = Capability3.lazy("ReactSurface", () => import("../react-surface-
|
|
26
|
-
var Repair = Capability3.lazy("Repair", () => import("../repair-
|
|
27
|
-
var SpaceSettings = Capability3.lazy("SpaceSettings", () => import("../settings-
|
|
28
|
-
var SpacesReady = Capability3.lazy("SpacesReady", () => import("../spaces-ready-
|
|
29
|
-
var SpaceState = Capability3.lazy("SpaceState", () => import("../state-
|
|
30
|
-
var UndoMappings = Capability3.lazy("UndoMappings", () => import("../undo-mappings-
|
|
23
|
+
var ReactRoot = Capability3.lazy("ReactRoot", () => import("../react-root-YLYRCSAZ.mjs"));
|
|
24
|
+
var ReactSurface = Capability3.lazy("ReactSurface", () => import("../react-surface-5EQ6X4CL.mjs"));
|
|
25
|
+
var Repair = Capability3.lazy("Repair", () => import("../repair-HMH476U3.mjs"));
|
|
26
|
+
var SpaceSettings = Capability3.lazy("SpaceSettings", () => import("../settings-5IBSYBVU.mjs"));
|
|
27
|
+
var SpacesReady = Capability3.lazy("SpacesReady", () => import("../spaces-ready-EXPCJD4N.mjs"));
|
|
28
|
+
var SpaceState = Capability3.lazy("SpaceState", () => import("../state-KMH2NUAL.mjs"));
|
|
29
|
+
var UndoMappings = Capability3.lazy("UndoMappings", () => import("../undo-mappings-P43EAUGI.mjs"));
|
|
31
30
|
export {
|
|
32
31
|
AppGraphBuilder,
|
|
33
|
-
AppGraphSerializer,
|
|
34
32
|
CreateObject,
|
|
35
33
|
IdentityCreated,
|
|
36
34
|
NavigationHandler,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/capabilities/index.ts", "../../../../src/capabilities/app-graph-builder/index.ts", "../../../../src/capabilities/navigation-handler/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * from './app-graph-builder';\nexport { makeCreateObjectEntryForDatabaseType } from '../util';\n\nexport const
|
|
5
|
-
"mappings": ";;;;;;;AAIA,SAASA,cAAAA,mBAAkB;;;ACA3B,SAASC,kBAAkB;AAEpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;;;ACF/E,SAASC,cAAAA,mBAAkB;AAIpB,IAAMC,oBAAoBD,YAAWE,KAAK,qBAAqB,MAAM,OAAO,oCAAA,CAAA;;;AFE5E,IAAMC,
|
|
6
|
-
"names": ["Capability", "Capability", "AppGraphBuilder", "lazy", "Capability", "NavigationHandler", "lazy", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * from './app-graph-builder';\nexport { makeCreateObjectEntryForDatabaseType } from '../util';\n\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const IdentityCreated = Capability.lazy('IdentityCreated', () => import('./identity-created'));\nexport { NavigationHandler } from './navigation-handler';\nexport type { NavigationHandlerOptions } from './navigation-handler';\nexport const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactRoot = Capability.lazy('ReactRoot', () => import('./react-root'));\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const Repair = Capability.lazy('Repair', () => import('./repair'));\nexport const SpaceSettings = Capability.lazy('SpaceSettings', () => import('./settings'));\nexport const SpacesReady = Capability.lazy('SpacesReady', () => import('./spaces-ready'));\nexport const SpaceState = Capability.lazy('SpaceState', () => import('./state'));\nexport const UndoMappings = Capability.lazy('UndoMappings', () => import('./undo-mappings'));\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport type { NavigationHandlerOptions } from './navigation-handler';\n\nexport const NavigationHandler = Capability.lazy('NavigationHandler', () => import('./navigation-handler'));\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAIA,SAASA,cAAAA,mBAAkB;;;ACA3B,SAASC,kBAAkB;AAEpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;;;ACF/E,SAASC,cAAAA,mBAAkB;AAIpB,IAAMC,oBAAoBD,YAAWE,KAAK,qBAAqB,MAAM,OAAO,oCAAA,CAAA;;;AFE5E,IAAMC,eAAeC,YAAWC,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMC,kBAAkBF,YAAWC,KAAK,mBAAmB,MAAM,OAAO,kCAAA,CAAA;AAGxE,IAAME,qBAAqBH,YAAWC,KAAK,sBAAsB,MAAM,OAAO,qCAAA,CAAA;AAC9E,IAAMG,mBAAmBJ,YAAWC,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMI,YAAYL,YAAWC,KAAK,aAAa,MAAM,OAAO,4BAAA,CAAA;AAC5D,IAAMK,eAAeN,YAAWC,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMM,SAASP,YAAWC,KAAK,UAAU,MAAM,OAAO,wBAAA,CAAA;AACtD,IAAMO,gBAAgBR,YAAWC,KAAK,iBAAiB,MAAM,OAAO,0BAAA,CAAA;AACpE,IAAMQ,cAAcT,YAAWC,KAAK,eAAe,MAAM,OAAO,8BAAA,CAAA;AAChE,IAAMS,aAAaV,YAAWC,KAAK,cAAc,MAAM,OAAO,uBAAA,CAAA;AAC9D,IAAMU,eAAeX,YAAWC,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["Capability", "Capability", "AppGraphBuilder", "lazy", "Capability", "NavigationHandler", "lazy", "CreateObject", "Capability", "lazy", "IdentityCreated", "NavigationResolver", "OperationHandler", "ReactRoot", "ReactSurface", "Repair", "SpaceSettings", "SpacesReady", "SpaceState", "UndoMappings"]
|
|
7
7
|
}
|
|
@@ -3,9 +3,9 @@ import "../chunk-J5LGTIGS.mjs";
|
|
|
3
3
|
// src/capabilities/node.ts
|
|
4
4
|
import { Capability } from "@dxos/app-framework";
|
|
5
5
|
var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-22WUOWZQ.mjs"));
|
|
6
|
-
var IdentityCreated = Capability.lazy("IdentityCreated", () => import("../identity-created-
|
|
6
|
+
var IdentityCreated = Capability.lazy("IdentityCreated", () => import("../identity-created-QMV4DANW.mjs"));
|
|
7
7
|
var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-YPIRQOH2.mjs"));
|
|
8
|
-
var UndoMappings = Capability.lazy("UndoMappings", () => import("../undo-mappings-
|
|
8
|
+
var UndoMappings = Capability.lazy("UndoMappings", () => import("../undo-mappings-P43EAUGI.mjs"));
|
|
9
9
|
export {
|
|
10
10
|
CreateObject,
|
|
11
11
|
IdentityCreated,
|
|
@@ -141,7 +141,7 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
|
|
|
141
141
|
});
|
|
142
142
|
};
|
|
143
143
|
var SmallPresence = ({ count = 0, attended, containsAttended }) => {
|
|
144
|
-
const { t } = useTranslation(meta.
|
|
144
|
+
const { t } = useTranslation(meta.profile.key);
|
|
145
145
|
return /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
|
|
146
146
|
asChild: true,
|
|
147
147
|
content: t("presence.label", {
|
|
@@ -160,4 +160,4 @@ export {
|
|
|
160
160
|
SpacePresence,
|
|
161
161
|
SmallPresenceLive
|
|
162
162
|
};
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
163
|
+
//# sourceMappingURL=chunk-2LTGSUGQ.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/containers/SpacePresence/SpacePresence.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport { useAtomCapability } from '@dxos/app-framework/ui';\nimport { generateName } from '@dxos/display-name';\nimport { type Key, Obj } from '@dxos/echo';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember, useMembers, useSpace } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport {\n Avatar,\n type AvatarContentProps,\n type DxAvatar,\n List,\n ListItem,\n Popover,\n type Size,\n type ThemedClassName,\n Tooltip,\n useDefaultValue,\n useTranslation,\n} from '@dxos/react-ui';\nimport { AttentionGlyph, type AttentionGlyphProps, useAttention } from '@dxos/react-ui-attention';\nimport { ComplexMap, keyToFallback } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { type ObjectViewerProps, SpaceCapabilities } from '#types';\n\n// TODO(thure): Get/derive these values from protocol\nconst REFRESH_INTERVAL = 5000;\nconst ACTIVITY_DURATION = 30_000;\n\n// TODO(thure): This is chiefly meant to satisfy TS & provide an empty map after `deepSignal` interactions.\nconst noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);\n\n// TODO(wittjosiah): Factor out?\nconst getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n\nexport type SpacePresenceProps = {\n object: Obj.Unknown;\n spaceId?: Key.SpaceId;\n};\n\nexport const SpacePresence = ({ object, spaceId }: SpacePresenceProps) => {\n const ephemeral = useAtomCapability(SpaceCapabilities.EphemeralState);\n const identity = useIdentity();\n const db = Obj.getDatabase(object);\n const space = useSpace(spaceId ?? db?.spaceId);\n const spaceMembers = useMembers(spaceId ?? db?.spaceId);\n\n const [_moment, setMoment] = useState(Date.now());\n\n // NOTE(thure): This is necessary so Presence updates without any underlying data updating.\n useEffect(() => {\n const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, []);\n\n const memberOnline = useCallback((member: SpaceMember) => member.presence === 1, []);\n const memberIsNotSelf = useCallback(\n (member: SpaceMember) => !identity?.identityKey.equals(member.identity.identityKey),\n [identity?.identityKey],\n );\n\n // TODO(thure): Could it be a smell to return early when there are interactions with `deepSignal` later, since it\n // prevents reactivity?\n if (!identity || !ephemeral || !space) {\n return null;\n }\n\n const currentObjectViewers = ephemeral.viewersByObject[Obj.getURI(object)] ?? noViewers;\n\n const membersForObject = spaceMembers\n .filter((member) => memberOnline(member) && memberIsNotSelf(member))\n .filter((member) => currentObjectViewers.has(member.identity.identityKey))\n .map((member) => {\n const objectView = currentObjectViewers.get(member.identity.identityKey);\n const lastSeen = objectView?.lastSeen ?? -Infinity;\n const currentlyAttended = objectView?.currentlyAttended ?? false;\n\n return {\n ...member,\n currentlyAttended,\n lastSeen,\n };\n })\n .toSorted((a, b) => a.lastSeen - b.lastSeen);\n\n return <FullPresence members={membersForObject} />;\n};\n\nexport type Member = SpaceMember & {\n /**\n * Last time a member was seen on this object.\n */\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type MemberPresenceProps = ThemedClassName<{\n size?: Size;\n members?: Member[];\n showCount?: boolean;\n onMemberClick?: (member: Member) => void;\n}>;\n\nexport const FullPresence = (props: MemberPresenceProps) => {\n const { size = 9, onMemberClick } = props;\n const members = useDefaultValue(props.members, () => []);\n\n if (members.length === 0) {\n return null;\n }\n\n return (\n <div className='dx-avatar-group' data-testid='spacePlugin.presence'>\n {members.slice(0, 3).map((member, i) => (\n <Tooltip.Trigger\n key={member.identity.identityKey.toHex()}\n side='bottom'\n content={getName(member.identity)}\n className='grid focus:outline-hidden'\n >\n <PresenceAvatar\n identity={member.identity}\n match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.\n index={members.length - i}\n onClick={() => onMemberClick?.(member)}\n size={size}\n />\n </Tooltip.Trigger>\n ))}\n\n {members.length > 3 && (\n <Popover.Root>\n <Popover.Trigger className='grid focus:outline-hidden'>\n <Avatar.Root>\n {/* TODO(wittjosiah): Make text fit. */}\n <Avatar.Content\n status='inactive'\n style={{ zIndex: members.length - 4 }}\n fallback={`+${members.length - 3}`}\n size={size}\n />\n </Avatar.Root>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='bottom'>\n <Popover.Arrow />\n <Popover.Viewport classNames='max-h-56'>\n <List>\n {members.map((member) => (\n <ListItem.Root\n key={member.identity.identityKey.toHex()}\n classNames='flex gap-2 items-center cursor-pointer mb-2'\n onClick={() => onMemberClick?.(member)}\n data-testid='identity-list-item'\n >\n {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}\n <PresenceAvatar\n identity={member.identity}\n size={size}\n showName\n match={member.currentlyAttended}\n />\n </ListItem.Root>\n ))}\n </List>\n </Popover.Viewport>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n </div>\n );\n};\n\ntype PresenceAvatarProps = Pick<AvatarContentProps, 'size'> & {\n identity: Identity;\n showName?: boolean;\n match?: boolean;\n index?: number;\n onClick?: () => void;\n};\n\nconst PresenceAvatar = forwardRef<DxAvatar, PresenceAvatarProps>(\n ({ identity, showName, match, index, onClick, size }, forwardedRef) => {\n const status = match ? 'current' : 'active';\n const fallbackValue = keyToFallback(identity.identityKey);\n return (\n <Avatar.Root>\n <Avatar.Content\n status={status}\n hue={identity.profile?.data?.hue || fallbackValue.hue}\n data-testid='spacePlugin.presence.member'\n data-status={status}\n size={size}\n {...(index ? { style: { zIndex: index } } : {})}\n onClick={onClick}\n fallback={identity.profile?.data?.emoji || fallbackValue.emoji}\n ref={forwardedRef}\n />\n <Avatar.Label classNames={showName ? 'text-sm truncate px-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>\n </Avatar.Root>\n );\n },\n);\n\nexport type SmallPresenceLiveProps = {\n id?: string;\n open?: boolean;\n viewers?: ComplexMap<PublicKey, ObjectViewerProps>;\n};\n\nexport const SmallPresenceLive = ({ id, open, viewers }: SmallPresenceLiveProps) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const attended = hasAttention || isRelated;\n const containsAttended = isAncestor && !open;\n const getActiveViewers = (viewers: ComplexMap<PublicKey, ObjectViewerProps>): ObjectViewerProps[] => {\n const moment = Date.now();\n return Array.from<ObjectViewerProps>(viewers.values()).filter(\n (viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION,\n );\n };\n\n const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);\n\n useEffect(() => {\n if (viewers) {\n setActiveViewers(getActiveViewers(viewers));\n const interval = setInterval(() => {\n setActiveViewers(getActiveViewers(viewers));\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }\n }, [viewers]);\n\n return <SmallPresence count={activeViewers.length} attended={attended} containsAttended={containsAttended} />;\n};\n\nexport type SmallPresenceProps = {\n count?: number;\n} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;\n\nexport const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {\n const { t } = useTranslation(meta.
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport { useAtomCapability } from '@dxos/app-framework/ui';\nimport { generateName } from '@dxos/display-name';\nimport { type Key, Obj } from '@dxos/echo';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember, useMembers, useSpace } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport {\n Avatar,\n type AvatarContentProps,\n type DxAvatar,\n List,\n ListItem,\n Popover,\n type Size,\n type ThemedClassName,\n Tooltip,\n useDefaultValue,\n useTranslation,\n} from '@dxos/react-ui';\nimport { AttentionGlyph, type AttentionGlyphProps, useAttention } from '@dxos/react-ui-attention';\nimport { ComplexMap, keyToFallback } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { type ObjectViewerProps, SpaceCapabilities } from '#types';\n\n// TODO(thure): Get/derive these values from protocol\nconst REFRESH_INTERVAL = 5000;\nconst ACTIVITY_DURATION = 30_000;\n\n// TODO(thure): This is chiefly meant to satisfy TS & provide an empty map after `deepSignal` interactions.\nconst noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);\n\n// TODO(wittjosiah): Factor out?\nconst getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n\nexport type SpacePresenceProps = {\n object: Obj.Unknown;\n spaceId?: Key.SpaceId;\n};\n\nexport const SpacePresence = ({ object, spaceId }: SpacePresenceProps) => {\n const ephemeral = useAtomCapability(SpaceCapabilities.EphemeralState);\n const identity = useIdentity();\n const db = Obj.getDatabase(object);\n const space = useSpace(spaceId ?? db?.spaceId);\n const spaceMembers = useMembers(spaceId ?? db?.spaceId);\n\n const [_moment, setMoment] = useState(Date.now());\n\n // NOTE(thure): This is necessary so Presence updates without any underlying data updating.\n useEffect(() => {\n const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, []);\n\n const memberOnline = useCallback((member: SpaceMember) => member.presence === 1, []);\n const memberIsNotSelf = useCallback(\n (member: SpaceMember) => !identity?.identityKey.equals(member.identity.identityKey),\n [identity?.identityKey],\n );\n\n // TODO(thure): Could it be a smell to return early when there are interactions with `deepSignal` later, since it\n // prevents reactivity?\n if (!identity || !ephemeral || !space) {\n return null;\n }\n\n const currentObjectViewers = ephemeral.viewersByObject[Obj.getURI(object)] ?? noViewers;\n\n const membersForObject = spaceMembers\n .filter((member) => memberOnline(member) && memberIsNotSelf(member))\n .filter((member) => currentObjectViewers.has(member.identity.identityKey))\n .map((member) => {\n const objectView = currentObjectViewers.get(member.identity.identityKey);\n const lastSeen = objectView?.lastSeen ?? -Infinity;\n const currentlyAttended = objectView?.currentlyAttended ?? false;\n\n return {\n ...member,\n currentlyAttended,\n lastSeen,\n };\n })\n .toSorted((a, b) => a.lastSeen - b.lastSeen);\n\n return <FullPresence members={membersForObject} />;\n};\n\nexport type Member = SpaceMember & {\n /**\n * Last time a member was seen on this object.\n */\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type MemberPresenceProps = ThemedClassName<{\n size?: Size;\n members?: Member[];\n showCount?: boolean;\n onMemberClick?: (member: Member) => void;\n}>;\n\nexport const FullPresence = (props: MemberPresenceProps) => {\n const { size = 9, onMemberClick } = props;\n const members = useDefaultValue(props.members, () => []);\n\n if (members.length === 0) {\n return null;\n }\n\n return (\n <div className='dx-avatar-group' data-testid='spacePlugin.presence'>\n {members.slice(0, 3).map((member, i) => (\n <Tooltip.Trigger\n key={member.identity.identityKey.toHex()}\n side='bottom'\n content={getName(member.identity)}\n className='grid focus:outline-hidden'\n >\n <PresenceAvatar\n identity={member.identity}\n match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.\n index={members.length - i}\n onClick={() => onMemberClick?.(member)}\n size={size}\n />\n </Tooltip.Trigger>\n ))}\n\n {members.length > 3 && (\n <Popover.Root>\n <Popover.Trigger className='grid focus:outline-hidden'>\n <Avatar.Root>\n {/* TODO(wittjosiah): Make text fit. */}\n <Avatar.Content\n status='inactive'\n style={{ zIndex: members.length - 4 }}\n fallback={`+${members.length - 3}`}\n size={size}\n />\n </Avatar.Root>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='bottom'>\n <Popover.Arrow />\n <Popover.Viewport classNames='max-h-56'>\n <List>\n {members.map((member) => (\n <ListItem.Root\n key={member.identity.identityKey.toHex()}\n classNames='flex gap-2 items-center cursor-pointer mb-2'\n onClick={() => onMemberClick?.(member)}\n data-testid='identity-list-item'\n >\n {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}\n <PresenceAvatar\n identity={member.identity}\n size={size}\n showName\n match={member.currentlyAttended}\n />\n </ListItem.Root>\n ))}\n </List>\n </Popover.Viewport>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n </div>\n );\n};\n\ntype PresenceAvatarProps = Pick<AvatarContentProps, 'size'> & {\n identity: Identity;\n showName?: boolean;\n match?: boolean;\n index?: number;\n onClick?: () => void;\n};\n\nconst PresenceAvatar = forwardRef<DxAvatar, PresenceAvatarProps>(\n ({ identity, showName, match, index, onClick, size }, forwardedRef) => {\n const status = match ? 'current' : 'active';\n const fallbackValue = keyToFallback(identity.identityKey);\n return (\n <Avatar.Root>\n <Avatar.Content\n status={status}\n hue={identity.profile?.data?.hue || fallbackValue.hue}\n data-testid='spacePlugin.presence.member'\n data-status={status}\n size={size}\n {...(index ? { style: { zIndex: index } } : {})}\n onClick={onClick}\n fallback={identity.profile?.data?.emoji || fallbackValue.emoji}\n ref={forwardedRef}\n />\n <Avatar.Label classNames={showName ? 'text-sm truncate px-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>\n </Avatar.Root>\n );\n },\n);\n\nexport type SmallPresenceLiveProps = {\n id?: string;\n open?: boolean;\n viewers?: ComplexMap<PublicKey, ObjectViewerProps>;\n};\n\nexport const SmallPresenceLive = ({ id, open, viewers }: SmallPresenceLiveProps) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const attended = hasAttention || isRelated;\n const containsAttended = isAncestor && !open;\n const getActiveViewers = (viewers: ComplexMap<PublicKey, ObjectViewerProps>): ObjectViewerProps[] => {\n const moment = Date.now();\n return Array.from<ObjectViewerProps>(viewers.values()).filter(\n (viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION,\n );\n };\n\n const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);\n\n useEffect(() => {\n if (viewers) {\n setActiveViewers(getActiveViewers(viewers));\n const interval = setInterval(() => {\n setActiveViewers(getActiveViewers(viewers));\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }\n }, [viewers]);\n\n return <SmallPresence count={activeViewers.length} attended={attended} containsAttended={containsAttended} />;\n};\n\nexport type SmallPresenceProps = {\n count?: number;\n} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;\n\nexport const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n return (\n <Tooltip.Trigger asChild content={t('presence.label', { count })} side='bottom'>\n <AttentionGlyph\n attended={attended}\n containsAttended={containsAttended}\n presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'}\n classNames='self-center mx-1'\n />\n </Tooltip.Trigger>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React", "forwardRef", "useCallback", "useEffect", "useState", "useAtomCapability", "generateName", "Obj", "PublicKey", "useMembers", "useSpace", "useIdentity", "Avatar", "List", "ListItem", "Popover", "Tooltip", "useDefaultValue", "useTranslation", "AttentionGlyph", "useAttention", "ComplexMap", "keyToFallback", "meta", "SpaceCapabilities", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "hash", "getName", "identity", "profile", "displayName", "identityKey", "toHex", "SpacePresence", "object", "spaceId", "ephemeral", "EphemeralState", "db", "getDatabase", "space", "spaceMembers", "_moment", "setMoment", "Date", "now", "interval", "setInterval", "clearInterval", "memberOnline", "member", "presence", "memberIsNotSelf", "equals", "currentObjectViewers", "viewersByObject", "getURI", "membersForObject", "filter", "has", "map", "objectView", "get", "lastSeen", "currentlyAttended", "toSorted", "a", "b", "FullPresence", "members", "props", "size", "onMemberClick", "length", "div", "className", "data-testid", "slice", "i", "Trigger", "key", "side", "content", "PresenceAvatar", "match", "index", "onClick", "Root", "Content", "status", "style", "zIndex", "fallback", "Portal", "Arrow", "Viewport", "classNames", "showName", "forwardedRef", "fallbackValue", "hue", "data", "data-status", "emoji", "ref", "Label", "SmallPresenceLive", "id", "open", "viewers", "hasAttention", "isAncestor", "isRelated", "attended", "containsAttended", "getActiveViewers", "moment", "Array", "from", "values", "viewer", "activeViewers", "setActiveViewers", "SmallPresence", "count", "t", "asChild"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/constants.ts
|
|
2
|
+
import { DXN } from "@dxos/keys";
|
|
3
|
+
import { meta } from "#meta";
|
|
4
|
+
var CREATE_OBJECT_DIALOG = DXN.make(`${meta.profile.key}.createObjectDialog`);
|
|
5
|
+
var CREATE_SPACE_DIALOG = DXN.make(`${meta.profile.key}.createSpaceDialog`);
|
|
6
|
+
var IMPORT_SPACE_DIALOG = DXN.make(`${meta.profile.key}.importSpaceDialog`);
|
|
7
|
+
var JOIN_DIALOG = DXN.make(`${meta.profile.key}.joinDialog`);
|
|
8
|
+
var RENAME_POPOVER = DXN.make(`${meta.profile.key}.renamePopover`);
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
CREATE_OBJECT_DIALOG,
|
|
12
|
+
CREATE_SPACE_DIALOG,
|
|
13
|
+
IMPORT_SPACE_DIALOG,
|
|
14
|
+
JOIN_DIALOG,
|
|
15
|
+
RENAME_POPOVER
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=chunk-2RPQHHD7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/constants.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport { meta } from '#meta';\n\nexport const CREATE_OBJECT_DIALOG = DXN.make(`${meta.profile.key}.createObjectDialog`);\nexport const CREATE_SPACE_DIALOG = DXN.make(`${meta.profile.key}.createSpaceDialog`);\nexport const IMPORT_SPACE_DIALOG = DXN.make(`${meta.profile.key}.importSpaceDialog`);\nexport const JOIN_DIALOG = DXN.make(`${meta.profile.key}.joinDialog`);\nexport const RENAME_POPOVER = DXN.make(`${meta.profile.key}.renamePopover`);\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,WAAW;AAEpB,SAASC,YAAY;AAEd,IAAMC,uBAAuBF,IAAIG,KAAK,GAAGF,KAAKG,QAAQC,GAAG,qBAAqB;AAC9E,IAAMC,sBAAsBN,IAAIG,KAAK,GAAGF,KAAKG,QAAQC,GAAG,oBAAoB;AAC5E,IAAME,sBAAsBP,IAAIG,KAAK,GAAGF,KAAKG,QAAQC,GAAG,oBAAoB;AAC5E,IAAMG,cAAcR,IAAIG,KAAK,GAAGF,KAAKG,QAAQC,GAAG,aAAa;AAC7D,IAAMI,iBAAiBT,IAAIG,KAAK,GAAGF,KAAKG,QAAQC,GAAG,gBAAgB;",
|
|
6
|
+
"names": ["DXN", "meta", "CREATE_OBJECT_DIALOG", "make", "profile", "key", "CREATE_SPACE_DIALOG", "IMPORT_SPACE_DIALOG", "JOIN_DIALOG", "RENAME_POPOVER"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { Plugin } from "@dxos/app-framework";
|
|
3
|
+
|
|
4
|
+
// dx.config.ts
|
|
5
|
+
import { Config2 } from "@dxos/app-framework/config";
|
|
6
|
+
import { trim } from "@dxos/util";
|
|
7
|
+
var dx_config_default = Config2.make({
|
|
8
|
+
plugin: {
|
|
9
|
+
key: "org.dxos.plugin.space",
|
|
10
|
+
name: "Spaces",
|
|
11
|
+
author: "DXOS",
|
|
12
|
+
description: trim`
|
|
13
|
+
SpacePlugin is the core workspace container for DXOS Composer. It owns the full lifecycle of
|
|
14
|
+
collaborative spaces — creating, joining, opening, closing, and resetting them — and manages
|
|
15
|
+
the membership and invitation system that controls who can access each space.
|
|
16
|
+
|
|
17
|
+
The plugin maintains an ordered app-graph of every space and its collections, wires navigation
|
|
18
|
+
so that opening a space or object updates the layout, and tracks real-time peer presence so
|
|
19
|
+
that the UI can show which collaborators are viewing each object.
|
|
20
|
+
|
|
21
|
+
Object and schema management sit at the heart of SpacePlugin: it registers the canonical DXOS
|
|
22
|
+
schema types (Person, Task, Project, Event, …), provides the create-object dialog that all
|
|
23
|
+
other plugins populate with their own types, and exposes operations for adding, removing,
|
|
24
|
+
restoring, duplicating, and serialising objects. Import/export of space archives and schema
|
|
25
|
+
migrations are also handled here.
|
|
26
|
+
|
|
27
|
+
A full set of undo-aware operations (RemoveObjects/RestoreObjects, DeleteField/RestoreField)
|
|
28
|
+
integrates with the process manager so that destructive edits can be reversed in one step.
|
|
29
|
+
`,
|
|
30
|
+
icon: {
|
|
31
|
+
key: "ph--planet--regular"
|
|
32
|
+
},
|
|
33
|
+
spec: "PLUGIN.mdl",
|
|
34
|
+
tags: [
|
|
35
|
+
"system"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// src/meta.ts
|
|
41
|
+
var meta = Plugin.getMetaFromConfig(dx_config_default);
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
meta
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=chunk-5ZZS3KMK.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts", "../../../dx.config.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.space',\n name: 'Spaces',\n author: 'DXOS',\n description: trim`\n SpacePlugin is the core workspace container for DXOS Composer. It owns the full lifecycle of\n collaborative spaces — creating, joining, opening, closing, and resetting them — and manages\n the membership and invitation system that controls who can access each space.\n\n The plugin maintains an ordered app-graph of every space and its collections, wires navigation\n so that opening a space or object updates the layout, and tracks real-time peer presence so\n that the UI can show which collaborators are viewing each object.\n\n Object and schema management sit at the heart of SpacePlugin: it registers the canonical DXOS\n schema types (Person, Task, Project, Event, …), provides the create-object dialog that all\n other plugins populate with their own types, and exposes operations for adding, removing,\n restoring, duplicating, and serialising objects. Import/export of space archives and schema\n migrations are also handled here.\n\n A full set of undo-aware operations (RemoveObjects/RestoreObjects, DeleteField/RestoreField)\n integrates with the process manager so that destructive edits can be reversed in one step.\n `,\n icon: { key: 'ph--planet--regular' },\n spec: 'PLUGIN.mdl',\n tags: ['system'],\n },\n});\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,cAAc;;;ACAvB,SAASC,eAAe;AACxB,SAASC,YAAY;AAErB,IAAA,oBAAeD,QAAQE,KAAK;EAC1BC,QAAQ;IACNC,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRC,aAAaN;;;;;;;;;;;;;;;;;;IAkBbO,MAAM;MAAEJ,KAAK;IAAsB;IACnCK,MAAM;IACNC,MAAM;MAAC;;EACT;AACF,CAAA;;;AD1BO,IAAMC,OAAOC,OAAOC,kBAAkBC,iBAAAA;",
|
|
6
|
+
"names": ["Plugin", "Config2", "trim", "make", "plugin", "key", "name", "author", "description", "icon", "spec", "tags", "meta", "Plugin", "getMetaFromConfig", "config"]
|
|
7
|
+
}
|