@dxos/plugin-space 0.8.4-main.406dc2a → 0.8.4-main.548089c
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/browser/{CollectionMain-AX7KKXWP.mjs → CollectionArticle-ABGFK4VO.mjs} +8 -8
- package/dist/lib/browser/CollectionArticle-ABGFK4VO.mjs.map +7 -0
- package/dist/lib/browser/{ObjectDetailsPanel-MQBHG666.mjs → ObjectDetailsPanel-2BRUBHP6.mjs} +16 -20
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
- package/dist/lib/browser/{ObjectSettings-KNUZFCGS.mjs → ObjectSettings-5LLWCVEK.mjs} +33 -40
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-G4BCSFFA.mjs +116 -0
- package/dist/lib/browser/RecordArticle-G4BCSFFA.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-3R5GGT46.mjs → app-graph-builder-FFPJHWFB.mjs} +53 -45
- package/dist/lib/browser/app-graph-builder-FFPJHWFB.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-25Z5BG22.mjs → app-graph-serializer-QMWE2YE4.mjs} +10 -10
- package/dist/lib/browser/app-graph-serializer-QMWE2YE4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OV6D543A.mjs → chunk-I4W2BHA2.mjs} +36 -30
- package/dist/lib/browser/chunk-I4W2BHA2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RLI2IAHK.mjs → chunk-K5J7ZB5P.mjs} +2 -2
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7XOTWRZ3.mjs → chunk-K6TOP4E6.mjs} +19 -18
- package/dist/lib/browser/chunk-K6TOP4E6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WS2PJDES.mjs → chunk-M2Z6D4ZI.mjs} +12 -11
- package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-522KZGQF.mjs → chunk-MHXNG2X2.mjs} +487 -381
- package/dist/lib/browser/chunk-MHXNG2X2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PTGRQQ6J.mjs → chunk-OLBBSOVI.mjs} +23 -13
- package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +7 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EIXZABXD.mjs → chunk-WJXU4GKV.mjs} +2 -2
- package/dist/lib/browser/{identity-created-PW2BA46S.mjs → identity-created-NAXTPQXE.mjs} +3 -3
- package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +63 -46
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-ICGUSVH6.mjs → intent-resolver-WLFWCHDH.mjs} +53 -58
- package/dist/lib/browser/intent-resolver-WLFWCHDH.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-H56QN474.mjs → react-root-BPPTUFLV.mjs} +9 -8
- package/dist/lib/browser/react-root-BPPTUFLV.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-VOE2ILKO.mjs → react-surface-3KTOA5PM.mjs} +37 -40
- package/dist/lib/browser/react-surface-3KTOA5PM.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs → schema-defs-XCNOO2WT.mjs} +3 -3
- package/dist/lib/browser/{settings-OBFJ67ZG.mjs → settings-WKLGKUHQ.mjs} +3 -3
- package/dist/lib/browser/{spaces-ready-MFIVK6I6.mjs → spaces-ready-XVW7I5MQ.mjs} +12 -11
- package/dist/lib/browser/spaces-ready-XVW7I5MQ.mjs.map +7 -0
- package/dist/lib/browser/{state-LSPRFIRO.mjs → state-Q7YRE5KG.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{CollectionMain-EU57SRYK.mjs → CollectionArticle-G3V4QXPI.mjs} +8 -8
- package/dist/lib/node-esm/CollectionArticle-G3V4QXPI.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectDetailsPanel-NABA2S56.mjs → ObjectDetailsPanel-6PZQIQG3.mjs} +16 -20
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectSettings-GXGTITF5.mjs → ObjectSettings-OQSBOH7K.mjs} +33 -40
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs +117 -0
- package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-VGRMD5TP.mjs → app-graph-builder-3BTVV7LE.mjs} +53 -45
- package/dist/lib/node-esm/app-graph-builder-3BTVV7LE.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-U4GHXWRG.mjs → app-graph-serializer-BU7KO2G5.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-serializer-BU7KO2G5.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4F25JKVT.mjs → chunk-2PN7QNGV.mjs} +12 -11
- package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PAAWJ4RE.mjs → chunk-FAWIRIP4.mjs} +19 -18
- package/dist/lib/node-esm/chunk-FAWIRIP4.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs → chunk-H4JILUJK.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-TNUWML33.mjs → chunk-HQMFTMJE.mjs} +36 -30
- package/dist/lib/node-esm/chunk-HQMFTMJE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DG5YEEPZ.mjs → chunk-MI4A5XUX.mjs} +487 -381
- package/dist/lib/node-esm/chunk-MI4A5XUX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HAKW2RFD.mjs → chunk-WC4VBFMA.mjs} +23 -13
- package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-H5UPFRRH.mjs → chunk-Z7BB6HC2.mjs} +2 -2
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-MWTLGQRU.mjs → identity-created-OXLKCJE3.mjs} +3 -3
- package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +63 -46
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-KVB2A4YC.mjs → intent-resolver-QHH5SXLC.mjs} +53 -58
- package/dist/lib/node-esm/intent-resolver-QHH5SXLC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-56PGW5PH.mjs → react-root-QRONKFKI.mjs} +9 -8
- package/dist/lib/node-esm/react-root-QRONKFKI.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-NYEQ23A4.mjs → react-surface-OZBWNTW2.mjs} +37 -40
- package/dist/lib/node-esm/react-surface-OZBWNTW2.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs → schema-defs-5TDB7T5J.mjs} +3 -3
- package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs → settings-RBB5633M.mjs} +3 -3
- package/dist/lib/node-esm/{spaces-ready-TC27M7MP.mjs → spaces-ready-J6RWPI2X.mjs} +12 -11
- package/dist/lib/node-esm/spaces-ready-J6RWPI2X.mjs.map +7 -0
- package/dist/lib/node-esm/{state-TCGOPLRO.mjs → state-362I5BMK.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CollectionArticle.d.ts +6 -0
- package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
- package/dist/types/src/components/CollectionSection.d.ts +3 -4
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +91 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +2 -2
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
- package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
- package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
- package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
- package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
- package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +2 -2
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -1
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +91 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.d.ts +5 -0
- package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
- package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +92 -2
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
- package/dist/types/src/components/SchemaContainer.d.ts +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
- package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +91 -1
- package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
- package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
- package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +91 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +92 -2
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor.d.ts +3 -4
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +9 -16
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/helpers/index.d.ts +2 -0
- package/dist/types/src/helpers/index.d.ts.map +1 -0
- package/dist/types/src/helpers/query.d.ts +8 -0
- package/dist/types/src/helpers/query.d.ts.map +1 -0
- package/dist/types/src/helpers/query.test.d.ts +2 -0
- package/dist/types/src/helpers/query.test.d.ts.map +1 -0
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +91 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +2 -2
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -4
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +53 -51
- package/src/SpacePlugin.ts +49 -25
- package/src/capabilities/app-graph-builder.ts +86 -60
- package/src/capabilities/app-graph-serializer.ts +5 -5
- package/src/capabilities/capabilities.ts +2 -2
- package/src/capabilities/identity-created.ts +2 -2
- package/src/capabilities/intent-resolver.ts +46 -41
- package/src/capabilities/react-root.tsx +2 -1
- package/src/capabilities/react-surface.tsx +35 -40
- package/src/capabilities/spaces-ready.ts +7 -4
- package/src/components/AwaitingObject.tsx +11 -13
- package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +5 -4
- package/src/components/CollectionSection.tsx +6 -4
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +6 -6
- package/src/components/CreateDialog/CreateObjectDialog.tsx +29 -22
- package/src/components/CreateDialog/CreateObjectPanel.tsx +2 -2
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +25 -7
- package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +21 -5
- package/src/components/JoinDialog/index.ts +5 -0
- package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +1 -1
- package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +11 -9
- package/src/components/MembersContainer/index.ts +5 -0
- package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +2 -3
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +9 -12
- package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +5 -5
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +6 -6
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +34 -40
- package/src/components/ObjectSettings/ForeignKeys.tsx +1 -1
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
- package/src/components/RecordArticle.stories.tsx +115 -0
- package/src/components/RecordArticle.tsx +114 -0
- package/src/components/SchemaContainer.tsx +21 -24
- package/src/components/SpacePluginSettings.tsx +8 -2
- package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +1 -1
- package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +14 -9
- package/src/components/SpacePresence/index.ts +5 -0
- package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +6 -5
- package/src/components/SpaceRenamePopover/index.ts +5 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +33 -13
- package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
- package/src/components/SyncStatus/SyncStatus.stories.tsx +3 -2
- package/src/components/SyncStatus/SyncStatus.tsx +45 -36
- package/src/components/ViewEditor.tsx +51 -17
- package/src/components/index.ts +6 -7
- package/src/helpers/index.ts +5 -0
- package/src/helpers/query.test.ts +24 -0
- package/src/helpers/query.ts +158 -0
- package/src/hooks/useActiveSpace.ts +2 -1
- package/src/hooks/useInputSurfaceLookup.tsx +7 -2
- package/src/hooks/useTypeOptions.ts +3 -3
- package/src/index.ts +1 -0
- package/src/meta.ts +5 -0
- package/src/translations.ts +22 -10
- package/src/types/types.ts +11 -10
- package/src/util.tsx +44 -36
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs.map +0 -7
- package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs.map +0 -7
- package/dist/lib/browser/RecordMain-H4DVHICS.mjs +0 -116
- package/dist/lib/browser/RecordMain-H4DVHICS.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-3R5GGT46.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-25Z5BG22.mjs.map +0 -7
- package/dist/lib/browser/chunk-522KZGQF.mjs.map +0 -7
- package/dist/lib/browser/chunk-7XOTWRZ3.mjs.map +0 -7
- package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
- package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
- package/dist/lib/browser/chunk-OV6D543A.mjs.map +0 -7
- package/dist/lib/browser/chunk-PTGRQQ6J.mjs.map +0 -7
- package/dist/lib/browser/chunk-RLI2IAHK.mjs.map +0 -7
- package/dist/lib/browser/chunk-WS2PJDES.mjs.map +0 -7
- package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-ICGUSVH6.mjs.map +0 -7
- package/dist/lib/browser/react-root-H56QN474.mjs.map +0 -7
- package/dist/lib/browser/react-surface-VOE2ILKO.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-MFIVK6I6.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs.map +0 -7
- package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs +0 -117
- package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-VGRMD5TP.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-U4GHXWRG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4F25JKVT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DG5YEEPZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-H5UPFRRH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HAKW2RFD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PAAWJ4RE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TNUWML33.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-KVB2A4YC.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-56PGW5PH.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-NYEQ23A4.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-TC27M7MP.mjs.map +0 -7
- package/dist/types/src/components/CollectionMain.d.ts +0 -7
- package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
- package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
- package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
- package/dist/types/src/components/RecordMain.d.ts +0 -7
- package/dist/types/src/components/RecordMain.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
- package/src/components/PersistenceStatus.tsx +0 -83
- package/src/components/RecordMain.tsx +0 -87
- /package/dist/lib/browser/{chunk-EIXZABXD.mjs.map → chunk-WJXU4GKV.mjs.map} +0 -0
- /package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs.map → schema-defs-XCNOO2WT.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-OBFJ67ZG.mjs.map → settings-WKLGKUHQ.mjs.map} +0 -0
- /package/dist/lib/browser/{state-LSPRFIRO.mjs.map → state-Q7YRE5KG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs.map → chunk-H4JILUJK.mjs.map} +0 -0
- /package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs.map → schema-defs-5TDB7T5J.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs.map → settings-RBB5633M.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-TCGOPLRO.mjs.map → state-362I5BMK.mjs.map} +0 -0
- /package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +0 -0
- /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Atom } from '@effect-atom/atom-react';
|
|
6
6
|
import * as Array from 'effect/Array';
|
|
7
7
|
import * as Function from 'effect/Function';
|
|
8
8
|
import * as Option from 'effect/Option';
|
|
9
9
|
import * as Schema from 'effect/Schema';
|
|
10
10
|
|
|
11
11
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
12
|
-
import { type QueryResult, type Space, SpaceState, getSpace, isSpace
|
|
13
|
-
import { Filter, Obj, Query, Type } from '@dxos/echo';
|
|
12
|
+
import { type QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
|
|
13
|
+
import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
|
|
14
14
|
import { log } from '@dxos/log';
|
|
15
15
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
16
16
|
import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
|
|
17
17
|
import { ROOT_ID, createExtension, rxFromObservable, rxFromSignal } from '@dxos/plugin-graph';
|
|
18
|
-
import {
|
|
18
|
+
import { Collection, StoredSchema, View, getTypenameFromQuery } from '@dxos/schema';
|
|
19
19
|
import { isNonNullable } from '@dxos/util';
|
|
20
20
|
|
|
21
21
|
import { getActiveSpace } from '../hooks';
|
|
@@ -36,9 +36,8 @@ import {
|
|
|
36
36
|
import { SpaceCapabilities } from './capabilities';
|
|
37
37
|
|
|
38
38
|
export default (context: PluginContext) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
39
|
+
const resolve = (get: Atom.Context) => (typename: string) =>
|
|
40
|
+
get(context.capabilities(Capabilities.Metadata)).find(({ id }) => id === typename)?.metadata ?? {};
|
|
42
41
|
|
|
43
42
|
const spacesNode = {
|
|
44
43
|
id: SPACES,
|
|
@@ -83,7 +82,7 @@ export default (context: PluginContext) => {
|
|
|
83
82
|
id: `${meta.id}/primary-actions`,
|
|
84
83
|
position: 'hoist',
|
|
85
84
|
actions: (node) =>
|
|
86
|
-
|
|
85
|
+
Atom.make((get) =>
|
|
87
86
|
Function.pipe(
|
|
88
87
|
get(node),
|
|
89
88
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
@@ -160,7 +159,7 @@ export default (context: PluginContext) => {
|
|
|
160
159
|
id: `${meta.id}/root`,
|
|
161
160
|
position: 'hoist',
|
|
162
161
|
connector: (node) =>
|
|
163
|
-
|
|
162
|
+
Atom.make((get) =>
|
|
164
163
|
Function.pipe(
|
|
165
164
|
get(node),
|
|
166
165
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
@@ -176,7 +175,7 @@ export default (context: PluginContext) => {
|
|
|
176
175
|
id: SPACES,
|
|
177
176
|
connector: (node) => {
|
|
178
177
|
let query: QueryResult<Type.Expando> | undefined;
|
|
179
|
-
return
|
|
178
|
+
return Atom.make((get) =>
|
|
180
179
|
Function.pipe(
|
|
181
180
|
get(node),
|
|
182
181
|
Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
|
|
@@ -222,7 +221,7 @@ export default (context: PluginContext) => {
|
|
|
222
221
|
navigable: state.navigableCollections,
|
|
223
222
|
personal: space === client.spaces.default,
|
|
224
223
|
namesCache: state.spaceNames,
|
|
225
|
-
resolve,
|
|
224
|
+
resolve: resolve(get),
|
|
226
225
|
}),
|
|
227
226
|
);
|
|
228
227
|
}),
|
|
@@ -281,7 +280,7 @@ export default (context: PluginContext) => {
|
|
|
281
280
|
createExtension({
|
|
282
281
|
id: `${meta.id}/actions`,
|
|
283
282
|
actions: (node) =>
|
|
284
|
-
|
|
283
|
+
Atom.make((get) =>
|
|
285
284
|
Function.pipe(
|
|
286
285
|
get(node),
|
|
287
286
|
Option.flatMap((node) =>
|
|
@@ -313,7 +312,7 @@ export default (context: PluginContext) => {
|
|
|
313
312
|
createExtension({
|
|
314
313
|
id: `${meta.id}/root-collection`,
|
|
315
314
|
connector: (node) =>
|
|
316
|
-
|
|
315
|
+
Atom.make((get) =>
|
|
317
316
|
Function.pipe(
|
|
318
317
|
get(node),
|
|
319
318
|
Option.flatMap((node) =>
|
|
@@ -328,7 +327,7 @@ export default (context: PluginContext) => {
|
|
|
328
327
|
|
|
329
328
|
const collection = get(
|
|
330
329
|
rxFromSignal(
|
|
331
|
-
() => space.properties[
|
|
330
|
+
() => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
|
|
332
331
|
),
|
|
333
332
|
);
|
|
334
333
|
if (!collection) {
|
|
@@ -345,7 +344,7 @@ export default (context: PluginContext) => {
|
|
|
345
344
|
createObjectNode({
|
|
346
345
|
space,
|
|
347
346
|
object,
|
|
348
|
-
resolve,
|
|
347
|
+
resolve: resolve(get),
|
|
349
348
|
navigable: state.navigableCollections,
|
|
350
349
|
}),
|
|
351
350
|
),
|
|
@@ -363,11 +362,11 @@ export default (context: PluginContext) => {
|
|
|
363
362
|
createExtension({
|
|
364
363
|
id: `${meta.id}/objects`,
|
|
365
364
|
connector: (node) =>
|
|
366
|
-
|
|
365
|
+
Atom.make((get) =>
|
|
367
366
|
Function.pipe(
|
|
368
367
|
get(node),
|
|
369
368
|
Option.flatMap((node) =>
|
|
370
|
-
Obj.instanceOf(
|
|
369
|
+
Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
|
|
371
370
|
),
|
|
372
371
|
Option.map((collection) => {
|
|
373
372
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
@@ -381,7 +380,13 @@ export default (context: PluginContext) => {
|
|
|
381
380
|
Array.filter(isNonNullable),
|
|
382
381
|
Array.map(
|
|
383
382
|
(object) =>
|
|
384
|
-
space &&
|
|
383
|
+
space &&
|
|
384
|
+
createObjectNode({
|
|
385
|
+
object,
|
|
386
|
+
space,
|
|
387
|
+
resolve: resolve(get),
|
|
388
|
+
navigable: state.navigableCollections,
|
|
389
|
+
}),
|
|
385
390
|
),
|
|
386
391
|
Array.filter(isNonNullable),
|
|
387
392
|
),
|
|
@@ -435,11 +440,11 @@ export default (context: PluginContext) => {
|
|
|
435
440
|
id: `${meta.id}/query-collection-objects`,
|
|
436
441
|
connector: (node) => {
|
|
437
442
|
let query: QueryResult<Type.Expando> | undefined;
|
|
438
|
-
return
|
|
443
|
+
return Atom.make((get) =>
|
|
439
444
|
Function.pipe(
|
|
440
445
|
get(node),
|
|
441
446
|
Option.flatMap((node) =>
|
|
442
|
-
Obj.instanceOf(
|
|
447
|
+
Obj.instanceOf(Collection.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
|
|
443
448
|
),
|
|
444
449
|
Option.flatMap((collection) => {
|
|
445
450
|
const space = getSpace(collection);
|
|
@@ -456,7 +461,7 @@ export default (context: PluginContext) => {
|
|
|
456
461
|
// It will return all objects in the collection, not just the ones of the given type.
|
|
457
462
|
// However this works fine for now because this query is only used for exclusions.
|
|
458
463
|
Query.select(Filter.typename(typename))
|
|
459
|
-
.referencedBy(
|
|
464
|
+
.referencedBy(Collection.Collection, 'objects')
|
|
460
465
|
.reference('objects'),
|
|
461
466
|
),
|
|
462
467
|
);
|
|
@@ -471,7 +476,7 @@ export default (context: PluginContext) => {
|
|
|
471
476
|
createObjectNode({
|
|
472
477
|
object,
|
|
473
478
|
space,
|
|
474
|
-
resolve,
|
|
479
|
+
resolve: resolve(get),
|
|
475
480
|
droppable: false, // Cannot rearrange query collections.
|
|
476
481
|
navigable: state.navigableCollections,
|
|
477
482
|
}),
|
|
@@ -492,12 +497,12 @@ export default (context: PluginContext) => {
|
|
|
492
497
|
id: `${meta.id}/static-schemas`,
|
|
493
498
|
connector: (node) => {
|
|
494
499
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
495
|
-
return
|
|
500
|
+
return Atom.make((get) =>
|
|
496
501
|
Function.pipe(
|
|
497
502
|
get(node),
|
|
498
503
|
Option.flatMap((node) =>
|
|
499
|
-
Obj.instanceOf(
|
|
500
|
-
getTypenameFromQuery(node.data.query) ===
|
|
504
|
+
Obj.instanceOf(Collection.QueryCollection, node.data) &&
|
|
505
|
+
getTypenameFromQuery(node.data.query) === StoredSchema.typename
|
|
501
506
|
? Option.some(node.data)
|
|
502
507
|
: Option.none(),
|
|
503
508
|
),
|
|
@@ -523,8 +528,8 @@ export default (context: PluginContext) => {
|
|
|
523
528
|
createExtension({
|
|
524
529
|
id: `${meta.id}/static-schema-actions`,
|
|
525
530
|
actions: (node) => {
|
|
526
|
-
let query: QueryResult<
|
|
527
|
-
return
|
|
531
|
+
let query: QueryResult<View.View> | undefined;
|
|
532
|
+
return Atom.make((get) =>
|
|
528
533
|
Function.pipe(
|
|
529
534
|
get(node),
|
|
530
535
|
Option.flatMap((node) => {
|
|
@@ -534,7 +539,7 @@ export default (context: PluginContext) => {
|
|
|
534
539
|
Option.map(({ space, schema }) => {
|
|
535
540
|
if (!query) {
|
|
536
541
|
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
537
|
-
query = space.db.query(Filter.type(
|
|
542
|
+
query = space.db.query(Filter.type(View.View));
|
|
538
543
|
}
|
|
539
544
|
|
|
540
545
|
const views = get(rxFromQuery(query));
|
|
@@ -571,39 +576,55 @@ export default (context: PluginContext) => {
|
|
|
571
576
|
createExtension({
|
|
572
577
|
id: `${meta.id}/schema-views`,
|
|
573
578
|
connector: (node) => {
|
|
574
|
-
let query: QueryResult<
|
|
575
|
-
return
|
|
579
|
+
let query: QueryResult<View.View> | undefined;
|
|
580
|
+
return Atom.make((get) =>
|
|
576
581
|
Function.pipe(
|
|
577
582
|
get(node),
|
|
578
583
|
Option.flatMap((node) => {
|
|
579
584
|
const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
|
|
580
|
-
return space && (Obj.instanceOf(
|
|
585
|
+
return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
|
|
581
586
|
? Option.some({ space, schema: node.data })
|
|
582
587
|
: Option.none();
|
|
583
588
|
}),
|
|
584
589
|
Option.map(({ space, schema }) => {
|
|
585
590
|
if (!query) {
|
|
586
591
|
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
587
|
-
query = space.db.query(Filter.type(
|
|
592
|
+
query = space.db.query(Filter.type(View.View));
|
|
588
593
|
}
|
|
589
594
|
|
|
590
595
|
// TODO(wittjosiah): Remove cast.
|
|
591
596
|
const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
|
|
592
|
-
return
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
597
|
+
return (
|
|
598
|
+
get(rxFromQuery(query))
|
|
599
|
+
.filter((view) => getTypenameFromQuery(view.query.ast) === typename)
|
|
600
|
+
// Filter out Collection views from Projects.
|
|
601
|
+
.filter((view) =>
|
|
602
|
+
get(
|
|
603
|
+
rxFromSignal(() => {
|
|
604
|
+
const presentation = view.presentation.target;
|
|
605
|
+
if (presentation) {
|
|
606
|
+
const typename = Obj.getTypename(presentation);
|
|
607
|
+
return typename !== Collection.Collection.typename;
|
|
608
|
+
} else {
|
|
609
|
+
return false;
|
|
610
|
+
}
|
|
602
611
|
}),
|
|
603
612
|
),
|
|
604
|
-
)
|
|
605
|
-
|
|
606
|
-
|
|
613
|
+
)
|
|
614
|
+
.map((view) =>
|
|
615
|
+
get(
|
|
616
|
+
rxFromSignal(() =>
|
|
617
|
+
createObjectNode({
|
|
618
|
+
object: view,
|
|
619
|
+
space,
|
|
620
|
+
resolve: resolve(get),
|
|
621
|
+
droppable: false,
|
|
622
|
+
}),
|
|
623
|
+
),
|
|
624
|
+
),
|
|
625
|
+
)
|
|
626
|
+
.filter(isNonNullable)
|
|
627
|
+
);
|
|
607
628
|
}),
|
|
608
629
|
Option.getOrElse(() => []),
|
|
609
630
|
),
|
|
@@ -616,20 +637,20 @@ export default (context: PluginContext) => {
|
|
|
616
637
|
id: `${meta.id}/records`,
|
|
617
638
|
resolver: (id) => {
|
|
618
639
|
let query: QueryResult<Type.Expando> | undefined;
|
|
619
|
-
return
|
|
640
|
+
return Atom.make((get) => {
|
|
620
641
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
621
|
-
const
|
|
622
|
-
if (!
|
|
642
|
+
const dxn = DXN.tryParse(id)?.asEchoDXN();
|
|
643
|
+
if (!dxn || !dxn.spaceId) {
|
|
623
644
|
return null;
|
|
624
645
|
}
|
|
625
646
|
|
|
626
|
-
const space = client.spaces.get(spaceId);
|
|
647
|
+
const space = client.spaces.get(dxn.spaceId);
|
|
627
648
|
if (!space) {
|
|
628
649
|
return null;
|
|
629
650
|
}
|
|
630
651
|
|
|
631
652
|
if (!query) {
|
|
632
|
-
query = space.db.query(Filter.ids(
|
|
653
|
+
query = space.db.query(Filter.ids(dxn.echoId));
|
|
633
654
|
}
|
|
634
655
|
|
|
635
656
|
const object = get(rxFromQuery(query)).at(0);
|
|
@@ -637,7 +658,12 @@ export default (context: PluginContext) => {
|
|
|
637
658
|
return null;
|
|
638
659
|
}
|
|
639
660
|
|
|
640
|
-
return createObjectNode({
|
|
661
|
+
return createObjectNode({
|
|
662
|
+
object,
|
|
663
|
+
space,
|
|
664
|
+
resolve: resolve(get),
|
|
665
|
+
disposition: 'hidden',
|
|
666
|
+
});
|
|
641
667
|
});
|
|
642
668
|
},
|
|
643
669
|
}),
|
|
@@ -646,8 +672,8 @@ export default (context: PluginContext) => {
|
|
|
646
672
|
createExtension({
|
|
647
673
|
id: `${meta.id}/object-actions`,
|
|
648
674
|
actions: (node) => {
|
|
649
|
-
let query: QueryResult<
|
|
650
|
-
return
|
|
675
|
+
let query: QueryResult<View.View> | undefined;
|
|
676
|
+
return Atom.make((get) =>
|
|
651
677
|
Function.pipe(
|
|
652
678
|
get(node),
|
|
653
679
|
Option.flatMap((node) => {
|
|
@@ -657,18 +683,18 @@ export default (context: PluginContext) => {
|
|
|
657
683
|
: Option.none();
|
|
658
684
|
}),
|
|
659
685
|
Option.flatMap(({ space, object }) => {
|
|
660
|
-
const isSchema = Obj.instanceOf(
|
|
686
|
+
const isSchema = Obj.instanceOf(StoredSchema, object);
|
|
661
687
|
if (!query && isSchema) {
|
|
662
688
|
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
663
|
-
query = space.db.query(Filter.type(
|
|
689
|
+
query = space.db.query(Filter.type(View.View));
|
|
664
690
|
}
|
|
665
691
|
|
|
666
692
|
let deletable =
|
|
667
693
|
!isSchema &&
|
|
668
694
|
// Don't allow the Records smart collection to be deleted.
|
|
669
695
|
!(
|
|
670
|
-
Obj.instanceOf(
|
|
671
|
-
getTypenameFromQuery(object.query) ===
|
|
696
|
+
Obj.instanceOf(Collection.QueryCollection, object) &&
|
|
697
|
+
getTypenameFromQuery(object.query) === StoredSchema.typename
|
|
672
698
|
);
|
|
673
699
|
if (isSchema && query) {
|
|
674
700
|
const views = get(rxFromQuery(query));
|
|
@@ -707,10 +733,10 @@ export default (context: PluginContext) => {
|
|
|
707
733
|
createExtension({
|
|
708
734
|
id: `${meta.id}/selected-objects`,
|
|
709
735
|
connector: (node) =>
|
|
710
|
-
|
|
736
|
+
Atom.make((get) =>
|
|
711
737
|
Function.pipe(
|
|
712
738
|
get(node),
|
|
713
|
-
Option.flatMap((node) => (Obj.instanceOf(
|
|
739
|
+
Option.flatMap((node) => (Obj.instanceOf(View.View, node.data) ? Option.some(node) : Option.none())),
|
|
714
740
|
Option.map((node) => [
|
|
715
741
|
{
|
|
716
742
|
id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
|
|
@@ -732,7 +758,7 @@ export default (context: PluginContext) => {
|
|
|
732
758
|
createExtension({
|
|
733
759
|
id: `${meta.id}/settings`,
|
|
734
760
|
connector: (node) =>
|
|
735
|
-
|
|
761
|
+
Atom.make((get) =>
|
|
736
762
|
Function.pipe(
|
|
737
763
|
get(node),
|
|
738
764
|
Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
6
6
|
import { isSpace } from '@dxos/client/echo';
|
|
7
|
-
import { Obj
|
|
8
|
-
import {
|
|
7
|
+
import { Obj } from '@dxos/echo';
|
|
8
|
+
import { Collection } from '@dxos/schema';
|
|
9
9
|
|
|
10
10
|
import { meta } from '../meta';
|
|
11
11
|
import { translations } from '../translations';
|
|
12
12
|
import { SPACE_TYPE, SpaceAction } from '../types';
|
|
13
13
|
import { SPACES } from '../util';
|
|
14
14
|
|
|
15
|
-
const COLLECTION_TYPE =
|
|
15
|
+
const COLLECTION_TYPE = Collection.Collection.typename;
|
|
16
16
|
|
|
17
17
|
// https://stackoverflow.com/a/19016910
|
|
18
18
|
const DIRECTORY_TYPE = 'text/directory';
|
|
@@ -56,7 +56,7 @@ export default (context: PluginContext) =>
|
|
|
56
56
|
deserialize: async (data, ancestors) => {
|
|
57
57
|
const space = ancestors.find(isSpace);
|
|
58
58
|
const collection =
|
|
59
|
-
ancestors.findLast((ancestor) => Obj.instanceOf(
|
|
59
|
+
ancestors.findLast((ancestor) => Obj.instanceOf(Collection.Collection, ancestor)) ??
|
|
60
60
|
space?.properties[COLLECTION_TYPE]?.target;
|
|
61
61
|
if (!space || !collection) {
|
|
62
62
|
return;
|
|
@@ -66,7 +66,7 @@ export default (context: PluginContext) =>
|
|
|
66
66
|
const result = await dispatch(
|
|
67
67
|
createIntent(SpaceAction.AddObject, {
|
|
68
68
|
target: collection,
|
|
69
|
-
object: Obj.make(
|
|
69
|
+
object: Obj.make(Collection.Collection, { name: data.name, objects: [] }),
|
|
70
70
|
}),
|
|
71
71
|
);
|
|
72
72
|
|
|
@@ -6,7 +6,7 @@ import type * as Schema from 'effect/Schema';
|
|
|
6
6
|
|
|
7
7
|
import { type AnyIntentChain, type Label, defineCapability } from '@dxos/app-framework';
|
|
8
8
|
import { type Space } from '@dxos/react-client/echo';
|
|
9
|
-
import { type
|
|
9
|
+
import { type Collection } from '@dxos/schema';
|
|
10
10
|
import { type DeepReadonly, type Position } from '@dxos/util';
|
|
11
11
|
|
|
12
12
|
import { meta } from '../meta';
|
|
@@ -19,7 +19,7 @@ export namespace SpaceCapabilities {
|
|
|
19
19
|
export type SettingsSection = { id: string; label: Label; position?: Position };
|
|
20
20
|
export const SettingsSection = defineCapability<SettingsSection>(`${meta.id}/capability/settings-section`);
|
|
21
21
|
|
|
22
|
-
export type onCreateSpace = (params: { space: Space; rootCollection:
|
|
22
|
+
export type onCreateSpace = (params: { space: Space; rootCollection: Collection.Collection }) => AnyIntentChain;
|
|
23
23
|
export const onCreateSpace = defineCapability<onCreateSpace>(`${meta.id}/capability/on-space-created`);
|
|
24
24
|
|
|
25
25
|
export type OnSchemaAdded = (params: {
|
|
@@ -6,7 +6,7 @@ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framewo
|
|
|
6
6
|
import { Obj, Ref } from '@dxos/echo';
|
|
7
7
|
import { Migrations } from '@dxos/migrations';
|
|
8
8
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
9
|
-
import {
|
|
9
|
+
import { Collection } from '@dxos/schema';
|
|
10
10
|
|
|
11
11
|
export default async (context: PluginContext) => {
|
|
12
12
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
@@ -16,7 +16,7 @@ export default async (context: PluginContext) => {
|
|
|
16
16
|
await defaultSpace.waitUntilReady();
|
|
17
17
|
|
|
18
18
|
// Create root collection structure.
|
|
19
|
-
defaultSpace.properties[
|
|
19
|
+
defaultSpace.properties[Collection.Collection.typename] = Ref.make(Obj.make(Collection.Collection, { objects: [] }));
|
|
20
20
|
if (Migrations.versionProperty) {
|
|
21
21
|
defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
|
|
22
22
|
}
|
|
@@ -13,15 +13,18 @@ import {
|
|
|
13
13
|
createResolver,
|
|
14
14
|
} from '@dxos/app-framework';
|
|
15
15
|
import { Filter, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
|
|
16
|
+
import { DatabaseService } from '@dxos/functions';
|
|
16
17
|
import { invariant } from '@dxos/invariant';
|
|
17
18
|
import { Migrations } from '@dxos/migrations';
|
|
18
19
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
19
20
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
20
21
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
21
|
-
import { SpaceState,
|
|
22
|
+
import { SpaceState, getSpace, isSpace } from '@dxos/react-client/echo';
|
|
22
23
|
import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
|
|
23
24
|
import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
|
|
24
|
-
import {
|
|
25
|
+
import { iconValues } from '@dxos/react-ui-pickers';
|
|
26
|
+
import { hues } from '@dxos/react-ui-theme';
|
|
27
|
+
import { Collection, ProjectionModel, StoredSchema, getTypenameFromQuery } from '@dxos/schema';
|
|
25
28
|
|
|
26
29
|
import {
|
|
27
30
|
CREATE_OBJECT_DIALOG,
|
|
@@ -29,8 +32,8 @@ import {
|
|
|
29
32
|
type CreateObjectDialogProps,
|
|
30
33
|
JOIN_DIALOG,
|
|
31
34
|
type JoinDialogProps,
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
OBJECT_RENAME_POPOVER,
|
|
36
|
+
SPACE_RENAME_POPOVER,
|
|
34
37
|
} from '../components';
|
|
35
38
|
import { SpaceEvents } from '../events';
|
|
36
39
|
import { meta } from '../meta';
|
|
@@ -69,8 +72,10 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
69
72
|
}),
|
|
70
73
|
createResolver({
|
|
71
74
|
intent: SpaceAction.Create,
|
|
72
|
-
resolve: async ({ name, hue, icon, edgeReplication }) => {
|
|
75
|
+
resolve: async ({ name, hue: hue_, icon: icon_, edgeReplication }) => {
|
|
73
76
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
77
|
+
const hue = hue_ ?? hues[Math.floor(Math.random() * hues.length)];
|
|
78
|
+
const icon = icon_ ?? iconValues[Math.floor(Math.random() * iconValues.length)];
|
|
74
79
|
const space = await client.spaces.create({ name, hue, icon });
|
|
75
80
|
if (edgeReplication) {
|
|
76
81
|
await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
|
|
@@ -78,8 +83,8 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
78
83
|
await space.waitUntilReady();
|
|
79
84
|
|
|
80
85
|
// Create root collection.
|
|
81
|
-
const collection = Obj.make(
|
|
82
|
-
space.properties[
|
|
86
|
+
const collection = Obj.make(Collection.Collection, { objects: [] });
|
|
87
|
+
space.properties[Collection.Collection.typename] = Ref.make(collection);
|
|
83
88
|
|
|
84
89
|
// Set current migration version.
|
|
85
90
|
if (Migrations.versionProperty) {
|
|
@@ -87,10 +92,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
87
92
|
}
|
|
88
93
|
|
|
89
94
|
// Create records smart collection.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
collection.objects.push(
|
|
96
|
+
Ref.make(
|
|
97
|
+
Obj.make(Collection.QueryCollection, {
|
|
98
|
+
// NOTE: This is specifically Filter.typename due to current limitations in query collection parsing.
|
|
99
|
+
query: Query.select(Filter.typename(StoredSchema.typename)).ast,
|
|
100
|
+
}),
|
|
101
|
+
),
|
|
102
|
+
);
|
|
94
103
|
|
|
95
104
|
// Allow other plugins to add default content.
|
|
96
105
|
await context.activatePromise(SpaceEvents.SpaceCreated);
|
|
@@ -254,7 +263,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
254
263
|
intents: [
|
|
255
264
|
createIntent(LayoutAction.UpdatePopover, {
|
|
256
265
|
part: 'popover',
|
|
257
|
-
subject:
|
|
266
|
+
subject: SPACE_RENAME_POPOVER,
|
|
258
267
|
options: {
|
|
259
268
|
anchorId: `dxos.org/ui/${caller}/${space.id}`,
|
|
260
269
|
props: space,
|
|
@@ -445,8 +454,8 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
445
454
|
onCreateObject,
|
|
446
455
|
shouldNavigate: navigable
|
|
447
456
|
? (object: Obj.Any) => {
|
|
448
|
-
const isCollection = Obj.instanceOf(
|
|
449
|
-
const isQueryCollection = Obj.instanceOf(
|
|
457
|
+
const isCollection = Obj.instanceOf(Collection.Collection, object);
|
|
458
|
+
const isQueryCollection = Obj.instanceOf(Collection.QueryCollection, object);
|
|
450
459
|
return (!isCollection && !isQueryCollection) || state.navigableCollections;
|
|
451
460
|
}
|
|
452
461
|
: () => false,
|
|
@@ -495,25 +504,18 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
495
504
|
};
|
|
496
505
|
}
|
|
497
506
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
collection.objects.push(Ref.make(object));
|
|
506
|
-
} else {
|
|
507
|
-
// TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.
|
|
508
|
-
const collection = Obj.make(DataType.Collection, { objects: [Ref.make(object)] });
|
|
509
|
-
space.properties[DataType.Collection.typename] = Ref.make(collection);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
507
|
+
await Effect.gen(function* () {
|
|
508
|
+
yield* Collection.add({
|
|
509
|
+
object,
|
|
510
|
+
target: isSpace(target) ? undefined : target,
|
|
511
|
+
hidden,
|
|
512
|
+
});
|
|
513
|
+
}).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.runPromise);
|
|
512
514
|
|
|
513
515
|
return {
|
|
514
516
|
data: {
|
|
515
|
-
id:
|
|
516
|
-
subject: [
|
|
517
|
+
id: Obj.getDXN(object).toString(),
|
|
518
|
+
subject: [Obj.getDXN(object).toString()],
|
|
517
519
|
object,
|
|
518
520
|
},
|
|
519
521
|
intents: [
|
|
@@ -562,26 +564,26 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
562
564
|
const openObjectIds = new Set<string>(layout.active);
|
|
563
565
|
|
|
564
566
|
if (!undo) {
|
|
565
|
-
const parentCollection:
|
|
566
|
-
target ?? space.properties[
|
|
567
|
+
const parentCollection: Collection.Collection =
|
|
568
|
+
target ?? space.properties[Collection.Collection.typename]?.target;
|
|
567
569
|
const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));
|
|
568
570
|
|
|
569
571
|
const deletionData = {
|
|
570
572
|
objects,
|
|
571
573
|
parentCollection,
|
|
572
574
|
indices: objects.map((obj) =>
|
|
573
|
-
Obj.instanceOf(
|
|
575
|
+
Obj.instanceOf(Collection.Collection, parentCollection)
|
|
574
576
|
? parentCollection.objects.findIndex((object) => object.target === obj)
|
|
575
577
|
: -1,
|
|
576
578
|
),
|
|
577
579
|
nestedObjectsList,
|
|
578
580
|
wasActive: objects
|
|
579
581
|
.flatMap((obj, i) => [obj, ...nestedObjectsList[i]])
|
|
580
|
-
.map((obj) =>
|
|
582
|
+
.map((obj) => Obj.getDXN(obj).toString())
|
|
581
583
|
.filter((id) => openObjectIds.has(id)),
|
|
582
584
|
} satisfies SpaceAction.DeletionData;
|
|
583
585
|
|
|
584
|
-
if (Obj.instanceOf(
|
|
586
|
+
if (Obj.instanceOf(Collection.Collection, deletionData.parentCollection)) {
|
|
585
587
|
[...deletionData.indices]
|
|
586
588
|
.sort((a, b) => b - a)
|
|
587
589
|
.forEach((index: number) => {
|
|
@@ -596,7 +598,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
596
598
|
});
|
|
597
599
|
objects.forEach((obj) => space.db.remove(obj));
|
|
598
600
|
|
|
599
|
-
const undoMessageKey = objects.some((obj) => Obj.instanceOf(
|
|
601
|
+
const undoMessageKey = objects.some((obj) => Obj.instanceOf(Collection.Collection, obj))
|
|
600
602
|
? 'collection deleted label'
|
|
601
603
|
: objects.length > 1
|
|
602
604
|
? 'objects deleted label'
|
|
@@ -623,7 +625,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
623
625
|
if (
|
|
624
626
|
deletionData?.objects?.length &&
|
|
625
627
|
deletionData.objects.every(Obj.isObject) &&
|
|
626
|
-
Obj.instanceOf(
|
|
628
|
+
Obj.instanceOf(Collection.Collection, deletionData.parentCollection)
|
|
627
629
|
) {
|
|
628
630
|
// Restore the object to the space.
|
|
629
631
|
const restoredObjects = deletionData.objects.map((obj: Type.Expando) => space.db.add(obj));
|
|
@@ -660,9 +662,9 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
660
662
|
intents: [
|
|
661
663
|
createIntent(LayoutAction.UpdatePopover, {
|
|
662
664
|
part: 'popover',
|
|
663
|
-
subject:
|
|
665
|
+
subject: OBJECT_RENAME_POPOVER,
|
|
664
666
|
options: {
|
|
665
|
-
anchorId: `dxos.org/ui/${caller}/${
|
|
667
|
+
anchorId: `dxos.org/ui/${caller}/${Obj.getDXN(object).toString()}`,
|
|
666
668
|
props: object,
|
|
667
669
|
},
|
|
668
670
|
}),
|
|
@@ -691,14 +693,17 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
|
|
|
691
693
|
createResolver({
|
|
692
694
|
intent: CollectionAction.Create,
|
|
693
695
|
resolve: async ({ name }) => ({
|
|
694
|
-
data: { object: Obj.make(
|
|
696
|
+
data: { object: Obj.make(Collection.Collection, { name, objects: [] }) },
|
|
695
697
|
}),
|
|
696
698
|
}),
|
|
697
699
|
createResolver({
|
|
698
700
|
intent: CollectionAction.CreateQueryCollection,
|
|
699
701
|
resolve: async ({ name, typename }) => ({
|
|
700
702
|
data: {
|
|
701
|
-
object: Obj.make(
|
|
703
|
+
object: Obj.make(Collection.QueryCollection, {
|
|
704
|
+
name,
|
|
705
|
+
query: Query.select(Filter.typename(typename)).ast,
|
|
706
|
+
}),
|
|
702
707
|
},
|
|
703
708
|
}),
|
|
704
709
|
}),
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Capabilities, contributes
|
|
7
|
+
import { Capabilities, contributes } from '@dxos/app-framework';
|
|
8
|
+
import { useCapability } from '@dxos/app-framework/react';
|
|
8
9
|
|
|
9
10
|
import { AwaitingObject } from '../components';
|
|
10
11
|
import { meta } from '../meta';
|