@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.70d3990
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-ACGHWPDX.mjs +141 -0
- package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
- package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
- package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
- package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
- package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs +517 -0
- package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-G3VFEGTN.mjs} +19 -19
- package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
- package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
- package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
- package/dist/lib/browser/chunk-C6DAPIFF.mjs +20 -0
- package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-GJOZILGC.mjs} +262 -143
- package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-KCZ527AM.mjs} +667 -525
- package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-P25R3AOK.mjs} +36 -6
- package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-POFUXISV.mjs} +69 -62
- package/dist/lib/browser/chunk-POFUXISV.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/{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 +88 -135
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-RZEWNJ2K.mjs} +114 -101
- package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-JCRD74GI.mjs +30 -0
- package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-VOETEAG3.mjs} +101 -111
- package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
- package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
- package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
- package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-TRLI52I5.mjs} +5 -5
- package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-OHGCWZHQ.mjs} +28 -19
- package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
- package/dist/lib/browser/{state-QYZAB45H.mjs → state-C7N6EDDZ.mjs} +7 -7
- package/dist/lib/browser/state-C7N6EDDZ.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +10 -4
- 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-6OFTT3GG.mjs +142 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
- package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
- package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
- package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs +518 -0
- package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-2NLWWFUB.mjs} +19 -19
- package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-7EV4SN47.mjs} +35 -6
- package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-AX3UGL5D.mjs} +69 -62
- package/dist/lib/node-esm/chunk-AX3UGL5D.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-4AOMYKDE.mjs → chunk-I6FZP42D.mjs} +262 -143
- package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-JAMGJUFU.mjs} +667 -525
- package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +21 -0
- package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
- package/dist/lib/node-esm/chunk-X34VDVMY.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 +88 -135
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-4PHJWDXW.mjs} +114 -101
- package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-O5I5CDJ7.mjs} +13 -12
- package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-J3XDMU2D.mjs} +101 -111
- package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
- package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
- package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-MNQTKHL7.mjs} +5 -5
- package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-ZPU24DA2.mjs} +28 -19
- package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
- package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-45TXZQJ6.mjs} +7 -7
- package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +10 -4
- 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 -8
- 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/repair.d.ts +4 -0
- package/dist/types/src/capabilities/repair.d.ts.map +1 -0
- 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 +3 -3
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1588 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +18 -9
- 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 +1591 -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/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 +1424 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
- 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 +1591 -0
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
- package/dist/types/src/components/SchemaContainer.d.ts +2 -2
- 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} +6 -5
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
- package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1421 -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 +1421 -4
- 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 +1422 -5
- 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 -11
- 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 +1261 -67
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/form.d.ts +24 -0
- package/dist/types/src/types/form.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +94 -155
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +25 -36
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +72 -63
- package/src/SpacePlugin.ts +182 -222
- package/src/capabilities/app-graph-builder.ts +221 -237
- package/src/capabilities/app-graph-serializer.ts +12 -12
- package/src/capabilities/capabilities.ts +28 -17
- package/src/capabilities/identity-created.ts +3 -3
- package/src/capabilities/index.ts +1 -2
- package/src/capabilities/intent-resolver.ts +91 -79
- package/src/capabilities/react-root.tsx +6 -4
- package/src/capabilities/react-surface.tsx +108 -149
- package/src/capabilities/repair.ts +57 -0
- package/src/capabilities/spaces-ready.ts +23 -11
- package/src/capabilities/state.ts +5 -4
- 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 +17 -16
- package/src/components/CreateDialog/CreateObjectDialog.tsx +74 -46
- package/src/components/CreateDialog/CreateObjectPanel.tsx +51 -33
- 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} +22 -21
- 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} +10 -16
- package/src/components/ObjectRenamePopover/index.ts +5 -0
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +7 -7
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
- package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
- 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 +26 -29
- 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 +68 -28
- package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
- package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
- package/src/components/SyncStatus/SyncStatus.tsx +109 -12
- package/src/components/ViewEditor.tsx +57 -23
- package/src/components/index.ts +7 -7
- package/src/events.ts +7 -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/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 +27 -0
- package/src/index.ts +1 -0
- package/src/meta.ts +6 -3
- package/src/translations.ts +68 -58
- package/src/types/form.ts +75 -0
- package/src/types/index.ts +1 -0
- package/src/types/types.ts +49 -50
- package/src/util.tsx +268 -145
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
- package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs +0 -480
- package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
- package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
- package/dist/lib/browser/chunk-CEFHNVU7.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-FBJEXW54.mjs.map +0 -7
- package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
- package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
- package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
- package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
- package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
- package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
- package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
- package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
- package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
- package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
- package/dist/lib/browser/schema-defs-Z6FC4AHC.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-TOPG6IV4.mjs.map +0 -7
- package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
- package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs +0 -481
- package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
- package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
- package/dist/lib/node-esm/chunk-5T3ZH23B.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-JH6F4C3I.mjs +0 -339
- package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
- package/dist/lib/node-esm/schema-defs-WHJM7UZE.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-HIUKNDZK.mjs.map +0 -7
- package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
- package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
- package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
- 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 -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/MembersContainer.stories.d.ts +0 -8
- package/dist/types/src/components/MembersContainer.stories.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/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-defs.ts +0 -30
- 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/ObjectDetailsPanel.tsx +0 -77
- package/src/components/PersistenceStatus.tsx +0 -83
|
@@ -2,35 +2,35 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
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 {
|
|
10
|
+
import { Obj } from '@dxos/echo';
|
|
11
11
|
import { PublicKey, useClient } from '@dxos/react-client';
|
|
12
|
-
import {
|
|
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,
|
|
16
16
|
type AvatarContentProps,
|
|
17
|
+
type DxAvatar,
|
|
18
|
+
List,
|
|
19
|
+
ListItem,
|
|
20
|
+
Popover,
|
|
17
21
|
type Size,
|
|
18
22
|
type ThemedClassName,
|
|
19
23
|
Tooltip,
|
|
20
|
-
Popover,
|
|
21
|
-
useTranslation,
|
|
22
|
-
List,
|
|
23
|
-
ListItem,
|
|
24
24
|
useDefaultValue,
|
|
25
|
-
|
|
25
|
+
useTranslation,
|
|
26
26
|
} from '@dxos/react-ui';
|
|
27
|
-
import { AttentionGlyph, useAttended, useAttention
|
|
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 {
|
|
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: Obj.Any;
|
|
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))
|
|
@@ -254,7 +259,7 @@ export type SmallPresenceProps = {
|
|
|
254
259
|
} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
|
|
255
260
|
|
|
256
261
|
export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
|
|
257
|
-
const { t } = useTranslation(
|
|
262
|
+
const { t } = useTranslation(meta.id);
|
|
258
263
|
|
|
259
264
|
return (
|
|
260
265
|
<Tooltip.Trigger asChild content={t('presence label', { count })} side='bottom'>
|
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useRef, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
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 {
|
|
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
|
-
const { t } = useTranslation(
|
|
16
|
+
export const SpaceRenamePopover = ({ space }: { space: Space }) => {
|
|
17
|
+
const { t } = useTranslation(meta.id);
|
|
17
18
|
const doneButton = useRef<HTMLButtonElement>(null);
|
|
18
19
|
const [name, setName] = useState(space.properties.name ?? '');
|
|
19
20
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
@@ -2,37 +2,45 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React from 'react';
|
|
9
7
|
|
|
8
|
+
import { IntentPlugin } from '@dxos/app-framework';
|
|
9
|
+
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
10
|
import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
|
|
11
|
-
import { withTheme } from '@dxos/
|
|
11
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
12
|
|
|
13
|
-
import { SpaceSettingsContainer, type SpaceSettingsContainerProps } from './SpaceSettingsContainer';
|
|
14
13
|
import { translations } from '../../translations';
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
import { SpaceSettingsContainer, type SpaceSettingsContainerProps } from './SpaceSettingsContainer';
|
|
16
|
+
|
|
17
|
+
const Story = (props: Partial<SpaceSettingsContainerProps>) => {
|
|
17
18
|
const { space } = useClientProvider();
|
|
18
19
|
return (
|
|
19
20
|
<div role='none' className='p-2 border border-primary-500 rounded'>
|
|
20
|
-
<SpaceSettingsContainer {...
|
|
21
|
+
<SpaceSettingsContainer {...props} space={space!} />
|
|
21
22
|
</div>
|
|
22
23
|
);
|
|
23
24
|
};
|
|
24
25
|
|
|
25
|
-
const meta
|
|
26
|
+
const meta = {
|
|
26
27
|
title: 'plugins/plugin-space/SpaceSettingsContainer',
|
|
27
28
|
component: SpaceSettingsContainer,
|
|
28
29
|
render: Story,
|
|
29
|
-
decorators: [
|
|
30
|
+
decorators: [
|
|
31
|
+
withTheme,
|
|
32
|
+
withClientProvider({ createIdentity: true, createSpace: true }),
|
|
33
|
+
// TODO(wittjosiah): Try to write story which does not depend on plugin manager.
|
|
34
|
+
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
35
|
+
],
|
|
30
36
|
parameters: {
|
|
31
37
|
translations,
|
|
32
38
|
layout: 'centered',
|
|
33
39
|
},
|
|
34
|
-
}
|
|
40
|
+
} satisfies Meta<typeof SpaceSettingsContainer>;
|
|
35
41
|
|
|
36
42
|
export default meta;
|
|
37
43
|
|
|
44
|
+
type Story = StoryObj<typeof meta>;
|
|
45
|
+
|
|
38
46
|
export const Default: StoryObj<typeof SpaceSettingsContainer> = {};
|
|
@@ -2,31 +2,38 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Function from 'effect/Function';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
6
7
|
import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
|
|
7
8
|
|
|
8
|
-
import { chain, createIntent
|
|
9
|
+
import { LayoutAction, chain, createIntent } from '@dxos/app-framework';
|
|
10
|
+
import { useCapabilities, useIntentDispatcher } from '@dxos/app-framework/react';
|
|
9
11
|
import { log } from '@dxos/log';
|
|
10
12
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
11
13
|
import { useClient } from '@dxos/react-client';
|
|
12
|
-
import {
|
|
13
|
-
import { Button, Input, useMulticastObservable, useTranslation } from '@dxos/react-ui';
|
|
14
|
+
import { type Space, SpaceState } from '@dxos/react-client/echo';
|
|
15
|
+
import { Button, Input, useFileDownload, useMulticastObservable, useTranslation } from '@dxos/react-ui';
|
|
14
16
|
import {
|
|
15
|
-
Form,
|
|
16
|
-
type InputComponent,
|
|
17
17
|
ControlItem,
|
|
18
18
|
ControlItemInput,
|
|
19
|
-
ControlSection,
|
|
20
19
|
ControlPage,
|
|
20
|
+
ControlSection,
|
|
21
|
+
Form,
|
|
22
|
+
type InputComponent,
|
|
21
23
|
} from '@dxos/react-ui-form';
|
|
22
24
|
import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
23
25
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
24
26
|
|
|
25
|
-
import {
|
|
27
|
+
import { SpaceCapabilities } from '../../capabilities';
|
|
28
|
+
import { meta } from '../../meta';
|
|
26
29
|
import { SpaceAction, SpaceForm } from '../../types';
|
|
27
30
|
|
|
28
31
|
const FormSchema = SpaceForm.pipe(
|
|
29
|
-
Schema.extend(
|
|
32
|
+
Schema.extend(
|
|
33
|
+
Schema.Struct({
|
|
34
|
+
archived: Schema.Boolean.annotations({ title: 'Archive Space' }),
|
|
35
|
+
}),
|
|
36
|
+
),
|
|
30
37
|
);
|
|
31
38
|
|
|
32
39
|
export type SpaceSettingsContainerProps = {
|
|
@@ -35,7 +42,7 @@ export type SpaceSettingsContainerProps = {
|
|
|
35
42
|
|
|
36
43
|
// TODO(wittjosiah): Handle space migrations here?
|
|
37
44
|
export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) => {
|
|
38
|
-
const { t } = useTranslation(
|
|
45
|
+
const { t } = useTranslation(meta.id);
|
|
39
46
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
40
47
|
const client = useClient();
|
|
41
48
|
const archived = useMulticastObservable(space.state) === SpaceState.SPACE_INACTIVE;
|
|
@@ -69,9 +76,12 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
69
76
|
}
|
|
70
77
|
if (properties.archived && !archived) {
|
|
71
78
|
void dispatch(
|
|
72
|
-
pipe(
|
|
79
|
+
Function.pipe(
|
|
73
80
|
createIntent(SpaceAction.Close, { space }),
|
|
74
|
-
chain(LayoutAction.SwitchWorkspace, {
|
|
81
|
+
chain(LayoutAction.SwitchWorkspace, {
|
|
82
|
+
part: 'workspace',
|
|
83
|
+
subject: client.spaces.default.id,
|
|
84
|
+
}),
|
|
75
85
|
),
|
|
76
86
|
);
|
|
77
87
|
} else if (!properties.archived && archived) {
|
|
@@ -111,31 +121,25 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
111
121
|
);
|
|
112
122
|
},
|
|
113
123
|
icon: ({ type, label, getValue, onValueChange }) => {
|
|
114
|
-
const handleChange = useCallback((
|
|
115
|
-
const
|
|
124
|
+
const handleChange = useCallback((icon: string) => onValueChange(type, icon), [onValueChange, type]);
|
|
125
|
+
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
116
126
|
return (
|
|
117
127
|
<ControlItem title={label} description={t('icon description')}>
|
|
118
128
|
<IconPicker
|
|
119
129
|
value={getValue()}
|
|
120
130
|
onChange={handleChange}
|
|
121
|
-
onReset={
|
|
131
|
+
onReset={handleReset}
|
|
122
132
|
classNames='justify-self-end'
|
|
123
|
-
iconSize={5}
|
|
124
133
|
/>
|
|
125
134
|
</ControlItem>
|
|
126
135
|
);
|
|
127
136
|
},
|
|
128
137
|
hue: ({ type, label, getValue, onValueChange }) => {
|
|
129
138
|
const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);
|
|
130
|
-
const
|
|
139
|
+
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
131
140
|
return (
|
|
132
141
|
<ControlItem title={label} description={t('hue description')}>
|
|
133
|
-
<HuePicker
|
|
134
|
-
value={getValue()}
|
|
135
|
-
onChange={handleChange}
|
|
136
|
-
onReset={handleHueReset}
|
|
137
|
-
classNames='[--hue-preview-size:1.25rem] justify-self-end'
|
|
138
|
-
/>
|
|
142
|
+
<HuePicker value={getValue()} onChange={handleChange} onReset={handleReset} classNames='justify-self-end' />
|
|
139
143
|
</ControlItem>
|
|
140
144
|
);
|
|
141
145
|
},
|
|
@@ -151,7 +155,11 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
151
155
|
const handleChange = useCallback(() => onValueChange(type, !getValue()), [onValueChange, type, getValue]);
|
|
152
156
|
return (
|
|
153
157
|
<ControlItemInput title={label} description={t('archive space description')}>
|
|
154
|
-
<Button
|
|
158
|
+
<Button
|
|
159
|
+
disabled={space === client.spaces.default}
|
|
160
|
+
variant={getValue() ? 'default' : 'destructive'}
|
|
161
|
+
onClick={handleChange}
|
|
162
|
+
>
|
|
155
163
|
{getValue() ? t('unarchive space label') : t('archive space label')}
|
|
156
164
|
</Button>
|
|
157
165
|
</ControlItemInput>
|
|
@@ -161,12 +169,25 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
161
169
|
[t, space],
|
|
162
170
|
);
|
|
163
171
|
|
|
172
|
+
const download = useFileDownload();
|
|
173
|
+
const handleBackup = useCallback(async () => {
|
|
174
|
+
const archive = await space.internal.export();
|
|
175
|
+
download(new Blob([archive.contents as Uint8Array<ArrayBuffer>]), archive.filename);
|
|
176
|
+
}, [space, download]);
|
|
177
|
+
|
|
178
|
+
const repairs = useCapabilities(SpaceCapabilities.Repair);
|
|
179
|
+
const handleRepair = useCallback(async () => {
|
|
180
|
+
await Promise.all(repairs.map((repair) => repair({ space, isDefault: client.spaces.default === space })));
|
|
181
|
+
}, [client, space, repairs]);
|
|
182
|
+
|
|
164
183
|
return (
|
|
165
|
-
<StackItem.Content
|
|
184
|
+
<StackItem.Content scrollable>
|
|
166
185
|
<ControlPage>
|
|
167
186
|
<ControlSection
|
|
168
|
-
title={t('space properties settings verbose label', { ns:
|
|
169
|
-
description={t('space properties settings description', {
|
|
187
|
+
title={t('space properties settings verbose label', { ns: meta.id })}
|
|
188
|
+
description={t('space properties settings description', {
|
|
189
|
+
ns: meta.id,
|
|
190
|
+
})}
|
|
170
191
|
>
|
|
171
192
|
<Form
|
|
172
193
|
schema={FormSchema}
|
|
@@ -175,9 +196,28 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
175
196
|
onSave={handleSave}
|
|
176
197
|
Custom={customElements}
|
|
177
198
|
outerSpacing={false}
|
|
178
|
-
classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]
|
|
199
|
+
classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'
|
|
179
200
|
/>
|
|
180
201
|
</ControlSection>
|
|
202
|
+
<ControlSection
|
|
203
|
+
title={t('space controls title', { ns: meta.id })}
|
|
204
|
+
description={t('space controls description', { ns: meta.id })}
|
|
205
|
+
>
|
|
206
|
+
<div role='none' className='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
|
|
207
|
+
<ControlItemInput
|
|
208
|
+
title={t('backup space title', { ns: meta.id })}
|
|
209
|
+
description={t('backup space description', { ns: meta.id })}
|
|
210
|
+
>
|
|
211
|
+
<Button onClick={handleBackup}>{t('download backup label')}</Button>
|
|
212
|
+
</ControlItemInput>
|
|
213
|
+
<ControlItemInput
|
|
214
|
+
title={t('repair space title', { ns: meta.id })}
|
|
215
|
+
description={t('repair space description', { ns: meta.id })}
|
|
216
|
+
>
|
|
217
|
+
<Button onClick={handleRepair}>{t('repair space label')}</Button>
|
|
218
|
+
</ControlItemInput>
|
|
219
|
+
</div>
|
|
220
|
+
</ControlSection>
|
|
181
221
|
</ControlPage>
|
|
182
222
|
</StackItem.Content>
|
|
183
223
|
);
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
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';
|
|
@@ -14,14 +14,14 @@ import { Tooltip, useTranslation } from '@dxos/react-ui';
|
|
|
14
14
|
import { AttentionGlyph, useAttended, useAttention } from '@dxos/react-ui-attention';
|
|
15
15
|
|
|
16
16
|
import { usePath } from '../../hooks';
|
|
17
|
-
import {
|
|
17
|
+
import { meta } from '../../meta';
|
|
18
18
|
|
|
19
|
-
const useEdgeStatus = (): EdgeStatus => {
|
|
20
|
-
const [status, setStatus] = useState(EdgeStatus.NOT_CONNECTED);
|
|
19
|
+
const useEdgeStatus = (): EdgeStatus.ConnectionState => {
|
|
20
|
+
const [status, setStatus] = useState(EdgeStatus.ConnectionState.NOT_CONNECTED);
|
|
21
21
|
const client = useClient();
|
|
22
22
|
useEffect(() => {
|
|
23
23
|
client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {
|
|
24
|
-
setStatus(status);
|
|
24
|
+
setStatus(status.state);
|
|
25
25
|
});
|
|
26
26
|
}, [client]);
|
|
27
27
|
|
|
@@ -29,7 +29,7 @@ const useEdgeStatus = (): EdgeStatus => {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean }) => {
|
|
32
|
-
const { t } = useTranslation(
|
|
32
|
+
const { t } = useTranslation(meta.id);
|
|
33
33
|
const id = space.id;
|
|
34
34
|
const { hasAttention, isAncestor, isRelated } = useAttention(id);
|
|
35
35
|
const isAttended = hasAttention || isAncestor || isRelated;
|
|
@@ -43,7 +43,7 @@ export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean
|
|
|
43
43
|
const path = usePath(graph, startOfAttention);
|
|
44
44
|
const containsAttended = !open && !isAttended && id && Option.isSome(path) ? path.value.includes(id) : false;
|
|
45
45
|
|
|
46
|
-
const connectedToEdge = useEdgeStatus() === EdgeStatus.CONNECTED;
|
|
46
|
+
const connectedToEdge = useEdgeStatus() === EdgeStatus.ConnectionState.CONNECTED;
|
|
47
47
|
// TODO(wittjosiah): This is not reactive.
|
|
48
48
|
const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;
|
|
49
49
|
const syncState = useSpaceSyncState(space);
|
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
|
|
9
|
-
import {
|
|
7
|
+
import { withClientProvider } from '@dxos/react-client/testing';
|
|
8
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
10
9
|
|
|
11
|
-
import { SyncStatusIndicator } from './SyncStatus';
|
|
12
10
|
import { translations } from '../../translations';
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
import { SyncStatusIndicator } from './SyncStatus';
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
15
|
title: 'plugins/plugin-space/SyncStatusIndicator',
|
|
16
16
|
component: SyncStatusIndicator,
|
|
17
|
-
decorators: [withTheme],
|
|
17
|
+
decorators: [withTheme, withClientProvider({ createIdentity: true })],
|
|
18
18
|
parameters: {
|
|
19
|
-
translations,
|
|
20
19
|
layout: 'centered',
|
|
20
|
+
translations,
|
|
21
21
|
},
|
|
22
|
-
}
|
|
22
|
+
} satisfies Meta<typeof SyncStatusIndicator>;
|
|
23
23
|
|
|
24
24
|
export default meta;
|
|
25
25
|
|
|
26
|
-
type Story = StoryObj<typeof
|
|
26
|
+
type Story = StoryObj<typeof meta>;
|
|
27
27
|
|
|
28
28
|
export const Default: Story = {
|
|
29
29
|
args: {
|
|
@@ -5,13 +5,19 @@
|
|
|
5
5
|
import React, { useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { StatusBar } from '@dxos/plugin-status-bar';
|
|
8
|
+
import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
|
|
9
|
+
import { type QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
8
10
|
import { useClient } from '@dxos/react-client';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
+
import { useStream } from '@dxos/react-client/devtools';
|
|
12
|
+
import { type SpaceSyncStateMap, getSyncSummary, useSyncState } from '@dxos/react-client/echo';
|
|
13
|
+
import { Icon, Popover, useTranslation } from '@dxos/react-ui';
|
|
14
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
15
|
+
import { Unit, type UnitFormat } from '@dxos/util';
|
|
16
|
+
|
|
17
|
+
import { meta } from '../../meta';
|
|
11
18
|
|
|
12
19
|
import { createClientSaveTracker } from './save-tracker';
|
|
13
20
|
import { getIcon, getStatus } from './status';
|
|
14
|
-
import { SPACE_PLUGIN } from '../../meta';
|
|
15
21
|
|
|
16
22
|
const SYNC_STALLED_TIMEOUT = 5_000;
|
|
17
23
|
|
|
@@ -19,18 +25,13 @@ export const SyncStatus = () => {
|
|
|
19
25
|
const client = useClient();
|
|
20
26
|
const state = useSyncState();
|
|
21
27
|
const [saved, setSaved] = useState(true);
|
|
22
|
-
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
return createClientSaveTracker(client, (state) => {
|
|
25
|
-
setSaved(state === 'saved');
|
|
26
|
-
});
|
|
27
|
-
}, []);
|
|
28
|
+
useEffect(() => createClientSaveTracker(client, (state) => setSaved(state === 'saved')), []);
|
|
28
29
|
|
|
29
30
|
return <SyncStatusIndicator state={state} saved={saved} />;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: boolean }) => {
|
|
33
|
-
const { t } = useTranslation(
|
|
34
|
+
const { t } = useTranslation(meta.id);
|
|
34
35
|
const summary = getSyncSummary(state);
|
|
35
36
|
const offline = Object.values(state).length === 0;
|
|
36
37
|
const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
|
|
@@ -52,7 +53,103 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
|
|
|
52
53
|
}, [offline, needsToUpload, needsToDownload]);
|
|
53
54
|
|
|
54
55
|
const title = t(`${status} label`);
|
|
55
|
-
const icon = <Icon icon={getIcon(status)}
|
|
56
|
+
const icon = <Icon icon={getIcon(status)} classNames={classNames} />;
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<Popover.Root>
|
|
60
|
+
<Popover.Trigger asChild>
|
|
61
|
+
<StatusBar.Item title={title}>{icon}</StatusBar.Item>
|
|
62
|
+
</Popover.Trigger>
|
|
63
|
+
<Popover.Portal>
|
|
64
|
+
<Popover.Content>
|
|
65
|
+
<EdgeConnectionPopover />
|
|
66
|
+
<Popover.Arrow />
|
|
67
|
+
</Popover.Content>
|
|
68
|
+
</Popover.Portal>
|
|
69
|
+
</Popover.Root>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const useEdgeStatus = (): EdgeStatus | undefined => {
|
|
74
|
+
const client = useClient();
|
|
75
|
+
const { status } = useStream(
|
|
76
|
+
() => client.services.services.EdgeAgentService!.queryEdgeStatus(),
|
|
77
|
+
{} as QueryEdgeStatusResponse,
|
|
78
|
+
);
|
|
79
|
+
return status;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const EdgeConnectionPopover = () => {
|
|
83
|
+
const status = useEdgeStatus();
|
|
84
|
+
const { t } = useTranslation(meta.id);
|
|
85
|
+
|
|
86
|
+
const isConnected = status?.state === EdgeStatus.ConnectionState.CONNECTED;
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<div className='min-is-[240px] p-2'>
|
|
90
|
+
{/* Connection Status Header */}
|
|
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')}
|
|
98
|
+
</span>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
{/* Connection Details */}
|
|
102
|
+
{status?.state === EdgeStatus.ConnectionState.NOT_CONNECTED && (
|
|
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>
|
|
106
|
+
</div>
|
|
107
|
+
)}
|
|
108
|
+
|
|
109
|
+
{status?.state === EdgeStatus.ConnectionState.CONNECTED && (
|
|
110
|
+
<div className='space-y-2'>
|
|
111
|
+
{/* Latency */}
|
|
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>
|
|
116
|
+
</div>
|
|
117
|
+
<UnitValue value={status.rtt} format={Unit.Millisecond} />
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
{/* Upload Speed */}
|
|
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>
|
|
125
|
+
</div>
|
|
126
|
+
<UnitValue value={status.rateBytesUp} format={Unit.Kilobyte} suffix='/s' />
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{/* Download Speed */}
|
|
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>
|
|
134
|
+
</div>
|
|
135
|
+
<UnitValue value={status.rateBytesDown} format={Unit.Kilobyte} suffix='/s' />
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
)}
|
|
139
|
+
</div>
|
|
140
|
+
);
|
|
141
|
+
};
|
|
56
142
|
|
|
57
|
-
|
|
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
|
+
);
|
|
58
155
|
};
|