@dxos/plugin-space 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b
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/ObjectCardStack-TE7AWPMH.mjs +144 -0
- package/dist/lib/browser/ObjectCardStack-TE7AWPMH.mjs.map +7 -0
- package/dist/lib/browser/ObjectDetails-666IBRHE.mjs +144 -0
- package/dist/lib/browser/ObjectDetails-666IBRHE.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-USKWFIDK.mjs +551 -0
- package/dist/lib/browser/app-graph-builder-USKWFIDK.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-SXIQ425K.mjs} +19 -19
- package/dist/lib/browser/app-graph-serializer-SXIQ425K.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-5CSSKOWR.mjs} +42 -16
- package/dist/lib/browser/chunk-5CSSKOWR.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-E4BEMEZ3.mjs +399 -0
- package/dist/lib/browser/chunk-E4BEMEZ3.mjs.map +7 -0
- package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-IJCMB5B5.mjs} +269 -145
- package/dist/lib/browser/chunk-IJCMB5B5.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/{chunk-V7MJSSBQ.mjs → chunk-XKQCDLXX.mjs} +734 -615
- package/dist/lib/browser/chunk-XKQCDLXX.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 +92 -139
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-TIXVDYN7.mjs → intent-resolver-QEIM7NQT.mjs} +118 -109
- package/dist/lib/browser/intent-resolver-QEIM7NQT.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-T6ZETLD2.mjs +30 -0
- package/dist/lib/browser/react-root-T6ZETLD2.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-TPNLWJJH.mjs → react-surface-MLN5BZ2G.mjs} +120 -120
- package/dist/lib/browser/react-surface-MLN5BZ2G.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-EGTCHS7U.mjs} +5 -5
- package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-EGTCHS7U.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YS4BBZXW.mjs} +29 -20
- package/dist/lib/browser/spaces-ready-YS4BBZXW.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/ObjectCardStack-AAKMAQ6T.mjs +145 -0
- package/dist/lib/node-esm/ObjectCardStack-AAKMAQ6T.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.mjs +145 -0
- package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.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-QRQ5EQLB.mjs +552 -0
- package/dist/lib/node-esm/app-graph-builder-QRQ5EQLB.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-P2X4W7LI.mjs} +19 -19
- package/dist/lib/node-esm/app-graph-serializer-P2X4W7LI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-3D4NGZPW.mjs} +269 -145
- package/dist/lib/node-esm/chunk-3D4NGZPW.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-QQQE2ZCX.mjs +400 -0
- package/dist/lib/node-esm/chunk-QQQE2ZCX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-UMZ7G6G4.mjs} +41 -16
- package/dist/lib/node-esm/chunk-UMZ7G6G4.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-6X5DLJM5.mjs → chunk-XD532BVR.mjs} +734 -615
- package/dist/lib/node-esm/chunk-XD532BVR.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 +92 -139
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-MHGHRGDT.mjs → intent-resolver-ZWCBVABN.mjs} +118 -109
- package/dist/lib/node-esm/intent-resolver-ZWCBVABN.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-KW3TGJGY.mjs → react-root-SKB4UJ4K.mjs} +13 -12
- package/dist/lib/node-esm/react-root-SKB4UJ4K.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-UUIUUD6P.mjs → react-surface-BVZGNSBB.mjs} +120 -120
- package/dist/lib/node-esm/react-surface-BVZGNSBB.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-N3F6JCIR.mjs} +5 -5
- package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-N3F6JCIR.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-U2K5P4LB.mjs} +29 -20
- package/dist/lib/node-esm/spaces-ready-U2K5P4LB.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/ObjectCardStack/ObjectCardStack.d.ts +8 -0
- package/dist/types/src/components/ObjectCardStack/ObjectCardStack.d.ts.map +1 -0
- package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts +9 -0
- package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectCardStack/index.d.ts +3 -0
- package/dist/types/src/components/ObjectCardStack/index.d.ts.map +1 -0
- package/dist/types/src/components/{ObjectSettings → ObjectDetails}/BaseObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +1424 -0
- package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts +8 -0
- package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +8 -0
- package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetails/index.d.ts +3 -0
- package/dist/types/src/components/ObjectDetails/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/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 +1 -1
- 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 -12
- 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 +7 -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 +2 -8
- 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 +22 -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 +96 -157
- 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 +70 -59
- package/src/SpacePlugin.ts +182 -222
- package/src/capabilities/app-graph-builder.ts +271 -246
- 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 +92 -81
- package/src/capabilities/react-root.tsx +6 -4
- package/src/capabilities/react-surface.tsx +127 -155
- package/src/capabilities/repair.ts +57 -0
- package/src/capabilities/spaces-ready.ts +38 -17
- 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 +65 -43
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +45 -22
- 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/ObjectCardStack/ObjectCardStack.tsx +64 -0
- package/src/components/ObjectCardStack/ObjectForm.tsx +90 -0
- package/src/components/ObjectCardStack/index.ts +7 -0
- package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectDetails/BaseObjectSettings.tsx +118 -0
- package/src/components/{ObjectSettings → ObjectDetails}/ForeignKeys.tsx +8 -8
- package/src/components/ObjectDetails/ObjectDetails.tsx +35 -0
- package/src/components/ObjectDetails/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/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 +190 -155
- 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 +56 -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 +152 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useActiveSpace.ts +3 -2
- package/src/hooks/useInputSurfaceLookup.tsx +9 -13
- package/src/hooks/usePath.ts +1 -1
- package/src/hooks/useTypeOptions.ts +25 -0
- package/src/index.ts +1 -0
- package/src/meta.ts +6 -3
- package/src/translations.ts +68 -58
- package/src/types/form.ts +69 -0
- package/src/types/index.ts +1 -0
- package/src/types/types.ts +51 -52
- package/src/util.tsx +269 -147
- 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-7CZZJS3S.mjs +0 -479
- package/dist/lib/browser/app-graph-builder-7CZZJS3S.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-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-V7MJSSBQ.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-TIXVDYN7.mjs.map +0 -7
- package/dist/lib/browser/react-root-N2J7TDRX.mjs +0 -29
- package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-TPNLWJJH.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-KGIGWC72.mjs +0 -480
- package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.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-6X5DLJM5.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-MHGHRGDT.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-UUIUUD6P.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/ObjectSettings/AdvancedObjectSettings.d.ts +0 -7
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +0 -8
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +0 -8
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts +0 -2
- package/dist/types/src/components/ObjectSettings/index.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/ObjectSettings/AdvancedObjectSettings.tsx +0 -80
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -36
- package/src/components/ObjectSettings/index.ts +0 -5
- package/src/components/PersistenceStatus.tsx +0 -83
|
@@ -2,80 +2,70 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
|
+
import type * as Schema from 'effect/Schema';
|
|
7
|
+
import React, { useCallback } from 'react';
|
|
7
8
|
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
createSurface,
|
|
12
|
-
Surface,
|
|
13
|
-
useCapabilities,
|
|
14
|
-
useCapability,
|
|
15
|
-
useLayout,
|
|
16
|
-
} from '@dxos/app-framework';
|
|
17
|
-
import { Obj, Type } from '@dxos/echo';
|
|
9
|
+
import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
|
|
10
|
+
import { Surface, useCapability, useLayout } from '@dxos/app-framework/react';
|
|
11
|
+
import { Obj, type Ref } from '@dxos/echo';
|
|
18
12
|
import { findAnnotation } from '@dxos/effect';
|
|
19
13
|
import { SettingsStore } from '@dxos/local-storage';
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
fullyQualifiedId,
|
|
24
|
-
getSpace,
|
|
25
|
-
isLiveObject,
|
|
26
|
-
isSpace,
|
|
27
|
-
parseId,
|
|
28
|
-
SpaceState,
|
|
29
|
-
useSpace,
|
|
30
|
-
type Space,
|
|
31
|
-
} from '@dxos/react-client/echo';
|
|
32
|
-
import { Input, useTranslation } from '@dxos/react-ui';
|
|
33
|
-
import { type InputProps, SelectInput } from '@dxos/react-ui-form';
|
|
14
|
+
import { type Space, SpaceState, getSpace, isLiveObject, isSpace, parseId, useSpace } from '@dxos/react-client/echo';
|
|
15
|
+
import { Input } from '@dxos/react-ui';
|
|
16
|
+
import { type FormFieldComponentProps, SelectField } from '@dxos/react-ui-form';
|
|
34
17
|
import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
35
|
-
import {
|
|
18
|
+
import { Collection, type View, ViewAnnotation } from '@dxos/schema';
|
|
36
19
|
import { type JoinPanelProps } from '@dxos/shell/react';
|
|
37
20
|
|
|
38
|
-
import { SpaceCapabilities } from './capabilities';
|
|
39
21
|
import {
|
|
40
|
-
CollectionMain,
|
|
41
|
-
CollectionSection,
|
|
42
22
|
CREATE_OBJECT_DIALOG,
|
|
43
23
|
CREATE_SPACE_DIALOG,
|
|
24
|
+
CollectionArticle,
|
|
25
|
+
CollectionSection,
|
|
44
26
|
CreateObjectDialog,
|
|
27
|
+
type CreateObjectDialogProps,
|
|
45
28
|
CreateSpaceDialog,
|
|
46
29
|
InlineSyncStatus,
|
|
47
30
|
JOIN_DIALOG,
|
|
48
31
|
JoinDialog,
|
|
49
32
|
MembersContainer,
|
|
50
33
|
MenuFooter,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
34
|
+
OBJECT_RENAME_POPOVER,
|
|
35
|
+
ObjectCardStack,
|
|
36
|
+
ObjectDetails,
|
|
37
|
+
ObjectRenamePopover,
|
|
38
|
+
RecordArticle,
|
|
39
|
+
SPACE_RENAME_POPOVER,
|
|
57
40
|
SchemaContainer,
|
|
58
41
|
SmallPresenceLive,
|
|
59
42
|
SpacePluginSettings,
|
|
60
43
|
SpacePresence,
|
|
44
|
+
SpaceRenamePopover,
|
|
61
45
|
SpaceSettingsContainer,
|
|
62
46
|
SyncStatus,
|
|
63
47
|
ViewEditor,
|
|
64
|
-
type CreateObjectDialogProps,
|
|
65
48
|
} from '../components';
|
|
66
|
-
import {
|
|
67
|
-
import {
|
|
49
|
+
import { useTypeOptions } from '../hooks';
|
|
50
|
+
import { meta } from '../meta';
|
|
51
|
+
import {
|
|
52
|
+
HueAnnotationId,
|
|
53
|
+
IconAnnotationId,
|
|
54
|
+
type SpaceSettingsProps,
|
|
55
|
+
type TypeInputOptions,
|
|
56
|
+
TypeInputOptionsAnnotationId,
|
|
57
|
+
} from '../types';
|
|
58
|
+
|
|
59
|
+
import { SpaceCapabilities } from './capabilities';
|
|
68
60
|
|
|
69
61
|
type ReactSurfaceOptions = {
|
|
70
62
|
createInvitationUrl: (invitationCode: string) => string;
|
|
71
63
|
};
|
|
72
64
|
|
|
73
|
-
const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
|
|
74
|
-
|
|
75
65
|
export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
76
66
|
contributes(Capabilities.ReactSurface, [
|
|
77
67
|
createSurface({
|
|
78
|
-
id: `${
|
|
68
|
+
id: `${meta.id}/article`,
|
|
79
69
|
role: 'article',
|
|
80
70
|
filter: (data): data is { subject: Space } =>
|
|
81
71
|
// TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
|
|
@@ -84,7 +74,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
84
74
|
<Surface
|
|
85
75
|
data={{
|
|
86
76
|
id: data.subject.id,
|
|
87
|
-
subject: data.subject.properties[
|
|
77
|
+
subject: data.subject.properties[Collection.Collection.typename]?.target,
|
|
88
78
|
}}
|
|
89
79
|
role={role}
|
|
90
80
|
{...rest}
|
|
@@ -92,30 +82,37 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
92
82
|
),
|
|
93
83
|
}),
|
|
94
84
|
createSurface({
|
|
95
|
-
id: `${
|
|
85
|
+
id: `${meta.id}/record-article`,
|
|
96
86
|
role: 'article',
|
|
97
87
|
position: 'fallback',
|
|
98
|
-
filter: (data): data is { subject:
|
|
99
|
-
component: ({ data }) => <
|
|
88
|
+
filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
|
|
89
|
+
component: ({ data }) => <RecordArticle subject={data.subject} />,
|
|
90
|
+
}),
|
|
91
|
+
createSurface({
|
|
92
|
+
id: `${meta.id}/collection-fallback`,
|
|
93
|
+
role: 'article',
|
|
94
|
+
position: 'fallback',
|
|
95
|
+
filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
|
|
96
|
+
component: ({ data }) => <CollectionArticle subject={data.subject} />,
|
|
100
97
|
}),
|
|
101
98
|
createSurface({
|
|
102
|
-
id: `${
|
|
99
|
+
id: `${meta.id}/plugin-settings`,
|
|
103
100
|
role: 'article',
|
|
104
101
|
filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
|
|
105
|
-
data.subject instanceof SettingsStore && data.subject.prefix ===
|
|
102
|
+
data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
|
|
106
103
|
component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
|
|
107
104
|
}),
|
|
108
105
|
createSurface({
|
|
109
|
-
id: `${
|
|
106
|
+
id: `${meta.id}/companion/object-settings`,
|
|
110
107
|
role: 'article',
|
|
111
108
|
filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
|
|
112
|
-
component: ({ data, role }) => <
|
|
109
|
+
component: ({ ref, data, role }) => <ObjectDetails object={data.companionTo} role={role} ref={ref} />,
|
|
113
110
|
}),
|
|
114
111
|
createSurface({
|
|
115
|
-
id: `${
|
|
112
|
+
id: `${meta.id}/space-settings-properties`,
|
|
116
113
|
role: 'article',
|
|
117
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
118
|
-
component: () => {
|
|
114
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
|
|
115
|
+
component: ({ ref }) => {
|
|
119
116
|
const layout = useLayout();
|
|
120
117
|
const { spaceId } = parseId(layout.workspace);
|
|
121
118
|
const space = useSpace(spaceId);
|
|
@@ -123,14 +120,14 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
123
120
|
return null;
|
|
124
121
|
}
|
|
125
122
|
|
|
126
|
-
return <SpaceSettingsContainer space={space} />;
|
|
123
|
+
return <SpaceSettingsContainer space={space} ref={ref} />;
|
|
127
124
|
},
|
|
128
125
|
}),
|
|
129
126
|
createSurface({
|
|
130
|
-
id: `${
|
|
127
|
+
id: `${meta.id}/space-settings-members`,
|
|
131
128
|
role: 'article',
|
|
132
129
|
position: 'hoist',
|
|
133
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
130
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
|
|
134
131
|
component: () => {
|
|
135
132
|
const layout = useLayout();
|
|
136
133
|
const { spaceId } = parseId(layout.workspace);
|
|
@@ -143,9 +140,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
143
140
|
},
|
|
144
141
|
}),
|
|
145
142
|
createSurface({
|
|
146
|
-
id: `${
|
|
143
|
+
id: `${meta.id}/space-settings-schema`,
|
|
147
144
|
role: 'article',
|
|
148
|
-
filter: (data): data is { subject: string } => data.subject === `${
|
|
145
|
+
filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
|
|
149
146
|
component: () => {
|
|
150
147
|
const layout = useLayout();
|
|
151
148
|
const { spaceId } = parseId(layout.workspace);
|
|
@@ -158,15 +155,26 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
158
155
|
},
|
|
159
156
|
}),
|
|
160
157
|
createSurface({
|
|
161
|
-
id: `${
|
|
158
|
+
id: `${meta.id}/selected-objects`,
|
|
162
159
|
role: 'article',
|
|
163
|
-
filter: (data): data is { companionTo:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
160
|
+
filter: (data): data is { companionTo: Obj.Obj<{ view: Ref.Ref<View.View> }>; subject: 'selected-objects' } => {
|
|
161
|
+
if (data.subject !== 'selected-objects' || !Obj.isObject(data.companionTo)) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// TODO(burdon): Check companionTo.view.target is valid.
|
|
166
|
+
const schema = Obj.getSchema(data.companionTo);
|
|
167
|
+
return Option.fromNullable(schema).pipe(
|
|
168
|
+
Option.flatMap((schema) => ViewAnnotation.get(schema)),
|
|
169
|
+
Option.getOrElse(() => false),
|
|
170
|
+
);
|
|
171
|
+
},
|
|
172
|
+
component: ({ data, ref }) => (
|
|
173
|
+
<ObjectCardStack
|
|
174
|
+
key={Obj.getDXN(data.companionTo).toString()}
|
|
175
|
+
objectId={Obj.getDXN(data.companionTo).toString()}
|
|
176
|
+
view={data.companionTo.view.target!}
|
|
177
|
+
ref={ref}
|
|
170
178
|
/>
|
|
171
179
|
),
|
|
172
180
|
}),
|
|
@@ -189,149 +197,113 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
189
197
|
component: ({ data }) => <CreateObjectDialog {...data.props} />,
|
|
190
198
|
}),
|
|
191
199
|
createSurface({
|
|
192
|
-
id: `${
|
|
200
|
+
id: `${meta.id}/create-initial-space-form-[hue]`,
|
|
193
201
|
role: 'form-input',
|
|
194
202
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
195
203
|
const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
|
|
196
204
|
return !!annotation;
|
|
197
205
|
},
|
|
198
206
|
component: ({ data: _, ...inputProps }) => {
|
|
199
|
-
const { label,
|
|
207
|
+
const { label, readonly, type, getValue, onValueChange } = inputProps as any as FormFieldComponentProps;
|
|
200
208
|
const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
|
|
201
209
|
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
|
|
202
210
|
return (
|
|
203
211
|
<Input.Root>
|
|
204
212
|
<Input.Label>{label}</Input.Label>
|
|
205
|
-
<HuePicker disabled={
|
|
213
|
+
<HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
|
|
206
214
|
</Input.Root>
|
|
207
215
|
);
|
|
208
216
|
},
|
|
209
217
|
}),
|
|
210
218
|
createSurface({
|
|
211
|
-
id: `${
|
|
219
|
+
id: `${meta.id}/create-initial-space-form-[icon]`,
|
|
212
220
|
role: 'form-input',
|
|
213
221
|
filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
|
|
214
222
|
const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
|
|
215
223
|
return !!annotation;
|
|
216
224
|
},
|
|
217
225
|
component: ({ data: _, ...inputProps }) => {
|
|
218
|
-
const { label,
|
|
226
|
+
const { label, readonly, type, getValue, onValueChange } = inputProps as any as FormFieldComponentProps;
|
|
219
227
|
const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
|
|
220
228
|
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
|
|
221
229
|
return (
|
|
222
230
|
<Input.Root>
|
|
223
231
|
<Input.Label>{label}</Input.Label>
|
|
224
|
-
<IconPicker disabled={
|
|
232
|
+
<IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
|
|
225
233
|
</Input.Root>
|
|
226
234
|
);
|
|
227
235
|
},
|
|
228
236
|
}),
|
|
229
237
|
createSurface({
|
|
230
|
-
id: `${
|
|
238
|
+
id: `${meta.id}/typename-form-input`,
|
|
231
239
|
role: 'form-input',
|
|
232
240
|
filter: (
|
|
233
241
|
data,
|
|
234
|
-
): data is {
|
|
242
|
+
): data is {
|
|
243
|
+
prop: string;
|
|
244
|
+
schema: Schema.Schema.Any;
|
|
245
|
+
target: Space | Collection.Collection | undefined;
|
|
246
|
+
} => {
|
|
235
247
|
if (data.prop !== 'typename') {
|
|
236
248
|
return false;
|
|
237
249
|
}
|
|
238
250
|
|
|
239
|
-
const annotation = findAnnotation((data.schema as Schema.Schema.All).ast,
|
|
251
|
+
const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypeInputOptionsAnnotationId);
|
|
240
252
|
return !!annotation;
|
|
241
253
|
},
|
|
242
254
|
component: ({ data: { schema, target }, ...inputProps }) => {
|
|
243
|
-
const
|
|
244
|
-
const client = useClient();
|
|
245
|
-
const props = inputProps as any as InputProps;
|
|
255
|
+
const props = inputProps as any as FormFieldComponentProps;
|
|
246
256
|
const space = isSpace(target) ? target : getSpace(target);
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
|
|
252
|
-
|
|
253
|
-
const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
254
|
-
const whitelistedTypenames = useMemo(
|
|
255
|
-
() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
|
|
256
|
-
[schemaWhitelists],
|
|
257
|
-
);
|
|
258
|
-
|
|
259
|
-
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
260
|
-
const objectFormTypenames = useMemo(
|
|
261
|
-
() =>
|
|
262
|
-
new Set(
|
|
263
|
-
objectForms
|
|
264
|
-
.map((form) => Type.getTypename(form.objectSchema))
|
|
265
|
-
// TODO(wittjosiah): Remove.
|
|
266
|
-
.filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
|
|
267
|
-
),
|
|
268
|
-
[objectForms],
|
|
269
|
-
);
|
|
270
|
-
|
|
271
|
-
const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
|
|
272
|
-
const limitedStatic =
|
|
273
|
-
annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
|
|
274
|
-
const unusedStatic =
|
|
275
|
-
annotation.includes('unused-static') &&
|
|
276
|
-
whitelistedTypenames.has(Type.getTypename(schema)) &&
|
|
277
|
-
!space.properties.staticRecords?.includes(Type.getTypename(schema));
|
|
278
|
-
const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
|
|
279
|
-
return annotation.includes('static') || limitedStatic || unusedStatic || objectForm;
|
|
280
|
-
});
|
|
281
|
-
const dynamic = space?.db.schemaRegistry.query().runSync();
|
|
282
|
-
const typenames = Array.from(
|
|
283
|
-
new Set<string>([
|
|
284
|
-
...(annotation.includes('limited-static') ||
|
|
285
|
-
annotation.includes('unused-static') ||
|
|
286
|
-
annotation.includes('static') ||
|
|
287
|
-
annotation.includes('object-form')
|
|
288
|
-
? fixed.map((schema) => Type.getTypename(schema))
|
|
289
|
-
: []),
|
|
290
|
-
...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
|
|
291
|
-
]),
|
|
292
|
-
).sort();
|
|
293
|
-
|
|
294
|
-
const options = useMemo(
|
|
295
|
-
() =>
|
|
296
|
-
typenames
|
|
297
|
-
.map((typename) => ({
|
|
298
|
-
value: typename,
|
|
299
|
-
label: t('typename label', { ns: typename, defaultValue: typename }),
|
|
300
|
-
}))
|
|
301
|
-
.toSorted((a, b) => a.label.localeCompare(b.label)),
|
|
302
|
-
[t, typenames],
|
|
303
|
-
);
|
|
257
|
+
const annotation = findAnnotation<TypeInputOptions>(schema.ast, TypeInputOptionsAnnotationId)!;
|
|
258
|
+
const options = useTypeOptions({ space, annotation });
|
|
304
259
|
|
|
305
|
-
return <
|
|
260
|
+
return <SelectField {...props} options={options} />;
|
|
306
261
|
},
|
|
307
262
|
}),
|
|
308
263
|
createSurface({
|
|
309
|
-
id: `${
|
|
264
|
+
id: `${meta.id}/object-settings`,
|
|
310
265
|
role: 'object-settings',
|
|
311
|
-
filter: (data): data is { subject:
|
|
312
|
-
|
|
266
|
+
filter: (data): data is { subject: { view: Ref.Ref<View.View> } } => {
|
|
267
|
+
if (!Obj.isObject(data.subject)) {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const schema = Obj.getSchema(data.subject);
|
|
272
|
+
return Option.fromNullable(schema).pipe(
|
|
273
|
+
Option.flatMap((schema) => ViewAnnotation.get(schema)),
|
|
274
|
+
Option.getOrElse(() => false),
|
|
275
|
+
);
|
|
276
|
+
},
|
|
277
|
+
component: ({ data }) => {
|
|
278
|
+
const view = data.subject.view.target;
|
|
279
|
+
if (!view) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return <ViewEditor view={view} />;
|
|
284
|
+
},
|
|
313
285
|
}),
|
|
314
286
|
createSurface({
|
|
315
|
-
id:
|
|
287
|
+
id: SPACE_RENAME_POPOVER,
|
|
316
288
|
role: 'card--popover',
|
|
317
|
-
filter: (data): data is { props: Space } => data.component ===
|
|
318
|
-
component: ({ data }) => <
|
|
289
|
+
filter: (data): data is { props: Space } => data.component === SPACE_RENAME_POPOVER && isSpace(data.props),
|
|
290
|
+
component: ({ data }) => <SpaceRenamePopover space={data.props} />,
|
|
319
291
|
}),
|
|
320
292
|
createSurface({
|
|
321
|
-
id:
|
|
293
|
+
id: OBJECT_RENAME_POPOVER,
|
|
322
294
|
role: 'card--popover',
|
|
323
295
|
filter: (data): data is { props: Obj.Any } =>
|
|
324
|
-
data.component ===
|
|
325
|
-
component: ({ data }) => <
|
|
296
|
+
data.component === OBJECT_RENAME_POPOVER && isLiveObject(data.props),
|
|
297
|
+
component: ({ data }) => <ObjectRenamePopover object={data.props} />,
|
|
326
298
|
}),
|
|
327
299
|
createSurface({
|
|
328
|
-
id: `${
|
|
300
|
+
id: `${meta.id}/menu-footer`,
|
|
329
301
|
role: 'menu-footer',
|
|
330
302
|
filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
|
|
331
303
|
component: ({ data }) => <MenuFooter object={data.subject} />,
|
|
332
304
|
}),
|
|
333
305
|
createSurface({
|
|
334
|
-
id: `${
|
|
306
|
+
id: `${meta.id}/navtree-presence`,
|
|
335
307
|
role: 'navtree-item-end',
|
|
336
308
|
filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
|
|
337
309
|
typeof data.id === 'string' && Obj.isObject(data.subject),
|
|
@@ -343,7 +315,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
343
315
|
}),
|
|
344
316
|
// TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
|
|
345
317
|
createSurface({
|
|
346
|
-
id: `${
|
|
318
|
+
id: `${meta.id}/navtree-presence-fallback`,
|
|
347
319
|
role: 'navtree-item-end',
|
|
348
320
|
position: 'fallback',
|
|
349
321
|
filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
|
|
@@ -351,13 +323,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
351
323
|
}),
|
|
352
324
|
// TODO(wittjosiah): Broken?
|
|
353
325
|
createSurface({
|
|
354
|
-
id: `${
|
|
326
|
+
id: `${meta.id}/navtree-sync-status`,
|
|
355
327
|
role: 'navtree-item-end',
|
|
356
328
|
filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
|
|
357
329
|
component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
|
|
358
330
|
}),
|
|
359
331
|
createSurface({
|
|
360
|
-
id: `${
|
|
332
|
+
id: `${meta.id}/navbar-presence`,
|
|
361
333
|
role: 'navbar-end',
|
|
362
334
|
position: 'hoist',
|
|
363
335
|
filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
|
|
@@ -365,7 +337,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
365
337
|
const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
|
|
366
338
|
const object = isSpace(data.subject)
|
|
367
339
|
? data.subject.state.get() === SpaceState.SPACE_READY
|
|
368
|
-
? (space?.properties[
|
|
340
|
+
? (space?.properties[Collection.Collection.typename]?.target as Collection.Collection)
|
|
369
341
|
: undefined
|
|
370
342
|
: data.subject;
|
|
371
343
|
|
|
@@ -373,13 +345,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
|
|
|
373
345
|
},
|
|
374
346
|
}),
|
|
375
347
|
createSurface({
|
|
376
|
-
id: `${
|
|
348
|
+
id: `${meta.id}/collection-section`,
|
|
377
349
|
role: 'section',
|
|
378
|
-
filter: (data): data is { subject:
|
|
379
|
-
component: ({ data }) => <CollectionSection
|
|
350
|
+
filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
|
|
351
|
+
component: ({ data }) => <CollectionSection subject={data.subject} />,
|
|
380
352
|
}),
|
|
381
353
|
createSurface({
|
|
382
|
-
id: `${
|
|
354
|
+
id: `${meta.id}/status`,
|
|
383
355
|
role: 'status',
|
|
384
356
|
component: () => <SyncStatus />,
|
|
385
357
|
}),
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { contributes } from '@dxos/app-framework';
|
|
6
|
+
import { Obj, Ref, Type } from '@dxos/echo';
|
|
7
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
8
|
+
import { Collection } from '@dxos/schema';
|
|
9
|
+
|
|
10
|
+
import { SpaceCapabilities } from './capabilities';
|
|
11
|
+
|
|
12
|
+
export default () =>
|
|
13
|
+
contributes(SpaceCapabilities.Repair, async ({ space }) => {
|
|
14
|
+
await removeQueryCollections(space);
|
|
15
|
+
await ensureSystemCollection(space);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Remove all existing query collections from the root collection.
|
|
20
|
+
*/
|
|
21
|
+
const removeQueryCollections = async (space: Space) => {
|
|
22
|
+
const rootCollection: Collection.Collection = await space.properties[Collection.Collection.typename]?.load();
|
|
23
|
+
if (!rootCollection) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));
|
|
28
|
+
const queryCollections = objects.filter((object) => Obj.getTypename(object) === 'dxos.org/type/QueryCollection');
|
|
29
|
+
if (queryCollections.length === 0) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
rootCollection.objects = objects
|
|
34
|
+
.filter((object) => Obj.getTypename(object) !== 'dxos.org/type/QueryCollection')
|
|
35
|
+
.map((object) => Ref.make(object));
|
|
36
|
+
queryCollections.forEach((object) => space.db.remove(object));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Ensure the root collection has a system collection for StoredSchema.
|
|
41
|
+
*/
|
|
42
|
+
const ensureSystemCollection = async (space: Space) => {
|
|
43
|
+
const rootCollection: Collection.Collection = await space.properties[Collection.Collection.typename]?.load();
|
|
44
|
+
if (!rootCollection) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));
|
|
49
|
+
const records = objects.find(
|
|
50
|
+
(object) => Obj.instanceOf(Collection.Managed, object) && object.key === Type.getTypename(Type.PersistentType),
|
|
51
|
+
);
|
|
52
|
+
if (records) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
rootCollection.objects.push(Ref.make(Collection.makeManaged({ key: Type.getTypename(Type.PersistentType) })));
|
|
57
|
+
};
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
8
8
|
import { SubscriptionList } from '@dxos/async';
|
|
9
9
|
import { Filter, Obj, Type } from '@dxos/echo';
|
|
10
10
|
import { scheduledEffect } from '@dxos/echo-signals/core';
|
|
@@ -14,16 +14,20 @@ import { ClientCapabilities } from '@dxos/plugin-client';
|
|
|
14
14
|
import { DeckCapabilities } from '@dxos/plugin-deck';
|
|
15
15
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
16
16
|
import { PublicKey } from '@dxos/react-client';
|
|
17
|
-
import {
|
|
17
|
+
import { SpaceState, parseId } from '@dxos/react-client/echo';
|
|
18
18
|
import { ComplexMap, reduceGroupBy } from '@dxos/util';
|
|
19
19
|
|
|
20
|
-
import { SpaceCapabilities } from './capabilities';
|
|
21
20
|
import { SpaceAction } from '../types';
|
|
22
21
|
import { COMPOSER_SPACE_LOCK, SHARED } from '../util';
|
|
23
22
|
|
|
23
|
+
import { SpaceCapabilities } from './capabilities';
|
|
24
|
+
|
|
24
25
|
const ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;
|
|
25
26
|
const WAIT_FOR_OBJECT_TIMEOUT = 5_000;
|
|
26
27
|
|
|
28
|
+
// E.g., dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
|
|
29
|
+
const ECHO_DXN_LENGTH = 3 + 1 + 4 + 1 + 33 + 1 + 26;
|
|
30
|
+
|
|
27
31
|
export default async (context: PluginContext) => {
|
|
28
32
|
const subscriptions = new SubscriptionList();
|
|
29
33
|
const spaceSubscriptions = new SubscriptionList();
|
|
@@ -40,7 +44,12 @@ export default async (context: PluginContext) => {
|
|
|
40
44
|
await defaultSpace.waitUntilReady();
|
|
41
45
|
|
|
42
46
|
if (deck?.activeDeck === 'default') {
|
|
43
|
-
await dispatch(
|
|
47
|
+
await dispatch(
|
|
48
|
+
createIntent(LayoutAction.SwitchWorkspace, {
|
|
49
|
+
part: 'workspace',
|
|
50
|
+
subject: defaultSpace.id,
|
|
51
|
+
}),
|
|
52
|
+
);
|
|
44
53
|
}
|
|
45
54
|
|
|
46
55
|
// Initialize space sharing lock in default space.
|
|
@@ -48,9 +57,7 @@ export default async (context: PluginContext) => {
|
|
|
48
57
|
defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;
|
|
49
58
|
}
|
|
50
59
|
|
|
51
|
-
const {
|
|
52
|
-
objects: [spacesOrder],
|
|
53
|
-
} = await defaultSpace.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
|
|
60
|
+
const [spacesOrder] = await defaultSpace.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
|
|
54
61
|
if (!spacesOrder) {
|
|
55
62
|
// TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.
|
|
56
63
|
// Instead, we store order as an array of space ids.
|
|
@@ -66,12 +73,14 @@ export default async (context: PluginContext) => {
|
|
|
66
73
|
return;
|
|
67
74
|
}
|
|
68
75
|
|
|
69
|
-
const
|
|
70
|
-
|
|
76
|
+
const id = active[0];
|
|
77
|
+
const node = graph.getNode(id).pipe(Option.getOrNull);
|
|
78
|
+
if (!node && id.length === ECHO_DXN_LENGTH) {
|
|
79
|
+
void graph.initialize(id);
|
|
71
80
|
const timeout = setTimeout(async () => {
|
|
72
|
-
const node = graph.getNode(
|
|
81
|
+
const node = graph.getNode(id).pipe(Option.getOrNull);
|
|
73
82
|
if (!node) {
|
|
74
|
-
await dispatch(createIntent(SpaceAction.WaitForObject, { id
|
|
83
|
+
await dispatch(createIntent(SpaceAction.WaitForObject, { id }));
|
|
75
84
|
}
|
|
76
85
|
}, WAIT_FOR_OBJECT_TIMEOUT);
|
|
77
86
|
|
|
@@ -95,7 +104,13 @@ export default async (context: PluginContext) => {
|
|
|
95
104
|
subscriptions.add(
|
|
96
105
|
scheduledEffect(
|
|
97
106
|
() => ({ name: space.properties.name }),
|
|
98
|
-
({ name }) =>
|
|
107
|
+
({ name }) => {
|
|
108
|
+
if (!name) {
|
|
109
|
+
delete state.spaceNames[space.id];
|
|
110
|
+
} else {
|
|
111
|
+
state.spaceNames[space.id] = name;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
99
114
|
),
|
|
100
115
|
);
|
|
101
116
|
});
|
|
@@ -105,7 +120,11 @@ export default async (context: PluginContext) => {
|
|
|
105
120
|
// Broadcast active node to other peers in the space.
|
|
106
121
|
subscriptions.add(
|
|
107
122
|
scheduledEffect(
|
|
108
|
-
() => ({
|
|
123
|
+
() => ({
|
|
124
|
+
current: attention.current,
|
|
125
|
+
active: layout.active,
|
|
126
|
+
inactive: layout.inactive,
|
|
127
|
+
}),
|
|
109
128
|
({ current, active, inactive }) => {
|
|
110
129
|
const send = () => {
|
|
111
130
|
const spaces = client.spaces.get();
|
|
@@ -114,7 +133,7 @@ export default async (context: PluginContext) => {
|
|
|
114
133
|
// Group parts by space for efficient messaging.
|
|
115
134
|
const idsBySpace = reduceGroupBy(active, (id) => {
|
|
116
135
|
try {
|
|
117
|
-
const
|
|
136
|
+
const { spaceId } = parseId(id);
|
|
118
137
|
return spaceId;
|
|
119
138
|
} catch {
|
|
120
139
|
return null;
|
|
@@ -123,7 +142,7 @@ export default async (context: PluginContext) => {
|
|
|
123
142
|
|
|
124
143
|
const removedBySpace = reduceGroupBy(inactive, (id) => {
|
|
125
144
|
try {
|
|
126
|
-
const
|
|
145
|
+
const { spaceId } = parseId(id);
|
|
127
146
|
return spaceId;
|
|
128
147
|
} catch {
|
|
129
148
|
return null;
|
|
@@ -153,7 +172,9 @@ export default async (context: PluginContext) => {
|
|
|
153
172
|
})
|
|
154
173
|
// TODO(burdon): This seems defensive; why would this fail? Backoff interval.
|
|
155
174
|
.catch((err) => {
|
|
156
|
-
log.warn('Failed to broadcast active node for presence.', {
|
|
175
|
+
log.warn('Failed to broadcast active node for presence.', {
|
|
176
|
+
err: err.message,
|
|
177
|
+
});
|
|
157
178
|
});
|
|
158
179
|
}
|
|
159
180
|
}
|