@dxos/plugin-space 0.8.4-main.f9ba587 → 0.8.4-main.fffef41
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/CollectionArticle-WTHWY4YS.mjs +31 -0
- package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs +141 -0
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
- package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs +528 -0
- package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
- package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
- package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
- package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-CKACGS7T.mjs} +714 -571
- package/dist/lib/browser/chunk-CKACGS7T.mjs.map +7 -0
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-KFUMADZF.mjs} +301 -73
- package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-VGKOXAPE.mjs} +87 -12
- package/dist/lib/browser/chunk-VGKOXAPE.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-WJXU4GKV.mjs +19 -0
- package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-ZQMSGD5J.mjs} +95 -19
- package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
- package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +148 -59
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-3FNTO3VW.mjs} +236 -68
- package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
- package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-TTHS332A.mjs} +98 -100
- package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
- package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
- package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-45PGPO2V.mjs} +5 -5
- package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-QCND4DVY.mjs} +21 -18
- package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
- package/dist/lib/browser/{state-522XTUR4.mjs → state-Q7YRE5KG.mjs} +7 -7
- package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs +32 -0
- package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs +142 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
- package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs +529 -0
- package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
- package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-6VEONPNZ.mjs} +95 -19
- package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
- package/dist/lib/node-esm/chunk-6ZQGZBEP.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-H4JILUJK.mjs +20 -0
- package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-OK2L7N2F.mjs} +301 -73
- package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-QBRPYAEL.mjs} +87 -12
- package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-XGAMJC5C.mjs} +714 -571
- package/dist/lib/node-esm/chunk-XGAMJC5C.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
- package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +148 -59
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-6O5FSB7Z.mjs} +236 -68
- package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-K66W3FMA.mjs} +13 -12
- package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-Y7FTEIDF.mjs} +98 -100
- package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
- package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-6FO65BA6.mjs} +5 -5
- package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-P7CKVXBE.mjs} +21 -18
- package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
- package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-362I5BMK.mjs} +7 -7
- package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SpacePlugin.d.ts +1 -1
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +14 -7
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +11 -12
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +2 -2
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
- package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/capabilities/state.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 +5 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +7 -5
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +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.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
- package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
- 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/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
- 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/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
- package/dist/types/src/components/ObjectSettings/index.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/RecordArticle.stories.d.ts +1707 -0
- 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/SpacePresence.stories.d.ts +1537 -0
- package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
- 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 +1537 -4
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
- package/dist/types/src/components/ViewEditor.d.ts +7 -0
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +11 -5
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +1 -0
- package/dist/types/src/events.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/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/usePath.d.ts +1 -1
- package/dist/types/src/hooks/usePath.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
- 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 +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1382 -11
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +141 -66
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +40 -10
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +67 -61
- package/src/SpacePlugin.ts +232 -139
- package/src/capabilities/app-graph-builder.ts +335 -88
- package/src/capabilities/app-graph-serializer.ts +12 -12
- package/src/capabilities/capabilities.ts +21 -10
- package/src/capabilities/identity-created.ts +3 -3
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +191 -54
- package/src/capabilities/react-root.tsx +6 -4
- package/src/capabilities/react-surface.tsx +94 -119
- package/src/capabilities/schema-defs.ts +4 -3
- package/src/capabilities/spaces-ready.ts +16 -10
- package/src/capabilities/state.ts +5 -4
- package/src/components/AwaitingObject.tsx +16 -20
- package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +8 -5
- package/src/components/CollectionSection.tsx +8 -6
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
- package/src/components/CreateDialog/CreateObjectDialog.tsx +76 -54
- package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
- package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
- package/src/components/JoinDialog/index.ts +5 -0
- package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
- package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +27 -24
- package/src/components/MembersContainer/index.ts +5 -0
- package/src/components/MenuFooter.tsx +4 -5
- package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
- package/src/components/ObjectDetailsPanel/index.ts +7 -0
- package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +11 -17
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
- package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
- package/src/components/ObjectSettings/index.ts +3 -1
- package/src/components/RecordArticle.stories.tsx +115 -0
- package/src/components/RecordArticle.tsx +114 -0
- package/src/components/SchemaContainer.tsx +25 -28
- package/src/components/SpacePluginSettings.tsx +16 -11
- package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
- package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
- package/src/components/SpacePresence/index.ts +5 -0
- package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
- package/src/components/SpaceRenamePopover/index.ts +5 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +49 -28
- package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
- package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
- package/src/components/SyncStatus/SyncStatus.tsx +110 -13
- package/src/components/SyncStatus/status.ts +4 -4
- package/src/components/ViewEditor.tsx +92 -0
- package/src/components/index.ts +10 -5
- package/src/events.ts +7 -6
- 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/index.ts +1 -0
- package/src/hooks/useActiveSpace.ts +3 -2
- package/src/hooks/useInputSurfaceLookup.tsx +8 -3
- package/src/hooks/usePath.ts +1 -1
- package/src/hooks/useTypeOptions.ts +59 -0
- package/src/index.ts +1 -0
- package/src/meta.ts +6 -3
- package/src/translations.ts +85 -7
- package/src/types/types.ts +94 -22
- package/src/util.tsx +297 -75
- package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs +0 -363
- package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-UKYMBX4O.mjs.map +0 -7
- package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
- package/dist/lib/browser/chunk-C7KGJTAL.mjs +0 -18
- package/dist/lib/browser/chunk-C7KGJTAL.mjs.map +0 -7
- package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
- package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
- package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
- package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
- package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
- package/dist/lib/browser/chunk-XXIPJLJF.mjs +0 -19
- package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
- package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
- package/dist/lib/browser/react-root-7S6FIC5G.mjs +0 -29
- package/dist/lib/browser/react-root-7S6FIC5G.mjs.map +0 -7
- package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-K3B3OAH4.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
- package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-K7NSNBHM.mjs.map +0 -7
- package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs +0 -364
- package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-LA3IZDXJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-72QMMRKC.mjs +0 -19
- package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AT7LGFER.mjs +0 -20
- package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-HUK3ANLV.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-4MCDG4DV.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
- package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-UM2P3DCR.mjs.map +0 -7
- package/dist/lib/node-esm/state-C4IOXPZP.mjs.map +0 -7
- package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
- package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
- package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
- package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
- package/dist/types/src/components/CollectionMain.d.ts +0 -6
- 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/MembersContainer.stories.d.ts +0 -8
- package/dist/types/src/components/MembersContainer.stories.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/SpacePresence.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
- package/src/capabilities/schema-tool.test.ts +0 -44
- package/src/capabilities/schema-tools.ts +0 -125
- package/src/components/MembersContainer.stories.tsx +0 -30
- package/src/components/PersistenceStatus.tsx +0 -84
|
@@ -2,36 +2,42 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
5
|
+
import { Atom } from '@effect-atom/atom-react';
|
|
6
|
+
import * as Array from 'effect/Array';
|
|
7
|
+
import * as Function from 'effect/Function';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
import * as Schema from 'effect/Schema';
|
|
10
|
+
|
|
11
|
+
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
12
|
+
import { type QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
|
|
13
|
+
import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
|
|
11
14
|
import { log } from '@dxos/log';
|
|
12
15
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
+
import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
|
|
17
|
+
import { ROOT_ID, atomFromObservable, atomFromSignal, createExtension } from '@dxos/plugin-graph';
|
|
18
|
+
import { Collection, StoredSchema, View, getTypenameFromQuery } from '@dxos/schema';
|
|
16
19
|
import { isNonNullable } from '@dxos/util';
|
|
17
20
|
|
|
18
|
-
import { SpaceCapabilities } from './capabilities';
|
|
19
21
|
import { getActiveSpace } from '../hooks';
|
|
20
|
-
import {
|
|
22
|
+
import { meta } from '../meta';
|
|
21
23
|
import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
|
|
22
24
|
import {
|
|
25
|
+
SHARED,
|
|
26
|
+
SPACES,
|
|
27
|
+
atomFromQuery,
|
|
23
28
|
constructObjectActions,
|
|
24
29
|
constructSpaceActions,
|
|
25
30
|
constructSpaceNode,
|
|
26
31
|
createObjectNode,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
SPACES,
|
|
32
|
+
createStaticSchemaActions,
|
|
33
|
+
createStaticSchemaNode,
|
|
30
34
|
} from '../util';
|
|
31
35
|
|
|
36
|
+
import { SpaceCapabilities } from './capabilities';
|
|
37
|
+
|
|
32
38
|
export default (context: PluginContext) => {
|
|
33
|
-
// TODO(wittjosiah):
|
|
34
|
-
const resolve = (typename: string) =>
|
|
39
|
+
// TODO(wittjosiah): Using `get` and being reactive seems to cause a bug with Atom where disposed atoms are accessed.
|
|
40
|
+
const resolve = (get: Atom.Context) => (typename: string) =>
|
|
35
41
|
context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
36
42
|
|
|
37
43
|
const spacesNode = {
|
|
@@ -39,7 +45,7 @@ export default (context: PluginContext) => {
|
|
|
39
45
|
type: SPACES,
|
|
40
46
|
cacheable: ['label', 'role'],
|
|
41
47
|
properties: {
|
|
42
|
-
label: ['spaces label', { ns:
|
|
48
|
+
label: ['spaces label', { ns: meta.id }],
|
|
43
49
|
icon: 'ph--planet--regular',
|
|
44
50
|
testId: 'spacePlugin.spaces',
|
|
45
51
|
role: 'branch',
|
|
@@ -74,11 +80,11 @@ export default (context: PluginContext) => {
|
|
|
74
80
|
return contributes(Capabilities.AppGraphBuilder, [
|
|
75
81
|
// Primary actions.
|
|
76
82
|
createExtension({
|
|
77
|
-
id: `${
|
|
83
|
+
id: `${meta.id}/primary-actions`,
|
|
78
84
|
position: 'hoist',
|
|
79
85
|
actions: (node) =>
|
|
80
|
-
|
|
81
|
-
pipe(
|
|
86
|
+
Atom.make((get) =>
|
|
87
|
+
Function.pipe(
|
|
82
88
|
get(node),
|
|
83
89
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
84
90
|
Option.map(() => [
|
|
@@ -89,7 +95,7 @@ export default (context: PluginContext) => {
|
|
|
89
95
|
await dispatch(createIntent(SpaceAction.OpenCreateSpace));
|
|
90
96
|
},
|
|
91
97
|
properties: {
|
|
92
|
-
label: ['create space label', { ns:
|
|
98
|
+
label: ['create space label', { ns: meta.id }],
|
|
93
99
|
icon: 'ph--plus--regular',
|
|
94
100
|
testId: 'spacePlugin.createSpace',
|
|
95
101
|
disposition: 'menu',
|
|
@@ -102,7 +108,7 @@ export default (context: PluginContext) => {
|
|
|
102
108
|
await dispatch(createIntent(SpaceAction.Join));
|
|
103
109
|
},
|
|
104
110
|
properties: {
|
|
105
|
-
label: ['join space label', { ns:
|
|
111
|
+
label: ['join space label', { ns: meta.id }],
|
|
106
112
|
icon: 'ph--sign-in--regular',
|
|
107
113
|
testId: 'spacePlugin.joinSpace',
|
|
108
114
|
disposition: 'menu',
|
|
@@ -117,7 +123,7 @@ export default (context: PluginContext) => {
|
|
|
117
123
|
await dispatch(createIntent(SpaceAction.OpenMembers, { space }));
|
|
118
124
|
},
|
|
119
125
|
properties: {
|
|
120
|
-
label: ['share space label', { ns:
|
|
126
|
+
label: ['share space label', { ns: meta.id }],
|
|
121
127
|
icon: 'ph--users--regular',
|
|
122
128
|
testId: 'spacePlugin.shareSpace',
|
|
123
129
|
keyBinding: {
|
|
@@ -135,7 +141,7 @@ export default (context: PluginContext) => {
|
|
|
135
141
|
await dispatch(createIntent(SpaceAction.OpenSettings, { space }));
|
|
136
142
|
},
|
|
137
143
|
properties: {
|
|
138
|
-
label: ['open current space settings label', { ns:
|
|
144
|
+
label: ['open current space settings label', { ns: meta.id }],
|
|
139
145
|
icon: 'ph--faders--regular',
|
|
140
146
|
keyBinding: {
|
|
141
147
|
macos: 'meta+shift+,',
|
|
@@ -151,11 +157,11 @@ export default (context: PluginContext) => {
|
|
|
151
157
|
|
|
152
158
|
// Create spaces group node.
|
|
153
159
|
createExtension({
|
|
154
|
-
id: `${
|
|
160
|
+
id: `${meta.id}/root`,
|
|
155
161
|
position: 'hoist',
|
|
156
162
|
connector: (node) =>
|
|
157
|
-
|
|
158
|
-
pipe(
|
|
163
|
+
Atom.make((get) =>
|
|
164
|
+
Function.pipe(
|
|
159
165
|
get(node),
|
|
160
166
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
161
167
|
Option.map(() => [spacesNode]),
|
|
@@ -170,25 +176,25 @@ export default (context: PluginContext) => {
|
|
|
170
176
|
id: SPACES,
|
|
171
177
|
connector: (node) => {
|
|
172
178
|
let query: QueryResult<Type.Expando> | undefined;
|
|
173
|
-
return
|
|
174
|
-
pipe(
|
|
179
|
+
return Atom.make((get) =>
|
|
180
|
+
Function.pipe(
|
|
175
181
|
get(node),
|
|
176
182
|
Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
|
|
177
183
|
Option.map(() => {
|
|
178
184
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
179
185
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
180
|
-
const
|
|
181
|
-
const
|
|
186
|
+
const spacesAtom = atomFromObservable(client.spaces);
|
|
187
|
+
const isReadyAtom = atomFromObservable(client.spaces.isReady);
|
|
182
188
|
|
|
183
|
-
const spaces = get(
|
|
184
|
-
const isReady = get(
|
|
189
|
+
const spaces = get(spacesAtom);
|
|
190
|
+
const isReady = get(isReadyAtom);
|
|
185
191
|
|
|
186
192
|
if (!spaces || !isReady) {
|
|
187
193
|
return [];
|
|
188
194
|
}
|
|
189
195
|
|
|
190
196
|
const settings = get(context.capabilities(Capabilities.SettingsStore))[0]?.getStore<SpaceSettingsProps>(
|
|
191
|
-
|
|
197
|
+
meta.id,
|
|
192
198
|
)?.value;
|
|
193
199
|
|
|
194
200
|
// TODO(wittjosiah): During client reset, accessing default space throws.
|
|
@@ -196,9 +202,9 @@ export default (context: PluginContext) => {
|
|
|
196
202
|
if (!query) {
|
|
197
203
|
query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
|
|
198
204
|
}
|
|
199
|
-
const [spacesOrder] = get(
|
|
205
|
+
const [spacesOrder] = get(atomFromQuery(query));
|
|
200
206
|
return get(
|
|
201
|
-
|
|
207
|
+
atomFromSignal(() => {
|
|
202
208
|
const order: string[] = spacesOrder?.order ?? [];
|
|
203
209
|
const orderMap = new Map(order.map((id, index) => [id, index]));
|
|
204
210
|
return [
|
|
@@ -216,7 +222,7 @@ export default (context: PluginContext) => {
|
|
|
216
222
|
navigable: state.navigableCollections,
|
|
217
223
|
personal: space === client.spaces.default,
|
|
218
224
|
namesCache: state.spaceNames,
|
|
219
|
-
resolve,
|
|
225
|
+
resolve: resolve(get),
|
|
220
226
|
}),
|
|
221
227
|
);
|
|
222
228
|
}),
|
|
@@ -273,10 +279,10 @@ export default (context: PluginContext) => {
|
|
|
273
279
|
|
|
274
280
|
// Create space actions.
|
|
275
281
|
createExtension({
|
|
276
|
-
id: `${
|
|
282
|
+
id: `${meta.id}/actions`,
|
|
277
283
|
actions: (node) =>
|
|
278
|
-
|
|
279
|
-
pipe(
|
|
284
|
+
Atom.make((get) =>
|
|
285
|
+
Function.pipe(
|
|
280
286
|
get(node),
|
|
281
287
|
Option.flatMap((node) =>
|
|
282
288
|
node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
|
|
@@ -305,24 +311,24 @@ export default (context: PluginContext) => {
|
|
|
305
311
|
|
|
306
312
|
// Create nodes for objects in the root collection of a space.
|
|
307
313
|
createExtension({
|
|
308
|
-
id: `${
|
|
314
|
+
id: `${meta.id}/root-collection`,
|
|
309
315
|
connector: (node) =>
|
|
310
|
-
|
|
311
|
-
pipe(
|
|
316
|
+
Atom.make((get) =>
|
|
317
|
+
Function.pipe(
|
|
312
318
|
get(node),
|
|
313
319
|
Option.flatMap((node) =>
|
|
314
320
|
node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
|
|
315
321
|
),
|
|
316
322
|
Option.map((space) => {
|
|
317
323
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
318
|
-
const spaceState = get(
|
|
324
|
+
const spaceState = get(atomFromObservable(space.state));
|
|
319
325
|
if (spaceState !== SpaceState.SPACE_READY) {
|
|
320
326
|
return [];
|
|
321
327
|
}
|
|
322
328
|
|
|
323
329
|
const collection = get(
|
|
324
|
-
|
|
325
|
-
() => space.properties[
|
|
330
|
+
atomFromSignal(
|
|
331
|
+
() => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
|
|
326
332
|
),
|
|
327
333
|
);
|
|
328
334
|
if (!collection) {
|
|
@@ -330,8 +336,8 @@ export default (context: PluginContext) => {
|
|
|
330
336
|
}
|
|
331
337
|
|
|
332
338
|
return get(
|
|
333
|
-
|
|
334
|
-
pipe(
|
|
339
|
+
atomFromSignal(() =>
|
|
340
|
+
Function.pipe(
|
|
335
341
|
collection.objects,
|
|
336
342
|
Array.map((object) => object.target),
|
|
337
343
|
Array.filter(isNonNullable),
|
|
@@ -339,7 +345,7 @@ export default (context: PluginContext) => {
|
|
|
339
345
|
createObjectNode({
|
|
340
346
|
space,
|
|
341
347
|
object,
|
|
342
|
-
resolve,
|
|
348
|
+
resolve: resolve(get),
|
|
343
349
|
navigable: state.navigableCollections,
|
|
344
350
|
}),
|
|
345
351
|
),
|
|
@@ -355,27 +361,33 @@ export default (context: PluginContext) => {
|
|
|
355
361
|
|
|
356
362
|
// Create nodes for objects in a collection or by its fully qualified id.
|
|
357
363
|
createExtension({
|
|
358
|
-
id: `${
|
|
364
|
+
id: `${meta.id}/objects`,
|
|
359
365
|
connector: (node) =>
|
|
360
|
-
|
|
361
|
-
pipe(
|
|
366
|
+
Atom.make((get) =>
|
|
367
|
+
Function.pipe(
|
|
362
368
|
get(node),
|
|
363
369
|
Option.flatMap((node) =>
|
|
364
|
-
Obj.instanceOf(
|
|
370
|
+
Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
|
|
365
371
|
),
|
|
366
372
|
Option.map((collection) => {
|
|
367
373
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
368
374
|
const space = getSpace(collection);
|
|
369
375
|
|
|
370
376
|
return get(
|
|
371
|
-
|
|
372
|
-
pipe(
|
|
377
|
+
atomFromSignal(() =>
|
|
378
|
+
Function.pipe(
|
|
373
379
|
collection.objects,
|
|
374
380
|
Array.map((object) => object.target),
|
|
375
381
|
Array.filter(isNonNullable),
|
|
376
382
|
Array.map(
|
|
377
383
|
(object) =>
|
|
378
|
-
space &&
|
|
384
|
+
space &&
|
|
385
|
+
createObjectNode({
|
|
386
|
+
object,
|
|
387
|
+
space,
|
|
388
|
+
resolve: resolve(get),
|
|
389
|
+
navigable: state.navigableCollections,
|
|
390
|
+
}),
|
|
379
391
|
),
|
|
380
392
|
Array.filter(isNonNullable),
|
|
381
393
|
),
|
|
@@ -426,20 +438,19 @@ export default (context: PluginContext) => {
|
|
|
426
438
|
|
|
427
439
|
// Create nodes for objects in a query collection.
|
|
428
440
|
createExtension({
|
|
429
|
-
id: `${
|
|
441
|
+
id: `${meta.id}/query-collection-objects`,
|
|
430
442
|
connector: (node) => {
|
|
431
443
|
let query: QueryResult<Type.Expando> | undefined;
|
|
432
|
-
return
|
|
433
|
-
pipe(
|
|
444
|
+
return Atom.make((get) =>
|
|
445
|
+
Function.pipe(
|
|
434
446
|
get(node),
|
|
435
447
|
Option.flatMap((node) =>
|
|
436
|
-
Obj.instanceOf(
|
|
448
|
+
Obj.instanceOf(Collection.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
|
|
437
449
|
),
|
|
438
450
|
Option.flatMap((collection) => {
|
|
439
451
|
const space = getSpace(collection);
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
: Option.none();
|
|
452
|
+
const typename = getTypenameFromQuery(collection.query);
|
|
453
|
+
return typename && space ? Option.some({ typename, space }) : Option.none();
|
|
443
454
|
}),
|
|
444
455
|
Option.map(({ typename, space }) => {
|
|
445
456
|
const state = context.getCapability(SpaceCapabilities.State);
|
|
@@ -451,26 +462,62 @@ export default (context: PluginContext) => {
|
|
|
451
462
|
// It will return all objects in the collection, not just the ones of the given type.
|
|
452
463
|
// However this works fine for now because this query is only used for exclusions.
|
|
453
464
|
Query.select(Filter.typename(typename))
|
|
454
|
-
.referencedBy(
|
|
465
|
+
.referencedBy(Collection.Collection, 'objects')
|
|
455
466
|
.reference('objects'),
|
|
456
467
|
),
|
|
457
468
|
);
|
|
458
469
|
}
|
|
459
|
-
return
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
+
return (
|
|
471
|
+
get(atomFromQuery(query))
|
|
472
|
+
// TODO(wittjosiah): This should be the default sort order.
|
|
473
|
+
.toSorted((a, b) => a.id.localeCompare(b.id))
|
|
474
|
+
.map((object) =>
|
|
475
|
+
get(
|
|
476
|
+
atomFromSignal(() =>
|
|
477
|
+
createObjectNode({
|
|
478
|
+
object,
|
|
479
|
+
space,
|
|
480
|
+
resolve: resolve(get),
|
|
481
|
+
droppable: false, // Cannot rearrange query collections.
|
|
482
|
+
navigable: state.navigableCollections,
|
|
483
|
+
}),
|
|
484
|
+
),
|
|
470
485
|
),
|
|
471
|
-
)
|
|
486
|
+
)
|
|
487
|
+
.filter(isNonNullable)
|
|
488
|
+
);
|
|
489
|
+
}),
|
|
490
|
+
Option.getOrElse(() => []),
|
|
491
|
+
),
|
|
492
|
+
);
|
|
493
|
+
},
|
|
494
|
+
}),
|
|
495
|
+
|
|
496
|
+
// Static schema records.
|
|
497
|
+
createExtension({
|
|
498
|
+
id: `${meta.id}/static-schemas`,
|
|
499
|
+
connector: (node) => {
|
|
500
|
+
const client = context.getCapability(ClientCapabilities.Client);
|
|
501
|
+
return Atom.make((get) =>
|
|
502
|
+
Function.pipe(
|
|
503
|
+
get(node),
|
|
504
|
+
Option.flatMap((node) =>
|
|
505
|
+
Obj.instanceOf(Collection.QueryCollection, node.data) &&
|
|
506
|
+
getTypenameFromQuery(node.data.query) === StoredSchema.typename
|
|
507
|
+
? Option.some(node.data)
|
|
508
|
+
: Option.none(),
|
|
509
|
+
),
|
|
510
|
+
Option.flatMap((collection) => {
|
|
511
|
+
const space = getSpace(collection);
|
|
512
|
+
return space?.properties.staticRecords ? Option.some(space) : Option.none();
|
|
513
|
+
}),
|
|
514
|
+
Option.map((space) => {
|
|
515
|
+
return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
|
|
516
|
+
.map((typename) =>
|
|
517
|
+
client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
|
|
472
518
|
)
|
|
473
|
-
.filter(isNonNullable)
|
|
519
|
+
.filter(isNonNullable)
|
|
520
|
+
.map((schema) => createStaticSchemaNode({ schema, space }));
|
|
474
521
|
}),
|
|
475
522
|
Option.getOrElse(() => []),
|
|
476
523
|
),
|
|
@@ -478,15 +525,188 @@ export default (context: PluginContext) => {
|
|
|
478
525
|
},
|
|
479
526
|
}),
|
|
480
527
|
|
|
528
|
+
// Create static schema actions.
|
|
529
|
+
createExtension({
|
|
530
|
+
id: `${meta.id}/static-schema-actions`,
|
|
531
|
+
actions: (node) => {
|
|
532
|
+
let query: QueryResult<View.View> | undefined;
|
|
533
|
+
return Atom.make((get) =>
|
|
534
|
+
Function.pipe(
|
|
535
|
+
get(node),
|
|
536
|
+
Option.flatMap((node) => {
|
|
537
|
+
const space = isSpace(node.properties.space) ? node.properties.space : undefined;
|
|
538
|
+
return space && Schema.isSchema(node.data) ? Option.some({ space, schema: node.data }) : Option.none();
|
|
539
|
+
}),
|
|
540
|
+
Option.map(({ space, schema }) => {
|
|
541
|
+
if (!query) {
|
|
542
|
+
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
543
|
+
query = space.db.query(Filter.type(View.View));
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
const views = get(atomFromQuery(query));
|
|
547
|
+
const filteredViews = get(
|
|
548
|
+
atomFromSignal(() =>
|
|
549
|
+
// TODO(wittjosiah): Remove cast.
|
|
550
|
+
views.filter(
|
|
551
|
+
(view) => getTypenameFromQuery(view.query.ast) === Type.getTypename(schema as Type.Obj.Any),
|
|
552
|
+
),
|
|
553
|
+
),
|
|
554
|
+
);
|
|
555
|
+
const deletable = filteredViews.length === 0;
|
|
556
|
+
|
|
557
|
+
const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
|
|
558
|
+
if (!dispatcher) {
|
|
559
|
+
return [];
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// TODO(wittjosiah): Remove cast.
|
|
563
|
+
return createStaticSchemaActions({
|
|
564
|
+
schema: schema as Type.Obj.Any,
|
|
565
|
+
space,
|
|
566
|
+
dispatch: dispatcher.dispatchPromise,
|
|
567
|
+
deletable,
|
|
568
|
+
});
|
|
569
|
+
}),
|
|
570
|
+
Option.getOrElse(() => []),
|
|
571
|
+
),
|
|
572
|
+
);
|
|
573
|
+
},
|
|
574
|
+
}),
|
|
575
|
+
|
|
576
|
+
// Create nodes for schema views.
|
|
577
|
+
createExtension({
|
|
578
|
+
id: `${meta.id}/schema-views`,
|
|
579
|
+
connector: (node) => {
|
|
580
|
+
let query: QueryResult<View.View> | undefined;
|
|
581
|
+
return Atom.make((get) =>
|
|
582
|
+
Function.pipe(
|
|
583
|
+
get(node),
|
|
584
|
+
Option.flatMap((node) => {
|
|
585
|
+
const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
|
|
586
|
+
return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
|
|
587
|
+
? Option.some({ space, schema: node.data })
|
|
588
|
+
: Option.none();
|
|
589
|
+
}),
|
|
590
|
+
Option.map(({ space, schema }) => {
|
|
591
|
+
if (!query) {
|
|
592
|
+
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
593
|
+
query = space.db.query(Filter.type(View.View));
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// TODO(wittjosiah): Remove cast.
|
|
597
|
+
const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
|
|
598
|
+
return (
|
|
599
|
+
get(atomFromQuery(query))
|
|
600
|
+
.filter((view) => getTypenameFromQuery(view.query.ast) === typename)
|
|
601
|
+
// Filter out Collection views from Projects.
|
|
602
|
+
.filter((view) =>
|
|
603
|
+
get(
|
|
604
|
+
atomFromSignal(() => {
|
|
605
|
+
const presentation = view.presentation.target;
|
|
606
|
+
if (presentation) {
|
|
607
|
+
const typename = Obj.getTypename(presentation);
|
|
608
|
+
return typename !== Collection.Collection.typename;
|
|
609
|
+
} else {
|
|
610
|
+
return false;
|
|
611
|
+
}
|
|
612
|
+
}),
|
|
613
|
+
),
|
|
614
|
+
)
|
|
615
|
+
.map((view) =>
|
|
616
|
+
get(
|
|
617
|
+
atomFromSignal(() =>
|
|
618
|
+
createObjectNode({
|
|
619
|
+
object: view,
|
|
620
|
+
space,
|
|
621
|
+
resolve: resolve(get),
|
|
622
|
+
droppable: false,
|
|
623
|
+
}),
|
|
624
|
+
),
|
|
625
|
+
),
|
|
626
|
+
)
|
|
627
|
+
.filter(isNonNullable)
|
|
628
|
+
);
|
|
629
|
+
}),
|
|
630
|
+
Option.getOrElse(() => []),
|
|
631
|
+
),
|
|
632
|
+
);
|
|
633
|
+
},
|
|
634
|
+
}),
|
|
635
|
+
|
|
636
|
+
// Create record nodes.
|
|
637
|
+
createExtension({
|
|
638
|
+
id: `${meta.id}/records`,
|
|
639
|
+
resolver: (id) => {
|
|
640
|
+
let query: QueryResult<Type.Expando> | undefined;
|
|
641
|
+
return Atom.make((get) => {
|
|
642
|
+
const client = context.getCapability(ClientCapabilities.Client);
|
|
643
|
+
const dxn = DXN.tryParse(id)?.asEchoDXN();
|
|
644
|
+
if (!dxn || !dxn.spaceId) {
|
|
645
|
+
return null;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
const space = client.spaces.get(dxn.spaceId);
|
|
649
|
+
if (!space) {
|
|
650
|
+
return null;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
if (!query) {
|
|
654
|
+
query = space.db.query(Filter.ids(dxn.echoId));
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
const object = get(atomFromQuery(query)).at(0);
|
|
658
|
+
if (!object) {
|
|
659
|
+
return null;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
return createObjectNode({
|
|
663
|
+
object,
|
|
664
|
+
space,
|
|
665
|
+
resolve: resolve(get),
|
|
666
|
+
disposition: 'hidden',
|
|
667
|
+
});
|
|
668
|
+
});
|
|
669
|
+
},
|
|
670
|
+
}),
|
|
671
|
+
|
|
481
672
|
// Create collection actions and action groups.
|
|
482
673
|
createExtension({
|
|
483
|
-
id: `${
|
|
484
|
-
actions: (node) =>
|
|
485
|
-
|
|
486
|
-
|
|
674
|
+
id: `${meta.id}/object-actions`,
|
|
675
|
+
actions: (node) => {
|
|
676
|
+
let query: QueryResult<View.View> | undefined;
|
|
677
|
+
return Atom.make((get) =>
|
|
678
|
+
Function.pipe(
|
|
487
679
|
get(node),
|
|
488
|
-
Option.flatMap((node) =>
|
|
489
|
-
|
|
680
|
+
Option.flatMap((node) => {
|
|
681
|
+
const space = getSpace(node.data);
|
|
682
|
+
return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type
|
|
683
|
+
? Option.some({ space, object: node.data })
|
|
684
|
+
: Option.none();
|
|
685
|
+
}),
|
|
686
|
+
Option.flatMap(({ space, object }) => {
|
|
687
|
+
const isSchema = Obj.instanceOf(StoredSchema, object);
|
|
688
|
+
if (!query && isSchema) {
|
|
689
|
+
// TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
|
|
690
|
+
query = space.db.query(Filter.type(View.View));
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
let deletable =
|
|
694
|
+
!isSchema &&
|
|
695
|
+
// Don't allow the Records smart collection to be deleted.
|
|
696
|
+
!(
|
|
697
|
+
Obj.instanceOf(Collection.QueryCollection, object) &&
|
|
698
|
+
getTypenameFromQuery(object.query) === StoredSchema.typename
|
|
699
|
+
);
|
|
700
|
+
if (isSchema && query) {
|
|
701
|
+
const views = get(atomFromQuery(query));
|
|
702
|
+
const filteredViews = get(
|
|
703
|
+
atomFromSignal(() =>
|
|
704
|
+
views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename),
|
|
705
|
+
),
|
|
706
|
+
);
|
|
707
|
+
deletable = filteredViews.length === 0;
|
|
708
|
+
}
|
|
709
|
+
|
|
490
710
|
const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
|
|
491
711
|
const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
|
|
492
712
|
const [state] = get(context.capabilities(SpaceCapabilities.State));
|
|
@@ -500,22 +720,49 @@ export default (context: PluginContext) => {
|
|
|
500
720
|
graph: appGraph.graph,
|
|
501
721
|
dispatch: dispatcher.dispatchPromise,
|
|
502
722
|
objectForms,
|
|
503
|
-
|
|
723
|
+
deletable,
|
|
724
|
+
navigable: get(atomFromSignal(() => state.navigableCollections)),
|
|
504
725
|
});
|
|
505
726
|
}
|
|
506
727
|
}),
|
|
507
728
|
Option.map((params) => constructObjectActions(params)),
|
|
508
729
|
Option.getOrElse(() => []),
|
|
509
730
|
),
|
|
731
|
+
);
|
|
732
|
+
},
|
|
733
|
+
}),
|
|
734
|
+
|
|
735
|
+
// View selected objects.
|
|
736
|
+
createExtension({
|
|
737
|
+
id: `${meta.id}/selected-objects`,
|
|
738
|
+
connector: (node) =>
|
|
739
|
+
Atom.make((get) =>
|
|
740
|
+
Function.pipe(
|
|
741
|
+
get(node),
|
|
742
|
+
Option.flatMap((node) => (Obj.instanceOf(View.View, node.data) ? Option.some(node) : Option.none())),
|
|
743
|
+
Option.map((node) => [
|
|
744
|
+
{
|
|
745
|
+
id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
|
|
746
|
+
type: PLANK_COMPANION_TYPE,
|
|
747
|
+
data: 'selected-objects',
|
|
748
|
+
properties: {
|
|
749
|
+
label: ['companion selected objects label', { ns: meta.id }],
|
|
750
|
+
icon: 'ph--tree-view--regular',
|
|
751
|
+
disposition: 'hidden',
|
|
752
|
+
},
|
|
753
|
+
},
|
|
754
|
+
]),
|
|
755
|
+
Option.getOrElse(() => []),
|
|
756
|
+
),
|
|
510
757
|
),
|
|
511
758
|
}),
|
|
512
759
|
|
|
513
760
|
// Object settings plank companion.
|
|
514
761
|
createExtension({
|
|
515
|
-
id: `${
|
|
762
|
+
id: `${meta.id}/settings`,
|
|
516
763
|
connector: (node) =>
|
|
517
|
-
|
|
518
|
-
pipe(
|
|
764
|
+
Atom.make((get) =>
|
|
765
|
+
Function.pipe(
|
|
519
766
|
get(node),
|
|
520
767
|
Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
|
|
521
768
|
Option.map((node) => [
|
|
@@ -524,7 +771,7 @@ export default (context: PluginContext) => {
|
|
|
524
771
|
type: PLANK_COMPANION_TYPE,
|
|
525
772
|
data: 'settings',
|
|
526
773
|
properties: {
|
|
527
|
-
label: ['object settings label', { ns:
|
|
774
|
+
label: ['object settings label', { ns: meta.id }],
|
|
528
775
|
icon: 'ph--sliders--regular',
|
|
529
776
|
disposition: 'hidden',
|
|
530
777
|
position: 'fallback',
|