@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
|
@@ -1,40 +1,42 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useInputSurfaceLookup,
|
|
3
|
-
usePath
|
|
4
|
-
|
|
3
|
+
usePath,
|
|
4
|
+
useTypeOptions
|
|
5
|
+
} from "./chunk-P25R3AOK.mjs";
|
|
5
6
|
import {
|
|
6
7
|
SpaceCapabilities
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-C6DAPIFF.mjs";
|
|
8
9
|
import {
|
|
9
10
|
COMPOSER_SPACE_LOCK,
|
|
10
11
|
getSpaceDisplayName
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GJOZILGC.mjs";
|
|
12
13
|
import {
|
|
13
14
|
SpaceAction,
|
|
14
15
|
SpaceForm
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-6A3NWBB6.mjs";
|
|
16
17
|
import {
|
|
17
|
-
SPACE_PLUGIN,
|
|
18
18
|
meta
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-VZBIIYFM.mjs";
|
|
20
20
|
|
|
21
21
|
// src/components/AwaitingObject.tsx
|
|
22
22
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
23
23
|
import React, { useCallback, useEffect, useState } from "react";
|
|
24
|
-
import {
|
|
24
|
+
import { LayoutAction, createIntent } from "@dxos/app-framework";
|
|
25
|
+
import { useIntentDispatcher, useLayout } from "@dxos/app-framework/react";
|
|
26
|
+
import { Obj } from "@dxos/echo";
|
|
25
27
|
import { useClient } from "@dxos/react-client";
|
|
26
|
-
import { Filter,
|
|
28
|
+
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
27
29
|
import { Button, Icon, Toast, useTranslation } from "@dxos/react-ui";
|
|
28
|
-
var WAIT_FOR_OBJECT_TIMEOUT =
|
|
29
|
-
var TOAST_TIMEOUT =
|
|
30
|
+
var WAIT_FOR_OBJECT_TIMEOUT = 3 * 60 * 1e3;
|
|
31
|
+
var TOAST_TIMEOUT = 4 * 60 * 1e3;
|
|
30
32
|
var AwaitingObject = ({ id }) => {
|
|
31
33
|
var _effect = _useSignals();
|
|
32
34
|
try {
|
|
35
|
+
const { t } = useTranslation(meta.id);
|
|
36
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
33
37
|
const [open, setOpen] = useState(true);
|
|
34
38
|
const [waiting, setWaiting] = useState(true);
|
|
35
39
|
const [found, setFound] = useState(false);
|
|
36
|
-
const { t } = useTranslation(SPACE_PLUGIN);
|
|
37
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
38
40
|
const layout = useLayout();
|
|
39
41
|
const client = useClient();
|
|
40
42
|
const objects = useQuery(client.spaces, Filter.everything());
|
|
@@ -42,15 +44,13 @@ var AwaitingObject = ({ id }) => {
|
|
|
42
44
|
if (!id) {
|
|
43
45
|
return;
|
|
44
46
|
}
|
|
45
|
-
const timeout = setTimeout(() =>
|
|
46
|
-
|
|
47
|
-
}, WAIT_FOR_OBJECT_TIMEOUT);
|
|
48
|
-
() => clearTimeout(timeout);
|
|
47
|
+
const timeout = setTimeout(() => setWaiting(false), WAIT_FOR_OBJECT_TIMEOUT);
|
|
48
|
+
return () => clearTimeout(timeout);
|
|
49
49
|
}, [
|
|
50
50
|
id
|
|
51
51
|
]);
|
|
52
52
|
useEffect(() => {
|
|
53
|
-
if (objects.findIndex((object) =>
|
|
53
|
+
if (objects.findIndex((object) => Obj.getDXN(object).toString() === id) > -1) {
|
|
54
54
|
setFound(true);
|
|
55
55
|
if (layout.active.includes(id)) {
|
|
56
56
|
setOpen(false);
|
|
@@ -121,34 +121,44 @@ var AwaitingObject = ({ id }) => {
|
|
|
121
121
|
|
|
122
122
|
// src/components/CreateDialog/CreateObjectDialog.tsx
|
|
123
123
|
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
124
|
-
import
|
|
125
|
-
import
|
|
126
|
-
import
|
|
127
|
-
import {
|
|
124
|
+
import * as Effect from "effect/Effect";
|
|
125
|
+
import * as Function2 from "effect/Function";
|
|
126
|
+
import * as Option2 from "effect/Option";
|
|
127
|
+
import React3, { useCallback as useCallback3, useMemo, useRef, useState as useState2 } from "react";
|
|
128
|
+
import { Capabilities, LayoutAction as LayoutAction2, chain, createIntent as createIntent2 } from "@dxos/app-framework";
|
|
129
|
+
import { useIntentDispatcher as useIntentDispatcher2, usePluginManager } from "@dxos/app-framework/react";
|
|
130
|
+
import { Obj as Obj2, Type } from "@dxos/echo";
|
|
131
|
+
import { EntityKind, SystemTypeAnnotation, getTypeAnnotation as getTypeAnnotation2 } from "@dxos/echo/internal";
|
|
128
132
|
import { invariant } from "@dxos/invariant";
|
|
129
133
|
import { useClient as useClient2 } from "@dxos/react-client";
|
|
130
|
-
import { getSpace, isLiveObject, isSpace,
|
|
131
|
-
import {
|
|
134
|
+
import { getSpace, isLiveObject, isSpace, useSpaces } from "@dxos/react-client/echo";
|
|
135
|
+
import { Dialog, IconButton, useTranslation as useTranslation3 } from "@dxos/react-ui";
|
|
132
136
|
import { cardDialogContent, cardDialogHeader } from "@dxos/react-ui-stack";
|
|
133
|
-
import { DataType } from "@dxos/schema";
|
|
134
|
-
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
135
137
|
|
|
136
138
|
// src/components/CreateDialog/CreateObjectPanel.tsx
|
|
137
139
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
140
|
+
import * as Option from "effect/Option";
|
|
138
141
|
import React2, { useCallback as useCallback2 } from "react";
|
|
139
|
-
import {
|
|
140
|
-
import {
|
|
141
|
-
import { Icon as Icon2, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
142
|
+
import { getTypeAnnotation } from "@dxos/echo/internal";
|
|
143
|
+
import { Icon as Icon2, toLocalizedString, useDefaultValue, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
142
144
|
import { Form } from "@dxos/react-ui-form";
|
|
143
145
|
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
144
146
|
import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from "@dxos/react-ui-stack";
|
|
147
|
+
import { ViewAnnotation } from "@dxos/schema";
|
|
145
148
|
import { isNonNullable } from "@dxos/util";
|
|
146
|
-
var CreateObjectPanel = ({
|
|
149
|
+
var CreateObjectPanel = ({ schemas, spaces, typename, target, views, initialFormValues: _initialFormValues, defaultSpaceId, resolve, onTargetChange, onTypenameChange, onCreateObject }) => {
|
|
147
150
|
var _effect = _useSignals2();
|
|
148
151
|
try {
|
|
149
|
-
const { t } = useTranslation2(
|
|
150
|
-
const
|
|
151
|
-
const
|
|
152
|
+
const { t } = useTranslation2(meta.id);
|
|
153
|
+
const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
|
|
154
|
+
const metadata = typename && resolve?.(typename);
|
|
155
|
+
const options = schemas.filter((schema) => {
|
|
156
|
+
if (views == null) {
|
|
157
|
+
return true;
|
|
158
|
+
} else {
|
|
159
|
+
return views === ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false));
|
|
160
|
+
}
|
|
161
|
+
}).map((schema) => getTypeAnnotation(schema)).filter(isNonNullable).sort((a, b) => {
|
|
152
162
|
const nameA = t("typename label", {
|
|
153
163
|
ns: a.typename,
|
|
154
164
|
defaultValue: a.typename
|
|
@@ -160,34 +170,34 @@ var CreateObjectPanel = ({ forms, spaces, typename, target, name: initialName, d
|
|
|
160
170
|
return nameA.localeCompare(nameB);
|
|
161
171
|
});
|
|
162
172
|
const handleCreateObject = useCallback2(async (props) => {
|
|
163
|
-
if (!
|
|
173
|
+
if (!metadata) {
|
|
164
174
|
return;
|
|
165
175
|
}
|
|
166
176
|
await onCreateObject?.({
|
|
167
|
-
|
|
177
|
+
metadata,
|
|
168
178
|
data: props
|
|
169
179
|
});
|
|
170
180
|
}, [
|
|
171
181
|
onCreateObject,
|
|
172
|
-
|
|
182
|
+
metadata
|
|
173
183
|
]);
|
|
174
184
|
const handleSetTypename = useCallback2(async (typename2) => {
|
|
175
|
-
const
|
|
176
|
-
if (
|
|
185
|
+
const metadata2 = resolve?.(typename2);
|
|
186
|
+
if (metadata2 && !metadata2.inputSchema) {
|
|
177
187
|
await onCreateObject?.({
|
|
178
|
-
|
|
188
|
+
metadata: metadata2
|
|
179
189
|
});
|
|
180
190
|
} else {
|
|
181
191
|
onTypenameChange?.(typename2);
|
|
182
192
|
}
|
|
183
193
|
}, [
|
|
184
|
-
|
|
194
|
+
resolve,
|
|
185
195
|
onCreateObject
|
|
186
196
|
]);
|
|
187
197
|
const inputSurfaceLookup = useInputSurfaceLookup({
|
|
188
198
|
target
|
|
189
199
|
});
|
|
190
|
-
return !
|
|
200
|
+
return !metadata ? /* @__PURE__ */ React2.createElement(SelectSchema, {
|
|
191
201
|
options,
|
|
192
202
|
resolve,
|
|
193
203
|
onChange: handleSetTypename
|
|
@@ -195,15 +205,13 @@ var CreateObjectPanel = ({ forms, spaces, typename, target, name: initialName, d
|
|
|
195
205
|
spaces,
|
|
196
206
|
defaultSpaceId,
|
|
197
207
|
onChange: onTargetChange
|
|
198
|
-
}) :
|
|
208
|
+
}) : metadata.inputSchema ? /* @__PURE__ */ React2.createElement("div", {
|
|
199
209
|
role: "none",
|
|
200
210
|
className: cardDialogOverflow
|
|
201
211
|
}, /* @__PURE__ */ React2.createElement(Form, {
|
|
202
212
|
autoFocus: true,
|
|
203
|
-
values:
|
|
204
|
-
|
|
205
|
-
},
|
|
206
|
-
schema: form.formSchema,
|
|
213
|
+
values: initialFormValues,
|
|
214
|
+
schema: metadata.inputSchema,
|
|
207
215
|
testId: "create-object-form",
|
|
208
216
|
onSave: handleCreateObject,
|
|
209
217
|
lookupComponent: inputSurfaceLookup,
|
|
@@ -216,7 +224,7 @@ var CreateObjectPanel = ({ forms, spaces, typename, target, name: initialName, d
|
|
|
216
224
|
var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
|
|
217
225
|
var _effect = _useSignals2();
|
|
218
226
|
try {
|
|
219
|
-
const { t } = useTranslation2(
|
|
227
|
+
const { t } = useTranslation2(meta.id);
|
|
220
228
|
return /* @__PURE__ */ React2.createElement(SearchList.Root, {
|
|
221
229
|
label: t("space input label"),
|
|
222
230
|
classNames: cardDialogSearchListRoot
|
|
@@ -256,7 +264,7 @@ var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
|
|
|
256
264
|
var SelectSchema = ({ options, resolve, onChange }) => {
|
|
257
265
|
var _effect = _useSignals2();
|
|
258
266
|
try {
|
|
259
|
-
const { t } = useTranslation2(
|
|
267
|
+
const { t } = useTranslation2(meta.id);
|
|
260
268
|
return /* @__PURE__ */ React2.createElement(SearchList.Root, {
|
|
261
269
|
label: t("schema input label"),
|
|
262
270
|
classNames: cardDialogSearchListRoot
|
|
@@ -277,7 +285,7 @@ var SelectSchema = ({ options, resolve, onChange }) => {
|
|
|
277
285
|
}, /* @__PURE__ */ React2.createElement("span", {
|
|
278
286
|
className: "flex gap-2 items-center grow truncate"
|
|
279
287
|
}, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
280
|
-
icon: resolve?.(option.typename)
|
|
288
|
+
icon: resolve?.(option.typename)?.icon ?? "ph--placeholder--regular",
|
|
281
289
|
size: 5
|
|
282
290
|
}), t("typename label", {
|
|
283
291
|
ns: option.typename,
|
|
@@ -288,42 +296,36 @@ var SelectSchema = ({ options, resolve, onChange }) => {
|
|
|
288
296
|
}
|
|
289
297
|
};
|
|
290
298
|
|
|
291
|
-
// src/capabilities/index.ts
|
|
292
|
-
import { lazy } from "@dxos/app-framework";
|
|
293
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-V3MP3CDK.mjs"));
|
|
294
|
-
var AppGraphSerializer = lazy(() => import("./app-graph-serializer-H6AW7KGS.mjs"));
|
|
295
|
-
var IdentityCreated = lazy(() => import("./identity-created-23XJJV2N.mjs"));
|
|
296
|
-
var IntentResolver = lazy(() => import("./intent-resolver-XHGD73WZ.mjs"));
|
|
297
|
-
var ReactRoot = lazy(() => import("./react-root-CMWOGJG5.mjs"));
|
|
298
|
-
var ReactSurface = lazy(() => import("./react-surface-YWZZQF7H.mjs"));
|
|
299
|
-
var SchemaDefs = lazy(() => import("./schema-defs-Z6FC4AHC.mjs"));
|
|
300
|
-
var SchemaTools = lazy(() => import("./schema-tools-BNP4JTD7.mjs"));
|
|
301
|
-
var SpaceSettings = lazy(() => import("./settings-4IMP5RYT.mjs"));
|
|
302
|
-
var SpaceState = lazy(() => import("./state-QYZAB45H.mjs"));
|
|
303
|
-
var SpacesReady = lazy(() => import("./spaces-ready-TOPG6IV4.mjs"));
|
|
304
|
-
|
|
305
299
|
// src/components/CreateDialog/CreateObjectDialog.tsx
|
|
306
300
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx";
|
|
307
|
-
var CREATE_OBJECT_DIALOG = `${
|
|
308
|
-
var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename,
|
|
301
|
+
var CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
|
|
302
|
+
var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, views, initialFormValues, onCreateObject, shouldNavigate: _shouldNavigate }) => {
|
|
309
303
|
var _effect = _useSignals3();
|
|
310
304
|
try {
|
|
311
|
-
const closeRef = useRef(null);
|
|
312
305
|
const manager = usePluginManager();
|
|
313
|
-
const { t } = useTranslation3(
|
|
314
|
-
const client = useClient2();
|
|
315
|
-
const spaces = useSpaces();
|
|
306
|
+
const { t } = useTranslation3(meta.id);
|
|
316
307
|
const { dispatch } = useIntentDispatcher2();
|
|
317
|
-
const forms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
318
308
|
const [target, setTarget] = useState2(initialTarget);
|
|
319
309
|
const [typename, setTypename] = useState2(initialTypename);
|
|
320
|
-
const
|
|
321
|
-
const
|
|
322
|
-
const
|
|
323
|
-
const resolve = useCallback3((typename2) =>
|
|
310
|
+
const client = useClient2();
|
|
311
|
+
const spaces = useSpaces();
|
|
312
|
+
const closeRef = useRef(null);
|
|
313
|
+
const resolve = useCallback3((typename2) => {
|
|
314
|
+
const metadata = manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename2)?.metadata;
|
|
315
|
+
return metadata?.createObjectIntent ? metadata : void 0;
|
|
316
|
+
}, [
|
|
324
317
|
manager
|
|
325
318
|
]);
|
|
326
|
-
const
|
|
319
|
+
const space = isSpace(target) ? target : getSpace(target);
|
|
320
|
+
const schemas = space?.db.schemaRegistry.query({
|
|
321
|
+
location: [
|
|
322
|
+
"runtime"
|
|
323
|
+
]
|
|
324
|
+
}).runSync();
|
|
325
|
+
const userSchemas = useMemo(() => schemas?.filter((schema) => getTypeAnnotation2(schema)?.kind !== EntityKind.Relation).filter((schema) => !!resolve(Type.getTypename(schema))).filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option2.getOrElse(() => false))) ?? [], [
|
|
326
|
+
schemas
|
|
327
|
+
]);
|
|
328
|
+
const handleCreateObject = useCallback3(({ metadata, data = {} }) => Effect.gen(function* () {
|
|
327
329
|
if (!target) {
|
|
328
330
|
return;
|
|
329
331
|
}
|
|
@@ -331,18 +333,18 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, na
|
|
|
331
333
|
const space2 = isSpace(target) ? target : getSpace(target);
|
|
332
334
|
invariant(space2, "Missing space", {
|
|
333
335
|
F: __dxlog_file,
|
|
334
|
-
L:
|
|
336
|
+
L: 87,
|
|
335
337
|
S: this,
|
|
336
338
|
A: [
|
|
337
339
|
"space",
|
|
338
340
|
"'Missing space'"
|
|
339
341
|
]
|
|
340
342
|
});
|
|
341
|
-
const { object } = yield* dispatch(
|
|
343
|
+
const { object } = yield* dispatch(metadata.createObjectIntent(data, {
|
|
342
344
|
space: space2
|
|
343
345
|
}));
|
|
344
|
-
if (isLiveObject(object) && !
|
|
345
|
-
const hidden =
|
|
346
|
+
if (isLiveObject(object) && !Obj2.instanceOf(Type.PersistentType, object)) {
|
|
347
|
+
const hidden = !metadata.addToCollectionOnCreate;
|
|
346
348
|
const addObjectIntent = createIntent2(SpaceAction.AddObject, {
|
|
347
349
|
target,
|
|
348
350
|
object,
|
|
@@ -350,7 +352,7 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, na
|
|
|
350
352
|
});
|
|
351
353
|
const shouldNavigate = _shouldNavigate ?? (() => true);
|
|
352
354
|
if (shouldNavigate(object)) {
|
|
353
|
-
yield* dispatch(pipe(addObjectIntent, chain(LayoutAction2.Open, {
|
|
355
|
+
yield* dispatch(Function2.pipe(addObjectIntent, chain(LayoutAction2.Open, {
|
|
354
356
|
part: "main"
|
|
355
357
|
})));
|
|
356
358
|
} else {
|
|
@@ -362,7 +364,6 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, na
|
|
|
362
364
|
dispatch,
|
|
363
365
|
target,
|
|
364
366
|
resolve,
|
|
365
|
-
hiddenTypenames,
|
|
366
367
|
_shouldNavigate
|
|
367
368
|
]);
|
|
368
369
|
return (
|
|
@@ -376,24 +377,26 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, na
|
|
|
376
377
|
}, /* @__PURE__ */ React3.createElement(Dialog.Title, null, t("create object dialog title", {
|
|
377
378
|
object: t("typename label", {
|
|
378
379
|
ns: typename,
|
|
379
|
-
defaultValue: "
|
|
380
|
+
defaultValue: views ? "View" : "Object"
|
|
380
381
|
})
|
|
381
382
|
})), /* @__PURE__ */ React3.createElement(Dialog.Close, {
|
|
382
383
|
asChild: true
|
|
383
|
-
}, /* @__PURE__ */ React3.createElement(
|
|
384
|
+
}, /* @__PURE__ */ React3.createElement(IconButton, {
|
|
384
385
|
ref: closeRef,
|
|
386
|
+
icon: "ph--x--regular",
|
|
387
|
+
size: 4,
|
|
388
|
+
label: "Close",
|
|
389
|
+
iconOnly: true,
|
|
385
390
|
density: "fine",
|
|
386
391
|
variant: "ghost",
|
|
387
392
|
autoFocus: true
|
|
388
|
-
}, /* @__PURE__ */ React3.createElement(
|
|
389
|
-
|
|
390
|
-
size: 4
|
|
391
|
-
})))), /* @__PURE__ */ React3.createElement(CreateObjectPanel, {
|
|
392
|
-
forms,
|
|
393
|
+
}))), /* @__PURE__ */ React3.createElement(CreateObjectPanel, {
|
|
394
|
+
schemas: userSchemas,
|
|
393
395
|
spaces,
|
|
394
396
|
target,
|
|
397
|
+
views,
|
|
395
398
|
typename,
|
|
396
|
-
|
|
399
|
+
initialFormValues,
|
|
397
400
|
defaultSpaceId: client.spaces.default.id,
|
|
398
401
|
resolve,
|
|
399
402
|
onTargetChange: setTarget,
|
|
@@ -408,13 +411,14 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, na
|
|
|
408
411
|
|
|
409
412
|
// src/components/CreateDialog/CreateSpaceDialog.tsx
|
|
410
413
|
import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
|
|
411
|
-
import
|
|
414
|
+
import * as Effect2 from "effect/Effect";
|
|
412
415
|
import React4, { useCallback as useCallback4, useRef as useRef2 } from "react";
|
|
413
|
-
import {
|
|
414
|
-
import {
|
|
416
|
+
import { LayoutAction as LayoutAction3, createIntent as createIntent3 } from "@dxos/app-framework";
|
|
417
|
+
import { useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework/react";
|
|
418
|
+
import { Dialog as Dialog2, IconButton as IconButton2, useTranslation as useTranslation4 } from "@dxos/react-ui";
|
|
415
419
|
import { Form as Form2 } from "@dxos/react-ui-form";
|
|
416
420
|
import { cardDialogContent as cardDialogContent2, cardDialogHeader as cardDialogHeader2 } from "@dxos/react-ui-stack";
|
|
417
|
-
var CREATE_SPACE_DIALOG = `${
|
|
421
|
+
var CREATE_SPACE_DIALOG = `${meta.id}/CreateSpaceDialog`;
|
|
418
422
|
var initialValues = {
|
|
419
423
|
edgeReplication: true
|
|
420
424
|
};
|
|
@@ -422,7 +426,7 @@ var CreateSpaceDialog = () => {
|
|
|
422
426
|
var _effect = _useSignals4();
|
|
423
427
|
try {
|
|
424
428
|
const closeRef = useRef2(null);
|
|
425
|
-
const { t } = useTranslation4(
|
|
429
|
+
const { t } = useTranslation4(meta.id);
|
|
426
430
|
const { dispatch } = useIntentDispatcher3();
|
|
427
431
|
const inputSurfaceLookup = useInputSurfaceLookup();
|
|
428
432
|
const handleCreateSpace = useCallback4(async (data) => {
|
|
@@ -453,15 +457,16 @@ var CreateSpaceDialog = () => {
|
|
|
453
457
|
className: cardDialogHeader2
|
|
454
458
|
}, /* @__PURE__ */ React4.createElement(Dialog2.Title, null, t("create space dialog title")), /* @__PURE__ */ React4.createElement(Dialog2.Close, {
|
|
455
459
|
asChild: true
|
|
456
|
-
}, /* @__PURE__ */ React4.createElement(
|
|
460
|
+
}, /* @__PURE__ */ React4.createElement(IconButton2, {
|
|
457
461
|
ref: closeRef,
|
|
462
|
+
icon: "ph--x--regular",
|
|
463
|
+
size: 4,
|
|
464
|
+
label: "Close",
|
|
465
|
+
iconOnly: true,
|
|
458
466
|
density: "fine",
|
|
459
467
|
variant: "ghost",
|
|
460
468
|
autoFocus: true
|
|
461
|
-
}, /* @__PURE__ */ React4.createElement(
|
|
462
|
-
icon: "ph--x--regular",
|
|
463
|
-
size: 4
|
|
464
|
-
})))), /* @__PURE__ */ React4.createElement("div", {
|
|
469
|
+
}))), /* @__PURE__ */ React4.createElement("div", {
|
|
465
470
|
role: "none",
|
|
466
471
|
className: "contents"
|
|
467
472
|
}, /* @__PURE__ */ React4.createElement(Form2, {
|
|
@@ -483,37 +488,39 @@ var CreateSpaceDialog = () => {
|
|
|
483
488
|
import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
|
|
484
489
|
import React5 from "react";
|
|
485
490
|
import { useTranslation as useTranslation5 } from "@dxos/react-ui";
|
|
486
|
-
var CollectionSection = ({
|
|
491
|
+
var CollectionSection = ({ role, subject }) => {
|
|
487
492
|
var _effect = _useSignals5();
|
|
488
493
|
try {
|
|
489
|
-
const { t } = useTranslation5(
|
|
494
|
+
const { t } = useTranslation5(meta.id);
|
|
490
495
|
return /* @__PURE__ */ React5.createElement("div", {
|
|
496
|
+
role,
|
|
491
497
|
className: "min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center"
|
|
492
498
|
}, /* @__PURE__ */ React5.createElement("span", {
|
|
493
499
|
className: "truncate"
|
|
494
|
-
},
|
|
500
|
+
}, subject.name ?? t("unnamed collection label")));
|
|
495
501
|
} finally {
|
|
496
502
|
_effect.f();
|
|
497
503
|
}
|
|
498
504
|
};
|
|
499
505
|
|
|
500
|
-
// src/components/JoinDialog.tsx
|
|
506
|
+
// src/components/JoinDialog/JoinDialog.tsx
|
|
501
507
|
import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
|
|
502
508
|
import React6, { useCallback as useCallback5 } from "react";
|
|
503
|
-
import {
|
|
509
|
+
import { LayoutAction as LayoutAction4, createIntent as createIntent4 } from "@dxos/app-framework";
|
|
510
|
+
import { useAppGraph, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework/react";
|
|
504
511
|
import { Trigger } from "@dxos/async";
|
|
505
512
|
import { ObservabilityAction } from "@dxos/plugin-observability/types";
|
|
506
513
|
import { useClient as useClient3 } from "@dxos/react-client";
|
|
507
514
|
import { Dialog as Dialog3, useTranslation as useTranslation6 } from "@dxos/react-ui";
|
|
508
515
|
import { JoinPanel } from "@dxos/shell/react";
|
|
509
|
-
var JOIN_DIALOG = `${
|
|
516
|
+
var JOIN_DIALOG = `${meta.id}/JoinDialog`;
|
|
510
517
|
var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
|
|
511
518
|
var _effect = _useSignals6();
|
|
512
519
|
try {
|
|
513
520
|
const { dispatchPromise: dispatch } = useIntentDispatcher4();
|
|
514
521
|
const client = useClient3();
|
|
515
522
|
const { graph } = useAppGraph();
|
|
516
|
-
const { t } = useTranslation6(
|
|
523
|
+
const { t } = useTranslation6(meta.id);
|
|
517
524
|
const handleDone = useCallback5(async (result) => {
|
|
518
525
|
const spaceKey = result?.spaceKey;
|
|
519
526
|
if (!spaceKey) {
|
|
@@ -523,18 +530,18 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
|
|
|
523
530
|
dispatch(createIntent4(LayoutAction4.AddToast, {
|
|
524
531
|
part: "toast",
|
|
525
532
|
subject: {
|
|
526
|
-
id: `${
|
|
533
|
+
id: `${meta.id}/join-success`,
|
|
527
534
|
duration: 5e3,
|
|
528
535
|
title: [
|
|
529
536
|
"join success label",
|
|
530
537
|
{
|
|
531
|
-
ns:
|
|
538
|
+
ns: meta.id
|
|
532
539
|
}
|
|
533
540
|
],
|
|
534
541
|
closeLabel: [
|
|
535
542
|
"dismiss label",
|
|
536
543
|
{
|
|
537
|
-
ns:
|
|
544
|
+
ns: meta.id
|
|
538
545
|
}
|
|
539
546
|
]
|
|
540
547
|
}
|
|
@@ -613,22 +620,24 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
|
|
|
613
620
|
}
|
|
614
621
|
};
|
|
615
622
|
|
|
616
|
-
// src/components/MembersContainer.tsx
|
|
623
|
+
// src/components/MembersContainer/MembersContainer.tsx
|
|
617
624
|
import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
|
|
618
|
-
import React7, { useCallback as useCallback6, useMemo, useState as useState3 } from "react";
|
|
625
|
+
import React7, { useCallback as useCallback6, useMemo as useMemo2, useState as useState3 } from "react";
|
|
619
626
|
import { QR } from "react-qr-rounded";
|
|
620
|
-
import { createIntent as createIntent5
|
|
627
|
+
import { createIntent as createIntent5 } from "@dxos/app-framework";
|
|
628
|
+
import { useIntentDispatcher as useIntentDispatcher5 } from "@dxos/app-framework/react";
|
|
629
|
+
import { Obj as Obj3 } from "@dxos/echo";
|
|
621
630
|
import { log } from "@dxos/log";
|
|
622
631
|
import { useConfig } from "@dxos/react-client";
|
|
623
|
-
import {
|
|
632
|
+
import { useSpaceInvitations } from "@dxos/react-client/echo";
|
|
624
633
|
import { Invitation, InvitationEncoder } from "@dxos/react-client/invitations";
|
|
625
|
-
import { Button as
|
|
626
|
-
import {
|
|
634
|
+
import { Button as Button2, Clipboard, Icon as Icon3, Input, useId, useTranslation as useTranslation7 } from "@dxos/react-ui";
|
|
635
|
+
import { ControlFrame, ControlFrameItem, ControlItemInput, ControlPage, ControlSection } from "@dxos/react-ui-form";
|
|
627
636
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
628
|
-
import {
|
|
637
|
+
import { Collection } from "@dxos/schema";
|
|
629
638
|
import { AuthCode, BifurcatedAction, Centered, Emoji, InvitationList, SpaceMemberList, Viewport } from "@dxos/shell/react";
|
|
630
639
|
import { hexToEmoji } from "@dxos/util";
|
|
631
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/MembersContainer.tsx";
|
|
640
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/MembersContainer/MembersContainer.tsx";
|
|
632
641
|
var activeActionKey = "dxos:react-shell/space-manager/active-action";
|
|
633
642
|
var handleInvitationEvent = (invitation, subscription) => {
|
|
634
643
|
const invitationCode = InvitationEncoder.encode(invitation);
|
|
@@ -638,7 +647,7 @@ var handleInvitationEvent = (invitation, subscription) => {
|
|
|
638
647
|
authCode: invitation.authCode
|
|
639
648
|
}), void 0, {
|
|
640
649
|
F: __dxlog_file2,
|
|
641
|
-
L:
|
|
650
|
+
L: 41,
|
|
642
651
|
S: void 0,
|
|
643
652
|
C: (f, a) => f(...a)
|
|
644
653
|
});
|
|
@@ -648,7 +657,7 @@ var handleInvitationEvent = (invitation, subscription) => {
|
|
|
648
657
|
var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
649
658
|
var _effect = _useSignals7();
|
|
650
659
|
try {
|
|
651
|
-
const { t } = useTranslation7(
|
|
660
|
+
const { t } = useTranslation7(meta.id);
|
|
652
661
|
const config = useConfig();
|
|
653
662
|
const { dispatchPromise: dispatch } = useIntentDispatcher5();
|
|
654
663
|
const invitations = useSpaceInvitations(space.key);
|
|
@@ -660,7 +669,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
660
669
|
setInternalActiveAction(nextAction);
|
|
661
670
|
localStorage.setItem(activeActionKey, nextAction);
|
|
662
671
|
};
|
|
663
|
-
const target = space.properties[
|
|
672
|
+
const target = space.properties[Collection.Collection.typename]?.target?.objects[0]?.target;
|
|
664
673
|
const locked = space.properties[COMPOSER_SPACE_LOCK];
|
|
665
674
|
const handleChangeLocked = useCallback6(() => {
|
|
666
675
|
space.properties[COMPOSER_SPACE_LOCK] = !locked;
|
|
@@ -668,7 +677,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
668
677
|
locked,
|
|
669
678
|
space
|
|
670
679
|
]);
|
|
671
|
-
const inviteActions =
|
|
680
|
+
const inviteActions = useMemo2(() => ({
|
|
672
681
|
inviteOne: {
|
|
673
682
|
label: t("invite one label", {
|
|
674
683
|
ns: "os"
|
|
@@ -676,10 +685,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
676
685
|
description: t("invite one description", {
|
|
677
686
|
ns: "os"
|
|
678
687
|
}),
|
|
679
|
-
icon:
|
|
680
|
-
icon: "ph--user-plus--regular",
|
|
681
|
-
size: 5
|
|
682
|
-
}),
|
|
688
|
+
icon: "ph--user-plus--regular",
|
|
683
689
|
testId: "membersContainer.inviteOne",
|
|
684
690
|
onClick: async () => {
|
|
685
691
|
const { data: invitation } = await dispatch(createIntent5(SpaceAction.Share, {
|
|
@@ -687,7 +693,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
687
693
|
type: Invitation.Type.INTERACTIVE,
|
|
688
694
|
authMethod: Invitation.AuthMethod.SHARED_SECRET,
|
|
689
695
|
multiUse: false,
|
|
690
|
-
target: target &&
|
|
696
|
+
target: target && Obj3.getDXN(target).toString()
|
|
691
697
|
}));
|
|
692
698
|
if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
|
|
693
699
|
const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
|
|
@@ -701,10 +707,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
701
707
|
description: t("invite many description", {
|
|
702
708
|
ns: "os"
|
|
703
709
|
}),
|
|
704
|
-
icon:
|
|
705
|
-
icon: "ph--users-three--regular",
|
|
706
|
-
size: 5
|
|
707
|
-
}),
|
|
710
|
+
icon: "ph--users-three--regular",
|
|
708
711
|
testId: "membersContainer.inviteMany",
|
|
709
712
|
onClick: async () => {
|
|
710
713
|
const { data: invitation } = await dispatch(createIntent5(SpaceAction.Share, {
|
|
@@ -712,7 +715,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
712
715
|
type: Invitation.Type.DELEGATED,
|
|
713
716
|
authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
|
|
714
717
|
multiUse: true,
|
|
715
|
-
target: target &&
|
|
718
|
+
target: target && Obj3.getDXN(target).toString()
|
|
716
719
|
}));
|
|
717
720
|
if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
|
|
718
721
|
const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
|
|
@@ -732,7 +735,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
732
735
|
setSelectedInvitation(null);
|
|
733
736
|
};
|
|
734
737
|
return /* @__PURE__ */ React7.createElement(Clipboard.Provider, null, /* @__PURE__ */ React7.createElement(StackItem.Content, {
|
|
735
|
-
|
|
738
|
+
scrollable: true
|
|
736
739
|
}, /* @__PURE__ */ React7.createElement(ControlPage, null, /* @__PURE__ */ React7.createElement(ControlSection, {
|
|
737
740
|
title: t("members verbose label"),
|
|
738
741
|
description: t("members description")
|
|
@@ -764,7 +767,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
|
|
|
764
767
|
onChangeActiveAction: setActiveAction,
|
|
765
768
|
"data-testid": "membersContainer.createInvitation"
|
|
766
769
|
})))), /* @__PURE__ */ React7.createElement("div", {
|
|
767
|
-
className: "justify-center
|
|
770
|
+
className: "justify-center p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]"
|
|
768
771
|
}, /* @__PURE__ */ React7.createElement(ControlItemInput, {
|
|
769
772
|
title: t("space locked label"),
|
|
770
773
|
description: t("space locked description")
|
|
@@ -815,7 +818,7 @@ var InvitationQR = ({ id, url, onCancel }) => {
|
|
|
815
818
|
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement("p", {
|
|
816
819
|
className: "text-description"
|
|
817
820
|
}, t("qr code description", {
|
|
818
|
-
ns:
|
|
821
|
+
ns: meta.id
|
|
819
822
|
})), /* @__PURE__ */ React7.createElement("div", {
|
|
820
823
|
role: "group",
|
|
821
824
|
className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
|
|
@@ -836,7 +839,7 @@ var InvitationQR = ({ id, url, onCancel }) => {
|
|
|
836
839
|
className: "sr-only"
|
|
837
840
|
}, t("qr label")), /* @__PURE__ */ React7.createElement(Clipboard.Button, {
|
|
838
841
|
value: url ?? "never"
|
|
839
|
-
})), /* @__PURE__ */ React7.createElement(
|
|
842
|
+
})), /* @__PURE__ */ React7.createElement(Button2, {
|
|
840
843
|
variant: "ghost",
|
|
841
844
|
onClick: onCancel
|
|
842
845
|
}, t("cancel label")));
|
|
@@ -860,7 +863,7 @@ var InvitationAuthCode = ({ id, code, onCancel }) => {
|
|
|
860
863
|
code,
|
|
861
864
|
large: true,
|
|
862
865
|
classNames: "mli-auto mlb-2 text-center grow"
|
|
863
|
-
}), /* @__PURE__ */ React7.createElement(
|
|
866
|
+
}), /* @__PURE__ */ React7.createElement(Button2, {
|
|
864
867
|
variant: "ghost",
|
|
865
868
|
onClick: onCancel
|
|
866
869
|
}, t("cancel label")));
|
|
@@ -871,11 +874,11 @@ var InvitationAuthCode = ({ id, code, onCancel }) => {
|
|
|
871
874
|
var InvitationComplete = ({ statusValue }) => {
|
|
872
875
|
var _effect = _useSignals7();
|
|
873
876
|
try {
|
|
874
|
-
return statusValue > 0 ? /* @__PURE__ */ React7.createElement(
|
|
877
|
+
return statusValue > 0 ? /* @__PURE__ */ React7.createElement(Icon3, {
|
|
875
878
|
icon: "ph--check--regular",
|
|
876
879
|
size: 6,
|
|
877
880
|
classNames: "m-1.5"
|
|
878
|
-
}) : /* @__PURE__ */ React7.createElement(
|
|
881
|
+
}) : /* @__PURE__ */ React7.createElement(Icon3, {
|
|
879
882
|
icon: "ph--x--regular",
|
|
880
883
|
size: 6,
|
|
881
884
|
classNames: "m-1.5"
|
|
@@ -890,11 +893,11 @@ import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking"
|
|
|
890
893
|
import React8 from "react";
|
|
891
894
|
import { getSpace as getSpace2 } from "@dxos/client/echo";
|
|
892
895
|
import { useClient as useClient4 } from "@dxos/react-client";
|
|
893
|
-
import { DropdownMenu, Icon as
|
|
896
|
+
import { DropdownMenu, Icon as Icon4, toLocalizedString as toLocalizedString2, useTranslation as useTranslation8 } from "@dxos/react-ui";
|
|
894
897
|
var MenuFooter = ({ object }) => {
|
|
895
898
|
var _effect = _useSignals8();
|
|
896
899
|
try {
|
|
897
|
-
const { t } = useTranslation8(
|
|
900
|
+
const { t } = useTranslation8(meta.id);
|
|
898
901
|
const client = useClient4();
|
|
899
902
|
const space = getSpace2(object);
|
|
900
903
|
const spaceName = space ? getSpaceDisplayName(space, {
|
|
@@ -906,7 +909,7 @@ var MenuFooter = ({ object }) => {
|
|
|
906
909
|
className: "uppercase text-[.75em] tracking-wide font-medium mbs-px self-start"
|
|
907
910
|
}, t("location label")), /* @__PURE__ */ React8.createElement("dd", {
|
|
908
911
|
className: "line-clamp-3"
|
|
909
|
-
}, /* @__PURE__ */ React8.createElement(
|
|
912
|
+
}, /* @__PURE__ */ React8.createElement(Icon4, {
|
|
910
913
|
icon: "ph--planet--regular",
|
|
911
914
|
classNames: "inline-block mie-1"
|
|
912
915
|
}), toLocalizedString2(spaceName, t)))) : null;
|
|
@@ -915,166 +918,35 @@ var MenuFooter = ({ object }) => {
|
|
|
915
918
|
}
|
|
916
919
|
};
|
|
917
920
|
|
|
918
|
-
// src/components/
|
|
919
|
-
import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
|
|
920
|
-
import React10, { useMemo as useMemo2 } from "react";
|
|
921
|
-
import { Surface } from "@dxos/app-framework";
|
|
922
|
-
import { Clipboard as Clipboard2 } from "@dxos/react-ui";
|
|
923
|
-
import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
|
|
924
|
-
|
|
925
|
-
// src/components/ObjectSettings/BaseObjectSettings.tsx
|
|
921
|
+
// src/components/ObjectRenamePopover/ObjectRenamePopover.tsx
|
|
926
922
|
import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
|
|
927
|
-
import React9, { useRef as useRef3 } from "react";
|
|
928
|
-
import {
|
|
929
|
-
|
|
923
|
+
import React9, { useCallback as useCallback7, useRef as useRef3, useState as useState4 } from "react";
|
|
924
|
+
import { LayoutAction as LayoutAction5, createIntent as createIntent6 } from "@dxos/app-framework";
|
|
925
|
+
import { useIntentDispatcher as useIntentDispatcher6 } from "@dxos/app-framework/react";
|
|
926
|
+
import { Obj as Obj4 } from "@dxos/echo";
|
|
927
|
+
import { log as log2 } from "@dxos/log";
|
|
928
|
+
import { Button as Button3, Input as Input2, useTranslation as useTranslation9 } from "@dxos/react-ui";
|
|
929
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/ObjectRenamePopover/ObjectRenamePopover.tsx";
|
|
930
|
+
var OBJECT_RENAME_POPOVER = `${meta.id}/ObjectRenamePopover`;
|
|
931
|
+
var ObjectRenamePopover = ({ object }) => {
|
|
930
932
|
var _effect = _useSignals9();
|
|
931
933
|
try {
|
|
932
934
|
const { t } = useTranslation9(meta.id);
|
|
933
|
-
const
|
|
934
|
-
|
|
935
|
-
ref: inputRef,
|
|
936
|
-
placeholder: t("name placeholder"),
|
|
937
|
-
// TODO(burdon): Use annotation to get the name field.
|
|
938
|
-
value: object.name ?? "",
|
|
939
|
-
onChange: (event) => {
|
|
940
|
-
object.name = event.target.value;
|
|
941
|
-
},
|
|
942
|
-
onKeyDown: (event) => {
|
|
943
|
-
if (event.key === "Enter") {
|
|
944
|
-
inputRef.current?.blur();
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
})), children);
|
|
948
|
-
} finally {
|
|
949
|
-
_effect.f();
|
|
950
|
-
}
|
|
951
|
-
};
|
|
952
|
-
|
|
953
|
-
// src/components/ObjectSettings/ObjectSettingsContainer.tsx
|
|
954
|
-
var ObjectSettingsContainer = ({ object, role }) => {
|
|
955
|
-
var _effect = _useSignals10();
|
|
956
|
-
try {
|
|
957
|
-
const data = useMemo2(() => ({
|
|
958
|
-
subject: object
|
|
959
|
-
}), [
|
|
960
|
-
object
|
|
961
|
-
]);
|
|
962
|
-
return /* @__PURE__ */ React10.createElement(Clipboard2.Provider, null, /* @__PURE__ */ React10.createElement(StackItem2.Content, {
|
|
963
|
-
toolbar: false
|
|
964
|
-
}, /* @__PURE__ */ React10.createElement("div", {
|
|
965
|
-
role: "none",
|
|
966
|
-
className: "overflow-y-auto pli-cardSpacingInline plb-cardSpacingBlock"
|
|
967
|
-
}, /* @__PURE__ */ React10.createElement(BaseObjectSettings, {
|
|
968
|
-
object
|
|
969
|
-
}, /* @__PURE__ */ React10.createElement(Surface, {
|
|
970
|
-
role: "base-object-settings",
|
|
971
|
-
data
|
|
972
|
-
})), /* @__PURE__ */ React10.createElement(Surface, {
|
|
973
|
-
role: "object-settings",
|
|
974
|
-
data
|
|
975
|
-
}))));
|
|
976
|
-
} finally {
|
|
977
|
-
_effect.f();
|
|
978
|
-
}
|
|
979
|
-
};
|
|
980
|
-
|
|
981
|
-
// src/components/PersistenceStatus.tsx
|
|
982
|
-
import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
|
|
983
|
-
import React11, { useEffect as useEffect2, useState as useState4 } from "react";
|
|
984
|
-
import { debounce } from "@dxos/async";
|
|
985
|
-
import { Icon as Icon7, Tooltip, useTranslation as useTranslation10 } from "@dxos/react-ui";
|
|
986
|
-
import { mx, staticPlaceholderText, warningText } from "@dxos/react-ui-theme";
|
|
987
|
-
var PersistenceStatus = ({ db }) => {
|
|
988
|
-
var _effect = _useSignals11();
|
|
989
|
-
try {
|
|
990
|
-
const { t } = useTranslation10(SPACE_PLUGIN);
|
|
991
|
-
const [displayMessage, setDisplayMessage] = useState4(false);
|
|
992
|
-
const [status, naturalSetStatus] = useState4(0);
|
|
993
|
-
const [prevStatus, setPrevStatus] = useState4(0);
|
|
994
|
-
const _setStatus = debounce(naturalSetStatus, 500);
|
|
995
|
-
useEffect2(() => {
|
|
996
|
-
setPrevStatus(status);
|
|
997
|
-
if (prevStatus !== status && status === 0) {
|
|
998
|
-
setDisplayMessage(true);
|
|
999
|
-
const timeout = setTimeout(() => setDisplayMessage(false), 5e3);
|
|
1000
|
-
return () => clearTimeout(timeout);
|
|
1001
|
-
}
|
|
1002
|
-
}, [
|
|
1003
|
-
status
|
|
1004
|
-
]);
|
|
1005
|
-
switch (status) {
|
|
1006
|
-
case 2:
|
|
1007
|
-
return /* @__PURE__ */ React11.createElement("div", {
|
|
1008
|
-
className: "flex items-center"
|
|
1009
|
-
}, /* @__PURE__ */ React11.createElement(Icon7, {
|
|
1010
|
-
icon: "ph--warning--regular",
|
|
1011
|
-
size: 4,
|
|
1012
|
-
classNames: "me-1"
|
|
1013
|
-
}), /* @__PURE__ */ React11.createElement("span", {
|
|
1014
|
-
className: mx("text-sm", warningText)
|
|
1015
|
-
}, t("persistence error label")));
|
|
1016
|
-
case 1:
|
|
1017
|
-
return /* @__PURE__ */ React11.createElement("div", {
|
|
1018
|
-
className: "flex items-center"
|
|
1019
|
-
}, /* @__PURE__ */ React11.createElement(Icon7, {
|
|
1020
|
-
icon: "ph--arrows-counter-clockwise--regular",
|
|
1021
|
-
size: 4,
|
|
1022
|
-
classNames: "me-1"
|
|
1023
|
-
}), /* @__PURE__ */ React11.createElement("span", {
|
|
1024
|
-
className: mx("text-sm", staticPlaceholderText)
|
|
1025
|
-
}, t("persistence pending label")));
|
|
1026
|
-
case 0:
|
|
1027
|
-
default:
|
|
1028
|
-
return /* @__PURE__ */ React11.createElement(Tooltip.Trigger, {
|
|
1029
|
-
delayDuration: 400,
|
|
1030
|
-
role: "status",
|
|
1031
|
-
content: t("persisted locally message"),
|
|
1032
|
-
className: "flex items-center"
|
|
1033
|
-
}, /* @__PURE__ */ React11.createElement(Icon7, {
|
|
1034
|
-
icon: "ph--check-circle--regular",
|
|
1035
|
-
size: 4,
|
|
1036
|
-
classNames: "me-1"
|
|
1037
|
-
}), displayMessage && /* @__PURE__ */ React11.createElement("span", {
|
|
1038
|
-
className: mx("text-sm", staticPlaceholderText)
|
|
1039
|
-
}, t("persisted locally label")));
|
|
1040
|
-
}
|
|
1041
|
-
} finally {
|
|
1042
|
-
_effect.f();
|
|
1043
|
-
}
|
|
1044
|
-
};
|
|
1045
|
-
|
|
1046
|
-
// src/components/PopoverRenameObject.tsx
|
|
1047
|
-
import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
|
|
1048
|
-
import React12, { useCallback as useCallback7, useRef as useRef4, useState as useState5 } from "react";
|
|
1049
|
-
import { createIntent as createIntent6, LayoutAction as LayoutAction5, useIntentDispatcher as useIntentDispatcher6 } from "@dxos/app-framework";
|
|
1050
|
-
import { log as log2 } from "@dxos/log";
|
|
1051
|
-
import { Button as Button5, Input as Input3, useTranslation as useTranslation11 } from "@dxos/react-ui";
|
|
1052
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
|
|
1053
|
-
var POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;
|
|
1054
|
-
var PopoverRenameObject = ({ object: obj }) => {
|
|
1055
|
-
var _effect = _useSignals12();
|
|
1056
|
-
try {
|
|
1057
|
-
const { t } = useTranslation11(SPACE_PLUGIN);
|
|
1058
|
-
const doneButton = useRef4(null);
|
|
1059
|
-
const object = obj;
|
|
1060
|
-
const [name, setName] = useState5(object.name || object.title || "");
|
|
935
|
+
const doneButton = useRef3(null);
|
|
936
|
+
const [name, setName] = useState4(Obj4.getLabel(object));
|
|
1061
937
|
const { dispatchPromise: dispatch } = useIntentDispatcher6();
|
|
1062
938
|
const handleDone = useCallback7(() => {
|
|
1063
939
|
try {
|
|
1064
|
-
|
|
940
|
+
name && Obj4.setLabel(object, name);
|
|
1065
941
|
} catch (err) {
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
}
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
S: void 0,
|
|
1075
|
-
C: (f, a) => f(...a)
|
|
1076
|
-
});
|
|
1077
|
-
}
|
|
942
|
+
log2.error("Failed to rename object", {
|
|
943
|
+
err
|
|
944
|
+
}, {
|
|
945
|
+
F: __dxlog_file3,
|
|
946
|
+
L: 27,
|
|
947
|
+
S: void 0,
|
|
948
|
+
C: (f, a) => f(...a)
|
|
949
|
+
});
|
|
1078
950
|
}
|
|
1079
951
|
void dispatch(createIntent6(LayoutAction5.UpdatePopover, {
|
|
1080
952
|
part: "popover",
|
|
@@ -1088,21 +960,21 @@ var PopoverRenameObject = ({ object: obj }) => {
|
|
|
1088
960
|
object,
|
|
1089
961
|
name
|
|
1090
962
|
]);
|
|
1091
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ React9.createElement("div", {
|
|
1092
964
|
role: "none",
|
|
1093
965
|
className: "p-2 flex gap-2"
|
|
1094
|
-
}, /* @__PURE__ */
|
|
966
|
+
}, /* @__PURE__ */ React9.createElement("div", {
|
|
1095
967
|
role: "none",
|
|
1096
968
|
className: "flex-1"
|
|
1097
|
-
}, /* @__PURE__ */
|
|
969
|
+
}, /* @__PURE__ */ React9.createElement(Input2.Root, null, /* @__PURE__ */ React9.createElement(Input2.Label, {
|
|
1098
970
|
srOnly: true
|
|
1099
|
-
}, t("object name label")), /* @__PURE__ */
|
|
971
|
+
}, t("object name label")), /* @__PURE__ */ React9.createElement(Input2.TextInput, {
|
|
1100
972
|
placeholder: t("object placeholder"),
|
|
1101
973
|
value: name,
|
|
1102
974
|
"data-testid": "spacePlugin.renameObject.input",
|
|
1103
|
-
onChange: ({ target: { value } }) => setName(
|
|
975
|
+
onChange: ({ target: { value: value2 } }) => setName(value2),
|
|
1104
976
|
onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
|
|
1105
|
-
}))), /* @__PURE__ */
|
|
977
|
+
}))), /* @__PURE__ */ React9.createElement(Button3, {
|
|
1106
978
|
ref: doneButton,
|
|
1107
979
|
classNames: "self-stretch",
|
|
1108
980
|
onClick: handleDone
|
|
@@ -1114,18 +986,19 @@ var PopoverRenameObject = ({ object: obj }) => {
|
|
|
1114
986
|
}
|
|
1115
987
|
};
|
|
1116
988
|
|
|
1117
|
-
// src/components/
|
|
1118
|
-
import { useSignals as
|
|
1119
|
-
import
|
|
1120
|
-
import {
|
|
1121
|
-
import {
|
|
1122
|
-
|
|
1123
|
-
var
|
|
1124
|
-
|
|
989
|
+
// src/components/SpaceRenamePopover/SpaceRenamePopover.tsx
|
|
990
|
+
import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
|
|
991
|
+
import React10, { useCallback as useCallback8, useRef as useRef4, useState as useState5 } from "react";
|
|
992
|
+
import { LayoutAction as LayoutAction6, createIntent as createIntent7 } from "@dxos/app-framework";
|
|
993
|
+
import { useIntentDispatcher as useIntentDispatcher7 } from "@dxos/app-framework/react";
|
|
994
|
+
import { Button as Button4, Input as Input3, Popover, useTranslation as useTranslation10 } from "@dxos/react-ui";
|
|
995
|
+
var SPACE_RENAME_POPOVER = `${meta.id}/SpaceRenamePopover`;
|
|
996
|
+
var SpaceRenamePopover = ({ space }) => {
|
|
997
|
+
var _effect = _useSignals10();
|
|
1125
998
|
try {
|
|
1126
|
-
const { t } =
|
|
1127
|
-
const doneButton =
|
|
1128
|
-
const [name, setName] =
|
|
999
|
+
const { t } = useTranslation10(meta.id);
|
|
1000
|
+
const doneButton = useRef4(null);
|
|
1001
|
+
const [name, setName] = useState5(space.properties.name ?? "");
|
|
1129
1002
|
const { dispatchPromise: dispatch } = useIntentDispatcher7();
|
|
1130
1003
|
const handleDone = useCallback8(() => {
|
|
1131
1004
|
space.properties.name = name;
|
|
@@ -1141,24 +1014,24 @@ var PopoverRenameSpace = ({ space }) => {
|
|
|
1141
1014
|
space,
|
|
1142
1015
|
name
|
|
1143
1016
|
]);
|
|
1144
|
-
return /* @__PURE__ */
|
|
1017
|
+
return /* @__PURE__ */ React10.createElement("div", {
|
|
1145
1018
|
role: "none",
|
|
1146
1019
|
className: "p-2 flex gap-2"
|
|
1147
|
-
}, /* @__PURE__ */
|
|
1020
|
+
}, /* @__PURE__ */ React10.createElement("div", {
|
|
1148
1021
|
role: "none",
|
|
1149
1022
|
className: "flex-1"
|
|
1150
|
-
}, /* @__PURE__ */
|
|
1023
|
+
}, /* @__PURE__ */ React10.createElement(Input3.Root, null, /* @__PURE__ */ React10.createElement(Input3.Label, {
|
|
1151
1024
|
srOnly: true
|
|
1152
|
-
}, t("space name label")), /* @__PURE__ */
|
|
1025
|
+
}, t("space name label")), /* @__PURE__ */ React10.createElement(Input3.TextInput, {
|
|
1153
1026
|
defaultValue: space.properties.name ?? "",
|
|
1154
1027
|
placeholder: t("unnamed space label"),
|
|
1155
|
-
onChange: ({ target: { value } }) => setName(
|
|
1028
|
+
onChange: ({ target: { value: value2 } }) => setName(value2),
|
|
1156
1029
|
// TODO(wittjosiah): Ideally this should access the popover context to close the popover.
|
|
1157
1030
|
// Currently this is not possible because Radix does not expose the popover context.
|
|
1158
1031
|
onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
|
|
1159
|
-
}))), /* @__PURE__ */
|
|
1032
|
+
}))), /* @__PURE__ */ React10.createElement(Popover.Close, {
|
|
1160
1033
|
asChild: true
|
|
1161
|
-
}, /* @__PURE__ */
|
|
1034
|
+
}, /* @__PURE__ */ React10.createElement(Button4, {
|
|
1162
1035
|
ref: doneButton,
|
|
1163
1036
|
classNames: "self-stretch",
|
|
1164
1037
|
onClick: handleDone
|
|
@@ -1171,73 +1044,90 @@ var PopoverRenameSpace = ({ space }) => {
|
|
|
1171
1044
|
};
|
|
1172
1045
|
|
|
1173
1046
|
// src/components/SchemaContainer.tsx
|
|
1174
|
-
import { useSignals as
|
|
1175
|
-
import
|
|
1176
|
-
import { useTranslation as
|
|
1177
|
-
import {
|
|
1178
|
-
import { StackItem as
|
|
1179
|
-
var useQuerySpaceSchemas = (space) => {
|
|
1180
|
-
const [schemas, setSchemas] = useState7([]);
|
|
1181
|
-
useEffect3(() => {
|
|
1182
|
-
const query = space.db.schemaRegistry.query();
|
|
1183
|
-
const initialResults = query.runSync();
|
|
1184
|
-
setSchemas(initialResults);
|
|
1185
|
-
const unsubscribe = query.subscribe(() => setSchemas(query.results));
|
|
1186
|
-
return () => unsubscribe();
|
|
1187
|
-
}, [
|
|
1188
|
-
space
|
|
1189
|
-
]);
|
|
1190
|
-
return schemas;
|
|
1191
|
-
};
|
|
1047
|
+
import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
|
|
1048
|
+
import React11, { useEffect as useEffect2, useState as useState6 } from "react";
|
|
1049
|
+
import { useTranslation as useTranslation11 } from "@dxos/react-ui";
|
|
1050
|
+
import { ControlPage as ControlPage2, ControlSection as ControlSection2, controlItemClasses } from "@dxos/react-ui-form";
|
|
1051
|
+
import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
|
|
1192
1052
|
var SchemaContainer = ({ space }) => {
|
|
1193
|
-
var _effect =
|
|
1053
|
+
var _effect = _useSignals11();
|
|
1194
1054
|
try {
|
|
1195
|
-
const { t } =
|
|
1055
|
+
const { t } = useTranslation11(meta.id);
|
|
1196
1056
|
const schemas = useQuerySpaceSchemas(space);
|
|
1197
|
-
return /* @__PURE__ */
|
|
1198
|
-
|
|
1199
|
-
}, /* @__PURE__ */
|
|
1057
|
+
return /* @__PURE__ */ React11.createElement(StackItem2.Content, {
|
|
1058
|
+
scrollable: true
|
|
1059
|
+
}, /* @__PURE__ */ React11.createElement(ControlPage2, null, /* @__PURE__ */ React11.createElement(ControlSection2, {
|
|
1200
1060
|
title: t("schema verbose label"),
|
|
1201
1061
|
description: t("schema description")
|
|
1202
|
-
}, /* @__PURE__ */
|
|
1062
|
+
}, /* @__PURE__ */ React11.createElement("div", {
|
|
1203
1063
|
role: "none",
|
|
1204
1064
|
className: controlItemClasses
|
|
1205
|
-
}, schemas.length === 0 && /* @__PURE__ */
|
|
1065
|
+
}, schemas.length === 0 && /* @__PURE__ */ React11.createElement("div", {
|
|
1206
1066
|
className: "text-center plb-4"
|
|
1207
|
-
}, t("no schemas found message")), schemas.map((schema) => /* @__PURE__ */
|
|
1067
|
+
}, t("no schemas found message")), schemas.map((schema) => /* @__PURE__ */ React11.createElement("div", {
|
|
1068
|
+
role: "none",
|
|
1208
1069
|
key: schema.id
|
|
1209
|
-
},
|
|
1070
|
+
}, schema.typename))))));
|
|
1210
1071
|
} finally {
|
|
1211
1072
|
_effect.f();
|
|
1212
1073
|
}
|
|
1213
1074
|
};
|
|
1075
|
+
var useQuerySpaceSchemas = (space) => {
|
|
1076
|
+
const [schemas, setSchemas] = useState6([]);
|
|
1077
|
+
useEffect2(() => {
|
|
1078
|
+
const query = space.db.schemaRegistry.query();
|
|
1079
|
+
const initialResults = query.runSync();
|
|
1080
|
+
setSchemas(initialResults);
|
|
1081
|
+
const unsubscribe = query.subscribe(() => setSchemas(query.results));
|
|
1082
|
+
return () => unsubscribe();
|
|
1083
|
+
}, [
|
|
1084
|
+
space
|
|
1085
|
+
]);
|
|
1086
|
+
return schemas;
|
|
1087
|
+
};
|
|
1214
1088
|
|
|
1215
|
-
// src/components/SpacePresence.tsx
|
|
1216
|
-
import { useSignals as
|
|
1217
|
-
import
|
|
1218
|
-
import
|
|
1219
|
-
import { useAppGraph as useAppGraph2, useCapability } from "@dxos/app-framework";
|
|
1089
|
+
// src/components/SpacePresence/SpacePresence.tsx
|
|
1090
|
+
import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
|
|
1091
|
+
import * as Option3 from "effect/Option";
|
|
1092
|
+
import React12, { forwardRef, useCallback as useCallback9, useEffect as useEffect3, useState as useState7 } from "react";
|
|
1093
|
+
import { useAppGraph as useAppGraph2, useCapability } from "@dxos/app-framework/react";
|
|
1220
1094
|
import { generateName } from "@dxos/display-name";
|
|
1095
|
+
import { Obj as Obj5 } from "@dxos/echo";
|
|
1221
1096
|
import { PublicKey, useClient as useClient5 } from "@dxos/react-client";
|
|
1222
|
-
import { getSpace as getSpace3, useMembers
|
|
1097
|
+
import { getSpace as getSpace3, useMembers } from "@dxos/react-client/echo";
|
|
1223
1098
|
import { useIdentity } from "@dxos/react-client/halo";
|
|
1224
|
-
import { Avatar,
|
|
1099
|
+
import { Avatar, List, ListItem, Popover as Popover2, Tooltip, useDefaultValue as useDefaultValue2, useTranslation as useTranslation12 } from "@dxos/react-ui";
|
|
1225
1100
|
import { AttentionGlyph, useAttended, useAttention } from "@dxos/react-ui-attention";
|
|
1226
1101
|
import { ComplexMap, keyToFallback } from "@dxos/util";
|
|
1102
|
+
|
|
1103
|
+
// src/capabilities/index.ts
|
|
1104
|
+
import { lazy } from "@dxos/app-framework";
|
|
1105
|
+
var AppGraphBuilder = lazy(() => import("./app-graph-builder-HABMCWAI.mjs"));
|
|
1106
|
+
var AppGraphSerializer = lazy(() => import("./app-graph-serializer-G3VFEGTN.mjs"));
|
|
1107
|
+
var IdentityCreated = lazy(() => import("./identity-created-NAXTPQXE.mjs"));
|
|
1108
|
+
var IntentResolver = lazy(() => import("./intent-resolver-RZEWNJ2K.mjs"));
|
|
1109
|
+
var ReactRoot = lazy(() => import("./react-root-JCRD74GI.mjs"));
|
|
1110
|
+
var ReactSurface = lazy(() => import("./react-surface-VOETEAG3.mjs"));
|
|
1111
|
+
var Repair = lazy(() => import("./repair-CNLE35NF.mjs"));
|
|
1112
|
+
var SpaceSettings = lazy(() => import("./settings-TRLI52I5.mjs"));
|
|
1113
|
+
var SpaceState = lazy(() => import("./state-C7N6EDDZ.mjs"));
|
|
1114
|
+
var SpacesReady = lazy(() => import("./spaces-ready-OHGCWZHQ.mjs"));
|
|
1115
|
+
|
|
1116
|
+
// src/components/SpacePresence/SpacePresence.tsx
|
|
1227
1117
|
var REFRESH_INTERVAL = 5e3;
|
|
1228
1118
|
var ACTIVITY_DURATION = 3e4;
|
|
1229
1119
|
var noViewers = new ComplexMap(PublicKey.hash);
|
|
1230
1120
|
var getName = (identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
|
|
1231
1121
|
var SpacePresence = ({ object, spaceKey }) => {
|
|
1232
|
-
var _effect =
|
|
1122
|
+
var _effect = _useSignals12();
|
|
1233
1123
|
try {
|
|
1234
1124
|
const spaceState = useCapability(SpaceCapabilities.MutableState);
|
|
1235
1125
|
const client = useClient5();
|
|
1236
1126
|
const identity = useIdentity();
|
|
1237
1127
|
const space = spaceKey ? client.spaces.get(spaceKey) : getSpace3(object);
|
|
1238
1128
|
const spaceMembers = useMembers(space?.key);
|
|
1239
|
-
const [_moment, setMoment] =
|
|
1240
|
-
|
|
1129
|
+
const [_moment, setMoment] = useState7(Date.now());
|
|
1130
|
+
useEffect3(() => {
|
|
1241
1131
|
const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
|
|
1242
1132
|
return () => clearInterval(interval);
|
|
1243
1133
|
}, []);
|
|
@@ -1248,7 +1138,7 @@ var SpacePresence = ({ object, spaceKey }) => {
|
|
|
1248
1138
|
if (!identity || !spaceState || !space) {
|
|
1249
1139
|
return null;
|
|
1250
1140
|
}
|
|
1251
|
-
const currentObjectViewers = spaceState.viewersByObject[
|
|
1141
|
+
const currentObjectViewers = spaceState.viewersByObject[Obj5.getDXN(object).toString()] ?? noViewers;
|
|
1252
1142
|
const membersForObject = spaceMembers.filter((member) => memberOnline(member) && memberIsNotSelf(member)).filter((member) => currentObjectViewers.has(member.identity.identityKey)).map((member) => {
|
|
1253
1143
|
const objectView = currentObjectViewers.get(member.identity.identityKey);
|
|
1254
1144
|
const lastSeen = objectView?.lastSeen ?? -Infinity;
|
|
@@ -1259,7 +1149,7 @@ var SpacePresence = ({ object, spaceKey }) => {
|
|
|
1259
1149
|
lastSeen
|
|
1260
1150
|
};
|
|
1261
1151
|
}).toSorted((a, b) => a.lastSeen - b.lastSeen);
|
|
1262
|
-
return /* @__PURE__ */
|
|
1152
|
+
return /* @__PURE__ */ React12.createElement(FullPresence, {
|
|
1263
1153
|
members: membersForObject
|
|
1264
1154
|
});
|
|
1265
1155
|
} finally {
|
|
@@ -1267,46 +1157,46 @@ var SpacePresence = ({ object, spaceKey }) => {
|
|
|
1267
1157
|
}
|
|
1268
1158
|
};
|
|
1269
1159
|
var FullPresence = (props) => {
|
|
1270
|
-
var _effect =
|
|
1160
|
+
var _effect = _useSignals12();
|
|
1271
1161
|
try {
|
|
1272
1162
|
const { size = 9, onMemberClick } = props;
|
|
1273
|
-
const members =
|
|
1163
|
+
const members = useDefaultValue2(props.members, () => []);
|
|
1274
1164
|
if (members.length === 0) {
|
|
1275
1165
|
return null;
|
|
1276
1166
|
}
|
|
1277
|
-
return /* @__PURE__ */
|
|
1167
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
1278
1168
|
className: "dx-avatar-group",
|
|
1279
1169
|
"data-testid": "spacePlugin.presence"
|
|
1280
|
-
}, members.slice(0, 3).map((member, i) => /* @__PURE__ */
|
|
1170
|
+
}, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React12.createElement(Tooltip.Trigger, {
|
|
1281
1171
|
key: member.identity.identityKey.toHex(),
|
|
1282
1172
|
side: "bottom",
|
|
1283
1173
|
content: getName(member.identity),
|
|
1284
1174
|
className: "grid focus:outline-none"
|
|
1285
|
-
}, /* @__PURE__ */
|
|
1175
|
+
}, /* @__PURE__ */ React12.createElement(PresenceAvatar, {
|
|
1286
1176
|
identity: member.identity,
|
|
1287
1177
|
match: member.currentlyAttended,
|
|
1288
1178
|
index: members.length - i,
|
|
1289
1179
|
onClick: () => onMemberClick?.(member),
|
|
1290
1180
|
size
|
|
1291
|
-
}))), members.length > 3 && /* @__PURE__ */
|
|
1181
|
+
}))), members.length > 3 && /* @__PURE__ */ React12.createElement(Popover2.Root, null, /* @__PURE__ */ React12.createElement(Popover2.Trigger, {
|
|
1292
1182
|
className: "grid focus:outline-none"
|
|
1293
|
-
}, /* @__PURE__ */
|
|
1183
|
+
}, /* @__PURE__ */ React12.createElement(Avatar.Root, null, /* @__PURE__ */ React12.createElement(Avatar.Content, {
|
|
1294
1184
|
status: "inactive",
|
|
1295
1185
|
style: {
|
|
1296
1186
|
zIndex: members.length - 4
|
|
1297
1187
|
},
|
|
1298
1188
|
fallback: `+${members.length - 3}`,
|
|
1299
1189
|
size
|
|
1300
|
-
}))), /* @__PURE__ */
|
|
1190
|
+
}))), /* @__PURE__ */ React12.createElement(Popover2.Portal, null, /* @__PURE__ */ React12.createElement(Popover2.Content, {
|
|
1301
1191
|
side: "bottom"
|
|
1302
|
-
}, /* @__PURE__ */
|
|
1192
|
+
}, /* @__PURE__ */ React12.createElement(Popover2.Arrow, null), /* @__PURE__ */ React12.createElement(Popover2.Viewport, {
|
|
1303
1193
|
classNames: "max-bs-56"
|
|
1304
|
-
}, /* @__PURE__ */
|
|
1194
|
+
}, /* @__PURE__ */ React12.createElement(List, null, members.map((member) => /* @__PURE__ */ React12.createElement(ListItem.Root, {
|
|
1305
1195
|
key: member.identity.identityKey.toHex(),
|
|
1306
1196
|
classNames: "flex gap-2 items-center cursor-pointer mbe-2",
|
|
1307
1197
|
onClick: () => onMemberClick?.(member),
|
|
1308
1198
|
"data-testid": "identity-list-item"
|
|
1309
|
-
}, /* @__PURE__ */
|
|
1199
|
+
}, /* @__PURE__ */ React12.createElement(PresenceAvatar, {
|
|
1310
1200
|
identity: member.identity,
|
|
1311
1201
|
size,
|
|
1312
1202
|
showName: true,
|
|
@@ -1316,12 +1206,12 @@ var FullPresence = (props) => {
|
|
|
1316
1206
|
_effect.f();
|
|
1317
1207
|
}
|
|
1318
1208
|
};
|
|
1319
|
-
var PresenceAvatar = /* @__PURE__ */ forwardRef(({ identity, showName, match, index, onClick, size }, forwardedRef) => {
|
|
1320
|
-
var _effect =
|
|
1209
|
+
var PresenceAvatar = /* @__PURE__ */ forwardRef(({ identity, showName, match: match2, index, onClick, size }, forwardedRef) => {
|
|
1210
|
+
var _effect = _useSignals12();
|
|
1321
1211
|
try {
|
|
1322
|
-
const status =
|
|
1212
|
+
const status = match2 ? "current" : "active";
|
|
1323
1213
|
const fallbackValue = keyToFallback(identity.identityKey);
|
|
1324
|
-
return /* @__PURE__ */
|
|
1214
|
+
return /* @__PURE__ */ React12.createElement(Avatar.Root, null, /* @__PURE__ */ React12.createElement(Avatar.Content, {
|
|
1325
1215
|
status,
|
|
1326
1216
|
hue: identity.profile?.data?.hue || fallbackValue.hue,
|
|
1327
1217
|
"data-testid": "spacePlugin.presence.member",
|
|
@@ -1335,7 +1225,7 @@ var PresenceAvatar = /* @__PURE__ */ forwardRef(({ identity, showName, match, in
|
|
|
1335
1225
|
onClick,
|
|
1336
1226
|
fallback: identity.profile?.data?.emoji || fallbackValue.emoji,
|
|
1337
1227
|
ref: forwardedRef
|
|
1338
|
-
}), /* @__PURE__ */
|
|
1228
|
+
}), /* @__PURE__ */ React12.createElement(Avatar.Label, {
|
|
1339
1229
|
classNames: showName ? "text-sm truncate pli-2" : "sr-only"
|
|
1340
1230
|
}, getName(identity)));
|
|
1341
1231
|
} finally {
|
|
@@ -1343,7 +1233,7 @@ var PresenceAvatar = /* @__PURE__ */ forwardRef(({ identity, showName, match, in
|
|
|
1343
1233
|
}
|
|
1344
1234
|
});
|
|
1345
1235
|
var SmallPresenceLive = ({ id, open, viewers }) => {
|
|
1346
|
-
var _effect =
|
|
1236
|
+
var _effect = _useSignals12();
|
|
1347
1237
|
try {
|
|
1348
1238
|
const { hasAttention, isAncestor, isRelated } = useAttention(id);
|
|
1349
1239
|
const isAttended = hasAttention || isAncestor || isRelated;
|
|
@@ -1351,13 +1241,13 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
|
|
|
1351
1241
|
const attended = useAttended();
|
|
1352
1242
|
const startOfAttention = attended.at(-1);
|
|
1353
1243
|
const path = usePath(graph, startOfAttention);
|
|
1354
|
-
const containsAttended = !open && !isAttended && id &&
|
|
1244
|
+
const containsAttended = !open && !isAttended && id && Option3.isSome(path) ? path.value.includes(id) : false;
|
|
1355
1245
|
const getActiveViewers = (viewers2) => {
|
|
1356
1246
|
const moment = Date.now();
|
|
1357
1247
|
return Array.from(viewers2.values()).filter((viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION);
|
|
1358
1248
|
};
|
|
1359
|
-
const [activeViewers, setActiveViewers] =
|
|
1360
|
-
|
|
1249
|
+
const [activeViewers, setActiveViewers] = useState7(viewers ? getActiveViewers(viewers) : []);
|
|
1250
|
+
useEffect3(() => {
|
|
1361
1251
|
if (viewers) {
|
|
1362
1252
|
setActiveViewers(getActiveViewers(viewers));
|
|
1363
1253
|
const interval = setInterval(() => {
|
|
@@ -1368,7 +1258,7 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
|
|
|
1368
1258
|
}, [
|
|
1369
1259
|
viewers
|
|
1370
1260
|
]);
|
|
1371
|
-
return /* @__PURE__ */
|
|
1261
|
+
return /* @__PURE__ */ React12.createElement(SmallPresence, {
|
|
1372
1262
|
count: activeViewers.length,
|
|
1373
1263
|
attended: isAttended,
|
|
1374
1264
|
containsAttended
|
|
@@ -1378,16 +1268,16 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
|
|
|
1378
1268
|
}
|
|
1379
1269
|
};
|
|
1380
1270
|
var SmallPresence = ({ count = 0, attended, containsAttended }) => {
|
|
1381
|
-
var _effect =
|
|
1271
|
+
var _effect = _useSignals12();
|
|
1382
1272
|
try {
|
|
1383
|
-
const { t } =
|
|
1384
|
-
return /* @__PURE__ */
|
|
1273
|
+
const { t } = useTranslation12(meta.id);
|
|
1274
|
+
return /* @__PURE__ */ React12.createElement(Tooltip.Trigger, {
|
|
1385
1275
|
asChild: true,
|
|
1386
1276
|
content: t("presence label", {
|
|
1387
1277
|
count
|
|
1388
1278
|
}),
|
|
1389
1279
|
side: "bottom"
|
|
1390
|
-
}, /* @__PURE__ */
|
|
1280
|
+
}, /* @__PURE__ */ React12.createElement(AttentionGlyph, {
|
|
1391
1281
|
attended,
|
|
1392
1282
|
containsAttended,
|
|
1393
1283
|
presence: count > 1 ? "many" : count === 1 ? "one" : "none",
|
|
@@ -1399,45 +1289,44 @@ var SmallPresence = ({ count = 0, attended, containsAttended }) => {
|
|
|
1399
1289
|
};
|
|
1400
1290
|
|
|
1401
1291
|
// src/components/SpacePluginSettings.tsx
|
|
1402
|
-
import { useSignals as
|
|
1403
|
-
import
|
|
1404
|
-
import { createIntent as createIntent8
|
|
1292
|
+
import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
|
|
1293
|
+
import React13 from "react";
|
|
1294
|
+
import { createIntent as createIntent8 } from "@dxos/app-framework";
|
|
1295
|
+
import { useIntentDispatcher as useIntentDispatcher8 } from "@dxos/app-framework/react";
|
|
1405
1296
|
import { useClient as useClient6 } from "@dxos/react-client";
|
|
1406
1297
|
import { useSpaces as useSpaces2 } from "@dxos/react-client/echo";
|
|
1407
|
-
import {
|
|
1408
|
-
import {
|
|
1298
|
+
import { IconButton as IconButton3, Input as Input4, List as List2, ListItem as ListItem2, toLocalizedString as toLocalizedString3, useTranslation as useTranslation13 } from "@dxos/react-ui";
|
|
1299
|
+
import { ControlGroup, ControlItemInput as ControlItemInput2, ControlPage as ControlPage3, ControlSection as ControlSection3, controlItemClasses as controlItemClasses2 } from "@dxos/react-ui-form";
|
|
1409
1300
|
var SpacePluginSettings = ({ settings }) => {
|
|
1410
|
-
var _effect =
|
|
1301
|
+
var _effect = _useSignals13();
|
|
1411
1302
|
try {
|
|
1412
|
-
const { t } =
|
|
1303
|
+
const { t } = useTranslation13(meta.id);
|
|
1413
1304
|
const client = useClient6();
|
|
1414
1305
|
const spaces = useSpaces2({
|
|
1415
1306
|
all: settings.showHidden
|
|
1416
1307
|
});
|
|
1417
1308
|
const { dispatchPromise: dispatch } = useIntentDispatcher8();
|
|
1418
|
-
return /* @__PURE__ */
|
|
1309
|
+
return /* @__PURE__ */ React13.createElement(ControlPage3, null, /* @__PURE__ */ React13.createElement(ControlSection3, {
|
|
1419
1310
|
title: t("space settings label"),
|
|
1420
1311
|
description: t("space settings description")
|
|
1421
|
-
}, /* @__PURE__ */
|
|
1422
|
-
|
|
1423
|
-
}, /* @__PURE__ */
|
|
1424
|
-
label: t("show hidden spaces label")
|
|
1425
|
-
}, /* @__PURE__ */ React16.createElement(Input5.Switch, {
|
|
1312
|
+
}, /* @__PURE__ */ React13.createElement(ControlGroup, null, /* @__PURE__ */ React13.createElement(ControlItemInput2, {
|
|
1313
|
+
title: t("show hidden spaces label")
|
|
1314
|
+
}, /* @__PURE__ */ React13.createElement(Input4.Switch, {
|
|
1426
1315
|
checked: settings.showHidden,
|
|
1427
1316
|
onCheckedChange: (checked) => settings.showHidden = !!checked
|
|
1428
|
-
}))), /* @__PURE__ */
|
|
1317
|
+
}))), /* @__PURE__ */ React13.createElement(List2, {
|
|
1429
1318
|
classNames: [
|
|
1430
1319
|
controlItemClasses2,
|
|
1431
1320
|
"flex flex-col gap-trimSm"
|
|
1432
1321
|
]
|
|
1433
|
-
}, spaces.map((space) => /* @__PURE__ */
|
|
1322
|
+
}, spaces.map((space) => /* @__PURE__ */ React13.createElement(ListItem2.Root, {
|
|
1434
1323
|
key: space.id,
|
|
1435
1324
|
classNames: "is-full items-center"
|
|
1436
|
-
}, /* @__PURE__ */
|
|
1325
|
+
}, /* @__PURE__ */ React13.createElement(ListItem2.Heading, {
|
|
1437
1326
|
classNames: "grow truncate !min-bs-0"
|
|
1438
1327
|
}, toLocalizedString3(getSpaceDisplayName(space, {
|
|
1439
1328
|
personal: space === client.spaces.default
|
|
1440
|
-
}), t)), /* @__PURE__ */
|
|
1329
|
+
}), t)), /* @__PURE__ */ React13.createElement(IconButton3, {
|
|
1441
1330
|
icon: "ph--faders--regular",
|
|
1442
1331
|
onClick: () => dispatch(createIntent8(SpaceAction.OpenSettings, {
|
|
1443
1332
|
space
|
|
@@ -1450,38 +1339,40 @@ var SpacePluginSettings = ({ settings }) => {
|
|
|
1450
1339
|
};
|
|
1451
1340
|
|
|
1452
1341
|
// src/components/SpaceSettings/SpaceSettingsContainer.tsx
|
|
1453
|
-
import { useSignals as
|
|
1454
|
-
import
|
|
1455
|
-
import
|
|
1456
|
-
import {
|
|
1342
|
+
import { useSignals as _useSignals14 } from "@preact-signals/safe-react/tracking";
|
|
1343
|
+
import * as Function3 from "effect/Function";
|
|
1344
|
+
import * as Schema from "effect/Schema";
|
|
1345
|
+
import React14, { useCallback as useCallback10, useMemo as useMemo3, useState as useState8 } from "react";
|
|
1346
|
+
import { LayoutAction as LayoutAction7, chain as chain2, createIntent as createIntent9 } from "@dxos/app-framework";
|
|
1347
|
+
import { useCapabilities, useIntentDispatcher as useIntentDispatcher9 } from "@dxos/app-framework/react";
|
|
1457
1348
|
import { log as log3 } from "@dxos/log";
|
|
1458
1349
|
import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata";
|
|
1459
1350
|
import { useClient as useClient7 } from "@dxos/react-client";
|
|
1460
1351
|
import { SpaceState as SpaceState2 } from "@dxos/react-client/echo";
|
|
1461
|
-
import { Button as
|
|
1462
|
-
import {
|
|
1352
|
+
import { Button as Button5, Input as Input5, useFileDownload, useMulticastObservable, useTranslation as useTranslation14 } from "@dxos/react-ui";
|
|
1353
|
+
import { ControlItem, ControlItemInput as ControlItemInput3, ControlPage as ControlPage4, ControlSection as ControlSection4, Form as Form3 } from "@dxos/react-ui-form";
|
|
1463
1354
|
import { HuePicker, IconPicker } from "@dxos/react-ui-pickers";
|
|
1464
|
-
import { StackItem as
|
|
1355
|
+
import { StackItem as StackItem3 } from "@dxos/react-ui-stack";
|
|
1465
1356
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsContainer.tsx";
|
|
1466
1357
|
var FormSchema = SpaceForm.pipe(Schema.extend(Schema.Struct({
|
|
1467
1358
|
archived: Schema.Boolean.annotations({
|
|
1468
|
-
title: "Archive
|
|
1359
|
+
title: "Archive Space"
|
|
1469
1360
|
})
|
|
1470
1361
|
})));
|
|
1471
1362
|
var SpaceSettingsContainer = ({ space }) => {
|
|
1472
|
-
var _effect =
|
|
1363
|
+
var _effect = _useSignals14();
|
|
1473
1364
|
try {
|
|
1474
|
-
const { t } =
|
|
1365
|
+
const { t } = useTranslation14(meta.id);
|
|
1475
1366
|
const { dispatchPromise: dispatch } = useIntentDispatcher9();
|
|
1476
1367
|
const client = useClient7();
|
|
1477
1368
|
const archived = useMulticastObservable(space.state) === SpaceState2.SPACE_INACTIVE;
|
|
1478
|
-
const [edgeReplication, setEdgeReplication] =
|
|
1369
|
+
const [edgeReplication, setEdgeReplication] = useState8(space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED);
|
|
1479
1370
|
const toggleEdgeReplication = useCallback10(async (next) => {
|
|
1480
1371
|
setEdgeReplication(next);
|
|
1481
1372
|
await space?.internal.setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED).catch((err) => {
|
|
1482
1373
|
log3.catch(err, void 0, {
|
|
1483
1374
|
F: __dxlog_file4,
|
|
1484
|
-
L:
|
|
1375
|
+
L: 58,
|
|
1485
1376
|
S: void 0,
|
|
1486
1377
|
C: (f, a) => f(...a)
|
|
1487
1378
|
});
|
|
@@ -1502,7 +1393,7 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1502
1393
|
space.properties.hue = properties.hue;
|
|
1503
1394
|
}
|
|
1504
1395
|
if (properties.archived && !archived) {
|
|
1505
|
-
void dispatch(
|
|
1396
|
+
void dispatch(Function3.pipe(createIntent9(SpaceAction.Close, {
|
|
1506
1397
|
space
|
|
1507
1398
|
}), chain2(LayoutAction7.SwitchWorkspace, {
|
|
1508
1399
|
part: "workspace",
|
|
@@ -1533,14 +1424,14 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1533
1424
|
]);
|
|
1534
1425
|
const customElements = useMemo3(() => ({
|
|
1535
1426
|
name: ({ type, label, getValue, onValueChange }) => {
|
|
1536
|
-
const handleChange = useCallback10(({ target: { value } }) => onValueChange(type,
|
|
1427
|
+
const handleChange = useCallback10(({ target: { value: value2 } }) => onValueChange(type, value2), [
|
|
1537
1428
|
onValueChange,
|
|
1538
1429
|
type
|
|
1539
1430
|
]);
|
|
1540
|
-
return /* @__PURE__ */
|
|
1431
|
+
return /* @__PURE__ */ React14.createElement(ControlItemInput3, {
|
|
1541
1432
|
title: label,
|
|
1542
1433
|
description: t("display name description")
|
|
1543
|
-
}, /* @__PURE__ */
|
|
1434
|
+
}, /* @__PURE__ */ React14.createElement(Input5.TextInput, {
|
|
1544
1435
|
value: getValue(),
|
|
1545
1436
|
onChange: handleChange,
|
|
1546
1437
|
placeholder: t("display name input placeholder"),
|
|
@@ -1548,23 +1439,22 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1548
1439
|
}));
|
|
1549
1440
|
},
|
|
1550
1441
|
icon: ({ type, label, getValue, onValueChange }) => {
|
|
1551
|
-
const handleChange = useCallback10((
|
|
1442
|
+
const handleChange = useCallback10((icon) => onValueChange(type, icon), [
|
|
1552
1443
|
onValueChange,
|
|
1553
1444
|
type
|
|
1554
1445
|
]);
|
|
1555
|
-
const
|
|
1446
|
+
const handleReset = useCallback10(() => onValueChange(type, void 0), [
|
|
1556
1447
|
onValueChange,
|
|
1557
1448
|
type
|
|
1558
1449
|
]);
|
|
1559
|
-
return /* @__PURE__ */
|
|
1450
|
+
return /* @__PURE__ */ React14.createElement(ControlItem, {
|
|
1560
1451
|
title: label,
|
|
1561
1452
|
description: t("icon description")
|
|
1562
|
-
}, /* @__PURE__ */
|
|
1453
|
+
}, /* @__PURE__ */ React14.createElement(IconPicker, {
|
|
1563
1454
|
value: getValue(),
|
|
1564
1455
|
onChange: handleChange,
|
|
1565
|
-
onReset:
|
|
1566
|
-
classNames: "justify-self-end"
|
|
1567
|
-
iconSize: 5
|
|
1456
|
+
onReset: handleReset,
|
|
1457
|
+
classNames: "justify-self-end"
|
|
1568
1458
|
}));
|
|
1569
1459
|
},
|
|
1570
1460
|
hue: ({ type, label, getValue, onValueChange }) => {
|
|
@@ -1572,18 +1462,18 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1572
1462
|
onValueChange,
|
|
1573
1463
|
type
|
|
1574
1464
|
]);
|
|
1575
|
-
const
|
|
1465
|
+
const handleReset = useCallback10(() => onValueChange(type, void 0), [
|
|
1576
1466
|
onValueChange,
|
|
1577
1467
|
type
|
|
1578
1468
|
]);
|
|
1579
|
-
return /* @__PURE__ */
|
|
1469
|
+
return /* @__PURE__ */ React14.createElement(ControlItem, {
|
|
1580
1470
|
title: label,
|
|
1581
1471
|
description: t("hue description")
|
|
1582
|
-
}, /* @__PURE__ */
|
|
1472
|
+
}, /* @__PURE__ */ React14.createElement(HuePicker, {
|
|
1583
1473
|
value: getValue(),
|
|
1584
1474
|
onChange: handleChange,
|
|
1585
|
-
onReset:
|
|
1586
|
-
classNames: "
|
|
1475
|
+
onReset: handleReset,
|
|
1476
|
+
classNames: "justify-self-end"
|
|
1587
1477
|
}));
|
|
1588
1478
|
},
|
|
1589
1479
|
edgeReplication: ({ type, label, getValue, onValueChange }) => {
|
|
@@ -1591,10 +1481,10 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1591
1481
|
onValueChange,
|
|
1592
1482
|
type
|
|
1593
1483
|
]);
|
|
1594
|
-
return /* @__PURE__ */
|
|
1484
|
+
return /* @__PURE__ */ React14.createElement(ControlItemInput3, {
|
|
1595
1485
|
title: label,
|
|
1596
1486
|
description: t("edge replication description")
|
|
1597
|
-
}, /* @__PURE__ */
|
|
1487
|
+
}, /* @__PURE__ */ React14.createElement(Input5.Switch, {
|
|
1598
1488
|
checked: getValue(),
|
|
1599
1489
|
onCheckedChange: handleChange,
|
|
1600
1490
|
classNames: "justify-self-end"
|
|
@@ -1606,11 +1496,12 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1606
1496
|
type,
|
|
1607
1497
|
getValue
|
|
1608
1498
|
]);
|
|
1609
|
-
return /* @__PURE__ */
|
|
1499
|
+
return /* @__PURE__ */ React14.createElement(ControlItemInput3, {
|
|
1610
1500
|
title: label,
|
|
1611
1501
|
description: t("archive space description")
|
|
1612
|
-
}, /* @__PURE__ */
|
|
1502
|
+
}, /* @__PURE__ */ React14.createElement(Button5, {
|
|
1613
1503
|
disabled: space === client.spaces.default,
|
|
1504
|
+
variant: getValue() ? "default" : "destructive",
|
|
1614
1505
|
onClick: handleChange
|
|
1615
1506
|
}, getValue() ? t("unarchive space label") : t("archive space label")));
|
|
1616
1507
|
}
|
|
@@ -1618,46 +1509,95 @@ var SpaceSettingsContainer = ({ space }) => {
|
|
|
1618
1509
|
t,
|
|
1619
1510
|
space
|
|
1620
1511
|
]);
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1512
|
+
const download = useFileDownload();
|
|
1513
|
+
const handleBackup = useCallback10(async () => {
|
|
1514
|
+
const archive = await space.internal.export();
|
|
1515
|
+
download(new Blob([
|
|
1516
|
+
archive.contents
|
|
1517
|
+
]), archive.filename);
|
|
1518
|
+
}, [
|
|
1519
|
+
space,
|
|
1520
|
+
download
|
|
1521
|
+
]);
|
|
1522
|
+
const repairs = useCapabilities(SpaceCapabilities.Repair);
|
|
1523
|
+
const handleRepair = useCallback10(async () => {
|
|
1524
|
+
await Promise.all(repairs.map((repair) => repair({
|
|
1525
|
+
space,
|
|
1526
|
+
isDefault: client.spaces.default === space
|
|
1527
|
+
})));
|
|
1528
|
+
}, [
|
|
1529
|
+
client,
|
|
1530
|
+
space,
|
|
1531
|
+
repairs
|
|
1532
|
+
]);
|
|
1533
|
+
return /* @__PURE__ */ React14.createElement(StackItem3.Content, {
|
|
1534
|
+
scrollable: true
|
|
1535
|
+
}, /* @__PURE__ */ React14.createElement(ControlPage4, null, /* @__PURE__ */ React14.createElement(ControlSection4, {
|
|
1624
1536
|
title: t("space properties settings verbose label", {
|
|
1625
|
-
ns:
|
|
1537
|
+
ns: meta.id
|
|
1626
1538
|
}),
|
|
1627
1539
|
description: t("space properties settings description", {
|
|
1628
|
-
ns:
|
|
1540
|
+
ns: meta.id
|
|
1629
1541
|
})
|
|
1630
|
-
}, /* @__PURE__ */
|
|
1542
|
+
}, /* @__PURE__ */ React14.createElement(Form3, {
|
|
1631
1543
|
schema: FormSchema,
|
|
1632
1544
|
values,
|
|
1633
1545
|
autoSave: true,
|
|
1634
1546
|
onSave: handleSave,
|
|
1635
1547
|
Custom: customElements,
|
|
1636
1548
|
outerSpacing: false,
|
|
1637
|
-
classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]
|
|
1638
|
-
}))
|
|
1549
|
+
classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]"
|
|
1550
|
+
})), /* @__PURE__ */ React14.createElement(ControlSection4, {
|
|
1551
|
+
title: t("space controls title", {
|
|
1552
|
+
ns: meta.id
|
|
1553
|
+
}),
|
|
1554
|
+
description: t("space controls description", {
|
|
1555
|
+
ns: meta.id
|
|
1556
|
+
})
|
|
1557
|
+
}, /* @__PURE__ */ React14.createElement("div", {
|
|
1558
|
+
role: "none",
|
|
1559
|
+
className: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]"
|
|
1560
|
+
}, /* @__PURE__ */ React14.createElement(ControlItemInput3, {
|
|
1561
|
+
title: t("backup space title", {
|
|
1562
|
+
ns: meta.id
|
|
1563
|
+
}),
|
|
1564
|
+
description: t("backup space description", {
|
|
1565
|
+
ns: meta.id
|
|
1566
|
+
})
|
|
1567
|
+
}, /* @__PURE__ */ React14.createElement(Button5, {
|
|
1568
|
+
onClick: handleBackup
|
|
1569
|
+
}, t("download backup label"))), /* @__PURE__ */ React14.createElement(ControlItemInput3, {
|
|
1570
|
+
title: t("repair space title", {
|
|
1571
|
+
ns: meta.id
|
|
1572
|
+
}),
|
|
1573
|
+
description: t("repair space description", {
|
|
1574
|
+
ns: meta.id
|
|
1575
|
+
})
|
|
1576
|
+
}, /* @__PURE__ */ React14.createElement(Button5, {
|
|
1577
|
+
onClick: handleRepair
|
|
1578
|
+
}, t("repair space label")))))));
|
|
1639
1579
|
} finally {
|
|
1640
1580
|
_effect.f();
|
|
1641
1581
|
}
|
|
1642
1582
|
};
|
|
1643
1583
|
|
|
1644
1584
|
// src/components/SyncStatus/InlineSyncStatus.tsx
|
|
1645
|
-
import { useSignals as
|
|
1646
|
-
import
|
|
1647
|
-
import
|
|
1648
|
-
import { useAppGraph as useAppGraph3 } from "@dxos/app-framework";
|
|
1585
|
+
import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
|
|
1586
|
+
import * as Option4 from "effect/Option";
|
|
1587
|
+
import React15, { useEffect as useEffect4, useState as useState9 } from "react";
|
|
1588
|
+
import { useAppGraph as useAppGraph3 } from "@dxos/app-framework/react";
|
|
1649
1589
|
import { EdgeStatus } from "@dxos/protocols/proto/dxos/client/services";
|
|
1650
1590
|
import { EdgeReplicationSetting as EdgeReplicationSetting2 } from "@dxos/protocols/proto/dxos/echo/metadata";
|
|
1651
1591
|
import { useClient as useClient8 } from "@dxos/react-client";
|
|
1652
1592
|
import { useSpaceSyncState } from "@dxos/react-client/echo";
|
|
1653
|
-
import { Tooltip as
|
|
1593
|
+
import { Tooltip as Tooltip2, useTranslation as useTranslation15 } from "@dxos/react-ui";
|
|
1654
1594
|
import { AttentionGlyph as AttentionGlyph2, useAttended as useAttended2, useAttention as useAttention2 } from "@dxos/react-ui-attention";
|
|
1655
1595
|
var useEdgeStatus = () => {
|
|
1656
|
-
const [status, setStatus] =
|
|
1596
|
+
const [status, setStatus] = useState9(EdgeStatus.ConnectionState.NOT_CONNECTED);
|
|
1657
1597
|
const client = useClient8();
|
|
1658
|
-
|
|
1598
|
+
useEffect4(() => {
|
|
1659
1599
|
client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status: status2 }) => {
|
|
1660
|
-
setStatus(status2);
|
|
1600
|
+
setStatus(status2.state);
|
|
1661
1601
|
});
|
|
1662
1602
|
}, [
|
|
1663
1603
|
client
|
|
@@ -1665,9 +1605,9 @@ var useEdgeStatus = () => {
|
|
|
1665
1605
|
return status;
|
|
1666
1606
|
};
|
|
1667
1607
|
var InlineSyncStatus = ({ space, open }) => {
|
|
1668
|
-
var _effect =
|
|
1608
|
+
var _effect = _useSignals15();
|
|
1669
1609
|
try {
|
|
1670
|
-
const { t } =
|
|
1610
|
+
const { t } = useTranslation15(meta.id);
|
|
1671
1611
|
const id = space.id;
|
|
1672
1612
|
const { hasAttention, isAncestor, isRelated } = useAttention2(id);
|
|
1673
1613
|
const isAttended = hasAttention || isAncestor || isRelated;
|
|
@@ -1675,16 +1615,16 @@ var InlineSyncStatus = ({ space, open }) => {
|
|
|
1675
1615
|
const attended = useAttended2();
|
|
1676
1616
|
const startOfAttention = attended.at(-1);
|
|
1677
1617
|
const path = usePath(graph, startOfAttention);
|
|
1678
|
-
const containsAttended = !open && !isAttended && id &&
|
|
1679
|
-
const connectedToEdge = useEdgeStatus() === EdgeStatus.CONNECTED;
|
|
1618
|
+
const containsAttended = !open && !isAttended && id && Option4.isSome(path) ? path.value.includes(id) : false;
|
|
1619
|
+
const connectedToEdge = useEdgeStatus() === EdgeStatus.ConnectionState.CONNECTED;
|
|
1680
1620
|
const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting2.ENABLED;
|
|
1681
1621
|
const syncState = useSpaceSyncState(space);
|
|
1682
1622
|
const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;
|
|
1683
|
-
return /* @__PURE__ */
|
|
1623
|
+
return /* @__PURE__ */ React15.createElement(Tooltip2.Trigger, {
|
|
1684
1624
|
asChild: true,
|
|
1685
1625
|
content: t("syncing label"),
|
|
1686
1626
|
side: "bottom"
|
|
1687
|
-
}, /* @__PURE__ */
|
|
1627
|
+
}, /* @__PURE__ */ React15.createElement(AttentionGlyph2, {
|
|
1688
1628
|
syncing,
|
|
1689
1629
|
attended: isAttended,
|
|
1690
1630
|
containsAttended,
|
|
@@ -1696,12 +1636,16 @@ var InlineSyncStatus = ({ space, open }) => {
|
|
|
1696
1636
|
};
|
|
1697
1637
|
|
|
1698
1638
|
// src/components/SyncStatus/SyncStatus.tsx
|
|
1699
|
-
import { useSignals as
|
|
1700
|
-
import
|
|
1639
|
+
import { useSignals as _useSignals16 } from "@preact-signals/safe-react/tracking";
|
|
1640
|
+
import React16, { useEffect as useEffect5, useState as useState10 } from "react";
|
|
1701
1641
|
import { StatusBar } from "@dxos/plugin-status-bar";
|
|
1642
|
+
import { EdgeStatus as EdgeStatus2 } from "@dxos/protocols/proto/dxos/client/services";
|
|
1702
1643
|
import { useClient as useClient9 } from "@dxos/react-client";
|
|
1644
|
+
import { useStream } from "@dxos/react-client/devtools";
|
|
1703
1645
|
import { getSyncSummary, useSyncState } from "@dxos/react-client/echo";
|
|
1704
|
-
import { Icon as
|
|
1646
|
+
import { Icon as Icon5, Popover as Popover3, useTranslation as useTranslation16 } from "@dxos/react-ui";
|
|
1647
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
1648
|
+
import { Unit } from "@dxos/util";
|
|
1705
1649
|
|
|
1706
1650
|
// src/components/SyncStatus/save-tracker.ts
|
|
1707
1651
|
import { Context } from "@dxos/context";
|
|
@@ -1797,17 +1741,13 @@ var getIcon = (status) => {
|
|
|
1797
1741
|
// src/components/SyncStatus/SyncStatus.tsx
|
|
1798
1742
|
var SYNC_STALLED_TIMEOUT = 5e3;
|
|
1799
1743
|
var SyncStatus = () => {
|
|
1800
|
-
var _effect =
|
|
1744
|
+
var _effect = _useSignals16();
|
|
1801
1745
|
try {
|
|
1802
1746
|
const client = useClient9();
|
|
1803
1747
|
const state = useSyncState();
|
|
1804
|
-
const [saved, setSaved] =
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
setSaved(state2 === "saved");
|
|
1808
|
-
});
|
|
1809
|
-
}, []);
|
|
1810
|
-
return /* @__PURE__ */ React19.createElement(SyncStatusIndicator, {
|
|
1748
|
+
const [saved, setSaved] = useState10(true);
|
|
1749
|
+
useEffect5(() => createClientSaveTracker(client, (state2) => setSaved(state2 === "saved")), []);
|
|
1750
|
+
return /* @__PURE__ */ React16.createElement(SyncStatusIndicator, {
|
|
1811
1751
|
state,
|
|
1812
1752
|
saved
|
|
1813
1753
|
});
|
|
@@ -1816,9 +1756,9 @@ var SyncStatus = () => {
|
|
|
1816
1756
|
}
|
|
1817
1757
|
};
|
|
1818
1758
|
var SyncStatusIndicator = ({ state, saved }) => {
|
|
1819
|
-
var _effect =
|
|
1759
|
+
var _effect = _useSignals16();
|
|
1820
1760
|
try {
|
|
1821
|
-
const { t } =
|
|
1761
|
+
const { t } = useTranslation16(meta.id);
|
|
1822
1762
|
const summary = getSyncSummary(state);
|
|
1823
1763
|
const offline = Object.values(state).length === 0;
|
|
1824
1764
|
const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
|
|
@@ -1829,8 +1769,8 @@ var SyncStatusIndicator = ({ state, saved }) => {
|
|
|
1829
1769
|
needsToUpload,
|
|
1830
1770
|
needsToDownload
|
|
1831
1771
|
});
|
|
1832
|
-
const [classNames, setClassNames] =
|
|
1833
|
-
|
|
1772
|
+
const [classNames, setClassNames] = useState10();
|
|
1773
|
+
useEffect5(() => {
|
|
1834
1774
|
setClassNames(void 0);
|
|
1835
1775
|
if (offline || !needsToUpload && !needsToDownload) {
|
|
1836
1776
|
return;
|
|
@@ -1845,67 +1785,262 @@ var SyncStatusIndicator = ({ state, saved }) => {
|
|
|
1845
1785
|
needsToDownload
|
|
1846
1786
|
]);
|
|
1847
1787
|
const title = t(`${status} label`);
|
|
1848
|
-
const icon = /* @__PURE__ */
|
|
1788
|
+
const icon = /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1849
1789
|
icon: getIcon(status),
|
|
1850
|
-
size: 4,
|
|
1851
1790
|
classNames
|
|
1852
1791
|
});
|
|
1853
|
-
return /* @__PURE__ */
|
|
1792
|
+
return /* @__PURE__ */ React16.createElement(Popover3.Root, null, /* @__PURE__ */ React16.createElement(Popover3.Trigger, {
|
|
1793
|
+
asChild: true
|
|
1794
|
+
}, /* @__PURE__ */ React16.createElement(StatusBar.Item, {
|
|
1854
1795
|
title
|
|
1855
|
-
}, icon);
|
|
1796
|
+
}, icon)), /* @__PURE__ */ React16.createElement(Popover3.Portal, null, /* @__PURE__ */ React16.createElement(Popover3.Content, null, /* @__PURE__ */ React16.createElement(EdgeConnectionPopover, null), /* @__PURE__ */ React16.createElement(Popover3.Arrow, null))));
|
|
1797
|
+
} finally {
|
|
1798
|
+
_effect.f();
|
|
1799
|
+
}
|
|
1800
|
+
};
|
|
1801
|
+
var useEdgeStatus2 = () => {
|
|
1802
|
+
const client = useClient9();
|
|
1803
|
+
const { status } = useStream(() => client.services.services.EdgeAgentService.queryEdgeStatus(), {});
|
|
1804
|
+
return status;
|
|
1805
|
+
};
|
|
1806
|
+
var EdgeConnectionPopover = () => {
|
|
1807
|
+
var _effect = _useSignals16();
|
|
1808
|
+
try {
|
|
1809
|
+
const status = useEdgeStatus2();
|
|
1810
|
+
const { t } = useTranslation16(meta.id);
|
|
1811
|
+
const isConnected = status?.state === EdgeStatus2.ConnectionState.CONNECTED;
|
|
1812
|
+
return /* @__PURE__ */ React16.createElement("div", {
|
|
1813
|
+
className: "min-is-[240px] p-2"
|
|
1814
|
+
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1815
|
+
className: "flex items-center gap-2 mbe-2"
|
|
1816
|
+
}, /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1817
|
+
icon: isConnected ? "ph--check-circle--regular" : "ph--warning-circle--regular",
|
|
1818
|
+
classNames: mx(isConnected ? "text-successText" : "text-errorText animate-pulse")
|
|
1819
|
+
}), /* @__PURE__ */ React16.createElement("span", {
|
|
1820
|
+
className: "font-medium text-sm"
|
|
1821
|
+
}, isConnected ? t("sync edge connected label") : t("sync edge disconnected label"))), status?.state === EdgeStatus2.ConnectionState.NOT_CONNECTED && /* @__PURE__ */ React16.createElement("div", {
|
|
1822
|
+
className: "flex items-center gap-2 text-sm text-description"
|
|
1823
|
+
}, /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1824
|
+
icon: "ph--cloud-x--regular"
|
|
1825
|
+
}), /* @__PURE__ */ React16.createElement("span", null, t("sync no connection label"))), status?.state === EdgeStatus2.ConnectionState.CONNECTED && /* @__PURE__ */ React16.createElement("div", {
|
|
1826
|
+
className: "space-y-2"
|
|
1827
|
+
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1828
|
+
className: "flex items-center justify-between text-sm"
|
|
1829
|
+
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1830
|
+
className: "flex items-center gap-2 text-description"
|
|
1831
|
+
}, /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1832
|
+
icon: "ph--timer--regular"
|
|
1833
|
+
}), /* @__PURE__ */ React16.createElement("span", null, t("sync latency label"))), /* @__PURE__ */ React16.createElement(UnitValue, {
|
|
1834
|
+
value: status.rtt,
|
|
1835
|
+
format: Unit.Millisecond
|
|
1836
|
+
})), /* @__PURE__ */ React16.createElement("div", {
|
|
1837
|
+
className: "flex items-center justify-between text-sm"
|
|
1838
|
+
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1839
|
+
className: "flex items-center gap-2 text-description"
|
|
1840
|
+
}, /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1841
|
+
icon: "ph--arrow-up--regular"
|
|
1842
|
+
}), /* @__PURE__ */ React16.createElement("span", null, t("sync upload label"))), /* @__PURE__ */ React16.createElement(UnitValue, {
|
|
1843
|
+
value: status.rateBytesUp,
|
|
1844
|
+
format: Unit.Kilobyte,
|
|
1845
|
+
suffix: "/s"
|
|
1846
|
+
})), /* @__PURE__ */ React16.createElement("div", {
|
|
1847
|
+
className: "flex items-center justify-between text-sm"
|
|
1848
|
+
}, /* @__PURE__ */ React16.createElement("div", {
|
|
1849
|
+
className: "flex items-center gap-2 text-sm text-description"
|
|
1850
|
+
}, /* @__PURE__ */ React16.createElement(Icon5, {
|
|
1851
|
+
icon: "ph--arrow-down--regular"
|
|
1852
|
+
}), /* @__PURE__ */ React16.createElement("span", null, t("sync download label"))), /* @__PURE__ */ React16.createElement(UnitValue, {
|
|
1853
|
+
value: status.rateBytesDown,
|
|
1854
|
+
format: Unit.Kilobyte,
|
|
1855
|
+
suffix: "/s"
|
|
1856
|
+
}))));
|
|
1857
|
+
} finally {
|
|
1858
|
+
_effect.f();
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
var UnitValue = ({ value: input, format, suffix }) => {
|
|
1862
|
+
var _effect = _useSignals16();
|
|
1863
|
+
try {
|
|
1864
|
+
const { formattedValue, unit } = format(input);
|
|
1865
|
+
return /* @__PURE__ */ React16.createElement("span", {
|
|
1866
|
+
className: "font-mono"
|
|
1867
|
+
}, formattedValue, /* @__PURE__ */ React16.createElement("span", {
|
|
1868
|
+
className: "mis-1 text-subdued"
|
|
1869
|
+
}, unit.symbol, suffix));
|
|
1856
1870
|
} finally {
|
|
1857
1871
|
_effect.f();
|
|
1858
1872
|
}
|
|
1859
1873
|
};
|
|
1860
1874
|
|
|
1875
|
+
// src/helpers/query.ts
|
|
1876
|
+
import * as Array2 from "effect/Array";
|
|
1877
|
+
import * as Effect3 from "effect/Effect";
|
|
1878
|
+
import * as EffectFunction from "effect/Function";
|
|
1879
|
+
import * as Match from "effect/Match";
|
|
1880
|
+
import * as Option5 from "effect/Option";
|
|
1881
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
1882
|
+
import { DXN, Filter as Filter2, Query } from "@dxos/echo";
|
|
1883
|
+
import { ReferenceAnnotationId, getTypeAnnotation as getTypeAnnotation3, unwrapOptional } from "@dxos/echo/internal";
|
|
1884
|
+
import { log as log4 } from "@dxos/log";
|
|
1885
|
+
import { Person } from "@dxos/types";
|
|
1886
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-space/src/helpers/query.ts";
|
|
1887
|
+
var evalQuery = (queryString) => {
|
|
1888
|
+
const globals = {
|
|
1889
|
+
Query,
|
|
1890
|
+
Filter: Filter2,
|
|
1891
|
+
Person
|
|
1892
|
+
};
|
|
1893
|
+
try {
|
|
1894
|
+
return new Function(...Object.keys(globals), `return ${queryString}`)(...Object.values(globals));
|
|
1895
|
+
} catch (err) {
|
|
1896
|
+
log4.catch(err, void 0, {
|
|
1897
|
+
F: __dxlog_file6,
|
|
1898
|
+
L: 33,
|
|
1899
|
+
S: void 0,
|
|
1900
|
+
C: (f, a) => f(...a)
|
|
1901
|
+
});
|
|
1902
|
+
return Query.select(Filter2.nothing());
|
|
1903
|
+
}
|
|
1904
|
+
};
|
|
1905
|
+
var resolveSchemaWithClientAndSpace = (client, space, query) => {
|
|
1906
|
+
const resolve = Effect3.fn(function* (dxn) {
|
|
1907
|
+
const typename = DXN.parse(dxn).asTypeDXN()?.type;
|
|
1908
|
+
if (!typename) {
|
|
1909
|
+
return Option5.none();
|
|
1910
|
+
}
|
|
1911
|
+
const staticSchema = client.graph.schemaRegistry.getSchema(typename);
|
|
1912
|
+
if (staticSchema) {
|
|
1913
|
+
return Option5.some(staticSchema);
|
|
1914
|
+
}
|
|
1915
|
+
const query2 = space.db.schemaRegistry.query({
|
|
1916
|
+
typename
|
|
1917
|
+
});
|
|
1918
|
+
const schemas = yield* Effect3.promise(() => query2.run());
|
|
1919
|
+
return Array2.head(schemas);
|
|
1920
|
+
});
|
|
1921
|
+
return resolveSchema(query, resolve).pipe(Effect3.map((schema) => Option5.getOrUndefined(schema)), Effect3.runPromise);
|
|
1922
|
+
};
|
|
1923
|
+
var resolveSchema = (query, resolve) => {
|
|
1924
|
+
return Match.value(query).pipe(
|
|
1925
|
+
Match.withReturnType(),
|
|
1926
|
+
// TODO(wittjosiah): Reconcile with filter match?
|
|
1927
|
+
Match.when({
|
|
1928
|
+
type: "select"
|
|
1929
|
+
}, ({ filter }) => typenameFromFilter(filter).pipe(Option5.map((typename) => resolve(typename)), Option5.getOrElse(() => Effect3.succeed(Option5.none())))),
|
|
1930
|
+
Match.when({
|
|
1931
|
+
type: "filter"
|
|
1932
|
+
}, ({ filter }) => typenameFromFilter(filter).pipe(Option5.map((typename) => resolve(typename)), Option5.getOrElse(() => Effect3.succeed(Option5.none())))),
|
|
1933
|
+
Match.when({
|
|
1934
|
+
type: "reference-traversal"
|
|
1935
|
+
}, ({ anchor, property }) => resolveSchema(anchor, resolve).pipe(Effect3.map((base) => base.pipe(Option5.map((schema) => SchemaAST.getPropertySignatures(schema.ast)), Option5.flatMap((properties) => Array2.findFirst(properties, (p) => p.name === property)), Option5.flatMap((property2) => SchemaAST.getAnnotation(ReferenceAnnotationId)(unwrapOptional(property2))), Option5.map((annotation) => annotation.typename))), Effect3.flatMap(Option5.match({
|
|
1936
|
+
onNone: () => Effect3.succeed(Option5.none()),
|
|
1937
|
+
onSome: (typename) => resolve(DXN.fromTypename(typename).toString())
|
|
1938
|
+
})))),
|
|
1939
|
+
Match.when({
|
|
1940
|
+
type: "relation",
|
|
1941
|
+
filter: Match.defined
|
|
1942
|
+
}, ({ filter }) => typenameFromFilter(filter).pipe(Option5.map((typename) => resolve(typename)), Option5.getOrElse(() => Effect3.succeed(Option5.none())))),
|
|
1943
|
+
Match.when({
|
|
1944
|
+
type: "relation-traversal"
|
|
1945
|
+
}, ({ anchor, direction }) => resolveSchema(anchor, resolve).pipe(Effect3.map((base) => base.pipe(Option5.map((schema) => getTypeAnnotation3(schema)), Option5.flatMap((annotation) => Option5.fromNullable(direction === "source" ? annotation?.sourceSchema : annotation?.targetSchema)))), Effect3.flatMap(Option5.match({
|
|
1946
|
+
onNone: () => Effect3.succeed(Option5.none()),
|
|
1947
|
+
onSome: (typename) => resolve(typename)
|
|
1948
|
+
})))),
|
|
1949
|
+
Match.when({
|
|
1950
|
+
type: "options"
|
|
1951
|
+
}, ({ query: query2 }) => resolveSchema(query2, resolve)),
|
|
1952
|
+
Match.orElse((_q) => {
|
|
1953
|
+
return Effect3.succeed(Option5.none());
|
|
1954
|
+
})
|
|
1955
|
+
);
|
|
1956
|
+
};
|
|
1957
|
+
var typenameFromFilter = (filter) => Match.value(filter).pipe(Match.withReturnType(), Match.when({
|
|
1958
|
+
type: "object"
|
|
1959
|
+
}, ({ typename }) => Option5.fromNullable(typename)), Match.when({
|
|
1960
|
+
type: "and"
|
|
1961
|
+
}, ({ filters }) => EffectFunction.pipe(filters, Array2.map(typenameFromFilter), Array2.findFirst(Option5.isSome), Option5.flatten)), Match.when({
|
|
1962
|
+
type: "or"
|
|
1963
|
+
}, ({ filters }) => EffectFunction.pipe(filters, Array2.map(typenameFromFilter), Array2.findFirst(Option5.isSome), Option5.flatten)), Match.orElse(() => Option5.none()));
|
|
1964
|
+
var getQueryTarget = (query, space) => {
|
|
1965
|
+
return Match.value(query).pipe(Match.when({
|
|
1966
|
+
type: "options"
|
|
1967
|
+
}, ({ options }) => {
|
|
1968
|
+
return Option5.fromNullable(options.queues).pipe(Option5.flatMap((queues) => Array2.head(queues)), Option5.flatMap((queueDxn) => Option5.fromNullable(DXN.tryParse(queueDxn))), Option5.flatMap((queueDxn) => Option5.fromNullable(space?.queues.get(queueDxn))), Option5.getOrElse(() => space));
|
|
1969
|
+
}), Match.orElse(() => space));
|
|
1970
|
+
};
|
|
1971
|
+
|
|
1861
1972
|
// src/components/ViewEditor.tsx
|
|
1862
|
-
import { useSignals as
|
|
1863
|
-
import
|
|
1864
|
-
import {
|
|
1865
|
-
import {
|
|
1866
|
-
import {
|
|
1973
|
+
import { useSignals as _useSignals17 } from "@preact-signals/safe-react/tracking";
|
|
1974
|
+
import * as Schema2 from "effect/Schema";
|
|
1975
|
+
import React17, { useCallback as useCallback11, useState as useState11 } from "react";
|
|
1976
|
+
import { createIntent as createIntent10 } from "@dxos/app-framework";
|
|
1977
|
+
import { useIntentDispatcher as useIntentDispatcher10 } from "@dxos/app-framework/react";
|
|
1978
|
+
import { DXN as DXN2, Filter as Filter3, Obj as Obj6, Query as Query2, Tag, Type as Type2 } from "@dxos/echo";
|
|
1867
1979
|
import { useClient as useClient10 } from "@dxos/react-client";
|
|
1868
|
-
import {
|
|
1869
|
-
import {
|
|
1870
|
-
import {
|
|
1871
|
-
|
|
1980
|
+
import { getSpace as getSpace4, useQuery as useQuery2 } from "@dxos/react-client/echo";
|
|
1981
|
+
import { useAsyncEffect } from "@dxos/react-ui";
|
|
1982
|
+
import { ViewEditor as NaturalViewEditor } from "@dxos/react-ui-form";
|
|
1983
|
+
import { View } from "@dxos/schema";
|
|
1872
1984
|
var ViewEditor = ({ view }) => {
|
|
1873
|
-
var _effect =
|
|
1985
|
+
var _effect = _useSignals17();
|
|
1874
1986
|
try {
|
|
1875
1987
|
const { dispatchPromise: dispatch } = useIntentDispatcher10();
|
|
1876
1988
|
const client = useClient10();
|
|
1877
1989
|
const space = getSpace4(view);
|
|
1878
|
-
const schema =
|
|
1879
|
-
const
|
|
1880
|
-
const
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1990
|
+
const [schema, setSchema] = useState11(() => Schema2.Struct({}));
|
|
1991
|
+
const tags = useQuery2(space, Filter3.type(Tag.Tag));
|
|
1992
|
+
const types = useTypeOptions({
|
|
1993
|
+
space,
|
|
1994
|
+
annotation: {
|
|
1995
|
+
location: [
|
|
1996
|
+
"database",
|
|
1997
|
+
"runtime"
|
|
1998
|
+
],
|
|
1999
|
+
kind: [
|
|
2000
|
+
"user"
|
|
2001
|
+
],
|
|
2002
|
+
registered: [
|
|
2003
|
+
"registered"
|
|
1891
2004
|
]
|
|
1892
|
-
}
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
2005
|
+
}
|
|
2006
|
+
});
|
|
2007
|
+
useAsyncEffect(async () => {
|
|
2008
|
+
if (!view?.query || !space) {
|
|
2009
|
+
return;
|
|
2010
|
+
}
|
|
2011
|
+
const foundSchema = await resolveSchemaWithClientAndSpace(client, space, view.query.ast);
|
|
2012
|
+
if (foundSchema && foundSchema !== schema) {
|
|
2013
|
+
setSchema(() => foundSchema);
|
|
2014
|
+
}
|
|
2015
|
+
}, [
|
|
2016
|
+
client,
|
|
2017
|
+
space,
|
|
2018
|
+
view,
|
|
2019
|
+
schema
|
|
2020
|
+
]);
|
|
2021
|
+
const handleQueryChanged = useCallback11(async (newQuery, target) => {
|
|
2022
|
+
if (!view || !space) {
|
|
2023
|
+
return;
|
|
2024
|
+
}
|
|
2025
|
+
const queue = target && DXN2.tryParse(target) ? target : void 0;
|
|
2026
|
+
const query = queue ? Query2.fromAst(newQuery).options({
|
|
2027
|
+
queues: [
|
|
2028
|
+
queue
|
|
1900
2029
|
]
|
|
1901
|
-
});
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
2030
|
+
}) : Query2.fromAst(newQuery);
|
|
2031
|
+
view.query.ast = query.ast;
|
|
2032
|
+
const newSchema = await resolveSchemaWithClientAndSpace(client, space, query.ast);
|
|
2033
|
+
if (!newSchema) {
|
|
2034
|
+
return;
|
|
1905
2035
|
}
|
|
1906
|
-
|
|
2036
|
+
const newView = View.make({
|
|
2037
|
+
query,
|
|
2038
|
+
jsonSchema: Type2.toJsonSchema(newSchema)
|
|
2039
|
+
});
|
|
2040
|
+
view.projection = Obj6.getSnapshot(newView).projection;
|
|
2041
|
+
setSchema(() => newSchema);
|
|
1907
2042
|
}, [
|
|
1908
|
-
|
|
2043
|
+
view,
|
|
1909
2044
|
schema
|
|
1910
2045
|
]);
|
|
1911
2046
|
const handleDelete = useCallback11((fieldId) => {
|
|
@@ -1920,13 +2055,16 @@ var ViewEditor = ({ view }) => {
|
|
|
1920
2055
|
if (!space || !schema) {
|
|
1921
2056
|
return null;
|
|
1922
2057
|
}
|
|
1923
|
-
return /* @__PURE__ */
|
|
2058
|
+
return /* @__PURE__ */ React17.createElement(NaturalViewEditor, {
|
|
1924
2059
|
registry: space.db.schemaRegistry,
|
|
1925
2060
|
schema,
|
|
1926
2061
|
view,
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
2062
|
+
mode: "tag",
|
|
2063
|
+
outerSpacing: false,
|
|
2064
|
+
tags,
|
|
2065
|
+
types,
|
|
2066
|
+
onQueryChanged: handleQueryChanged,
|
|
2067
|
+
onDelete: Type2.isMutable(schema) ? handleDelete : void 0
|
|
1930
2068
|
});
|
|
1931
2069
|
} finally {
|
|
1932
2070
|
_effect.f();
|
|
@@ -1935,8 +2073,10 @@ var ViewEditor = ({ view }) => {
|
|
|
1935
2073
|
|
|
1936
2074
|
// src/components/index.ts
|
|
1937
2075
|
import { lazy as lazy2 } from "react";
|
|
1938
|
-
var
|
|
1939
|
-
var ObjectDetailsPanel = lazy2(() => import("./ObjectDetailsPanel-
|
|
2076
|
+
var CollectionArticle = lazy2(() => import("./CollectionArticle-WTHWY4YS.mjs"));
|
|
2077
|
+
var ObjectDetailsPanel = lazy2(() => import("./ObjectDetailsPanel-ACGHWPDX.mjs"));
|
|
2078
|
+
var ObjectSettingsContainer = lazy2(() => import("./ObjectSettings-U3IH7BMV.mjs"));
|
|
2079
|
+
var RecordArticle = lazy2(() => import("./RecordArticle-2PFEBPXY.mjs"));
|
|
1940
2080
|
|
|
1941
2081
|
export {
|
|
1942
2082
|
AwaitingObject,
|
|
@@ -1949,14 +2089,12 @@ export {
|
|
|
1949
2089
|
JoinDialog,
|
|
1950
2090
|
MembersContainer,
|
|
1951
2091
|
MenuFooter,
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
POPOVER_RENAME_SPACE,
|
|
1957
|
-
PopoverRenameSpace,
|
|
1958
|
-
useQuerySpaceSchemas,
|
|
2092
|
+
OBJECT_RENAME_POPOVER,
|
|
2093
|
+
ObjectRenamePopover,
|
|
2094
|
+
SPACE_RENAME_POPOVER,
|
|
2095
|
+
SpaceRenamePopover,
|
|
1959
2096
|
SchemaContainer,
|
|
2097
|
+
useQuerySpaceSchemas,
|
|
1960
2098
|
SpacePresence,
|
|
1961
2099
|
FullPresence,
|
|
1962
2100
|
SmallPresenceLive,
|
|
@@ -1966,19 +2104,23 @@ export {
|
|
|
1966
2104
|
InlineSyncStatus,
|
|
1967
2105
|
SyncStatus,
|
|
1968
2106
|
SyncStatusIndicator,
|
|
2107
|
+
evalQuery,
|
|
2108
|
+
resolveSchemaWithClientAndSpace,
|
|
2109
|
+
getQueryTarget,
|
|
1969
2110
|
ViewEditor,
|
|
1970
|
-
|
|
2111
|
+
CollectionArticle,
|
|
1971
2112
|
ObjectDetailsPanel,
|
|
2113
|
+
ObjectSettingsContainer,
|
|
2114
|
+
RecordArticle,
|
|
1972
2115
|
AppGraphBuilder,
|
|
1973
2116
|
AppGraphSerializer,
|
|
1974
2117
|
IdentityCreated,
|
|
1975
2118
|
IntentResolver,
|
|
1976
2119
|
ReactRoot,
|
|
1977
2120
|
ReactSurface,
|
|
1978
|
-
|
|
1979
|
-
SchemaTools,
|
|
2121
|
+
Repair,
|
|
1980
2122
|
SpaceSettings,
|
|
1981
2123
|
SpaceState,
|
|
1982
2124
|
SpacesReady
|
|
1983
2125
|
};
|
|
1984
|
-
//# sourceMappingURL=chunk-
|
|
2126
|
+
//# sourceMappingURL=chunk-KCZ527AM.mjs.map
|