@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
|
@@ -1,7 +0,0 @@
|
|
|
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 {\n AppCapabilities,\n AppNodeMatcher,\n getActiveSpace,\n getPersonalSpace,\n isExemplarSpace,\n isPersonalSpace,\n} 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_TYPE, SpaceCapabilities } from '#types';\n\nimport { SHARED, getSpaceDisplayName } from '../../../util';\nimport {\n CACHEABLE_PROPS,\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/** Creates space-related extensions: primary actions, space nodes, and space actions. */\nexport const createSpaceExtensions = Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n return yield* Effect.all([\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.id }],\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.id }],\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.id }],\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 = getActiveSpace(client, capabilities) ?? 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.id }],\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 = getActiveSpace(client, capabilities) ?? 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.id }],\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 = getActiveSpace(client, capabilities) ?? getPersonalSpace(client);\n if (space) {\n yield* Operation.invoke(SpaceOperation.OpenMembers, { space });\n }\n }),\n properties: {\n label: ['share-space.label', { ns: meta.id }],\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 = getActiveSpace(client, capabilities) ?? 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.id }],\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 = 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((space) => space.tags.length === 0 || isPersonalSpace(space) || isExemplarSpace(space))\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: ephemeralState.navigableCollections,\n personal: 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: 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\nexport {\n ACCEPT_ECHO_CLASS,\n CACHEABLE_PROPS,\n CAN_DROP_OBJECT,\n blockInstructionCache,\n buildCollectionPartials,\n collectionPartialsCache,\n createFactory,\n createObjectNode,\n getAcceptPersistenceKey,\n getCollectionGraphNodePartials,\n getDynamicLabel,\n rearrangeCache,\n} from '@dxos/app-toolkit';\n\n//\n// Virtual Node Types\n//\n\nexport const TYPES_SECTION_TYPE = `${meta.id}.types`;\nexport const COLLECTIONS_SECTION_TYPE = `${meta.id}.collections`;\nexport const TYPE_COLLECTION_TYPE = `${meta.id}.type-collection`;\nexport const STATIC_SCHEMA_TYPE = `${meta.id}.static-schema`;\n\n//\n// Constants\n//\n\n/** Shared translation namespace descriptor. */\nexport const META_NS: { ns: string } = { ns: meta.id };\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, Segments, getTypeSlug } 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 createObjectNode,\n downloadBlob,\n getDynamicLabel,\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: Segments.types,\n type: TYPES_SECTION_TYPE,\n label: ['types-section.label', { ns: meta.id }],\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 = 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.id }],\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 createObjectNode({\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 createObjectNode({\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 = 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: 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: getDynamicLabel('add-object.label', Type.getDatabase(type) != null ? meta.id : typename),\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: 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: 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 {\n AppCapabilities,\n AppNodeMatcher,\n LayoutOperation,\n RootCollectionAnnotation,\n Segments,\n getObjectPathFromObject,\n toUrlPath,\n} 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 createObjectNode,\n getCollectionGraphNodePartials,\n getDynamicLabel,\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, RootCollectionAnnotation).pipe(Option.getOrUndefined);\n if (collectionRef) {\n get(Obj.atom(collectionRef));\n }\n const rootCollection = collectionRef?.target;\n const collectionPartials = rootCollection\n ? getCollectionGraphNodePartials({ db: space.db, collection: rootCollection })\n : undefined;\n\n return Effect.succeed([\n Node.make({\n id: Segments.collections,\n type: COLLECTIONS_SECTION_TYPE,\n data: null,\n properties: {\n label: ['collections-section.label', { ns: meta.id }],\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, RootCollectionAnnotation).pipe(Option.getOrUndefined);\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 createObjectNode({\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 createObjectNode({\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});\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: 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: [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: 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(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: 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.id }],\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.id }],\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.id }],\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, isPersonalSpace } 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.id }],\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 = isPersonalSpace(space);\n return Effect.succeed([\n Node.make({\n id: 'general',\n type: `${meta.id}.general`,\n data: `${meta.id}.general`,\n properties: {\n label: ['space-settings-properties.label', { ns: meta.id }],\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.id}.members`,\n data: `${meta.id}.members`,\n properties: {\n label: ['members-panel.label', { ns: meta.id }],\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", "AppNodeMatcher", "getActiveSpace", "getPersonalSpace", "isExemplarSpace", "isPersonalSpace", "SpaceState", "Operation", "Filter", "Obj", "Migrations", "ClientCapabilities", "CreateAtom", "Graph", "GraphBuilder", "Node", "NodeMatcher", "SpaceArchive", "Expando", "meta", "SpaceOperation", "SPACE_TYPE", "SpaceCapabilities", "Option", "SpaceState", "isSpace", "Annotation", "Filter", "Obj", "Type", "MigrationVersionAnnotation", "Migrations", "ViewAnnotation", "getTypeURIFromQuery", "meta", "ACCEPT_ECHO_CLASS", "CACHEABLE_PROPS", "CAN_DROP_OBJECT", "blockInstructionCache", "buildCollectionPartials", "collectionPartialsCache", "createFactory", "createObjectNode", "getAcceptPersistenceKey", "getCollectionGraphNodePartials", "getDynamicLabel", "rearrangeCache", "TYPES_SECTION_TYPE", "id", "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", "createSpaceExtensions", "fnUntraced", "capabilities", "Capability", "Service", "all", "GraphBuilder", "createExtension", "id", "position", "match", "NodeMatcher", "whenRoot", "actions", "succeed", "Node", "makeAction", "SpaceOperation", "OpenCreateSpace", "meta", "key", "data", "Operation", "invoke", "properties", "label", "ns", "icon", "testId", "disposition", "Join", "OpenImportSpace", "ExportSpace", "client", "get", "ClientCapabilities", "Client", "space", "getActiveSpace", "getPersonalSpace", "format", "SpaceArchive", "Format", "BINARY", "JSON", "OpenMembers", "keyBinding", "macos", "windows", "OpenSettings", "connector", "_node", "stateAtom", "SpaceCapabilities", "State", "ephemeralAtom", "EphemeralState", "spacesAtom", "CreateAtom", "fromObservable", "spaces", "personalSpace", "settingsAtom", "Settings", "settings", "state", "ephemeralState", "spacesOrder", "db", "query", "Filter", "type", "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", "AppNodeMatcher", "whenSpace", "constructSpaceActions", "migrating", "sdkMigrationRunning", "hasPendingMigration", "checkPendingMigration", "onRearrange", "spaceRearrangeCache", "nextOrder", "Graph", "sortEdges", "RootId", "update", "set", "make", "SPACE_TYPE", "cacheable", "CACHEABLE_PROPS", "getSpaceDisplayName", "description", "hue", "iconHue", "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", "Segments", "getTypeSlug", "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", "Segments", "types", "type", "TYPES_SECTION_TYPE", "label", "ns", "meta", "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", "createObjectNode", "isNonNullable", "Obj", "getParent", "toSorted", "nodeA", "nodeB", "labelA", "labelB", "localeCompare", "actions", "targetUri", "deletable", "createSchemaActions", "createSchemaNode", "schema", "space", "get", "typename", "Type", "getTypename", "slug", "getTypeSlug", "iconAnnotation", "getDatabase", "getOrUndefined", "Annotation", "IconAnnotation", "getSchema", "undefined", "label", "nodeId", "value", "pipe", "when", "mutableSchema", "snapshot", "Entity", "atom", "name", "ns", "orElse", "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", "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", "AppCapabilities", "AppNodeMatcher", "LayoutOperation", "RootCollectionAnnotation", "Segments", "getObjectPathFromObject", "toUrlPath", "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", "Segments", "collections", "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", "object", "navigable", "parentCollection", "instanceOf", "ephemeralAtom", "capabilities", "EphemeralState", "getDatabase", "collectionSnapshot", "refs", "atom", "nodeId", "none", "actions", "appGraph", "substring", "parentNode", "Collection", "constructObjectActions", "deletable", "shareableLinkOrigin", "typename", "getTypename", "invariant", "makeAction", "SpaceOperation", "OpenCreateObject", "key", "Operation", "targetNodeId", "disposition", "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", "icon", "data", "position", "isObject", "none", "type", "getType", "path", "get", "getSchema", "pipe", "getOrElse", "isEchoViewBacked", "length", "hasRefAlongPath", "some", "Effect", "AppNode", "AppNodeMatcher", "isPersonalSpace", "GraphBuilder", "Node", "meta", "SETTINGS_SECTION_ID", "SETTINGS_SECTION_TYPE", "createSettingsExtensions", "fnUntraced", "sectionExtension", "createExtension", "id", "match", "whenSpace", "connector", "space", "succeed", "makeSection", "type", "label", "ns", "icon", "iconHue", "position", "testId", "childrenExtension", "whenSpaceSettings", "personal", "make", "data", "properties", "Capability", "makeModule", "fnUntraced", "shareableLinkOrigin", "window", "location", "origin", "extensions", "all", "createSpaceExtensions", "createSettingsExtensions", "createDatabaseExtensions", "createCollectionExtensions", "createCompanionExtensions", "contributes", "AppCapabilities", "AppGraphBuilder", "flat"]
|
|
7
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SPACES
|
|
3
|
-
} from "./chunk-7WUJENBF.mjs";
|
|
4
|
-
import "./chunk-K34BPPQE.mjs";
|
|
5
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
-
|
|
7
|
-
// src/capabilities/app-graph-serializer.ts
|
|
8
|
-
import * as Effect from "effect/Effect";
|
|
9
|
-
import * as Option from "effect/Option";
|
|
10
|
-
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
11
|
-
import { AppCapabilities, RootCollectionAnnotation } from "@dxos/app-toolkit";
|
|
12
|
-
import { isSpace } from "@dxos/client/echo";
|
|
13
|
-
import { Annotation, Collection, Obj, Type } from "@dxos/echo";
|
|
14
|
-
import { meta } from "#meta";
|
|
15
|
-
import { SpaceOperation } from "#operations";
|
|
16
|
-
import { translations } from "#translations";
|
|
17
|
-
import { SPACE_TYPE } from "#types";
|
|
18
|
-
var COLLECTION_TYPE = Type.getTypename(Collection.Collection);
|
|
19
|
-
var DIRECTORY_TYPE = "text/directory";
|
|
20
|
-
var app_graph_serializer_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
21
|
-
const capabilities = yield* Capability.Service;
|
|
22
|
-
return Capability.contributes(AppCapabilities.AppGraphSerializer, [
|
|
23
|
-
{
|
|
24
|
-
inputType: SPACES,
|
|
25
|
-
outputType: DIRECTORY_TYPE,
|
|
26
|
-
serialize: (node) => ({
|
|
27
|
-
name: translations[0]["en-US"][meta.id]["spaces.label"] ?? "Spaces",
|
|
28
|
-
data: translations[0]["en-US"][meta.id]["spaces.label"] ?? "Spaces",
|
|
29
|
-
type: DIRECTORY_TYPE
|
|
30
|
-
}),
|
|
31
|
-
deserialize: () => {
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
inputType: SPACE_TYPE,
|
|
36
|
-
outputType: DIRECTORY_TYPE,
|
|
37
|
-
serialize: (node) => ({
|
|
38
|
-
name: node.data.properties.name ?? translations[0]["en-US"][meta.id]["unnamed-space.label"],
|
|
39
|
-
data: node.data.properties.name ?? translations[0]["en-US"][meta.id]["unnamed-space.label"],
|
|
40
|
-
type: DIRECTORY_TYPE
|
|
41
|
-
}),
|
|
42
|
-
deserialize: async (data) => {
|
|
43
|
-
const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
|
|
44
|
-
const result = await invokePromise(SpaceOperation.Create, {
|
|
45
|
-
name: data.name,
|
|
46
|
-
edgeReplication: true
|
|
47
|
-
});
|
|
48
|
-
return result.data?.space;
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
inputType: COLLECTION_TYPE,
|
|
53
|
-
outputType: DIRECTORY_TYPE,
|
|
54
|
-
serialize: (node) => ({
|
|
55
|
-
name: node.data.name ?? translations[0]["en-US"][meta.id]["object-name.placeholder"],
|
|
56
|
-
data: node.data.name ?? translations[0]["en-US"][meta.id]["object-name.placeholder"],
|
|
57
|
-
type: DIRECTORY_TYPE
|
|
58
|
-
}),
|
|
59
|
-
deserialize: async (data, ancestors) => {
|
|
60
|
-
const space = ancestors.find(isSpace);
|
|
61
|
-
const collection = ancestors.findLast((ancestor) => Obj.instanceOf(Collection.Collection, ancestor)) ?? (space && Annotation.get(space.properties, RootCollectionAnnotation).pipe(Option.getOrUndefined)?.target);
|
|
62
|
-
if (!space || !collection) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
|
|
66
|
-
const result = await invokePromise(SpaceOperation.AddObject, {
|
|
67
|
-
target: collection,
|
|
68
|
-
object: Obj.make(Collection.Collection, {
|
|
69
|
-
name: data.name,
|
|
70
|
-
objects: []
|
|
71
|
-
})
|
|
72
|
-
});
|
|
73
|
-
return result.data?.object;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
]);
|
|
77
|
-
}));
|
|
78
|
-
export {
|
|
79
|
-
app_graph_serializer_default as default
|
|
80
|
-
};
|
|
81
|
-
//# sourceMappingURL=app-graph-serializer-IBPPU5VR.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-serializer.ts"],
|
|
4
|
-
"sourcesContent": ["//\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 { AppCapabilities, RootCollectionAnnotation } from '@dxos/app-toolkit';\nimport { isSpace } from '@dxos/client/echo';\nimport { Annotation, Collection, Obj, Type } from '@dxos/echo';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\nimport { translations } from '#translations';\nimport { SPACE_TYPE } from '#types';\n\nimport { SPACES } from '../util';\n\nconst COLLECTION_TYPE = Type.getTypename(Collection.Collection);\n\n// https://stackoverflow.com/a/19016910\nconst DIRECTORY_TYPE = 'text/directory';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n // Get context for lazy capability access in callbacks.\n const capabilities = yield* Capability.Service;\n\n return Capability.contributes(AppCapabilities.AppGraphSerializer, [\n {\n inputType: SPACES,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: translations[0]['en-US'][meta.id]['spaces.label'] ?? 'Spaces',\n data: translations[0]['en-US'][meta.id]['spaces.label'] ?? 'Spaces',\n type: DIRECTORY_TYPE,\n }),\n deserialize: () => {\n // No-op.\n },\n },\n {\n inputType: SPACE_TYPE,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.properties.name ?? translations[0]['en-US'][meta.id]['unnamed-space.label'],\n data: node.data.properties.name ?? translations[0]['en-US'][meta.id]['unnamed-space.label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data) => {\n const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);\n const result = await invokePromise(SpaceOperation.Create, { name: data.name, edgeReplication: true });\n return result.data?.space;\n },\n },\n {\n inputType: COLLECTION_TYPE,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.name ?? translations[0]['en-US'][meta.id]['object-name.placeholder'],\n data: node.data.name ?? translations[0]['en-US'][meta.id]['object-name.placeholder'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data, ancestors) => {\n const space = ancestors.find(isSpace);\n const collection =\n ancestors.findLast((ancestor) => Obj.instanceOf(Collection.Collection, ancestor)) ??\n (space && Annotation.get(space.properties, RootCollectionAnnotation).pipe(Option.getOrUndefined)?.target);\n if (!space || !collection) {\n return;\n }\n\n const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);\n const result = await invokePromise(SpaceOperation.AddObject, {\n target: collection,\n object: Obj.make(Collection.Collection, { name: data.name, objects: [] }),\n });\n\n return result.data?.object;\n },\n },\n ]);\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,gCAAgC;AAC1D,SAASC,eAAe;AACxB,SAASC,YAAYC,YAAYC,KAAKC,YAAY;AAElD,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAI3B,IAAMC,kBAAkBC,KAAKC,YAAYC,WAAWA,UAAU;AAG9D,IAAMC,iBAAiB;AAEvB,IAAA,+BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAEhB,QAAMC,eAAe,OAAOH,WAAWI;AAEvC,SAAOJ,WAAWK,YAAYC,gBAAgBC,oBAAoB;IAChE;MACEC,WAAWC;MACXC,YAAYX;MACZY,WAAW,CAACC,UAAU;QACpBC,MAAMC,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,cAAA,KAAmB;QAC3DC,MAAMH,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,cAAA,KAAmB;QAC3DE,MAAMnB;MACR;MACAoB,aAAa,MAAA;MAEb;IACF;IACA;MACEX,WAAWY;MACXV,YAAYX;MACZY,WAAW,CAACC,UAAU;QACpBC,MAAMD,KAAKK,KAAKI,WAAWR,QAAQC,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,qBAAA;QACrEC,MAAML,KAAKK,KAAKI,WAAWR,QAAQC,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,qBAAA;QACrEE,MAAMnB;MACR;MACAoB,aAAa,OAAOF,SAAAA;AAClB,cAAM,EAAEK,cAAa,IAAKnB,aAAaoB,IAAIC,aAAaC,gBAAgB;AACxE,cAAMC,SAAS,MAAMJ,cAAcK,eAAeC,QAAQ;UAAEf,MAAMI,KAAKJ;UAAMgB,iBAAiB;QAAK,CAAA;AACnG,eAAOH,OAAOT,MAAMa;MACtB;IACF;IACA;MACEtB,WAAWb;MACXe,YAAYX;MACZY,WAAW,CAACC,UAAU;QACpBC,MAAMD,KAAKK,KAAKJ,QAAQC,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,yBAAA;QAC1DC,MAAML,KAAKK,KAAKJ,QAAQC,aAAa,CAAA,EAAG,OAAA,EAASC,KAAKC,EAAE,EAAE,yBAAA;QAC1DE,MAAMnB;MACR;MACAoB,aAAa,OAAOF,MAAMc,cAAAA;AACxB,cAAMD,QAAQC,UAAUC,KAAKC,OAAAA;AAC7B,cAAMC,aACJH,UAAUI,SAAS,CAACC,aAAaC,IAAIC,WAAWxC,WAAWA,YAAYsC,QAAAA,CAAAA,MACtEN,SAASS,WAAWhB,IAAIO,MAAMT,YAAYmB,wBAAAA,EAA0BC,KAAYC,qBAAc,GAAGC;AACpG,YAAI,CAACb,SAAS,CAACI,YAAY;AACzB;QACF;AAEA,cAAM,EAAEZ,cAAa,IAAKnB,aAAaoB,IAAIC,aAAaC,gBAAgB;AACxE,cAAMC,SAAS,MAAMJ,cAAcK,eAAeiB,WAAW;UAC3DD,QAAQT;UACRW,QAAQR,IAAIS,KAAKhD,WAAWA,YAAY;YAAEe,MAAMI,KAAKJ;YAAMkC,SAAS,CAAA;UAAG,CAAA;QACzE,CAAA;AAEA,eAAOrB,OAAOT,MAAM4B;MACtB;IACF;GACD;AACH,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Option", "Capabilities", "Capability", "AppCapabilities", "RootCollectionAnnotation", "isSpace", "Annotation", "Collection", "Obj", "Type", "meta", "SpaceOperation", "translations", "SPACE_TYPE", "COLLECTION_TYPE", "Type", "getTypename", "Collection", "DIRECTORY_TYPE", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "contributes", "AppCapabilities", "AppGraphSerializer", "inputType", "SPACES", "outputType", "serialize", "node", "name", "translations", "meta", "id", "data", "type", "deserialize", "SPACE_TYPE", "properties", "invokePromise", "get", "Capabilities", "OperationInvoker", "result", "SpaceOperation", "Create", "edgeReplication", "space", "ancestors", "find", "isSpace", "collection", "findLast", "ancestor", "Obj", "instanceOf", "Annotation", "RootCollectionAnnotation", "pipe", "getOrUndefined", "target", "AddObject", "object", "make", "objects"]
|
|
7
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// src/meta.ts
|
|
2
|
-
import { Plugin } from "@dxos/app-framework";
|
|
3
|
-
import { DXN } from "@dxos/keys";
|
|
4
|
-
import { trim } from "@dxos/util";
|
|
5
|
-
var meta = Plugin.makeMeta({
|
|
6
|
-
key: DXN.make("org.dxos.plugin.space"),
|
|
7
|
-
name: "Spaces",
|
|
8
|
-
author: "DXOS",
|
|
9
|
-
spec: "PLUGIN.mdl",
|
|
10
|
-
description: trim`
|
|
11
|
-
SpacePlugin is the core workspace container for DXOS Composer. It owns the full lifecycle of
|
|
12
|
-
collaborative spaces — creating, joining, opening, closing, and resetting them — and manages
|
|
13
|
-
the membership and invitation system that controls who can access each space.
|
|
14
|
-
|
|
15
|
-
The plugin maintains an ordered app-graph of every space and its collections, wires navigation
|
|
16
|
-
so that opening a space or object updates the layout, and tracks real-time peer presence so
|
|
17
|
-
that the UI can show which collaborators are viewing each object.
|
|
18
|
-
|
|
19
|
-
Object and schema management sit at the heart of SpacePlugin: it registers the canonical DXOS
|
|
20
|
-
schema types (Person, Task, Project, Event, …), provides the create-object dialog that all
|
|
21
|
-
other plugins populate with their own types, and exposes operations for adding, removing,
|
|
22
|
-
restoring, duplicating, and serialising objects. Import/export of space archives and schema
|
|
23
|
-
migrations are also handled here.
|
|
24
|
-
|
|
25
|
-
A full set of undo-aware operations (RemoveObjects/RestoreObjects, DeleteField/RestoreField)
|
|
26
|
-
integrates with the process manager so that destructive edits can be reversed in one step.
|
|
27
|
-
`,
|
|
28
|
-
icon: "ph--planet--regular",
|
|
29
|
-
tags: [
|
|
30
|
-
"system"
|
|
31
|
-
]
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
export {
|
|
35
|
-
meta
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=chunk-4RTSNTDC.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.space'),\n name: 'Spaces',\n author: 'DXOS',\n spec: 'PLUGIN.mdl',\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: 'ph--planet--regular',\n tags: ['system'],\n});\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,uBAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,MAAM;EACNC,aAAaR;;;;;;;;;;;;;;;;;;EAkBbS,MAAM;EACNC,MAAM;IAAC;;AACT,CAAA;",
|
|
6
|
-
"names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "spec", "description", "icon", "tags"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/util.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { type Space, SpaceState } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Obj, Type } from '@dxos/echo';\nimport { type Label } from '@dxos/ui-types/translations';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\nimport { type SpaceCapabilities } from '#types';\n\n//\n// Constants\n//\n\nconst PERSONAL_SPACE_LABEL: Label = ['personal-space.label', { ns: meta.id }];\nconst UNNAMED_SPACE_LABEL: Label = ['unnamed-space.label', { ns: meta.id }];\n\nexport const SPACES = `${meta.id}-spaces`;\nexport { SHARED } from './types';\n\n//\n// Helpers\n//\n\n/**\n * Creates a synthetic CreateObjectEntry for a database-persisted object schema that has no dedicated plugin capability.\n * Sets inputSchema so the create dialog presents a form for the type's fields.\n */\nexport const makeCreateObjectEntryForDatabaseType = (type: Type.AnyObj): SpaceCapabilities.CreateObjectEntry => ({\n id: Type.getTypename(type),\n inputSchema: Type.getSchema(type),\n createObject: (props, options) =>\n Effect.gen(function* () {\n const object = Obj.make(type, props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n });\n }),\n});\n\n/** Returns the display label for a space (name, namesCache entry, or fallback). */\nexport const getSpaceDisplayName = (\n space: Space,\n { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},\n): Label => {\n return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0\n ? space.properties.name!\n : namesCache[space.id]\n ? namesCache[space.id]\n : personal\n ? PERSONAL_SPACE_LABEL\n : UNNAMED_SPACE_LABEL;\n};\n"],
|
|
5
|
-
"mappings": ";AAIA,YAAYA,YAAY;AAExB,SAAqBC,kBAAkB;AACvC,SAASC,iBAAiB;AAC1B,SAASC,KAAKC,YAAY;AAG1B,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAO/B,IAAMC,uBAA8B;EAAC;EAAwB;IAAEC,IAAIH,KAAKI;EAAG;;AAC3E,IAAMC,sBAA6B;EAAC;EAAuB;IAAEF,IAAIH,KAAKI;EAAG;;AAElE,IAAME,SAAS,GAAGN,KAAKI,EAAE;AAWzB,IAAMG,uCAAuC,CAACC,UAA4D;EAC/GJ,IAAIL,KAAKU,YAAYD,IAAAA;EACrBE,aAAaX,KAAKY,UAAUH,IAAAA;EAC5BI,cAAc,CAACC,OAAOC,YACbC,WAAI,aAAA;AACT,UAAMC,SAASlB,IAAImB,KAAKT,MAAMK,KAAAA;AAC9B,WAAO,OAAOhB,UAAUqB,OAAOjB,eAAekB,WAAW;MACvDH;MACAI,QAAQN,QAAQM;MAChBC,QAAQ;IACV,CAAA;EACF,CAAA;AACJ;AAGO,IAAMC,sBAAsB,CACjCC,OACA,EAAEC,UAAUC,aAAa,CAAC,EAAC,IAAkE,CAAC,MAAC;AAE/F,SAAOF,MAAMG,MAAMC,IAAG,MAAO/B,WAAWgC,gBAAgBL,MAAMM,WAAWC,MAAMC,UAAU,KAAK,IAC1FR,MAAMM,WAAWC,OACjBL,WAAWF,MAAMnB,EAAE,IACjBqB,WAAWF,MAAMnB,EAAE,IACnBoB,WACEtB,uBACAG;AACV;",
|
|
6
|
-
"names": ["Effect", "SpaceState", "Operation", "Obj", "Type", "meta", "SpaceOperation", "PERSONAL_SPACE_LABEL", "ns", "id", "UNNAMED_SPACE_LABEL", "SPACES", "makeCreateObjectEntryForDatabaseType", "type", "getTypename", "inputSchema", "getSchema", "createObject", "props", "options", "gen", "object", "make", "invoke", "AddObject", "target", "hidden", "getSpaceDisplayName", "space", "personal", "namesCache", "state", "get", "SPACE_READY", "properties", "name", "length"]
|
|
7
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// src/operations/index.ts
|
|
2
|
-
import { OperationHandlerSet } from "@dxos/compute";
|
|
3
|
-
var SpaceOperationHandlerSet = OperationHandlerSet.lazy(() => import("./add-object-QYOMCBJA.mjs"), () => import("./add-relation-HV3VCMJG.mjs"), () => import("./add-type-CZVKSEIW.mjs"), () => import("./close-FGQN37PK.mjs"), () => import("./create-EPIFSRJA.mjs"), () => import("./delete-LIA5M3WI.mjs"), () => import("./delete-field-ZIGFXFHY.mjs"), () => import("./duplicate-object-X37FM6PW.mjs"), () => import("./export-space-VWJHVXWF.mjs"), () => import("./get-share-link-3LEA5FSK.mjs"), () => import("./import-space-Y5L3QE3C.mjs"), () => import("./join-Z5K4OAIG.mjs"), () => import("./migrate-G7I52UKD.mjs"), () => import("./open-CPWVZSI4.mjs"), () => import("./open-create-object-4LN4PR6N.mjs"), () => import("./open-create-space-VPAW3F2T.mjs"), () => import("./open-import-space-VLQ5V55H.mjs"), () => import("./open-members-BEXOSSBS.mjs"), () => import("./open-settings-RHDBW2K5.mjs"), () => import("./remove-objects-OWDMA4IF.mjs"), () => import("./rename-SR6BBSPU.mjs"), () => import("./rename-object-5H6E5AOX.mjs"), () => import("./restore-field-UHDG2ZQM.mjs"), () => import("./restore-objects-2UD5P6OC.mjs"), () => import("./share-5Y4NZA75.mjs"), () => import("./snapshot-H3HKOFVP.mjs"), () => import("./wait-for-object-3TAWUWTP.mjs"));
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
SpaceOperationHandlerSet
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=chunk-B7DBIARR.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/SpacePlugin.ts", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-space/PLUGIN.mdl?raw"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Tag } from '@dxos/echo';\nimport { AttentionEvents } from '@dxos/plugin-attention';\nimport { ClientEvents } from '@dxos/plugin-client';\nimport { translations as componentsTranslations } from '@dxos/react-ui-components/translations';\nimport { translations as formTranslations } from '@dxos/react-ui-form/translations';\nimport { DataTypes } from '@dxos/schema';\nimport { translations as shellTranslations } from '@dxos/shell/react';\nimport {\n AnchoredTo,\n Employer,\n Event,\n HasConnection,\n HasRelationship,\n HasSubject,\n Organization,\n Person,\n Pipeline,\n Project,\n Task,\n} from '@dxos/types';\n\nimport {\n AppGraphSerializer,\n CreateObject,\n IdentityCreated,\n NavigationHandler,\n NavigationResolver,\n OperationHandler,\n UndoMappings,\n ReactRoot,\n ReactSurface,\n Repair,\n SpaceSettings,\n SpaceState,\n SpacesReady,\n AppGraphBuilder,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { SpaceEvents } from '#types';\nimport { type SpacePluginOptions } from '#types';\n\n// eslint-disable-next-line import/no-relative-packages\nimport pluginSpec from '../PLUGIN.mdl?raw';\n\nexport const SpacePlugin = Plugin.define<SpacePluginOptions>(meta).pipe(\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addNavigationHandlerModule(({ invitationProp }) => ({\n activate: () => NavigationHandler({ invitationProp }),\n })),\n AppPlugin.addNavigationResolverModule({ activatesOn: ClientEvents.ClientReady, activate: NavigationResolver }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addReactRootModule({ activate: ReactRoot }),\n AppPlugin.addSchemaModule({\n schema: [\n ...DataTypes,\n AnchoredTo.AnchoredTo,\n Employer.Employer,\n Event.Event,\n HasConnection.HasConnection,\n HasRelationship.HasRelationship,\n HasSubject.HasSubject,\n Organization.Organization,\n Person.Person,\n Pipeline.Pipeline,\n Project.Project,\n Tag.Tag,\n Task.Task,\n ],\n }),\n AppPlugin.addSettingsModule({ activate: SpaceSettings }),\n AppPlugin.addTranslationsModule({\n translations: [...translations, ...componentsTranslations, ...formTranslations, ...shellTranslations],\n }),\n Plugin.addModule({\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: ActivationEvent.oneOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),\n firesAfterActivation: [SpaceEvents.StateReady],\n activate: SpaceState,\n }),\n Plugin.addModule(\n ({\n shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost',\n invitationPath = '/',\n invitationProp = 'spaceInvitationCode',\n }) => {\n const createInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationPath || '/', shareableLinkOrigin);\n baseUrl.searchParams.set(invitationProp, invitationCode);\n return baseUrl.toString();\n };\n\n return {\n id: Capability.getModuleTag(ReactSurface),\n activatesOn: ActivationEvents.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the settings dialog is loaded when surfaces activation is more granular.\n firesBeforeActivation: [SpaceEvents.SetupSettingsPanel],\n activate: () => ReactSurface({ createInvitationUrl }),\n };\n },\n ),\n Plugin.addModule(\n ({ shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost' }) => ({\n id: Capability.getModuleTag(AppGraphBuilder),\n activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),\n activate: () => AppGraphBuilder({ shareableLinkOrigin }),\n }),\n ),\n Plugin.addModule(\n ({\n shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost',\n invitationPath = '/',\n invitationProp = 'spaceInvitationCode',\n observability = false,\n }) => {\n const createInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationPath || '/', shareableLinkOrigin);\n baseUrl.searchParams.set(invitationProp, invitationCode);\n return baseUrl.toString();\n };\n\n return {\n id: Capability.getModuleTag(UndoMappings),\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: () => UndoMappings({ createInvitationUrl, observability }),\n };\n },\n ),\n // TODO(wittjosiah): This could probably be deferred.\n Plugin.addModule({\n activatesOn: AppActivationEvents.AppGraphReady,\n activate: AppGraphSerializer,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.IdentityCreated,\n firesAfterActivation: [SpaceEvents.PersonalSpaceReady],\n activate: IdentityCreated,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvent.allOf(\n ActivationEvents.ProcessManagerReady,\n AppActivationEvents.LayoutReady,\n AppActivationEvents.AppGraphReady,\n AttentionEvents.AttentionReady,\n SpaceEvents.StateReady,\n ClientEvents.SpacesReady,\n ),\n activate: SpacesReady,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.SpacesReady,\n activate: Repair,\n }),\n AppPlugin.addPluginAssetModule({\n asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },\n }),\n Plugin.make,\n);\n\nexport default SpacePlugin;\n", "---\nid: org.dxos.plugin.space\nname: SpacePlugin\nversion: 0.1.0\n---\n\nCore workspace container plugin for `DXOS` Composer \u2014 creates, manages, and shares collaborative spaces with full membership control, object lifecycle management, schema registration, and navigation.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype SpaceForm\n fields:\n name?: string # display name for the space\n icon?: string # phosphor icon identifier\n hue?: string # colour token\n edgeReplication?: boolean # enable EDGE-based replication\n```\n\n```mdl\ntype SpacePluginOptions\n fields:\n shareableLinkOrigin?: string # base URL used for invitation and object copy-links\n invitationPath?: string # path appended to origin; default '/'\n invitationProp?: string # query param name for the invitation code\n observability?: boolean # emit observability events\n```\n\n```mdl\ntype ObjectViewerProps\n fields:\n lastSeen: number # unix timestamp of last observation\n currentlyAttended: boolean # true if the peer is currently viewing this object\n```\n\n```mdl\ntype PluginState\n fields:\n viewersByObject: Record<ObjectId, Map<PublicKey, ObjectViewerProps>>\n viewersByIdentity: Map<PublicKey, Set<ObjectId>>\n awaiting: string | undefined # DXN of an object being waited on\n spaceNames: Record<string, string> # cached names for closed/loading spaces\n sdkMigrationRunning: Record<string, boolean>\n navigableCollections: boolean\n enabledEdgeReplication: boolean\n```\n\n## Components\n\n```mdl\ncomponent CollectionArticle\n desc: Main article view for a Collection \u2014 renders its child objects as an ordered list, supports drag-reorder and per-item actions.\n props:\n subject: Collection\n state:\n selected?: Obj.Unknown\n actions:\n addObject(object: Obj.Unknown)\n removeObject(object: Obj.Unknown)\n reorder(from: number, to: number)\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 [toolbar] \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 object row \u2502\n \u2502 object row \u2502\n \u2502 object row \u2026 \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n```mdl\ncomponent CollectionSection\n desc: Compact list of objects belonging to a collection, used inside sidebars and companion panels.\n props:\n collection: Collection\n state:\n expanded: boolean\n actions:\n toggleExpand()\n```\n\n```mdl\ncomponent RecordArticle\n desc: Schema-driven form/detail view for a single ECHO object rendered in an article slot.\n props:\n subject: Obj.Unknown\n actions:\n save()\n discard()\n```\n\n```mdl\ncomponent RelatedArticle\n desc: Companion panel listing objects semantically related to the current subject via ECHO relations.\n props:\n subject: Obj.Unknown\n state:\n relations: Obj.Unknown[]\n```\n\n```mdl\ncomponent CreateObjectDialog\n desc: Modal dialog that lets the user pick a schema type and fill initial fields to create a new ECHO object.\n props:\n target: Database | Collection\n views?: boolean\n typename?: string\n initialFormValues?: Record<string, any>\n navigable?: boolean\n actions:\n confirm(data: Record<string, any>)\n cancel()\n```\n\n```mdl\ncomponent CreateSpaceDialog\n desc: Modal dialog for creating a new space with name, icon, colour, and replication options.\n actions:\n confirm(form: SpaceForm)\n cancel()\n```\n\n```mdl\ncomponent ImportSpaceDialog\n desc: Dialog that accepts a space archive file and imports it as a new space.\n actions:\n confirm(archive: { filename: string; contents: Uint8Array })\n cancel()\n```\n\n```mdl\ncomponent JoinDialog\n desc: Dialog that accepts an invitation code and joins the corresponding space.\n props:\n invitationCode?: string\n actions:\n join(code: string)\n cancel()\n```\n\n```mdl\ncomponent MembersContainer\n desc: Panel showing all members of a space with their presence status and role; allows managing invitations.\n props:\n space: Space\n```\n\n```mdl\ncomponent SpaceSettingsContainer\n desc: Settings panel for a single space \u2014 name, icon, colour, replication toggle, and member management.\n props:\n space: Space\n```\n\n```mdl\ncomponent SchemaContainer\n desc: Browsable table of all registered ECHO schemas in the current space; allows adding new schemas.\n props:\n db: Database\n```\n\n```mdl\ncomponent ViewEditor\n desc: Interactive editor for a View \u2014 reorder, add, and remove fields; configure field display settings.\n props:\n view: View\n```\n\n```mdl\ncomponent SpacePresence\n desc: Avatar cluster indicating which peers are currently attending the active object/space.\n props:\n space: Space\n```\n\n```mdl\ncomponent SyncStatus\n desc: Icon/indicator reflecting the CRDT sync health of the active space.\n props:\n space: Space\n```\n\n## Operations\n\n```mdl\nop SpaceOperation.Create\n desc: Creates a new space with the given display properties.\n input:\n name?: string\n icon?: string\n hue?: string\n edgeReplication?: boolean\n output: { id: string; subject: string[]; space: Space }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Join\n desc: Joins an existing space by resolving and accepting an invitation code.\n input:\n invitationCode?: string\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Open\n desc: Navigates the layout to the given space.\n input:\n space: Space\n output: void\n effects: [layout:navigate]\n```\n\n```mdl\nop SpaceOperation.Close\n desc: Removes the space from the active navigation context.\n input:\n space: Space\n output: void\n effects: [layout:navigate]\n```\n\n```mdl\nop SpaceOperation.Share\n desc: Creates an invitation observable for sharing a space; supports single-use and multi-use codes.\n input:\n space: Space\n type: Invitation.Type\n authMethod: Invitation.AuthMethod\n multiUse: boolean\n target?: string\n output: CancellableInvitationObservable\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Rename\n desc: Opens a rename popover for the given space.\n input:\n space: Space\n caller?: string\n output: void\n effects: [layout:dialog]\n```\n\n```mdl\nop SpaceOperation.AddObject\n desc: Adds an existing ECHO object to a database or collection and optionally navigates to it.\n input:\n object: Obj.Unknown\n target: Database | Collection\n hidden?: boolean\n targetNodeId?: string\n output: { id: string; subject: string[]; object: Obj.Unknown }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RemoveObjects\n desc: Removes one or more objects from a collection; returns undo data.\n input:\n objects: Obj.Unknown[]\n target?: Collection\n output: { objects: Obj.Unknown[]; parentCollection: Collection; indices: number[]; wasActive: string[] }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RestoreObjects\n desc: Restores previously removed objects to their collection (inverse of RemoveObjects).\n input:\n objects: Obj.Unknown[]\n parentCollection: Collection\n indices: number[]\n wasActive: string[]\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.AddSchema\n desc: Registers a new schema type in the space database; optionally makes it visible in the type picker.\n input:\n db: Database\n name?: string\n typename?: string\n version?: string\n schema: Schema.AnyNoContext\n show?: boolean\n output: { id: string; object: Type.PersistentType; schema: Type.RuntimeType }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.AddRelation\n desc: Creates a typed relation between two ECHO objects.\n input:\n db: Database\n schema: Schema.AnyNoContext\n source: Obj.Unknown\n target: Obj.Unknown\n fields?: Record<string, any>\n output: { relation: any }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.DeleteField\n desc: Removes a field from a View; returns undo data.\n input:\n view: View\n fieldId: string\n output: { field: View.FieldSchema; props: any; index: number }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RestoreField\n desc: Restores a deleted field to a View at its original index (inverse of DeleteField).\n input:\n view: View\n field: View.FieldSchema\n props: any\n index: number\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.ImportSpace\n desc: Imports a binary space archive as a brand-new space.\n input:\n archive: { filename: string; contents: Uint8Array }\n tags?: string[]\n output: { space: Space }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.ExportSpace\n desc: Serialises a space to an archive and triggers a browser download.\n input:\n space: Space\n format: SpaceArchive.Format\n output: void\n effects: [fs:write]\n```\n\n```mdl\nop SpaceOperation.Snapshot\n desc: Captures a point-in-time snapshot of a database or filtered query as a Blob.\n input:\n db: Database\n query?: QueryAST.Query\n output: { snapshot: Blob }\n effects: [echo:read]\n```\n\n```mdl\nop SpaceOperation.Migrate\n desc: Runs registered migrations against a space to bring it to the current schema version.\n input:\n space: Space\n version?: string\n output: boolean # true if any migration ran\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Reset\n desc: |\n Permanently deletes all objects and truncates feeds in a space via a new epoch.\n This operation is unrecoverable.\n input:\n space: Space\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.GetShareLink\n desc: Constructs a shareable URL for a space or specific object; optionally copies it to the clipboard.\n input:\n space: Space\n target?: string\n copyToClipboard?: boolean\n output: string # fully-qualified URL\n effects: [clipboard]\n```\n\n```mdl\nop CollectionOperation.Create\n desc: Creates a new Collection object in the active space.\n input:\n name?: string\n output: { object: Collection }\n effects: [echo:write]\n```\n\n## Features\n\n```mdl\nfeat F-1: Space Lifecycle\n\n req F-1.1: User can create a new space via op:SpaceOperation.Create; the space appears in the navigation graph.\n req F-1.2: User can join a space via op:SpaceOperation.Join with an invitation code.\n req F-1.3: User can close/open spaces; closed spaces remain listed with their cached name.\n req F-1.4:\n when: user triggers op:SpaceOperation.Reset\n then: all objects are deleted and a new epoch is created; the operation is unrecoverable\n```\n\n```mdl\nfeat F-2: Membership and Sharing\n\n req F-2.1:\n when: user triggers op:SpaceOperation.Share\n then: an invitation observable is created; the invitation URL uses the configured shareableLinkOrigin\n\n req F-2.2: MembersContainer shows all current members with their presence status.\n req F-2.3: User can generate single-use or multi-use invitation links.\n req F-2.4: User can get a direct shareable link to a space or object via op:SpaceOperation.GetShareLink.\n```\n\n```mdl\nfeat F-3: Object Lifecycle\n\n req F-3.1:\n when: user opens the create-object dialog\n then: all registered schema types are shown for selection\n\n req F-3.2: op:SpaceOperation.AddObject adds an object to a collection and fires navigation if navigable.\n req F-3.3: op:SpaceOperation.RemoveObjects records undo data; op:SpaceOperation.RestoreObjects reverts the removal.\n req F-3.4: op:SpaceOperation.DuplicateObject creates a shallow copy of an object in the same target.\n```\n\n```mdl\nfeat F-4: Schema Registry\n\n req F-4.1:\n when: a plugin registers a schema via AppPlugin.addSchemaModule\n then: the type is available globally across all spaces\n\n req F-4.2:\n when: user triggers op:SpaceOperation.AddSchema\n then: a StoredSchema entry is persisted in the space database\n\n req F-4.3: SchemaContainer lists all schemas in the active space; user can add a new user-defined schema.\n```\n\n```mdl\nfeat F-5: Collections\n\n req F-5.1: A Collection is an ordered list of references to ECHO objects.\n req F-5.2: CollectionArticle renders collection contents with drag-to-reorder support.\n req F-5.3: op:CollectionOperation.Create creates an empty Collection in the active space.\n```\n\n```mdl\nfeat F-6: Persistence and Migrations\n\n req F-6.1:\n when: client emits SetupMigration\n then: all registered migrations run against every space\n\n req F-6.2:\n when: user triggers op:SpaceOperation.Migrate\n then: the space is migrated to the specified (or latest) version; returns true if work was done\n\n req F-6.3: op:SpaceOperation.ExportSpace serialises a space as a binary archive for backup.\n req F-6.4: op:SpaceOperation.ImportSpace restores an archive as a new space with optional tags.\n```\n\n```mdl\nfeat F-7: View and Field Editing\n\n req F-7.1: op:SpaceOperation.DeleteField removes a field from a View and returns full undo state.\n req F-7.2: op:SpaceOperation.RestoreField reinstates a deleted field at its original position.\n req F-7.3: ViewEditor provides an interactive UI for reordering and configuring View fields.\n```\n\n```mdl\nfeat F-8: Presence and Sync Status\n\n req F-8.1: SpacePresence tracks which peers are viewing which objects via the attention system.\n req F-8.2: SyncStatus reflects CRDT sync health; unsynchronised changes are indicated visually.\n req F-8.3:\n when: a peer starts or stops attending an object\n then: viewersByObject and viewersByIdentity maps are updated in ephemeral plugin state\n```\n\n## Acceptance\n\n```mdl\ntest T-1: Create and open a space\n given: no spaces exist\n when: op:SpaceOperation.Create runs with name \"Acme\"\n then:\n - new Space object is returned with the given name\n - space appears in the navigation graph\n```\n\n```mdl\ntest T-2: Join space via invitation\n given: an invitation URL has been generated for an existing space\n when: op:SpaceOperation.Join runs with the invitation code\n then:\n - space appears in the local client's space list\n - space state transitions to SPACE_READY\n```\n\n```mdl\ntest T-3: Add and remove object with undo\n given: a Collection in an active space\n when: op:SpaceOperation.AddObject adds object X, then op:SpaceOperation.RemoveObjects removes it\n then:\n - RemoveObjects output records the original index and collection\n - op:SpaceOperation.RestoreObjects puts X back at the same index\n```\n\n```mdl\ntest T-4: Export and import space\n given: a space containing 5 objects\n when: op:SpaceOperation.ExportSpace runs, then op:SpaceOperation.ImportSpace loads the archive\n then:\n - the new space contains the same 5 objects\n - the original space is unchanged\n```\n\n```mdl\ntest T-5: Schema registration\n given: an active space with no custom schemas\n when: op:SpaceOperation.AddSchema runs with a new schema definition\n then:\n - a StoredSchema entry exists in the space database\n - the schema is available in the create-object dialog type picker\n```\n\n```mdl\ntest T-6: View field delete and restore\n given: a View with fields [\"name\", \"email\", \"phone\"]\n when: op:SpaceOperation.DeleteField removes \"email\", then op:SpaceOperation.RestoreField restores it\n then:\n - after delete, View has fields [\"name\", \"phone\"]\n - after restore, View has fields [\"name\", \"email\", \"phone\"] in original order\n```\n\n---\n\n## Appendix: Extension Definitions\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap\n literals?: UnionList\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap\n state?: FieldMap\n slots?: FieldMap\n actions?: ActionMap\n emits?: EventMap\n layout?: CodeBlock\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap\n output?: TypeExpr\n errors?: ErrorMap\n effects?: EffectList\n requires?: ServiceList\n note?: Prose\n```\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ActivationEvent", "ActivationEvents", "Capability", "Plugin", "AppActivationEvents", "AppPlugin", "Tag", "AttentionEvents", "ClientEvents", "translations", "componentsTranslations", "formTranslations", "DataTypes", "shellTranslations", "AnchoredTo", "Employer", "Event", "HasConnection", "HasRelationship", "HasSubject", "Organization", "Person", "Pipeline", "Project", "Task", "AppGraphSerializer", "CreateObject", "IdentityCreated", "NavigationHandler", "NavigationResolver", "OperationHandler", "UndoMappings", "ReactRoot", "ReactSurface", "Repair", "SpaceSettings", "SpaceState", "SpacesReady", "AppGraphBuilder", "meta", "SpaceEvents", "SpacePlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addCreateObjectModule", "activate", "CreateObject", "addNavigationHandlerModule", "invitationProp", "NavigationHandler", "addNavigationResolverModule", "activatesOn", "ClientEvents", "ClientReady", "NavigationResolver", "addOperationHandlerModule", "OperationHandler", "addReactRootModule", "ReactRoot", "addSchemaModule", "schema", "DataTypes", "AnchoredTo", "Employer", "Event", "HasConnection", "HasRelationship", "HasSubject", "Organization", "Person", "Pipeline", "Project", "Tag", "Task", "addSettingsModule", "SpaceSettings", "addTranslationsModule", "translations", "componentsTranslations", "formTranslations", "shellTranslations", "addModule", "ActivationEvent", "oneOf", "AppActivationEvents", "SetupSettings", "SetupAppGraph", "firesAfterActivation", "SpaceEvents", "StateReady", "SpaceState", "shareableLinkOrigin", "window", "location", "origin", "invitationPath", "createInvitationUrl", "invitationCode", "baseUrl", "URL", "searchParams", "set", "toString", "id", "Capability", "getModuleTag", "ReactSurface", "ActivationEvents", "SetupReactSurface", "firesBeforeActivation", "SetupSettingsPanel", "AppGraphBuilder", "allOf", "observability", "UndoMappings", "SetupProcessManager", "AppGraphReady", "AppGraphSerializer", "IdentityCreated", "PersonalSpaceReady", "ProcessManagerReady", "LayoutReady", "AttentionEvents", "AttentionReady", "SpacesReady", "Repair", "addPluginAssetModule", "asset", "pluginId", "path", "content", "pluginSpec", "mimeType", "make"]
|
|
7
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// src/constants.ts
|
|
2
|
-
import { DXN } from "@dxos/keys";
|
|
3
|
-
import { meta } from "#meta";
|
|
4
|
-
var CREATE_OBJECT_DIALOG = DXN.make(`${meta.id}.createObjectDialog`);
|
|
5
|
-
var CREATE_SPACE_DIALOG = DXN.make(`${meta.id}.createSpaceDialog`);
|
|
6
|
-
var IMPORT_SPACE_DIALOG = DXN.make(`${meta.id}.importSpaceDialog`);
|
|
7
|
-
var JOIN_DIALOG = DXN.make(`${meta.id}.joinDialog`);
|
|
8
|
-
var ENTITY_RENAME_POPOVER = DXN.make(`${meta.id}.entityRenamePopover`);
|
|
9
|
-
var SPACE_RENAME_POPOVER = DXN.make(`${meta.id}.spaceRenamePopover`);
|
|
10
|
-
|
|
11
|
-
export {
|
|
12
|
-
CREATE_OBJECT_DIALOG,
|
|
13
|
-
CREATE_SPACE_DIALOG,
|
|
14
|
-
IMPORT_SPACE_DIALOG,
|
|
15
|
-
JOIN_DIALOG,
|
|
16
|
-
ENTITY_RENAME_POPOVER,
|
|
17
|
-
SPACE_RENAME_POPOVER
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=chunk-F5MESIRH.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
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.id}.createObjectDialog`);\nexport const CREATE_SPACE_DIALOG = DXN.make(`${meta.id}.createSpaceDialog`);\nexport const IMPORT_SPACE_DIALOG = DXN.make(`${meta.id}.importSpaceDialog`);\nexport const JOIN_DIALOG = DXN.make(`${meta.id}.joinDialog`);\nexport const ENTITY_RENAME_POPOVER = DXN.make(`${meta.id}.entityRenamePopover`);\nexport const SPACE_RENAME_POPOVER = DXN.make(`${meta.id}.spaceRenamePopover`);\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,WAAW;AAEpB,SAASC,YAAY;AAEd,IAAMC,uBAAuBF,IAAIG,KAAK,GAAGF,KAAKG,EAAE,qBAAqB;AACrE,IAAMC,sBAAsBL,IAAIG,KAAK,GAAGF,KAAKG,EAAE,oBAAoB;AACnE,IAAME,sBAAsBN,IAAIG,KAAK,GAAGF,KAAKG,EAAE,oBAAoB;AACnE,IAAMG,cAAcP,IAAIG,KAAK,GAAGF,KAAKG,EAAE,aAAa;AACpD,IAAMI,wBAAwBR,IAAIG,KAAK,GAAGF,KAAKG,EAAE,sBAAsB;AACvE,IAAMK,uBAAuBT,IAAIG,KAAK,GAAGF,KAAKG,EAAE,qBAAqB;",
|
|
6
|
-
"names": ["DXN", "meta", "CREATE_OBJECT_DIALOG", "make", "id", "CREATE_SPACE_DIALOG", "IMPORT_SPACE_DIALOG", "JOIN_DIALOG", "ENTITY_RENAME_POPOVER", "SPACE_RENAME_POPOVER"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/capabilities.ts", "../../../src/types/events.ts", "../../../src/types/form.ts", "../../../src/types/types.ts", "../../../src/types/Settings.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport type * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\nimport type { ComponentType } from 'react';\n\nimport { Capability } from '@dxos/app-framework';\nimport { type Space } from '@dxos/client/echo';\nimport { type Operation } from '@dxos/compute';\nimport { type Collection, type Database, type Type } from '@dxos/echo';\nimport { type PublicKey } from '@dxos/keys';\nimport { type Label } from '@dxos/ui-types/translations';\nimport { type ComplexMap, type Position } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nimport * as Settings from './Settings';\nimport { type CreateObject, type ObjectViewerProps } from './types';\n\nexport namespace SpaceCapabilities {\n export const Settings = Capability.make<Atom.Writable<Settings.Settings>>(`${meta.id}.capability.settings`);\n\n /** Schema for persisted space plugin state. */\n export const StateSchema = Schema.mutable(\n Schema.Struct({\n spaceNames: Schema.Record({ key: Schema.String, value: Schema.String }),\n enabledEdgeReplication: Schema.Boolean,\n }),\n );\n\n export type SpaceState = Schema.Schema.Type<typeof StateSchema>;\n\n /** Persisted state (stored in KVS/localStorage). */\n export const State = Capability.make<Atom.Writable<SpaceState>>(`${meta.id}.capability.state`);\n\n /** Ephemeral space plugin state (not persisted). */\n export type SpaceEphemeralState = {\n awaiting: string | undefined;\n sdkMigrationRunning: Record<string, boolean>;\n navigableCollections: boolean;\n viewersByObject: Record<string, ComplexMap<PublicKey, ObjectViewerProps>>;\n viewersByIdentity: ComplexMap<PublicKey, Set<string>>;\n };\n\n /** Transient/ephemeral state (not persisted). */\n export const EphemeralState = Capability.make<Atom.Writable<SpaceEphemeralState>>(\n `${meta.id}.capability.ephemeral-state`,\n );\n\n export type SettingsSection = { id: string; label: Label; position?: Position };\n export const SettingsSection = Capability.make<SettingsSection>(`${meta.id}.capability.settings-section`);\n\n export type OnCreateSpace = (params: {\n space: Space;\n isDefault: boolean;\n rootCollection: Collection.Collection;\n }) => Effect.Effect<void, Error, Operation.Service>;\n export const OnCreateSpace = Capability.make<OnCreateSpace>(`${meta.id}.capability.on-space-created`);\n\n export type OnTypeAdded = (params: {\n db: Database.Database;\n type: Type.AnyEntity;\n // TODO(wittjosiah): This is leaky.\n show?: boolean;\n }) => Effect.Effect<void, Error, Operation.Service>;\n export const OnTypeAdded = Capability.make<OnTypeAdded>(`${meta.id}.capability.on-type-added`);\n\n // TODO(wittjosiah): Replace with migrations, this is not a sustainable solution.\n export type HandleRepair = (params: { space: Space; isDefault: boolean }) => Promise<void>;\n export const Repair = Capability.make<HandleRepair>(`${meta.id}.capability.repair`);\n\n /** Typed creation entry contributed per typename by plugins that support creating objects. */\n export type CreateObjectEntry = Readonly<{\n id: string;\n createObject: CreateObject;\n /**\n * Effect Schema describing the create form inputs. To use a `Type.Type`\n * entity as the form schema, extract its schema first via `Type.getSchema(...)`.\n */\n inputSchema?: Schema.Schema.AnyNoContext;\n /**\n * Optional custom React panel rendered in place of the default `inputSchema` form.\n * Lets a plugin own the entire post-typename-selection flow (e.g. multi-stage forms).\n * `onCreateObject` receives the collected data and triggers the same submit flow.\n */\n customPanel?: ComponentType<CreateObjectCustomPanelProps>;\n }>;\n export const CreateObjectEntry = Capability.make<CreateObjectEntry>(`${meta.id}.capability.create-object`);\n\n /** Props passed to a `CreateObjectEntry.customPanel`. */\n export type CreateObjectCustomPanelProps = {\n target: Database.Database | Collection.Collection;\n initialFormValues?: Record<string, any>;\n onCreateObject: (data: Record<string, any>) => void | Promise<void>;\n };\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\n\nexport namespace SpaceEvents {\n export const StateReady = AppActivationEvents.createStateEvent(`${meta.id}.event.state-ready`);\n export const SetupSettingsPanel = ActivationEvent.make(`${meta.id}.event.setup-settings-panel`);\n export const PersonalSpaceReady = ActivationEvent.make(`${meta.id}.event.default-space-ready`);\n export const SpaceCreated = ActivationEvent.make(`${meta.id}.event.space-created`);\n export const TypeAdded = ActivationEvent.make(`${meta.id}.event.type-added`);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport { TypeInputOptions, TypeInputOptionsAnnotation, TypeInputOptionsAnnotationId } from '@dxos/app-toolkit';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppNodeMatcher } from '@dxos/app-toolkit';\nimport { type PublicKey } from '@dxos/client';\nimport { Operation } from '@dxos/compute';\nimport { Collection, Database, Obj } from '@dxos/echo';\nimport { type ComplexMap } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport * as Settings from './Settings';\n\nexport const SPACE_DIRECTORY_HANDLE = `${meta.id}.directory`;\n\nexport const SPACE_TYPE = 'org.dxos.type.space';\n\n/** Type for the per-space virtual \"Settings\" section. Single source of truth is `AppNodeMatcher.SETTINGS_SECTION_TYPE`. */\nexport const SETTINGS_SECTION_TYPE = AppNodeMatcher.SETTINGS_SECTION_TYPE;\n\n/** Node id (local segment) for the per-space virtual \"Settings\" section. */\nexport const SETTINGS_SECTION_ID = 'settings';\n\n/** Key for the Expando that stores cross-space ordering (must stay stable for persisted data). */\nexport const SHARED = 'shared-spaces';\n\nexport type SpacePluginOptions = {\n /**\n * Origin used for shareable links (object copy-link and invitation base).\n * Defaults to window.location.origin.\n */\n shareableLinkOrigin?: string;\n\n /**\n * Path appended to shareableLinkOrigin to form the invitation base URL.\n * Defaults to '/'.\n */\n invitationPath?: string;\n\n /**\n * Query parameter name for the invitation code.\n */\n invitationProp?: string;\n\n /**\n * Whether to send observability events.\n */\n observability?: boolean;\n};\n\nexport type ObjectViewerProps = {\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type ObjectId = string;\n\nexport type PluginState = {\n /**\n * Which objects are currently being viewed by which peers.\n */\n viewersByObject: Record<ObjectId, ComplexMap<PublicKey, ObjectViewerProps>>;\n\n /**\n * Which peers are currently viewing which objects.\n */\n viewersByIdentity: ComplexMap<PublicKey, Set<ObjectId>>;\n\n /**\n * Object that was linked to directly but not found and is being awaited.\n */\n awaiting: string | undefined;\n\n /**\n * Cached space names, used when spaces are closed or loading.\n */\n spaceNames: Record<string, string>;\n\n /**\n * Which spaces have an SDK migration running currently.\n */\n // TODO(wittjosiah): Factor out to sdk. Migration running should probably be a space state.\n sdkMigrationRunning: Record<string, boolean>;\n\n /**\n * Whether or not the user can navigate to collections in the graph.\n * Determined by whether or not there is an available plugin that can render a collection.\n */\n navigableCollections: boolean;\n\n /**\n * Tracks whether setting edge replication as default has been run on spaces.\n */\n // TODO(wittjosiah): Systematic way to handle migrations of state outside of spaces.\n enabledEdgeReplication: boolean;\n};\n\n// TODO(wittjosiah): Reconcile with graph export serializers.\n\nexport type SerializerMap = Record<string, TypedObjectSerializer>;\n\nexport interface TypedObjectSerializer<T extends Obj.Unknown = Obj.Unknown> {\n serialize(params: { object: T }): Promise<string>;\n\n /**\n * @param params.content\n * @param params.space Space to use for deserializing schema references.\n * @param params.newId Generate new ID for deserialized object.\n */\n deserialize(params: { content: string; db: Database.Database; newId?: boolean }): Promise<T>;\n}\n\n/**\n * Result of creating and adding an object.\n */\nexport type CreateObjectResult = {\n id: string;\n subject: readonly string[];\n object: Obj.Unknown;\n};\n\n/**\n * Factory function that creates an object and adds it to a target (database or collection).\n * Returns an Effect that resolves to the created object result with navigation subject.\n */\nexport type CreateObject = (\n props: any,\n options: {\n db: Database.Database;\n target: Database.Database | Collection.Collection;\n targetNodeId?: string;\n },\n) => Effect.Effect<CreateObjectResult, Error, Capability.Service | Operation.Service>;\n\n// TODO(burdon): Move to FormatEnum or SDK.\nexport const IconAnnotationId = Symbol.for('@dxos/plugin-space/annotation/Icon');\nexport const HueAnnotationId = Symbol.for('@dxos/plugin-space/annotation/Hue');\n\n// TOOD(burdon): Use SpacePropertiesSchema.\nexport const SpaceForm = Schema.Struct({\n name: Schema.optional(Schema.String.annotations({ title: 'Name' })),\n icon: Schema.optional(Schema.String.annotations({ title: 'Icon', [IconAnnotationId]: true })),\n hue: Schema.optional(Schema.String.annotations({ title: 'Color', [HueAnnotationId]: true })),\n edgeReplication: Schema.optional(Schema.Boolean.annotations({ title: 'Enable EDGE Replication' })),\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nexport const Settings = Schema.mutable(Schema.Struct({}));\n\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n"],
|
|
5
|
-
"mappings": ";;;;;AAMA,YAAYA,YAAY;AAGxB,SAASC,kBAAkB;AAQ3B,SAASC,YAAY;UAKJC,oBAAAA;qBACFC,WAAWH,WAAWI,KAAuC,GAAGH,KAAKI,EAAE,sBAAsB;qBAG7FC,cAAqBC,eACzBC,cAAO;IACZC,YAAmBC,cAAO;MAAEC,KAAYC;MAAQC,OAAcD;IAAO,CAAA;IACrEE,wBAA+BC;EACjC,CAAA,CAAA;qBAMWC,QAAQhB,WAAWI,KAAgC,GAAGH,KAAKI,EAAE,mBAAmB;qBAYhFY,iBAAiBjB,WAAWI,KACvC,GAAGH,KAAKI,EAAE,6BAA6B;qBAI5Ba,kBAAkBlB,WAAWI,KAAsB,GAAGH,KAAKI,EAAE,8BAA8B;qBAO3Fc,gBAAgBnB,WAAWI,KAAoB,GAAGH,KAAKI,EAAE,8BAA8B;qBAQvFe,cAAcpB,WAAWI,KAAkB,GAAGH,KAAKI,EAAE,2BAA2B;qBAIhFgB,SAASrB,WAAWI,KAAmB,GAAGH,KAAKI,EAAE,oBAAoB;qBAkBrEiB,oBAAoBtB,WAAWI,KAAwB,GAAGH,KAAKI,EAAE,2BAA2B;AAQ3G,GA5EiBH,sBAAAA,oBAAAA,CAAAA,EAAAA;;;;AClBjB,SAASqB,uBAAuB;AAChC,SAASC,2BAA2B;AAEpC,SAASC,QAAAA,aAAY;UAEJC,cAAAA;eACFC,aAAaH,oBAAoBI,iBAAiB,GAAGH,MAAKI,EAAE,oBAAoB;eAChFC,qBAAqBP,gBAAgBQ,KAAK,GAAGN,MAAKI,EAAE,6BAA6B;eACjFG,qBAAqBT,gBAAgBQ,KAAK,GAAGN,MAAKI,EAAE,4BAA4B;eAChFI,eAAeV,gBAAgBQ,KAAK,GAAGN,MAAKI,EAAE,sBAAsB;eACpEK,YAAYX,gBAAgBQ,KAAK,GAAGN,MAAKI,EAAE,mBAAmB;AAC7E,GANiBH,gBAAAA,cAAAA,CAAAA,EAAAA;;;;ACLjB,SAASS,kBAAkBC,4BAA4BC,oCAAoC;;;ACC3F,YAAYC,aAAY;AAGxB,SAASC,sBAAsB;AAM/B,SAASC,QAAAA,aAAY;;;ACdrB;;;;AAMA,YAAYC,aAAY;AAEjB,IAAMC,WAAkBC,gBAAeC,eAAO,CAAC,CAAA,CAAA;;;ADU/C,IAAMC,yBAAyB,GAAGC,MAAKC,EAAE;AAEzC,IAAMC,aAAa;AAGnB,IAAMC,wBAAwBC,eAAeD;AAG7C,IAAME,sBAAsB;AAG5B,IAAMC,SAAS;AA+Gf,IAAMC,mBAAmBC,uBAAOC,IAAI,oCAAA;AACpC,IAAMC,kBAAkBF,uBAAOC,IAAI,mCAAA;AAGnC,IAAME,YAAmBC,eAAO;EACrCC,MAAaC,iBAAgBC,eAAOC,YAAY;IAAEC,OAAO;EAAO,CAAA,CAAA;EAChEC,MAAaJ,iBAAgBC,eAAOC,YAAY;IAAEC,OAAO;IAAQ,CAACV,gBAAAA,GAAmB;EAAK,CAAA,CAAA;EAC1FY,KAAYL,iBAAgBC,eAAOC,YAAY;IAAEC,OAAO;IAAS,CAACP,eAAAA,GAAkB;EAAK,CAAA,CAAA;EACzFU,iBAAwBN,iBAAgBO,gBAAQL,YAAY;IAAEC,OAAO;EAA0B,CAAA,CAAA;AACjG,CAAA;",
|
|
6
|
-
"names": ["Schema", "Capability", "meta", "SpaceCapabilities", "Settings", "make", "id", "StateSchema", "mutable", "Struct", "spaceNames", "Record", "key", "String", "value", "enabledEdgeReplication", "Boolean", "State", "EphemeralState", "SettingsSection", "OnCreateSpace", "OnTypeAdded", "Repair", "CreateObjectEntry", "ActivationEvent", "AppActivationEvents", "meta", "SpaceEvents", "StateReady", "createStateEvent", "id", "SetupSettingsPanel", "make", "PersonalSpaceReady", "SpaceCreated", "TypeAdded", "TypeInputOptions", "TypeInputOptionsAnnotation", "TypeInputOptionsAnnotationId", "Schema", "AppNodeMatcher", "meta", "Schema", "Settings", "mutable", "Struct", "SPACE_DIRECTORY_HANDLE", "meta", "id", "SPACE_TYPE", "SETTINGS_SECTION_TYPE", "AppNodeMatcher", "SETTINGS_SECTION_ID", "SHARED", "IconAnnotationId", "Symbol", "for", "HueAnnotationId", "SpaceForm", "Struct", "name", "optional", "String", "annotations", "title", "icon", "hue", "edgeReplication", "Boolean"]
|
|
7
|
-
}
|