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