@dxos/plugin-space 0.8.4-main.406dc2a → 0.8.4-main.548089c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{CollectionMain-AX7KKXWP.mjs → CollectionArticle-ABGFK4VO.mjs} +8 -8
- package/dist/lib/browser/CollectionArticle-ABGFK4VO.mjs.map +7 -0
- package/dist/lib/browser/{ObjectDetailsPanel-MQBHG666.mjs → ObjectDetailsPanel-2BRUBHP6.mjs} +16 -20
- package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
- package/dist/lib/browser/{ObjectSettings-KNUZFCGS.mjs → ObjectSettings-5LLWCVEK.mjs} +33 -40
- package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-G4BCSFFA.mjs +116 -0
- package/dist/lib/browser/RecordArticle-G4BCSFFA.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-3R5GGT46.mjs → app-graph-builder-FFPJHWFB.mjs} +53 -45
- package/dist/lib/browser/app-graph-builder-FFPJHWFB.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-25Z5BG22.mjs → app-graph-serializer-QMWE2YE4.mjs} +10 -10
- package/dist/lib/browser/app-graph-serializer-QMWE2YE4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OV6D543A.mjs → chunk-I4W2BHA2.mjs} +36 -30
- package/dist/lib/browser/chunk-I4W2BHA2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RLI2IAHK.mjs → chunk-K5J7ZB5P.mjs} +2 -2
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7XOTWRZ3.mjs → chunk-K6TOP4E6.mjs} +19 -18
- package/dist/lib/browser/chunk-K6TOP4E6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WS2PJDES.mjs → chunk-M2Z6D4ZI.mjs} +12 -11
- package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-522KZGQF.mjs → chunk-MHXNG2X2.mjs} +487 -381
- package/dist/lib/browser/chunk-MHXNG2X2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PTGRQQ6J.mjs → chunk-OLBBSOVI.mjs} +23 -13
- package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +7 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
- package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EIXZABXD.mjs → chunk-WJXU4GKV.mjs} +2 -2
- package/dist/lib/browser/{identity-created-PW2BA46S.mjs → identity-created-NAXTPQXE.mjs} +3 -3
- package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +63 -46
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-ICGUSVH6.mjs → intent-resolver-WLFWCHDH.mjs} +53 -58
- package/dist/lib/browser/intent-resolver-WLFWCHDH.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-H56QN474.mjs → react-root-BPPTUFLV.mjs} +9 -8
- package/dist/lib/browser/react-root-BPPTUFLV.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-VOE2ILKO.mjs → react-surface-3KTOA5PM.mjs} +37 -40
- package/dist/lib/browser/react-surface-3KTOA5PM.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs → schema-defs-XCNOO2WT.mjs} +3 -3
- package/dist/lib/browser/{settings-OBFJ67ZG.mjs → settings-WKLGKUHQ.mjs} +3 -3
- package/dist/lib/browser/{spaces-ready-MFIVK6I6.mjs → spaces-ready-XVW7I5MQ.mjs} +12 -11
- package/dist/lib/browser/spaces-ready-XVW7I5MQ.mjs.map +7 -0
- package/dist/lib/browser/{state-LSPRFIRO.mjs → state-Q7YRE5KG.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{CollectionMain-EU57SRYK.mjs → CollectionArticle-G3V4QXPI.mjs} +8 -8
- package/dist/lib/node-esm/CollectionArticle-G3V4QXPI.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectDetailsPanel-NABA2S56.mjs → ObjectDetailsPanel-6PZQIQG3.mjs} +16 -20
- package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
- package/dist/lib/node-esm/{ObjectSettings-GXGTITF5.mjs → ObjectSettings-OQSBOH7K.mjs} +33 -40
- package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs +117 -0
- package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-VGRMD5TP.mjs → app-graph-builder-3BTVV7LE.mjs} +53 -45
- package/dist/lib/node-esm/app-graph-builder-3BTVV7LE.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-U4GHXWRG.mjs → app-graph-serializer-BU7KO2G5.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-serializer-BU7KO2G5.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4F25JKVT.mjs → chunk-2PN7QNGV.mjs} +12 -11
- package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
- package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PAAWJ4RE.mjs → chunk-FAWIRIP4.mjs} +19 -18
- package/dist/lib/node-esm/chunk-FAWIRIP4.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs → chunk-H4JILUJK.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-TNUWML33.mjs → chunk-HQMFTMJE.mjs} +36 -30
- package/dist/lib/node-esm/chunk-HQMFTMJE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DG5YEEPZ.mjs → chunk-MI4A5XUX.mjs} +487 -381
- package/dist/lib/node-esm/chunk-MI4A5XUX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HAKW2RFD.mjs → chunk-WC4VBFMA.mjs} +23 -13
- package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-H5UPFRRH.mjs → chunk-Z7BB6HC2.mjs} +2 -2
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-MWTLGQRU.mjs → identity-created-OXLKCJE3.mjs} +3 -3
- package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +63 -46
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-KVB2A4YC.mjs → intent-resolver-QHH5SXLC.mjs} +53 -58
- package/dist/lib/node-esm/intent-resolver-QHH5SXLC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-56PGW5PH.mjs → react-root-QRONKFKI.mjs} +9 -8
- package/dist/lib/node-esm/react-root-QRONKFKI.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-NYEQ23A4.mjs → react-surface-OZBWNTW2.mjs} +37 -40
- package/dist/lib/node-esm/react-surface-OZBWNTW2.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs → schema-defs-5TDB7T5J.mjs} +3 -3
- package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs → settings-RBB5633M.mjs} +3 -3
- package/dist/lib/node-esm/{spaces-ready-TC27M7MP.mjs → spaces-ready-J6RWPI2X.mjs} +12 -11
- package/dist/lib/node-esm/spaces-ready-J6RWPI2X.mjs.map +7 -0
- package/dist/lib/node-esm/{state-TCGOPLRO.mjs → state-362I5BMK.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CollectionArticle.d.ts +6 -0
- package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
- package/dist/types/src/components/CollectionSection.d.ts +3 -4
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +91 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +2 -2
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
- package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
- package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
- package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
- package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
- package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +2 -2
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -1
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
- package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +91 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.d.ts +5 -0
- package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
- package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +92 -2
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
- package/dist/types/src/components/SchemaContainer.d.ts +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
- package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +91 -1
- package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
- package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
- package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
- package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
- package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +91 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +92 -2
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor.d.ts +3 -4
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +9 -16
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/helpers/index.d.ts +2 -0
- package/dist/types/src/helpers/index.d.ts.map +1 -0
- package/dist/types/src/helpers/query.d.ts +8 -0
- package/dist/types/src/helpers/query.d.ts.map +1 -0
- package/dist/types/src/helpers/query.test.d.ts +2 -0
- package/dist/types/src/helpers/query.test.d.ts.map +1 -0
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +91 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +2 -2
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -4
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +53 -51
- package/src/SpacePlugin.ts +49 -25
- package/src/capabilities/app-graph-builder.ts +86 -60
- package/src/capabilities/app-graph-serializer.ts +5 -5
- package/src/capabilities/capabilities.ts +2 -2
- package/src/capabilities/identity-created.ts +2 -2
- package/src/capabilities/intent-resolver.ts +46 -41
- package/src/capabilities/react-root.tsx +2 -1
- package/src/capabilities/react-surface.tsx +35 -40
- package/src/capabilities/spaces-ready.ts +7 -4
- package/src/components/AwaitingObject.tsx +11 -13
- package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +5 -4
- package/src/components/CollectionSection.tsx +6 -4
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +6 -6
- package/src/components/CreateDialog/CreateObjectDialog.tsx +29 -22
- package/src/components/CreateDialog/CreateObjectPanel.tsx +2 -2
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +25 -7
- package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +21 -5
- package/src/components/JoinDialog/index.ts +5 -0
- package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +1 -1
- package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +11 -9
- package/src/components/MembersContainer/index.ts +5 -0
- package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +2 -3
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +9 -12
- package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +5 -5
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +6 -6
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +34 -40
- package/src/components/ObjectSettings/ForeignKeys.tsx +1 -1
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
- package/src/components/RecordArticle.stories.tsx +115 -0
- package/src/components/RecordArticle.tsx +114 -0
- package/src/components/SchemaContainer.tsx +21 -24
- package/src/components/SpacePluginSettings.tsx +8 -2
- package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +1 -1
- package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +14 -9
- package/src/components/SpacePresence/index.ts +5 -0
- package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +6 -5
- package/src/components/SpaceRenamePopover/index.ts +5 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +33 -13
- package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
- package/src/components/SyncStatus/SyncStatus.stories.tsx +3 -2
- package/src/components/SyncStatus/SyncStatus.tsx +45 -36
- package/src/components/ViewEditor.tsx +51 -17
- package/src/components/index.ts +6 -7
- package/src/helpers/index.ts +5 -0
- package/src/helpers/query.test.ts +24 -0
- package/src/helpers/query.ts +158 -0
- package/src/hooks/useActiveSpace.ts +2 -1
- package/src/hooks/useInputSurfaceLookup.tsx +7 -2
- package/src/hooks/useTypeOptions.ts +3 -3
- package/src/index.ts +1 -0
- package/src/meta.ts +5 -0
- package/src/translations.ts +22 -10
- package/src/types/types.ts +11 -10
- package/src/util.tsx +44 -36
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs.map +0 -7
- package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs.map +0 -7
- package/dist/lib/browser/RecordMain-H4DVHICS.mjs +0 -116
- package/dist/lib/browser/RecordMain-H4DVHICS.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-3R5GGT46.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-25Z5BG22.mjs.map +0 -7
- package/dist/lib/browser/chunk-522KZGQF.mjs.map +0 -7
- package/dist/lib/browser/chunk-7XOTWRZ3.mjs.map +0 -7
- package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
- package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
- package/dist/lib/browser/chunk-OV6D543A.mjs.map +0 -7
- package/dist/lib/browser/chunk-PTGRQQ6J.mjs.map +0 -7
- package/dist/lib/browser/chunk-RLI2IAHK.mjs.map +0 -7
- package/dist/lib/browser/chunk-WS2PJDES.mjs.map +0 -7
- package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-ICGUSVH6.mjs.map +0 -7
- package/dist/lib/browser/react-root-H56QN474.mjs.map +0 -7
- package/dist/lib/browser/react-surface-VOE2ILKO.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-MFIVK6I6.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs.map +0 -7
- package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs +0 -117
- package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-VGRMD5TP.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-U4GHXWRG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4F25JKVT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DG5YEEPZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-H5UPFRRH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HAKW2RFD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PAAWJ4RE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TNUWML33.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-KVB2A4YC.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-56PGW5PH.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-NYEQ23A4.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-TC27M7MP.mjs.map +0 -7
- package/dist/types/src/components/CollectionMain.d.ts +0 -7
- package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
- package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
- package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
- package/dist/types/src/components/RecordMain.d.ts +0 -7
- package/dist/types/src/components/RecordMain.d.ts.map +0 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
- package/src/components/PersistenceStatus.tsx +0 -83
- package/src/components/RecordMain.tsx +0 -87
- /package/dist/lib/browser/{chunk-EIXZABXD.mjs.map → chunk-WJXU4GKV.mjs.map} +0 -0
- /package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs.map → schema-defs-XCNOO2WT.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-OBFJ67ZG.mjs.map → settings-WKLGKUHQ.mjs.map} +0 -0
- /package/dist/lib/browser/{state-LSPRFIRO.mjs.map → state-Q7YRE5KG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs.map → chunk-H4JILUJK.mjs.map} +0 -0
- /package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs.map → schema-defs-5TDB7T5J.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs.map → settings-RBB5633M.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-TCGOPLRO.mjs.map → state-362I5BMK.mjs.map} +0 -0
- /package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +0 -0
- /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { createIntent
|
|
7
|
+
import { createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useIntentDispatcher } from '@dxos/app-framework/react';
|
|
8
9
|
import { useClient } from '@dxos/react-client';
|
|
9
10
|
import { useSpaces } from '@dxos/react-client/echo';
|
|
10
11
|
import { IconButton, Input, List, ListItem, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
@@ -36,7 +37,12 @@ export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps
|
|
|
36
37
|
<ListItem.Root key={space.id} classNames='is-full items-center'>
|
|
37
38
|
{/* TODO(burdon): Should auto center and truncate; NOTE truncate doesn't work with flex grow. */}
|
|
38
39
|
<ListItem.Heading classNames='grow truncate !min-bs-0'>
|
|
39
|
-
{toLocalizedString(
|
|
40
|
+
{toLocalizedString(
|
|
41
|
+
getSpaceDisplayName(space, {
|
|
42
|
+
personal: space === client.spaces.default,
|
|
43
|
+
}),
|
|
44
|
+
t,
|
|
45
|
+
)}
|
|
40
46
|
</ListItem.Heading>
|
|
41
47
|
<IconButton
|
|
42
48
|
icon='ph--faders--regular'
|
package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx}
RENAMED
|
@@ -9,7 +9,7 @@ import { IdentityDid, PublicKey } from '@dxos/keys';
|
|
|
9
9
|
import { HaloSpaceMember, SpaceMember } from '@dxos/react-client/echo';
|
|
10
10
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
11
11
|
|
|
12
|
-
import { translations } from '
|
|
12
|
+
import { translations } from '../../translations';
|
|
13
13
|
|
|
14
14
|
import { FullPresence, type Member, type MemberPresenceProps, SmallPresence } from './SpacePresence';
|
|
15
15
|
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import * as Option from 'effect/Option';
|
|
6
6
|
import React, { forwardRef, useCallback, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { useAppGraph, useCapability } from '@dxos/app-framework';
|
|
8
|
+
import { useAppGraph, useCapability } from '@dxos/app-framework/react';
|
|
9
9
|
import { generateName } from '@dxos/display-name';
|
|
10
|
-
import { type Type } from '@dxos/echo';
|
|
10
|
+
import { Obj, type Type } from '@dxos/echo';
|
|
11
11
|
import { PublicKey, useClient } from '@dxos/react-client';
|
|
12
|
-
import { type SpaceMember,
|
|
12
|
+
import { type SpaceMember, getSpace, useMembers } from '@dxos/react-client/echo';
|
|
13
13
|
import { type Identity, useIdentity } from '@dxos/react-client/halo';
|
|
14
14
|
import {
|
|
15
15
|
Avatar,
|
|
@@ -27,10 +27,10 @@ import {
|
|
|
27
27
|
import { AttentionGlyph, type AttentionGlyphProps, useAttended, useAttention } from '@dxos/react-ui-attention';
|
|
28
28
|
import { ComplexMap, keyToFallback } from '@dxos/util';
|
|
29
29
|
|
|
30
|
-
import { SpaceCapabilities } from '
|
|
31
|
-
import { usePath } from '
|
|
32
|
-
import { meta } from '
|
|
33
|
-
import type
|
|
30
|
+
import { SpaceCapabilities } from '../../capabilities';
|
|
31
|
+
import { usePath } from '../../hooks';
|
|
32
|
+
import { meta } from '../../meta';
|
|
33
|
+
import { type ObjectViewerProps } from '../../types';
|
|
34
34
|
|
|
35
35
|
// TODO(thure): Get/derive these values from protocol
|
|
36
36
|
const REFRESH_INTERVAL = 5000;
|
|
@@ -42,7 +42,12 @@ const noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);
|
|
|
42
42
|
// TODO(wittjosiah): Factor out?
|
|
43
43
|
const getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
|
|
44
44
|
|
|
45
|
-
export
|
|
45
|
+
export type SpacePresenceProps = {
|
|
46
|
+
object: Type.Expando;
|
|
47
|
+
spaceKey?: PublicKey;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const SpacePresence = ({ object, spaceKey }: SpacePresenceProps) => {
|
|
46
51
|
// TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
|
|
47
52
|
const spaceState = useCapability(SpaceCapabilities.MutableState);
|
|
48
53
|
const client = useClient();
|
|
@@ -70,7 +75,7 @@ export const SpacePresence = ({ object, spaceKey }: { object: Type.Expando; spac
|
|
|
70
75
|
return null;
|
|
71
76
|
}
|
|
72
77
|
|
|
73
|
-
const currentObjectViewers = spaceState.viewersByObject[
|
|
78
|
+
const currentObjectViewers = spaceState.viewersByObject[Obj.getDXN(object).toString()] ?? noViewers;
|
|
74
79
|
|
|
75
80
|
const membersForObject = spaceMembers
|
|
76
81
|
.filter((member) => memberOnline(member) && memberIsNotSelf(member))
|
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useRef, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import { LayoutAction, createIntent
|
|
8
|
-
import {
|
|
7
|
+
import { LayoutAction, createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useIntentDispatcher } from '@dxos/app-framework/react';
|
|
9
|
+
import { type Space } from '@dxos/client/echo';
|
|
9
10
|
import { Button, Input, Popover, useTranslation } from '@dxos/react-ui';
|
|
10
11
|
|
|
11
|
-
import { meta } from '
|
|
12
|
+
import { meta } from '../../meta';
|
|
12
13
|
|
|
13
|
-
export const
|
|
14
|
+
export const SPACE_RENAME_POPOVER = `${meta.id}/SpaceRenamePopover`;
|
|
14
15
|
|
|
15
|
-
export const
|
|
16
|
+
export const SpaceRenamePopover = ({ space }: { space: Space }) => {
|
|
16
17
|
const { t } = useTranslation(meta.id);
|
|
17
18
|
const doneButton = useRef<HTMLButtonElement>(null);
|
|
18
19
|
const [name, setName] = useState(space.properties.name ?? '');
|
|
@@ -6,12 +6,13 @@ import * as Function from 'effect/Function';
|
|
|
6
6
|
import * as Schema from 'effect/Schema';
|
|
7
7
|
import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
|
|
8
8
|
|
|
9
|
-
import { LayoutAction, chain, createIntent
|
|
9
|
+
import { LayoutAction, chain, createIntent } from '@dxos/app-framework';
|
|
10
|
+
import { useIntentDispatcher } from '@dxos/app-framework/react';
|
|
10
11
|
import { log } from '@dxos/log';
|
|
11
12
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
12
13
|
import { useClient } from '@dxos/react-client';
|
|
13
14
|
import { type Space, SpaceState } from '@dxos/react-client/echo';
|
|
14
|
-
import { Button, Input, useMulticastObservable, useTranslation } from '@dxos/react-ui';
|
|
15
|
+
import { Button, Input, useFileDownload, useMulticastObservable, useTranslation } from '@dxos/react-ui';
|
|
15
16
|
import {
|
|
16
17
|
ControlItem,
|
|
17
18
|
ControlItemInput,
|
|
@@ -27,7 +28,11 @@ import { meta } from '../../meta';
|
|
|
27
28
|
import { SpaceAction, SpaceForm } from '../../types';
|
|
28
29
|
|
|
29
30
|
const FormSchema = SpaceForm.pipe(
|
|
30
|
-
Schema.extend(
|
|
31
|
+
Schema.extend(
|
|
32
|
+
Schema.Struct({
|
|
33
|
+
archived: Schema.Boolean.annotations({ title: 'Archive Space' }),
|
|
34
|
+
}),
|
|
35
|
+
),
|
|
31
36
|
);
|
|
32
37
|
|
|
33
38
|
export type SpaceSettingsContainerProps = {
|
|
@@ -72,7 +77,10 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
72
77
|
void dispatch(
|
|
73
78
|
Function.pipe(
|
|
74
79
|
createIntent(SpaceAction.Close, { space }),
|
|
75
|
-
chain(LayoutAction.SwitchWorkspace, {
|
|
80
|
+
chain(LayoutAction.SwitchWorkspace, {
|
|
81
|
+
part: 'workspace',
|
|
82
|
+
subject: client.spaces.default.id,
|
|
83
|
+
}),
|
|
76
84
|
),
|
|
77
85
|
);
|
|
78
86
|
} else if (!properties.archived && archived) {
|
|
@@ -121,7 +129,6 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
121
129
|
onChange={handleChange}
|
|
122
130
|
onReset={handleReset}
|
|
123
131
|
classNames='justify-self-end'
|
|
124
|
-
iconSize={5}
|
|
125
132
|
/>
|
|
126
133
|
</ControlItem>
|
|
127
134
|
);
|
|
@@ -131,12 +138,7 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
131
138
|
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
132
139
|
return (
|
|
133
140
|
<ControlItem title={label} description={t('hue description')}>
|
|
134
|
-
<HuePicker
|
|
135
|
-
value={getValue()}
|
|
136
|
-
onChange={handleChange}
|
|
137
|
-
onReset={handleReset}
|
|
138
|
-
classNames='[--hue-preview-size:1.25rem] justify-self-end'
|
|
139
|
-
/>
|
|
141
|
+
<HuePicker value={getValue()} onChange={handleChange} onReset={handleReset} classNames='justify-self-end' />
|
|
140
142
|
</ControlItem>
|
|
141
143
|
);
|
|
142
144
|
},
|
|
@@ -152,7 +154,11 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
152
154
|
const handleChange = useCallback(() => onValueChange(type, !getValue()), [onValueChange, type, getValue]);
|
|
153
155
|
return (
|
|
154
156
|
<ControlItemInput title={label} description={t('archive space description')}>
|
|
155
|
-
<Button
|
|
157
|
+
<Button
|
|
158
|
+
disabled={space === client.spaces.default}
|
|
159
|
+
variant={getValue() ? 'default' : 'destructive'}
|
|
160
|
+
onClick={handleChange}
|
|
161
|
+
>
|
|
156
162
|
{getValue() ? t('unarchive space label') : t('archive space label')}
|
|
157
163
|
</Button>
|
|
158
164
|
</ControlItemInput>
|
|
@@ -162,12 +168,20 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
162
168
|
[t, space],
|
|
163
169
|
);
|
|
164
170
|
|
|
171
|
+
const download = useFileDownload();
|
|
172
|
+
const handleBackup = useCallback(async () => {
|
|
173
|
+
const archive = await space.internal.export();
|
|
174
|
+
download(new Blob([archive.contents as Uint8Array<ArrayBuffer>]), archive.filename);
|
|
175
|
+
}, [space, download]);
|
|
176
|
+
|
|
165
177
|
return (
|
|
166
178
|
<StackItem.Content scrollable>
|
|
167
179
|
<ControlPage>
|
|
168
180
|
<ControlSection
|
|
169
181
|
title={t('space properties settings verbose label', { ns: meta.id })}
|
|
170
|
-
description={t('space properties settings description', {
|
|
182
|
+
description={t('space properties settings description', {
|
|
183
|
+
ns: meta.id,
|
|
184
|
+
})}
|
|
171
185
|
>
|
|
172
186
|
<Form
|
|
173
187
|
schema={FormSchema}
|
|
@@ -179,6 +193,12 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
179
193
|
classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'
|
|
180
194
|
/>
|
|
181
195
|
</ControlSection>
|
|
196
|
+
<ControlItemInput
|
|
197
|
+
title={t('backup space label', { ns: meta.id })}
|
|
198
|
+
description={t('backup space description', { ns: meta.id })}
|
|
199
|
+
>
|
|
200
|
+
<Button onClick={handleBackup}>{t('download backup')}</Button>
|
|
201
|
+
</ControlItemInput>
|
|
182
202
|
</ControlPage>
|
|
183
203
|
</StackItem.Content>
|
|
184
204
|
);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Option from 'effect/Option';
|
|
6
6
|
import React, { useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { useAppGraph } from '@dxos/app-framework';
|
|
8
|
+
import { useAppGraph } from '@dxos/app-framework/react';
|
|
9
9
|
import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
|
|
10
10
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
11
11
|
import { useClient } from '@dxos/react-client';
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
|
|
7
|
+
import { withClientProvider } from '@dxos/react-client/testing';
|
|
7
8
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
8
9
|
|
|
9
10
|
import { translations } from '../../translations';
|
|
@@ -13,10 +14,10 @@ import { SyncStatusIndicator } from './SyncStatus';
|
|
|
13
14
|
const meta = {
|
|
14
15
|
title: 'plugins/plugin-space/SyncStatusIndicator',
|
|
15
16
|
component: SyncStatusIndicator,
|
|
16
|
-
decorators: [withTheme],
|
|
17
|
+
decorators: [withTheme, withClientProvider({ createIdentity: true })],
|
|
17
18
|
parameters: {
|
|
18
|
-
translations,
|
|
19
19
|
layout: 'centered',
|
|
20
|
+
translations,
|
|
20
21
|
},
|
|
21
22
|
} satisfies Meta<typeof SyncStatusIndicator>;
|
|
22
23
|
|
|
@@ -6,12 +6,13 @@ import React, { useEffect, useState } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { StatusBar } from '@dxos/plugin-status-bar';
|
|
8
8
|
import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
|
|
9
|
-
import type
|
|
9
|
+
import { type QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
10
10
|
import { useClient } from '@dxos/react-client';
|
|
11
11
|
import { useStream } from '@dxos/react-client/devtools';
|
|
12
12
|
import { type SpaceSyncStateMap, getSyncSummary, useSyncState } from '@dxos/react-client/echo';
|
|
13
13
|
import { Icon, Popover, useTranslation } from '@dxos/react-ui';
|
|
14
|
-
import {
|
|
14
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
15
|
+
import { Unit, type UnitFormat } from '@dxos/util';
|
|
15
16
|
|
|
16
17
|
import { meta } from '../../meta';
|
|
17
18
|
|
|
@@ -24,12 +25,7 @@ export const SyncStatus = () => {
|
|
|
24
25
|
const client = useClient();
|
|
25
26
|
const state = useSyncState();
|
|
26
27
|
const [saved, setSaved] = useState(true);
|
|
27
|
-
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
return createClientSaveTracker(client, (state) => {
|
|
30
|
-
setSaved(state === 'saved');
|
|
31
|
-
});
|
|
32
|
-
}, []);
|
|
28
|
+
useEffect(() => createClientSaveTracker(client, (state) => setSaved(state === 'saved')), []);
|
|
33
29
|
|
|
34
30
|
return <SyncStatusIndicator state={state} saved={saved} />;
|
|
35
31
|
};
|
|
@@ -57,7 +53,7 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
|
|
|
57
53
|
}, [offline, needsToUpload, needsToDownload]);
|
|
58
54
|
|
|
59
55
|
const title = t(`${status} label`);
|
|
60
|
-
const icon = <Icon icon={getIcon(status)}
|
|
56
|
+
const icon = <Icon icon={getIcon(status)} classNames={classNames} />;
|
|
61
57
|
|
|
62
58
|
return (
|
|
63
59
|
<Popover.Root>
|
|
@@ -90,57 +86,70 @@ const EdgeConnectionPopover = () => {
|
|
|
90
86
|
const isConnected = status?.state === EdgeStatus.ConnectionState.CONNECTED;
|
|
91
87
|
|
|
92
88
|
return (
|
|
93
|
-
<div className='
|
|
89
|
+
<div className='min-is-[240px] p-2'>
|
|
94
90
|
{/* Connection Status Header */}
|
|
95
|
-
<div className='flex items-center gap-2
|
|
96
|
-
<
|
|
97
|
-
|
|
98
|
-
{isConnected ?
|
|
91
|
+
<div className='flex items-center gap-2 mbe-2'>
|
|
92
|
+
<Icon
|
|
93
|
+
icon={isConnected ? 'ph--check-circle--regular' : 'ph--warning-circle--regular'}
|
|
94
|
+
classNames={mx(isConnected ? 'text-successText' : 'text-errorText animate-pulse')}
|
|
95
|
+
/>
|
|
96
|
+
<span className='font-medium text-sm'>
|
|
97
|
+
{isConnected ? t('sync edge connected label') : t('sync edge disconnected label')}
|
|
99
98
|
</span>
|
|
100
99
|
</div>
|
|
101
100
|
|
|
102
101
|
{/* Connection Details */}
|
|
103
102
|
{status?.state === EdgeStatus.ConnectionState.NOT_CONNECTED && (
|
|
104
|
-
<div className='flex items-center gap-2 text-sm text-
|
|
105
|
-
<Icon icon='ph--cloud-x--regular'
|
|
106
|
-
<span>{t('
|
|
103
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
104
|
+
<Icon icon='ph--cloud-x--regular' />
|
|
105
|
+
<span>{t('sync no connection label')}</span>
|
|
107
106
|
</div>
|
|
108
107
|
)}
|
|
109
108
|
|
|
110
109
|
{status?.state === EdgeStatus.ConnectionState.CONNECTED && (
|
|
111
110
|
<div className='space-y-2'>
|
|
112
111
|
{/* Latency */}
|
|
113
|
-
<div className='flex items-center justify-between'>
|
|
114
|
-
<div className='flex items-center gap-2 text-
|
|
115
|
-
<Icon icon='ph--timer--regular'
|
|
116
|
-
<span>{t('
|
|
112
|
+
<div className='flex items-center justify-between text-sm'>
|
|
113
|
+
<div className='flex items-center gap-2 text-description'>
|
|
114
|
+
<Icon icon='ph--timer--regular' />
|
|
115
|
+
<span>{t('sync latency label')}</span>
|
|
117
116
|
</div>
|
|
118
|
-
<
|
|
117
|
+
<UnitValue value={status.rtt} format={Unit.Millisecond} />
|
|
119
118
|
</div>
|
|
120
119
|
|
|
121
120
|
{/* Upload Speed */}
|
|
122
|
-
<div className='flex items-center justify-between'>
|
|
123
|
-
<div className='flex items-center gap-2 text-
|
|
124
|
-
<Icon icon='ph--arrow-up--regular'
|
|
125
|
-
<span>{t('
|
|
121
|
+
<div className='flex items-center justify-between text-sm'>
|
|
122
|
+
<div className='flex items-center gap-2 text-description'>
|
|
123
|
+
<Icon icon='ph--arrow-up--regular' />
|
|
124
|
+
<span>{t('sync upload label')}</span>
|
|
126
125
|
</div>
|
|
127
|
-
<
|
|
128
|
-
{Unit.Kilobyte(status.rateBytesUp, 0)}/s
|
|
129
|
-
</span>
|
|
126
|
+
<UnitValue value={status.rateBytesUp} format={Unit.Kilobyte} suffix='/s' />
|
|
130
127
|
</div>
|
|
131
128
|
|
|
132
129
|
{/* Download Speed */}
|
|
133
|
-
<div className='flex items-center justify-between'>
|
|
134
|
-
<div className='flex items-center gap-2 text-sm text-
|
|
135
|
-
<Icon icon='ph--arrow-down--regular'
|
|
136
|
-
<span>{t('
|
|
130
|
+
<div className='flex items-center justify-between text-sm'>
|
|
131
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
132
|
+
<Icon icon='ph--arrow-down--regular' />
|
|
133
|
+
<span>{t('sync download label')}</span>
|
|
137
134
|
</div>
|
|
138
|
-
<
|
|
139
|
-
{Unit.Kilobyte(status.rateBytesDown, 0)}/s
|
|
140
|
-
</span>
|
|
135
|
+
<UnitValue value={status.rateBytesDown} format={Unit.Kilobyte} suffix='/s' />
|
|
141
136
|
</div>
|
|
142
137
|
</div>
|
|
143
138
|
)}
|
|
144
139
|
</div>
|
|
145
140
|
);
|
|
146
141
|
};
|
|
142
|
+
|
|
143
|
+
// TODO(burdon): Factor out.
|
|
144
|
+
const UnitValue = ({ value: input, format, suffix }: { value: number; format: UnitFormat; suffix?: string }) => {
|
|
145
|
+
const { formattedValue, unit } = format(input);
|
|
146
|
+
return (
|
|
147
|
+
<span className='font-mono'>
|
|
148
|
+
{formattedValue}
|
|
149
|
+
<span className='mis-1 text-subdued'>
|
|
150
|
+
{unit.symbol}
|
|
151
|
+
{suffix}
|
|
152
|
+
</span>
|
|
153
|
+
</span>
|
|
154
|
+
);
|
|
155
|
+
};
|
|
@@ -2,34 +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
|
-
|
|
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);
|
|
33
64
|
},
|
|
34
65
|
[view, schema],
|
|
35
66
|
);
|
|
@@ -50,9 +81,12 @@ export const ViewEditor = ({ view }: ViewEditorProps) => {
|
|
|
50
81
|
registry={space.db.schemaRegistry}
|
|
51
82
|
schema={schema}
|
|
52
83
|
view={view}
|
|
53
|
-
|
|
54
|
-
onDelete={Type.isMutable(schema) ? handleDelete : undefined}
|
|
84
|
+
mode='query'
|
|
55
85
|
outerSpacing={false}
|
|
86
|
+
tags={tags}
|
|
87
|
+
types={types}
|
|
88
|
+
onQueryChanged={handleQueryChanged}
|
|
89
|
+
onDelete={Type.isMutable(schema) ? handleDelete : undefined}
|
|
56
90
|
/>
|
|
57
91
|
);
|
|
58
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,9 +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 './PopoverRenameSpace';
|
|
13
|
+
export * from './ObjectRenamePopover';
|
|
14
|
+
export * from './SpaceRenamePopover';
|
|
16
15
|
export * from './SchemaContainer';
|
|
17
16
|
export * from './SpacePresence';
|
|
18
17
|
export * from './SpacePluginSettings';
|
|
@@ -20,7 +19,7 @@ export * from './SpaceSettings';
|
|
|
20
19
|
export * from './SyncStatus';
|
|
21
20
|
export * from './ViewEditor';
|
|
22
21
|
|
|
23
|
-
export const
|
|
24
|
-
export const ObjectDetailsPanel = lazy(() => import('./ObjectDetailsPanel'));
|
|
22
|
+
export const CollectionArticle = lazy(() => import('./CollectionArticle'));
|
|
23
|
+
export const ObjectDetailsPanel: ComponentType<any> = lazy(() => import('./ObjectDetailsPanel'));
|
|
25
24
|
export const ObjectSettingsContainer = lazy(() => import('./ObjectSettings'));
|
|
26
|
-
export const
|
|
25
|
+
export const RecordArticle = lazy(() => import('./RecordArticle'));
|
|
@@ -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
|
+
});
|