@dxos/plugin-space 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe
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-D2B75XBS.mjs → CollectionArticle-WTHWY4YS.mjs} +10 -10
- 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-AFC6PNAB.mjs → app-graph-builder-DTM7BJ6D.mjs} +107 -96
- package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-Q7QG4EKW.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-6GRF7NEF.mjs → chunk-CKACGS7T.mjs} +553 -475
- 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-S33AYKSS.mjs → chunk-KFUMADZF.mjs} +135 -62
- package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WZYRDFW7.mjs → chunk-VGKOXAPE.mjs} +26 -13
- 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-URST7EEN.mjs → chunk-ZQMSGD5J.mjs} +35 -19
- package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-NAXTPQXE.mjs} +5 -5
- package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +88 -70
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-CO262Q44.mjs → intent-resolver-3FNTO3VW.mjs} +89 -76
- 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-TPUOK2LC.mjs → react-surface-TTHS332A.mjs} +71 -105
- package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-YDPFZELA.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
- package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
- package/dist/lib/browser/{settings-ZYH2JWNI.mjs → settings-45PGPO2V.mjs} +5 -5
- package/dist/lib/browser/{settings-ZYH2JWNI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-3I5LISH4.mjs → spaces-ready-QCND4DVY.mjs} +15 -14
- package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
- package/dist/lib/browser/{state-2RGW7FQG.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/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
- 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-OW2EBYRI.mjs → app-graph-builder-FBJFWI4H.mjs} +107 -96
- package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-6PGC5WR5.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-RXDT5LA5.mjs → chunk-6VEONPNZ.mjs} +35 -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-TEUN2E4F.mjs → chunk-OK2L7N2F.mjs} +135 -62
- package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LGNPMOXU.mjs → chunk-QBRPYAEL.mjs} +26 -13
- package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NMCD2PSG.mjs → chunk-XGAMJC5C.mjs} +553 -475
- 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-AL7NNCKH.mjs → identity-created-OXLKCJE3.mjs} +5 -5
- package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +88 -70
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-EXPK4B76.mjs → intent-resolver-6O5FSB7Z.mjs} +89 -76
- 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-4OQ7MPGW.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-WXEXIDB7.mjs → react-surface-Y7FTEIDF.mjs} +71 -105
- package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-OYBCWKAS.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-2RYFMMTP.mjs → settings-6FO65BA6.mjs} +5 -5
- package/dist/lib/node-esm/{settings-2RYFMMTP.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-JAP22P57.mjs → spaces-ready-P7CKVXBE.mjs} +15 -14
- package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
- package/dist/lib/node-esm/{state-7VBVBGNS.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.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +6 -5
- 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 +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +120 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +3 -3
- 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/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -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 +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/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/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/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +121 -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} +122 -3
- 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 +120 -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 +121 -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 +10 -17
- package/dist/types/src/components/index.d.ts.map +1 -1
- 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 +120 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +70 -55
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +10 -7
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +65 -60
- package/src/SpacePlugin.ts +228 -200
- package/src/capabilities/app-graph-builder.ts +157 -121
- package/src/capabilities/app-graph-serializer.ts +12 -12
- package/src/capabilities/capabilities.ts +16 -11
- package/src/capabilities/identity-created.ts +2 -2
- package/src/capabilities/intent-resolver.ts +75 -59
- package/src/capabilities/react-root.tsx +4 -3
- package/src/capabilities/react-surface.tsx +65 -141
- package/src/capabilities/schema-defs.ts +1 -1
- package/src/capabilities/spaces-ready.ts +8 -5
- package/src/capabilities/state.ts +2 -2
- package/src/components/AwaitingObject.tsx +12 -14
- package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
- package/src/components/CollectionSection.tsx +8 -6
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
- package/src/components/CreateDialog/CreateObjectDialog.tsx +36 -28
- package/src/components/CreateDialog/CreateObjectPanel.tsx +8 -8
- 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.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
- package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
- package/src/components/MembersContainer/index.ts +5 -0
- package/src/components/MenuFooter.tsx +2 -2
- 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} +6 -6
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -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 +1 -1
- 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 +23 -26
- package/src/components/SpacePluginSettings.tsx +10 -4
- package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
- package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
- 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 +9 -4
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +44 -23
- package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
- package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
- package/src/components/SyncStatus/SyncStatus.tsx +107 -11
- package/src/components/ViewEditor.tsx +51 -18
- package/src/components/index.ts +7 -8
- package/src/events.ts +6 -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 +2 -1
- 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 +25 -10
- package/src/types/types.ts +33 -18
- package/src/util.tsx +141 -63
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs +0 -90
- package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs.map +0 -7
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-AFC6PNAB.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-Q7QG4EKW.mjs.map +0 -7
- package/dist/lib/browser/chunk-6GRF7NEF.mjs.map +0 -7
- package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
- package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
- package/dist/lib/browser/chunk-ELJDGQTO.mjs +0 -94
- package/dist/lib/browser/chunk-ELJDGQTO.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-S33AYKSS.mjs.map +0 -7
- package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
- package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
- package/dist/lib/browser/chunk-URST7EEN.mjs.map +0 -7
- package/dist/lib/browser/chunk-WZYRDFW7.mjs.map +0 -7
- package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-CO262Q44.mjs.map +0 -7
- package/dist/lib/browser/react-root-K4IVLFYZ.mjs +0 -29
- package/dist/lib/browser/react-root-K4IVLFYZ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-TPUOK2LC.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-3I5LISH4.mjs.map +0 -7
- package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs +0 -91
- package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs.map +0 -7
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-OW2EBYRI.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-6PGC5WR5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
- package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
- package/dist/lib/node-esm/chunk-HC677WUJ.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-LGNPMOXU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NMCD2PSG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs +0 -96
- package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RXDT5LA5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TEUN2E4F.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-EXPK4B76.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-4OQ7MPGW.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-WXEXIDB7.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-JAP22P57.mjs.map +0 -7
- package/dist/lib/node-esm/state-7VBVBGNS.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/ObjectDetailsPanel.d.ts +0 -9
- package/dist/types/src/components/ObjectDetailsPanel.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/ObjectDetailsPanel.tsx +0 -79
- package/src/components/PersistenceStatus.tsx +0 -83
- package/src/components/RecordMain.tsx +0 -43
- /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
|
@@ -2,35 +2,65 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
import React, { useCallback, useState } from 'react';
|
|
6
7
|
|
|
7
|
-
import { createIntent
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { createIntent } from '@dxos/app-framework';
|
|
9
|
+
import { useIntentDispatcher } from '@dxos/app-framework/react';
|
|
10
|
+
import { DXN, Filter, Obj, Query, type QueryAST, Tag, Type } from '@dxos/echo';
|
|
10
11
|
import { useClient } from '@dxos/react-client';
|
|
11
|
-
import { getSpace,
|
|
12
|
+
import { getSpace, useQuery } from '@dxos/react-client/echo';
|
|
13
|
+
import { useAsyncEffect } from '@dxos/react-ui';
|
|
12
14
|
import { ViewEditor as NaturalViewEditor } from '@dxos/react-ui-form';
|
|
13
|
-
import {
|
|
15
|
+
import { View } from '@dxos/schema';
|
|
14
16
|
|
|
17
|
+
import { resolveSchemaWithClientAndSpace } from '../helpers';
|
|
18
|
+
import { useTypeOptions } from '../hooks';
|
|
15
19
|
import { SpaceAction } from '../types';
|
|
16
20
|
|
|
17
|
-
type ViewEditorProps = { view:
|
|
21
|
+
export type ViewEditorProps = { view: View.View };
|
|
18
22
|
|
|
19
23
|
export const ViewEditor = ({ view }: ViewEditorProps) => {
|
|
20
24
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
21
25
|
const client = useClient();
|
|
22
26
|
const space = getSpace(view);
|
|
23
|
-
const
|
|
24
|
-
const
|
|
27
|
+
const [schema, setSchema] = useState<Schema.Schema.AnyNoContext>(() => Schema.Struct({}));
|
|
28
|
+
const tags = useQuery(space, Filter.type(Tag.Tag));
|
|
29
|
+
const types = useTypeOptions({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
(
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
useAsyncEffect(async () => {
|
|
32
|
+
if (!view?.query || !space) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
const foundSchema = await resolveSchemaWithClientAndSpace(client, space, view.query.ast);
|
|
37
|
+
if (foundSchema && foundSchema !== schema) {
|
|
38
|
+
setSchema(() => foundSchema);
|
|
39
|
+
}
|
|
40
|
+
}, [client, space, view, schema]);
|
|
41
|
+
|
|
42
|
+
const handleQueryChanged = useCallback(
|
|
43
|
+
async (newQuery: QueryAST.Query, target?: string) => {
|
|
44
|
+
if (!view || !space) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const queue = target && DXN.tryParse(target) ? target : undefined;
|
|
49
|
+
const query = queue ? Query.fromAst(newQuery).options({ queues: [queue] }) : Query.fromAst(newQuery);
|
|
50
|
+
view.query.ast = query.ast;
|
|
51
|
+
const newSchema = await resolveSchemaWithClientAndSpace(client, space, query.ast);
|
|
52
|
+
if (!newSchema) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const newView = View.make({
|
|
57
|
+
query,
|
|
58
|
+
jsonSchema: Type.toJsonSchema(newSchema),
|
|
59
|
+
presentation: Obj.make(Type.Expando, {}),
|
|
60
|
+
});
|
|
61
|
+
view.projection = Obj.getSnapshot(newView).projection;
|
|
62
|
+
|
|
63
|
+
setSchema(() => newSchema);
|
|
34
64
|
},
|
|
35
65
|
[view, schema],
|
|
36
66
|
);
|
|
@@ -51,9 +81,12 @@ export const ViewEditor = ({ view }: ViewEditorProps) => {
|
|
|
51
81
|
registry={space.db.schemaRegistry}
|
|
52
82
|
schema={schema}
|
|
53
83
|
view={view}
|
|
54
|
-
|
|
55
|
-
onDelete={Type.isMutable(schema) ? handleDelete : undefined}
|
|
84
|
+
mode='query'
|
|
56
85
|
outerSpacing={false}
|
|
86
|
+
tags={tags}
|
|
87
|
+
types={types}
|
|
88
|
+
onQueryChanged={handleQueryChanged}
|
|
89
|
+
onDelete={Type.isMutable(schema) ? handleDelete : undefined}
|
|
57
90
|
/>
|
|
58
91
|
);
|
|
59
92
|
};
|
package/src/components/index.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { lazy } from 'react';
|
|
5
|
+
import { type ComponentType, lazy } from 'react';
|
|
6
6
|
|
|
7
7
|
export * from './AwaitingObject';
|
|
8
8
|
export * from './CreateDialog';
|
|
@@ -10,10 +10,8 @@ export * from './CollectionSection';
|
|
|
10
10
|
export * from './JoinDialog';
|
|
11
11
|
export * from './MembersContainer';
|
|
12
12
|
export * from './MenuFooter';
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './
|
|
15
|
-
export * from './PopoverRenameObject';
|
|
16
|
-
export * from './PopoverRenameSpace';
|
|
13
|
+
export * from './ObjectRenamePopover';
|
|
14
|
+
export * from './SpaceRenamePopover';
|
|
17
15
|
export * from './SchemaContainer';
|
|
18
16
|
export * from './SpacePresence';
|
|
19
17
|
export * from './SpacePluginSettings';
|
|
@@ -21,6 +19,7 @@ export * from './SpaceSettings';
|
|
|
21
19
|
export * from './SyncStatus';
|
|
22
20
|
export * from './ViewEditor';
|
|
23
21
|
|
|
24
|
-
export const
|
|
25
|
-
export const ObjectDetailsPanel = lazy(() => import('./ObjectDetailsPanel'));
|
|
26
|
-
export const
|
|
22
|
+
export const CollectionArticle = lazy(() => import('./CollectionArticle'));
|
|
23
|
+
export const ObjectDetailsPanel: ComponentType<any> = lazy(() => import('./ObjectDetailsPanel'));
|
|
24
|
+
export const ObjectSettingsContainer = lazy(() => import('./ObjectSettings'));
|
|
25
|
+
export const RecordArticle = lazy(() => import('./RecordArticle'));
|
package/src/events.ts
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import { Events, defineEvent } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { meta } from './meta';
|
|
8
8
|
|
|
9
9
|
export namespace SpaceEvents {
|
|
10
|
-
export const StateReady = Events.createStateEvent(`${
|
|
11
|
-
export const SetupSettingsPanel = defineEvent(`${
|
|
12
|
-
export const DefaultSpaceReady = defineEvent(`${
|
|
13
|
-
export const SpaceCreated = defineEvent(`${
|
|
14
|
-
export const SchemaAdded = defineEvent(`${
|
|
10
|
+
export const StateReady = Events.createStateEvent(`${meta.id}/event/state-ready`);
|
|
11
|
+
export const SetupSettingsPanel = defineEvent(`${meta.id}/event/setup-settings-panel`);
|
|
12
|
+
export const DefaultSpaceReady = defineEvent(`${meta.id}/event/default-space-ready`);
|
|
13
|
+
export const SpaceCreated = defineEvent(`${meta.id}/event/space-created`);
|
|
14
|
+
export const SchemaAdded = defineEvent(`${meta.id}/event/schema-added`);
|
|
15
15
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
|
|
7
|
+
import { evalQuery } from './query';
|
|
8
|
+
|
|
9
|
+
describe('evalQuery', () => {
|
|
10
|
+
it('should evaluate a query string', () => {
|
|
11
|
+
const query = evalQuery('Query.select(Filter.type(Person.Person))');
|
|
12
|
+
expect(query.ast).toMatchInlineSnapshot(`
|
|
13
|
+
{
|
|
14
|
+
"filter": {
|
|
15
|
+
"id": undefined,
|
|
16
|
+
"props": {},
|
|
17
|
+
"type": "object",
|
|
18
|
+
"typename": "dxn:type:dxos.org/type/Person:0.1.0",
|
|
19
|
+
},
|
|
20
|
+
"type": "select",
|
|
21
|
+
}
|
|
22
|
+
`);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Array from 'effect/Array';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as EffectFunction from 'effect/Function';
|
|
8
|
+
import * as Match from 'effect/Match';
|
|
9
|
+
import * as Option from 'effect/Option';
|
|
10
|
+
import type * as Schema from 'effect/Schema';
|
|
11
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
12
|
+
|
|
13
|
+
import { DXN, Filter, Query, type QueryAST } from '@dxos/echo';
|
|
14
|
+
import {
|
|
15
|
+
ReferenceAnnotationId,
|
|
16
|
+
type ReferenceAnnotationValue,
|
|
17
|
+
getTypeAnnotation,
|
|
18
|
+
unwrapOptional,
|
|
19
|
+
} from '@dxos/echo/internal';
|
|
20
|
+
import { log } from '@dxos/log';
|
|
21
|
+
import { type Client } from '@dxos/react-client';
|
|
22
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
23
|
+
import { Person } from '@dxos/types';
|
|
24
|
+
|
|
25
|
+
// TODO(wittjosiah): Factor out and add tests.
|
|
26
|
+
// TODO(wittjosiah): Support arbitrary type imports.
|
|
27
|
+
export const evalQuery = (queryString: string): Query.Any => {
|
|
28
|
+
const globals = { Query, Filter, Person };
|
|
29
|
+
try {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
31
|
+
return new Function(...Object.keys(globals), `return ${queryString}`)(...Object.values(globals));
|
|
32
|
+
} catch (err) {
|
|
33
|
+
log.catch(err);
|
|
34
|
+
return Query.select(Filter.nothing());
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const resolveSchemaWithClientAndSpace = (client: Client, space: Space, query: QueryAST.Query) => {
|
|
39
|
+
const resolve = Effect.fn(function* (dxn: string) {
|
|
40
|
+
const typename = DXN.parse(dxn).asTypeDXN()?.type;
|
|
41
|
+
if (!typename) {
|
|
42
|
+
return Option.none();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const staticSchema = client.graph.schemaRegistry.getSchema(typename);
|
|
46
|
+
if (staticSchema) {
|
|
47
|
+
return Option.some(staticSchema);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const query = space.db.schemaRegistry.query({ typename });
|
|
51
|
+
const schemas = yield* Effect.promise(() => query.run());
|
|
52
|
+
return Array.head(schemas).pipe(Option.map((schema) => schema.snapshot));
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return resolveSchema(query, resolve).pipe(
|
|
56
|
+
Effect.map((schema) => Option.getOrUndefined(schema)),
|
|
57
|
+
Effect.runPromise,
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const resolveSchema = (
|
|
62
|
+
query: QueryAST.Query,
|
|
63
|
+
resolve: (dxn: string) => Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>>,
|
|
64
|
+
): Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>> => {
|
|
65
|
+
return Match.value(query).pipe(
|
|
66
|
+
Match.withReturnType<Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>>>(),
|
|
67
|
+
// TODO(wittjosiah): Reconcile with filter match?
|
|
68
|
+
Match.when({ type: 'select' }, ({ filter }) =>
|
|
69
|
+
typenameFromFilter(filter).pipe(
|
|
70
|
+
Option.map((typename) => resolve(typename)),
|
|
71
|
+
Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
|
|
72
|
+
),
|
|
73
|
+
),
|
|
74
|
+
Match.when({ type: 'filter' }, ({ filter }) =>
|
|
75
|
+
typenameFromFilter(filter).pipe(
|
|
76
|
+
Option.map((typename) => resolve(typename)),
|
|
77
|
+
Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
|
|
78
|
+
),
|
|
79
|
+
),
|
|
80
|
+
Match.when({ type: 'reference-traversal' }, ({ anchor, property }) =>
|
|
81
|
+
resolveSchema(anchor, resolve).pipe(
|
|
82
|
+
Effect.map((base) =>
|
|
83
|
+
base.pipe(
|
|
84
|
+
Option.map((schema) => SchemaAST.getPropertySignatures(schema.ast)),
|
|
85
|
+
Option.flatMap((properties) => Array.findFirst(properties, (p) => p.name === property)),
|
|
86
|
+
Option.flatMap((property) =>
|
|
87
|
+
SchemaAST.getAnnotation<ReferenceAnnotationValue>(ReferenceAnnotationId)(unwrapOptional(property)),
|
|
88
|
+
),
|
|
89
|
+
Option.map((annotation) => annotation.typename),
|
|
90
|
+
),
|
|
91
|
+
),
|
|
92
|
+
Effect.flatMap(
|
|
93
|
+
Option.match({
|
|
94
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
95
|
+
onSome: (typename) => resolve(DXN.fromTypename(typename).toString()),
|
|
96
|
+
}),
|
|
97
|
+
),
|
|
98
|
+
),
|
|
99
|
+
),
|
|
100
|
+
Match.when({ type: 'relation', filter: Match.defined }, ({ filter }) =>
|
|
101
|
+
typenameFromFilter(filter).pipe(
|
|
102
|
+
Option.map((typename) => resolve(typename)),
|
|
103
|
+
Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
|
|
104
|
+
),
|
|
105
|
+
),
|
|
106
|
+
Match.when({ type: 'relation-traversal' }, ({ anchor, direction }) =>
|
|
107
|
+
resolveSchema(anchor, resolve).pipe(
|
|
108
|
+
Effect.map((base) =>
|
|
109
|
+
base.pipe(
|
|
110
|
+
Option.map((schema) => getTypeAnnotation(schema)),
|
|
111
|
+
Option.flatMap((annotation) =>
|
|
112
|
+
Option.fromNullable(direction === 'source' ? annotation?.sourceSchema : annotation?.targetSchema),
|
|
113
|
+
),
|
|
114
|
+
),
|
|
115
|
+
),
|
|
116
|
+
Effect.flatMap(
|
|
117
|
+
Option.match({
|
|
118
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
119
|
+
onSome: (typename) => resolve(typename),
|
|
120
|
+
}),
|
|
121
|
+
),
|
|
122
|
+
),
|
|
123
|
+
),
|
|
124
|
+
Match.when({ type: 'options' }, ({ query }) => resolveSchema(query, resolve)),
|
|
125
|
+
Match.orElse((_q) => {
|
|
126
|
+
// TODO(wittjosiah): Implement other cases.
|
|
127
|
+
return Effect.succeed(Option.none());
|
|
128
|
+
}),
|
|
129
|
+
);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const typenameFromFilter = (filter: QueryAST.Filter): Option.Option<string> =>
|
|
133
|
+
Match.value(filter).pipe(
|
|
134
|
+
Match.withReturnType<Option.Option<string>>(),
|
|
135
|
+
Match.when({ type: 'object' }, ({ typename }) => Option.fromNullable(typename)),
|
|
136
|
+
Match.when({ type: 'and' }, ({ filters }) =>
|
|
137
|
+
EffectFunction.pipe(filters, Array.map(typenameFromFilter), Array.findFirst(Option.isSome), Option.flatten),
|
|
138
|
+
),
|
|
139
|
+
Match.when({ type: 'or' }, ({ filters }) =>
|
|
140
|
+
EffectFunction.pipe(filters, Array.map(typenameFromFilter), Array.findFirst(Option.isSome), Option.flatten),
|
|
141
|
+
),
|
|
142
|
+
Match.orElse(() => Option.none()),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
// TODO(wittjosiah): Currently assumes options is at the top-level of the ast.
|
|
146
|
+
export const getQueryTarget = (query: QueryAST.Query, space?: Space) => {
|
|
147
|
+
return Match.value(query).pipe(
|
|
148
|
+
Match.when({ type: 'options' }, ({ options }) => {
|
|
149
|
+
return Option.fromNullable(options.queues).pipe(
|
|
150
|
+
Option.flatMap((queues) => Array.head(queues)),
|
|
151
|
+
Option.flatMap((queueDxn) => Option.fromNullable(DXN.tryParse(queueDxn))),
|
|
152
|
+
Option.flatMap((queueDxn) => Option.fromNullable(space?.queues.get(queueDxn))),
|
|
153
|
+
Option.getOrElse(() => space),
|
|
154
|
+
);
|
|
155
|
+
}),
|
|
156
|
+
Match.orElse(() => space),
|
|
157
|
+
);
|
|
158
|
+
};
|
package/src/hooks/index.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Capabilities, type PluginContext
|
|
5
|
+
import { Capabilities, type PluginContext } from '@dxos/app-framework';
|
|
6
|
+
import { useLayout } from '@dxos/app-framework/react';
|
|
6
7
|
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
7
8
|
import { parseId, useSpace } from '@dxos/react-client/echo';
|
|
8
9
|
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import type * as Schema from 'effect/Schema';
|
|
6
6
|
import React, { useCallback } from 'react';
|
|
7
7
|
|
|
8
|
-
import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework';
|
|
8
|
+
import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework/react';
|
|
9
9
|
import { type InputProps } from '@dxos/react-ui-form';
|
|
10
10
|
|
|
11
11
|
// TODO(ZaymonFC): Move this if you find yourself needing it elsewhere.
|
|
@@ -20,7 +20,12 @@ export const useInputSurfaceLookup = (baseData?: Record<string, any>) => {
|
|
|
20
20
|
return useCallback(
|
|
21
21
|
({ prop, schema, inputProps }: { prop: string; schema: Schema.Schema<any>; inputProps: InputProps }) => {
|
|
22
22
|
const composedData = { prop, schema, ...baseData };
|
|
23
|
-
if (
|
|
23
|
+
if (
|
|
24
|
+
!isSurfaceAvailable(pluginManager.context, {
|
|
25
|
+
role: 'form-input',
|
|
26
|
+
data: composedData,
|
|
27
|
+
})
|
|
28
|
+
) {
|
|
24
29
|
return undefined;
|
|
25
30
|
}
|
|
26
31
|
|
package/src/hooks/usePath.ts
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useCapabilities } from '@dxos/app-framework/react';
|
|
8
|
+
import { Type } from '@dxos/echo';
|
|
9
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
10
|
+
import { useClient } from '@dxos/react-client';
|
|
11
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { Collection, type TypenameAnnotation, getTypenames } from '@dxos/schema';
|
|
14
|
+
|
|
15
|
+
import { SpaceCapabilities } from '../capabilities';
|
|
16
|
+
|
|
17
|
+
const OMIT = [Collection.Collection.typename, Type.getTypename(Collection.QueryCollection)];
|
|
18
|
+
|
|
19
|
+
export const useTypeOptions = ({ space, annotation }: { space?: Space; annotation: TypenameAnnotation[] }) => {
|
|
20
|
+
const { t } = useTranslation();
|
|
21
|
+
const client = useClient();
|
|
22
|
+
|
|
23
|
+
const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
24
|
+
const whitelistedTypenames = useMemo(
|
|
25
|
+
() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
|
|
26
|
+
[schemaWhitelists],
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
30
|
+
const objectFormTypenames = useMemo(
|
|
31
|
+
() =>
|
|
32
|
+
new Set(
|
|
33
|
+
objectForms
|
|
34
|
+
.map((form) => Type.getTypename(form.objectSchema))
|
|
35
|
+
// TODO(wittjosiah): Remove.
|
|
36
|
+
.filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
|
|
37
|
+
),
|
|
38
|
+
[objectForms],
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const typenames = getTypenames({
|
|
42
|
+
annotation,
|
|
43
|
+
whitelistedTypenames,
|
|
44
|
+
objectFormTypenames,
|
|
45
|
+
space,
|
|
46
|
+
client,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return useMemo(
|
|
50
|
+
() =>
|
|
51
|
+
typenames
|
|
52
|
+
.map((typename) => ({
|
|
53
|
+
value: typename,
|
|
54
|
+
label: t('typename label', { ns: typename, defaultValue: typename }),
|
|
55
|
+
}))
|
|
56
|
+
.toSorted((a, b) => a.label.localeCompare(b.label)),
|
|
57
|
+
[t, typenames],
|
|
58
|
+
);
|
|
59
|
+
};
|
package/src/index.ts
CHANGED
package/src/meta.ts
CHANGED
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
|
-
export const SPACE_PLUGIN = 'dxos.org/plugin/space';
|
|
6
|
+
import { trim } from '@dxos/util';
|
|
8
7
|
|
|
9
8
|
export const meta: PluginMeta = {
|
|
10
|
-
id:
|
|
9
|
+
id: 'dxos.org/plugin/space',
|
|
11
10
|
name: 'Spaces',
|
|
11
|
+
description: trim`
|
|
12
|
+
Core workspace container system for organizing and sharing collaborative environments.
|
|
13
|
+
Create, manage, and share spaces with granular access control and invitation management.
|
|
14
|
+
`,
|
|
12
15
|
icon: 'ph--planet--regular',
|
|
13
16
|
};
|
package/src/translations.ts
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Type } from '@dxos/echo';
|
|
6
|
-
import { StoredSchema } from '@dxos/echo
|
|
6
|
+
import { StoredSchema } from '@dxos/echo/internal';
|
|
7
7
|
import { type Resource } from '@dxos/react-ui';
|
|
8
|
-
import {
|
|
8
|
+
import { Collection, View } from '@dxos/schema';
|
|
9
|
+
import { Event, Organization, Person, Project, Task } from '@dxos/types';
|
|
9
10
|
|
|
10
11
|
import { meta } from './meta';
|
|
11
12
|
|
|
@@ -13,7 +14,7 @@ import { meta } from './meta';
|
|
|
13
14
|
export const translations = [
|
|
14
15
|
{
|
|
15
16
|
'en-US': {
|
|
16
|
-
[
|
|
17
|
+
[Collection.Collection.typename]: {
|
|
17
18
|
'typename label': 'Collection',
|
|
18
19
|
'typename label_zero': 'Collections',
|
|
19
20
|
'typename label_one': 'Collection',
|
|
@@ -22,7 +23,7 @@ export const translations = [
|
|
|
22
23
|
'rename object label': 'Rename collection',
|
|
23
24
|
'delete object label': 'Delete collection',
|
|
24
25
|
},
|
|
25
|
-
[Type.getTypename(
|
|
26
|
+
[Type.getTypename(Collection.QueryCollection)]: {
|
|
26
27
|
'typename label': 'Smart Collection',
|
|
27
28
|
'typename label_zero': 'Smart Collections',
|
|
28
29
|
'typename label_one': 'Smart Collection',
|
|
@@ -40,7 +41,7 @@ export const translations = [
|
|
|
40
41
|
'rename object label': 'Rename record type',
|
|
41
42
|
'delete object label': 'Delete record type',
|
|
42
43
|
},
|
|
43
|
-
[Type.getTypename(
|
|
44
|
+
[Type.getTypename(View.View)]: {
|
|
44
45
|
'typename label': 'View',
|
|
45
46
|
'typename label_zero': 'Views',
|
|
46
47
|
'typename label_one': 'View',
|
|
@@ -49,35 +50,35 @@ export const translations = [
|
|
|
49
50
|
'rename object label': 'Rename view',
|
|
50
51
|
'delete object label': 'Delete view',
|
|
51
52
|
},
|
|
52
|
-
[
|
|
53
|
+
[Event.Event.typename]: {
|
|
53
54
|
'typename label': 'Event',
|
|
54
55
|
'typename label_zero': 'Events',
|
|
55
56
|
'typename label_one': 'Event',
|
|
56
57
|
'typename label_other': 'Events',
|
|
57
58
|
'object name placeholder': 'New event',
|
|
58
59
|
},
|
|
59
|
-
[
|
|
60
|
+
[Organization.Organization.typename]: {
|
|
60
61
|
'typename label': 'Organization',
|
|
61
62
|
'typename label_zero': 'Organizations',
|
|
62
63
|
'typename label_one': 'Organization',
|
|
63
64
|
'typename label_other': 'Organizations',
|
|
64
65
|
'object name placeholder': 'New organization',
|
|
65
66
|
},
|
|
66
|
-
[
|
|
67
|
+
[Person.Person.typename]: {
|
|
67
68
|
'typename label': 'Person',
|
|
68
69
|
'typename label_zero': 'People',
|
|
69
70
|
'typename label_one': 'Person',
|
|
70
71
|
'typename label_other': 'People',
|
|
71
72
|
'object name placeholder': 'New person',
|
|
72
73
|
},
|
|
73
|
-
[
|
|
74
|
+
[Project.Project.typename]: {
|
|
74
75
|
'typename label': 'Project',
|
|
75
76
|
'typename label_zero': 'Projects',
|
|
76
77
|
'typename label_one': 'Project',
|
|
77
78
|
'typename label_other': 'Projects',
|
|
78
79
|
'object name placeholder': 'New project',
|
|
79
80
|
},
|
|
80
|
-
[
|
|
81
|
+
[Task.Task.typename]: {
|
|
81
82
|
'typename label': 'Task',
|
|
82
83
|
'typename label_zero': 'Tasks',
|
|
83
84
|
'typename label_one': 'Task',
|
|
@@ -121,6 +122,7 @@ export const translations = [
|
|
|
121
122
|
'show hidden spaces label': 'Show archived spaces',
|
|
122
123
|
'save files to directory label': 'Save files to disk',
|
|
123
124
|
'select path label': 'Select path',
|
|
125
|
+
'snapshot by schema label': 'Snapshot of objects',
|
|
124
126
|
'rename collection label': 'Rename collection',
|
|
125
127
|
'rename object label': 'Rename item',
|
|
126
128
|
'duplicate object label': 'Duplicate item',
|
|
@@ -190,10 +192,12 @@ export const translations = [
|
|
|
190
192
|
'creating in collection label': 'In Collection',
|
|
191
193
|
'clear input label': 'Clear',
|
|
192
194
|
'expose object label': 'Expose in navtree',
|
|
195
|
+
'add tag label': 'Add tag',
|
|
193
196
|
'advanced settings label': 'Advanced',
|
|
194
197
|
'foreign keys': 'Foreign Keys',
|
|
195
198
|
'add key': 'Add Key',
|
|
196
199
|
'open space settings label': 'Open settings',
|
|
200
|
+
'related objects label': 'Related Items',
|
|
197
201
|
|
|
198
202
|
'row details no selection label': 'No objects selected',
|
|
199
203
|
'companion selected objects label': 'Selected',
|
|
@@ -228,7 +232,18 @@ export const translations = [
|
|
|
228
232
|
'archive space description':
|
|
229
233
|
'Archiving a space will remove it from the sidebar and stop replicating updates, but will not delete the data. You can unarchive it by enabling archived spaces in the app settings.',
|
|
230
234
|
'archive space label': 'Archive',
|
|
235
|
+
'backup space label': 'Backup',
|
|
236
|
+
'backup space description':
|
|
237
|
+
'Download a backup of the space. Contains all data in the space in an unencrypted format.',
|
|
238
|
+
'download backup': 'Download backup',
|
|
231
239
|
'unarchive space label': 'Unarchive',
|
|
240
|
+
|
|
241
|
+
'sync edge connected label': 'Edge connected',
|
|
242
|
+
'sync edge disconnected label': 'Edge disconnected',
|
|
243
|
+
'sync no connection label': 'No connection to edge service',
|
|
244
|
+
'sync latency label': 'Latency',
|
|
245
|
+
'sync upload label': 'Upload',
|
|
246
|
+
'sync download label': 'Download',
|
|
232
247
|
},
|
|
233
248
|
},
|
|
234
249
|
},
|