@dxos/plugin-space 0.8.1-main.ae460ac → 0.8.1-staging.31c3ee1
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/{app-graph-builder-MGK5HWPZ.mjs → app-graph-builder-GMFCSOLG.mjs} +33 -6
- package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-FOWFLYGU.mjs → app-graph-serializer-DSF2U3A5.mjs} +7 -7
- package/dist/lib/browser/{app-graph-serializer-FOWFLYGU.mjs.map → app-graph-serializer-DSF2U3A5.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-UDWHTKB5.mjs → chunk-5BDV575R.mjs} +22 -16
- package/dist/lib/browser/chunk-5BDV575R.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ULA2UQJ4.mjs → chunk-AYW4IDRT.mjs} +15 -65
- package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PCEP3KQY.mjs → chunk-DVZEJGCK.mjs} +854 -587
- package/dist/lib/browser/chunk-DVZEJGCK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-NU7WDVGN.mjs → chunk-KVRYWFZU.mjs} +3 -3
- package/dist/lib/browser/chunk-KVRYWFZU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-23RVI5FZ.mjs → chunk-LO5UL6RU.mjs} +49 -16
- package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PQXZCNAU.mjs → chunk-PTKYMZWO.mjs} +1 -1
- package/dist/lib/browser/chunk-PTKYMZWO.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-FYGS6TBH.mjs → identity-created-JR7BNXFH.mjs} +3 -3
- package/dist/lib/browser/index.mjs +40 -45
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-GPNAQ2SG.mjs → intent-resolver-OG62I5IL.mjs} +69 -44
- package/dist/lib/browser/intent-resolver-OG62I5IL.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-4CCSD7TZ.mjs → react-root-VPSIJ6EU.mjs} +6 -6
- package/dist/lib/browser/{react-surface-FKMRI3WV.mjs → react-surface-KOSYP574.mjs} +39 -38
- package/dist/lib/browser/react-surface-KOSYP574.mjs.map +7 -0
- package/dist/lib/browser/{schema-5W3DSY2E.mjs → schema-FHTA26SW.mjs} +3 -3
- package/dist/lib/browser/schema-tools-YAXPRIXP.mjs +123 -0
- package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +7 -0
- package/dist/lib/browser/{settings-PHPCXX33.mjs → settings-PJPTJUPE.mjs} +3 -3
- package/dist/lib/browser/{spaces-ready-K47RR7N2.mjs → spaces-ready-BSSP7HHG.mjs} +8 -8
- package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +7 -0
- package/dist/lib/browser/{state-INJ63O57.mjs → state-X7VLCC6E.mjs} +5 -3
- package/dist/lib/browser/state-X7VLCC6E.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -10
- package/dist/lib/node/{app-graph-builder-ZIUBXRPA.cjs → app-graph-builder-DPY7AUZE.cjs} +73 -46
- package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-VQOGHKXL.cjs → app-graph-serializer-JELGJUAY.cjs} +21 -21
- package/dist/lib/node/{app-graph-serializer-VQOGHKXL.cjs.map → app-graph-serializer-JELGJUAY.cjs.map} +2 -2
- package/dist/lib/node/{chunk-WZR6OAN3.cjs → chunk-6P2DB4QQ.cjs} +4 -4
- package/dist/lib/node/{chunk-WZR6OAN3.cjs.map → chunk-6P2DB4QQ.cjs.map} +2 -2
- package/dist/lib/node/{chunk-QE4GVR6C.cjs → chunk-APYLLIMY.cjs} +919 -657
- package/dist/lib/node/chunk-APYLLIMY.cjs.map +7 -0
- package/dist/lib/node/{chunk-YZKNRFHU.cjs → chunk-IKIDS6XF.cjs} +10 -10
- package/dist/lib/node/chunk-IKIDS6XF.cjs.map +7 -0
- package/dist/lib/node/{chunk-U6DYXAR3.cjs → chunk-PU2EYH4E.cjs} +27 -21
- package/dist/lib/node/chunk-PU2EYH4E.cjs.map +7 -0
- package/dist/lib/node/{chunk-OVGKWJOC.cjs → chunk-TUZWEPGX.cjs} +99 -66
- package/dist/lib/node/chunk-TUZWEPGX.cjs.map +7 -0
- package/dist/lib/node/{chunk-WAJKBO3J.cjs → chunk-WDEIFDTX.cjs} +19 -73
- package/dist/lib/node/chunk-WDEIFDTX.cjs.map +7 -0
- package/dist/lib/node/{identity-created-AXI64BLE.cjs → identity-created-XU4HFV2T.cjs} +7 -7
- package/dist/lib/node/index.cjs +105 -111
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-ICHHI6I6.cjs → intent-resolver-UMF6MLOH.cjs} +133 -107
- package/dist/lib/node/intent-resolver-UMF6MLOH.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-TCBTUOOJ.cjs → react-root-ZRFHMM7R.cjs} +12 -12
- package/dist/lib/node/{react-surface-JSCCIZS5.cjs → react-surface-72U57CIU.cjs} +78 -76
- package/dist/lib/node/react-surface-72U57CIU.cjs.map +7 -0
- package/dist/lib/node/{schema-YN7WVFRX.cjs → schema-PPJ5BZ3A.cjs} +7 -7
- package/dist/lib/node/schema-tools-BLIMOZYY.cjs +146 -0
- package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +7 -0
- package/dist/lib/node/{settings-5QYFWNH7.cjs → settings-WVFP2UEP.cjs} +8 -8
- package/dist/lib/node/{spaces-ready-FQNAKR7G.cjs → spaces-ready-7DNZSUOG.cjs} +16 -16
- package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +7 -0
- package/dist/lib/node/{state-57UE3DYE.cjs → state-5KX6WBJH.cjs} +10 -8
- package/dist/lib/node/state-5KX6WBJH.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +13 -21
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/{app-graph-builder-TERVM2SL.mjs → app-graph-builder-42IGWRPL.mjs} +33 -6
- package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-GZRSWHEN.mjs → app-graph-serializer-FXONFKOE.mjs} +7 -7
- package/dist/lib/node-esm/{app-graph-serializer-GZRSWHEN.mjs.map → app-graph-serializer-FXONFKOE.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-2TQ2AJEZ.mjs → chunk-3ZOUV4DF.mjs} +22 -16
- package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TRNZQEEN.mjs → chunk-FC4UHDPL.mjs} +15 -65
- package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HJCEJNW3.mjs → chunk-HMCIZ7G7.mjs} +854 -587
- package/dist/lib/node-esm/chunk-HMCIZ7G7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ICCM4YRJ.mjs → chunk-MSWEFAPD.mjs} +1 -1
- package/dist/lib/node-esm/chunk-MSWEFAPD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6RSVVEPS.mjs → chunk-PIYAWT5N.mjs} +3 -3
- package/dist/lib/node-esm/chunk-PIYAWT5N.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PGH5L7MV.mjs → chunk-ZGLK25WQ.mjs} +49 -16
- package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-3CGEXNPO.mjs → identity-created-WJKAS2PV.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +40 -45
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-VR42K5GE.mjs → intent-resolver-67C5MOIE.mjs} +69 -44
- package/dist/lib/node-esm/intent-resolver-67C5MOIE.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-THJBSTQS.mjs → react-root-XPRWMZGT.mjs} +6 -6
- package/dist/lib/node-esm/{react-surface-Z3BBQ5HX.mjs → react-surface-MUE6M34Y.mjs} +39 -38
- package/dist/lib/node-esm/react-surface-MUE6M34Y.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-LOR2EVGY.mjs → schema-OUZKVYM5.mjs} +3 -3
- package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs +125 -0
- package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-H6MXTEQM.mjs → settings-FJZPC2TV.mjs} +3 -3
- package/dist/lib/node-esm/{spaces-ready-HKAQG5SA.mjs → spaces-ready-7X5PGB2V.mjs} +8 -8
- package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +7 -0
- package/dist/lib/node-esm/{state-VYA6OFHD.mjs → state-Z6E2YTNC.mjs} +5 -3
- package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -10
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +4 -3
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -2
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema-tool.test.d.ts +2 -0
- package/dist/types/src/capabilities/schema-tool.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/schema-tools.d.ts +13 -0
- package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/AwaitingObject.d.ts +2 -1
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/CollectionMain.d.ts +2 -1
- package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts +2 -1
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +2 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +2 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +2 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.d.ts +7 -0
- package/dist/types/src/components/MembersContainer.d.ts.map +1 -0
- package/dist/types/src/components/MembersContainer.stories.d.ts +8 -0
- package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/MenuFooter.d.ts +2 -1
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.d.ts +2 -1
- package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts +8 -0
- package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/ForeignKeys.d.ts +2 -1
- package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts +8 -0
- package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettingsContainer/index.d.ts +2 -0
- package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/PersistenceStatus.d.ts +2 -1
- package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
- package/dist/types/src/components/PopoverAddSpace.d.ts +2 -1
- package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +2 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +2 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/ShareSpaceButton.d.ts +3 -2
- package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts +2 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts +5 -4
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +3 -2
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts +7 -0
- package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts +7 -0
- package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +9 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -0
- package/dist/types/src/components/SpaceSettings/index.d.ts +2 -2
- package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +2 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/Space.d.ts +3 -2
- package/dist/types/src/components/SyncStatus/Space.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +4 -3
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -5
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +53 -36
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/thread.d.ts +92 -197
- package/dist/types/src/types/thread.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +10 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +12 -0
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +45 -40
- package/src/SpacePlugin.tsx +12 -11
- package/src/capabilities/app-graph-builder.ts +20 -0
- package/src/capabilities/app-graph-serializer.ts +2 -2
- package/src/capabilities/capabilities.ts +3 -3
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +66 -38
- package/src/capabilities/react-surface.tsx +30 -28
- package/src/capabilities/schema-tool.test.ts +45 -0
- package/src/capabilities/schema-tools.ts +124 -0
- package/src/capabilities/spaces-ready.ts +3 -3
- package/src/capabilities/state.ts +2 -0
- package/src/components/CreateDialog/CreateObjectDialog.tsx +3 -6
- package/src/components/CreateDialog/CreateObjectPanel.tsx +6 -6
- package/src/components/JoinDialog.tsx +43 -27
- package/src/components/MembersContainer.stories.tsx +34 -0
- package/src/components/MembersContainer.tsx +255 -0
- package/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.tsx +2 -2
- package/src/components/ObjectSettingsContainer/BaseObjectSettings.tsx +47 -0
- package/src/components/ObjectSettingsContainer/ObjectSettingsContainer.tsx +36 -0
- package/src/components/ObjectSettingsContainer/index.ts +5 -0
- package/src/components/PopoverRenameObject.tsx +1 -1
- package/src/components/SpacePresence.tsx +25 -23
- package/src/components/SpaceSettings/{SpaceSettingsPanel.stories.tsx → SpacePropertiesForm.stories.tsx} +6 -6
- package/src/components/SpaceSettings/SpacePropertiesForm.tsx +136 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +63 -0
- package/src/components/SpaceSettings/index.ts +2 -2
- package/src/components/SyncStatus/SyncStatus.tsx +1 -1
- package/src/components/SyncStatus/save-tracker.ts +5 -5
- package/src/components/index.ts +2 -2
- package/src/events.ts +2 -2
- package/src/meta.ts +2 -2
- package/src/translations.ts +21 -12
- package/src/types/thread.ts +2 -56
- package/src/types/types.ts +15 -6
- package/src/util.tsx +30 -9
- package/dist/lib/browser/app-graph-builder-MGK5HWPZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-23RVI5FZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-NU7WDVGN.mjs.map +0 -7
- package/dist/lib/browser/chunk-PCEP3KQY.mjs.map +0 -7
- package/dist/lib/browser/chunk-PQXZCNAU.mjs.map +0 -7
- package/dist/lib/browser/chunk-UDWHTKB5.mjs.map +0 -7
- package/dist/lib/browser/chunk-ULA2UQJ4.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-GPNAQ2SG.mjs.map +0 -7
- package/dist/lib/browser/react-surface-FKMRI3WV.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-K47RR7N2.mjs.map +0 -7
- package/dist/lib/browser/state-INJ63O57.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-ZIUBXRPA.cjs.map +0 -7
- package/dist/lib/node/chunk-OVGKWJOC.cjs.map +0 -7
- package/dist/lib/node/chunk-QE4GVR6C.cjs.map +0 -7
- package/dist/lib/node/chunk-U6DYXAR3.cjs.map +0 -7
- package/dist/lib/node/chunk-WAJKBO3J.cjs.map +0 -7
- package/dist/lib/node/chunk-YZKNRFHU.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-ICHHI6I6.cjs.map +0 -7
- package/dist/lib/node/react-surface-JSCCIZS5.cjs.map +0 -7
- package/dist/lib/node/spaces-ready-FQNAKR7G.cjs.map +0 -7
- package/dist/lib/node/state-57UE3DYE.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-TERVM2SL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2TQ2AJEZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6RSVVEPS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HJCEJNW3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ICCM4YRJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PGH5L7MV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TRNZQEEN.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-VR42K5GE.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-Z3BBQ5HX.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-HKAQG5SA.mjs.map +0 -7
- package/dist/lib/node-esm/state-VYA6OFHD.mjs.map +0 -7
- package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +0 -1
- package/dist/types/src/components/AdvancedObjectSettings/index.d.ts +0 -2
- package/dist/types/src/components/AdvancedObjectSettings/index.d.ts.map +0 -1
- package/dist/types/src/components/BaseObjectSettings.d.ts +0 -6
- package/dist/types/src/components/BaseObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +0 -10
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts +0 -7
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +0 -6
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts +0 -7
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +0 -1
- package/src/components/AdvancedObjectSettings/index.ts +0 -5
- package/src/components/BaseObjectSettings.tsx +0 -40
- package/src/components/SpaceSettings/SpaceSettingsDialog.stories.tsx +0 -43
- package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +0 -120
- package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +0 -83
- /package/dist/lib/browser/{identity-created-FYGS6TBH.mjs.map → identity-created-JR7BNXFH.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-4CCSD7TZ.mjs.map → react-root-VPSIJ6EU.mjs.map} +0 -0
- /package/dist/lib/browser/{schema-5W3DSY2E.mjs.map → schema-FHTA26SW.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-PHPCXX33.mjs.map → settings-PJPTJUPE.mjs.map} +0 -0
- /package/dist/lib/node/{identity-created-AXI64BLE.cjs.map → identity-created-XU4HFV2T.cjs.map} +0 -0
- /package/dist/lib/node/{react-root-TCBTUOOJ.cjs.map → react-root-ZRFHMM7R.cjs.map} +0 -0
- /package/dist/lib/node/{schema-YN7WVFRX.cjs.map → schema-PPJ5BZ3A.cjs.map} +0 -0
- /package/dist/lib/node/{settings-5QYFWNH7.cjs.map → settings-WVFP2UEP.cjs.map} +0 -0
- /package/dist/lib/node-esm/{identity-created-3CGEXNPO.mjs.map → identity-created-WJKAS2PV.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-THJBSTQS.mjs.map → react-root-XPRWMZGT.mjs.map} +0 -0
- /package/dist/lib/node-esm/{schema-LOR2EVGY.mjs.map → schema-OUZKVYM5.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-H6MXTEQM.mjs.map → settings-FJZPC2TV.mjs.map} +0 -0
- /package/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/ForeignKeys.tsx +0 -0
package/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.tsx
RENAMED
|
@@ -6,7 +6,7 @@ import React, { useCallback, useState } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type ForeignKey, ForeignKeySchema } from '@dxos/echo-schema';
|
|
8
8
|
import { getMeta, type ReactiveEchoObject } from '@dxos/react-client/echo';
|
|
9
|
-
import { IconButton, useTranslation
|
|
9
|
+
import { IconButton, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { Form } from '@dxos/react-ui-form';
|
|
11
11
|
|
|
12
12
|
import { ForeignKeys } from './ForeignKeys';
|
|
@@ -51,7 +51,6 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
|
|
|
51
51
|
// TODO(wittjosiah): This should be wrapped in an "Advanced" accordion.
|
|
52
52
|
return (
|
|
53
53
|
<>
|
|
54
|
-
<Separator />
|
|
55
54
|
<div className='p-2 flex flex-col gap-4'>
|
|
56
55
|
<h2>{t('advanced settings label')}</h2>
|
|
57
56
|
<div className='flex items-center'>
|
|
@@ -66,6 +65,7 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
|
|
|
66
65
|
</div>
|
|
67
66
|
{!adding && <ForeignKeys keys={keys} onDelete={handleDelete} />}
|
|
68
67
|
</div>
|
|
68
|
+
|
|
69
69
|
{adding && <Form schema={ForeignKeySchema} values={initialValues} onSave={handleSave} onCancel={handleCancel} />}
|
|
70
70
|
</>
|
|
71
71
|
);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { type PropsWithChildren, useRef } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type ReactiveEchoObject } from '@dxos/react-client/echo';
|
|
8
|
+
import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
9
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
10
|
+
|
|
11
|
+
import { meta } from '../../meta';
|
|
12
|
+
|
|
13
|
+
export type BaseObjectSettingsProps = ThemedClassName<
|
|
14
|
+
PropsWithChildren<{
|
|
15
|
+
object: ReactiveEchoObject<any>;
|
|
16
|
+
}>
|
|
17
|
+
>;
|
|
18
|
+
|
|
19
|
+
export const BaseObjectSettings = ({ classNames, children, object }: BaseObjectSettingsProps) => {
|
|
20
|
+
const { t } = useTranslation(meta.id);
|
|
21
|
+
const inputRef = useRef<HTMLInputElement>(null);
|
|
22
|
+
|
|
23
|
+
// TODO(wittjosiah): This should be a form based on the schema of the object.
|
|
24
|
+
// The form should only include fields with a specific settings annotation.
|
|
25
|
+
// Perhaps also including the field of the title annotation as well.
|
|
26
|
+
return (
|
|
27
|
+
<form className={mx('flex flex-col p-2 gap-2', classNames)}>
|
|
28
|
+
<Input.Root>
|
|
29
|
+
<Input.Label>{t('name label')}</Input.Label>
|
|
30
|
+
<Input.TextInput
|
|
31
|
+
ref={inputRef}
|
|
32
|
+
placeholder={t('name placeholder')}
|
|
33
|
+
value={object.name ?? ''}
|
|
34
|
+
onChange={(event) => {
|
|
35
|
+
object.name = event.target.value;
|
|
36
|
+
}}
|
|
37
|
+
onKeyDown={(event) => {
|
|
38
|
+
if (event.key === 'Enter') {
|
|
39
|
+
inputRef.current?.blur();
|
|
40
|
+
}
|
|
41
|
+
}}
|
|
42
|
+
/>
|
|
43
|
+
</Input.Root>
|
|
44
|
+
{children}
|
|
45
|
+
</form>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useMemo } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Surface } from '@dxos/app-framework';
|
|
8
|
+
import { type ReactiveEchoObject } from '@dxos/react-client/echo';
|
|
9
|
+
import { Clipboard } from '@dxos/react-ui';
|
|
10
|
+
import { StackItem } from '@dxos/react-ui-stack';
|
|
11
|
+
|
|
12
|
+
import { AdvancedObjectSettings } from './AdvancedObjectSettings';
|
|
13
|
+
import { BaseObjectSettings } from './BaseObjectSettings';
|
|
14
|
+
|
|
15
|
+
export type ObjectSettingsContainerProps = {
|
|
16
|
+
object: ReactiveEchoObject<any>;
|
|
17
|
+
role: string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContainerProps) => {
|
|
21
|
+
const data = useMemo(() => ({ subject: object }), [object]);
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Clipboard.Provider>
|
|
25
|
+
<StackItem.Content toolbar={false} role={role}>
|
|
26
|
+
<div className='flex flex-col overflow-y-auto divide-y divide-separator'>
|
|
27
|
+
<BaseObjectSettings object={object}>
|
|
28
|
+
<Surface role='base-object-settings' data={data} />
|
|
29
|
+
</BaseObjectSettings>
|
|
30
|
+
<Surface role='object-settings' data={data} />
|
|
31
|
+
<AdvancedObjectSettings object={object} />
|
|
32
|
+
</div>
|
|
33
|
+
</StackItem.Content>
|
|
34
|
+
</Clipboard.Provider>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
@@ -38,7 +38,7 @@ export const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<an
|
|
|
38
38
|
<Input.Root>
|
|
39
39
|
<Input.Label srOnly>{t('object name label')}</Input.Label>
|
|
40
40
|
<Input.TextInput
|
|
41
|
-
placeholder={t('object
|
|
41
|
+
placeholder={t('object placeholder')}
|
|
42
42
|
value={name}
|
|
43
43
|
data-testid='spacePlugin.renameObject.input'
|
|
44
44
|
onChange={({ target: { value } }) => setName(value)}
|
|
@@ -12,8 +12,7 @@ import { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/
|
|
|
12
12
|
import { type Identity, useIdentity } from '@dxos/react-client/halo';
|
|
13
13
|
import {
|
|
14
14
|
Avatar,
|
|
15
|
-
|
|
16
|
-
AvatarGroupItem,
|
|
15
|
+
type AvatarContentProps,
|
|
17
16
|
type Size,
|
|
18
17
|
type ThemedClassName,
|
|
19
18
|
Tooltip,
|
|
@@ -113,16 +112,16 @@ export const FullPresence = (props: MemberPresenceProps) => {
|
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
return (
|
|
116
|
-
<
|
|
115
|
+
<div className='dx-avatar-group' data-testid='spacePlugin.presence'>
|
|
117
116
|
{members.slice(0, 3).map((member, i) => (
|
|
118
117
|
<Tooltip.Root key={member.identity.identityKey.toHex()}>
|
|
119
118
|
<Tooltip.Trigger>
|
|
120
119
|
<PrensenceAvatar
|
|
121
120
|
identity={member.identity}
|
|
122
|
-
group
|
|
123
121
|
match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.
|
|
124
122
|
index={members.length - i}
|
|
125
123
|
onClick={() => onMemberClick?.(member)}
|
|
124
|
+
size={size}
|
|
126
125
|
/>
|
|
127
126
|
</Tooltip.Trigger>
|
|
128
127
|
<Tooltip.Portal>
|
|
@@ -137,12 +136,14 @@ export const FullPresence = (props: MemberPresenceProps) => {
|
|
|
137
136
|
{members.length > 3 && (
|
|
138
137
|
<Tooltip.Root>
|
|
139
138
|
<Tooltip.Trigger>
|
|
140
|
-
<
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
139
|
+
<Avatar.Root>
|
|
140
|
+
{/* TODO(wittjosiah): Make text fit. */}
|
|
141
|
+
<Avatar.Content
|
|
142
|
+
status='inactive'
|
|
143
|
+
style={{ zIndex: members.length - 4 }}
|
|
144
|
+
fallback={`+${members.length - 3}`}
|
|
145
|
+
/>
|
|
146
|
+
</Avatar.Root>
|
|
146
147
|
</Tooltip.Trigger>
|
|
147
148
|
<Tooltip.Portal>
|
|
148
149
|
<Tooltip.Content side='bottom'>
|
|
@@ -156,7 +157,7 @@ export const FullPresence = (props: MemberPresenceProps) => {
|
|
|
156
157
|
data-testid='identity-list-item'
|
|
157
158
|
>
|
|
158
159
|
{/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
|
|
159
|
-
<PrensenceAvatar identity={member.identity} showName match={member.currentlyAttended} />
|
|
160
|
+
<PrensenceAvatar identity={member.identity} size={size} showName match={member.currentlyAttended} />
|
|
160
161
|
</ListItem.Root>
|
|
161
162
|
))}
|
|
162
163
|
</List>
|
|
@@ -164,35 +165,36 @@ export const FullPresence = (props: MemberPresenceProps) => {
|
|
|
164
165
|
</Tooltip.Portal>
|
|
165
166
|
</Tooltip.Root>
|
|
166
167
|
)}
|
|
167
|
-
</
|
|
168
|
+
</div>
|
|
168
169
|
);
|
|
169
170
|
};
|
|
170
171
|
|
|
171
|
-
type PresenceAvatarProps = {
|
|
172
|
+
type PresenceAvatarProps = Pick<AvatarContentProps, 'size'> & {
|
|
172
173
|
identity: Identity;
|
|
173
174
|
showName?: boolean;
|
|
174
175
|
match?: boolean;
|
|
175
|
-
group?: boolean;
|
|
176
176
|
index?: number;
|
|
177
177
|
onClick?: () => void;
|
|
178
178
|
};
|
|
179
179
|
|
|
180
|
-
const PrensenceAvatar = ({ identity, showName, match,
|
|
181
|
-
const Root = group ? AvatarGroupItem.Root : Avatar.Root;
|
|
180
|
+
const PrensenceAvatar = ({ identity, showName, match, index, onClick, size }: PresenceAvatarProps) => {
|
|
182
181
|
const status = match ? 'current' : 'active';
|
|
183
182
|
const fallbackValue = keyToFallback(identity.identityKey);
|
|
184
183
|
return (
|
|
185
|
-
<Root
|
|
186
|
-
<Avatar.
|
|
184
|
+
<Avatar.Root>
|
|
185
|
+
<Avatar.Content
|
|
186
|
+
status={status}
|
|
187
|
+
hue={identity.profile?.data?.hue || fallbackValue.hue}
|
|
187
188
|
data-testid='spacePlugin.presence.member'
|
|
188
189
|
data-status={status}
|
|
190
|
+
size={size}
|
|
191
|
+
classNames='mbs-2 mie-4'
|
|
189
192
|
{...(index ? { style: { zIndex: index } } : {})}
|
|
190
193
|
onClick={() => onClick?.()}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
</Avatar.
|
|
194
|
-
|
|
195
|
-
</Root>
|
|
194
|
+
fallback={identity.profile?.data?.emoji || fallbackValue.emoji}
|
|
195
|
+
/>
|
|
196
|
+
<Avatar.Label classNames={showName ? 'text-sm truncate pli-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>
|
|
197
|
+
</Avatar.Root>
|
|
196
198
|
);
|
|
197
199
|
};
|
|
198
200
|
|
|
@@ -10,21 +10,21 @@ import React from 'react';
|
|
|
10
10
|
import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
|
|
11
11
|
import { withTheme } from '@dxos/storybook-utils';
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { SpacePropertiesForm, type SpacePropertiesFormProps } from './SpacePropertiesForm';
|
|
14
14
|
import translations from '../../translations';
|
|
15
15
|
|
|
16
|
-
const Story = (args: Partial<
|
|
16
|
+
const Story = (args: Partial<SpacePropertiesFormProps>) => {
|
|
17
17
|
const { space } = useClientProvider();
|
|
18
18
|
return (
|
|
19
19
|
<div role='none' className='p-2 border border-primary-500 rounded'>
|
|
20
|
-
<
|
|
20
|
+
<SpacePropertiesForm {...args} space={space!} />
|
|
21
21
|
</div>
|
|
22
22
|
);
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
const meta: Meta = {
|
|
26
|
-
title: 'plugins/plugin-space/
|
|
27
|
-
component:
|
|
26
|
+
title: 'plugins/plugin-space/SpacePropertiesForm',
|
|
27
|
+
component: SpacePropertiesForm,
|
|
28
28
|
render: Story,
|
|
29
29
|
decorators: [withClientProvider({ createIdentity: true, createSpace: true }), withTheme],
|
|
30
30
|
parameters: {
|
|
@@ -35,4 +35,4 @@ const meta: Meta = {
|
|
|
35
35
|
|
|
36
36
|
export default meta;
|
|
37
37
|
|
|
38
|
-
export const Default: StoryObj<typeof
|
|
38
|
+
export const Default: StoryObj<typeof SpacePropertiesForm> = {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Schema as S } from 'effect';
|
|
6
|
+
import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
|
|
7
|
+
|
|
8
|
+
import { log } from '@dxos/log';
|
|
9
|
+
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
10
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
11
|
+
import { Input, useTranslation } from '@dxos/react-ui';
|
|
12
|
+
import { Form, type InputComponent, ControlItem, ControlItemInput } from '@dxos/react-ui-form';
|
|
13
|
+
import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
14
|
+
|
|
15
|
+
import { SPACE_PLUGIN } from '../../meta';
|
|
16
|
+
import { SpaceForm } from '../../types';
|
|
17
|
+
|
|
18
|
+
export type SpacePropertiesFormProps = {
|
|
19
|
+
space: Space;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const SpacePropertiesForm = ({ space }: SpacePropertiesFormProps) => {
|
|
23
|
+
const { t } = useTranslation(SPACE_PLUGIN);
|
|
24
|
+
|
|
25
|
+
const [edgeReplication, setEdgeReplication] = useState(
|
|
26
|
+
space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED,
|
|
27
|
+
);
|
|
28
|
+
const toggleEdgeReplication = useCallback(
|
|
29
|
+
async (next: boolean) => {
|
|
30
|
+
setEdgeReplication(next);
|
|
31
|
+
await space?.internal
|
|
32
|
+
.setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED)
|
|
33
|
+
.catch((err: unknown) => {
|
|
34
|
+
log.catch(err);
|
|
35
|
+
setEdgeReplication(!next);
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
[space],
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const handleSave = useCallback(
|
|
42
|
+
(properties: S.Schema.Type<typeof SpaceForm>) => {
|
|
43
|
+
void toggleEdgeReplication(properties.edgeReplication);
|
|
44
|
+
if (properties.name !== space.properties.name) {
|
|
45
|
+
space.properties.name = properties.name;
|
|
46
|
+
}
|
|
47
|
+
if (properties.icon !== space.properties.icon) {
|
|
48
|
+
space.properties.icon = properties.icon;
|
|
49
|
+
}
|
|
50
|
+
if (properties.hue !== space.properties.hue) {
|
|
51
|
+
space.properties.hue = properties.hue;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
[space, toggleEdgeReplication],
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const values = useMemo(
|
|
58
|
+
() => ({
|
|
59
|
+
name: space.properties.name,
|
|
60
|
+
icon: space.properties.icon,
|
|
61
|
+
hue: space.properties.hue,
|
|
62
|
+
edgeReplication,
|
|
63
|
+
}),
|
|
64
|
+
[space.properties.name, space.properties.icon, space.properties.hue, edgeReplication],
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const customElements: Partial<Record<string, InputComponent>> = useMemo(
|
|
68
|
+
() => ({
|
|
69
|
+
name: ({ type, label, getValue, onValueChange }) => {
|
|
70
|
+
const handleChange = useCallback(
|
|
71
|
+
({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),
|
|
72
|
+
[onValueChange, type],
|
|
73
|
+
);
|
|
74
|
+
return (
|
|
75
|
+
<ControlItemInput title={label} description={t('display name description')}>
|
|
76
|
+
<Input.TextInput
|
|
77
|
+
value={getValue()}
|
|
78
|
+
onChange={handleChange}
|
|
79
|
+
placeholder={t('display name input placeholder')}
|
|
80
|
+
classNames='min-is-64'
|
|
81
|
+
/>
|
|
82
|
+
</ControlItemInput>
|
|
83
|
+
);
|
|
84
|
+
},
|
|
85
|
+
icon: ({ type, label, getValue, onValueChange }) => {
|
|
86
|
+
const handleChange = useCallback((nextEmoji: string) => onValueChange(type, nextEmoji), [onValueChange, type]);
|
|
87
|
+
const handleEmojiReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
88
|
+
return (
|
|
89
|
+
<ControlItem title={label} description={t('icon description')}>
|
|
90
|
+
<IconPicker
|
|
91
|
+
value={getValue()}
|
|
92
|
+
onChange={handleChange}
|
|
93
|
+
onReset={handleEmojiReset}
|
|
94
|
+
classNames='justify-self-end'
|
|
95
|
+
iconSize={5}
|
|
96
|
+
/>
|
|
97
|
+
</ControlItem>
|
|
98
|
+
);
|
|
99
|
+
},
|
|
100
|
+
hue: ({ type, label, getValue, onValueChange }) => {
|
|
101
|
+
const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);
|
|
102
|
+
const handleHueReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
103
|
+
return (
|
|
104
|
+
<ControlItem title={label} description={t('hue description')}>
|
|
105
|
+
<HuePicker
|
|
106
|
+
value={getValue()}
|
|
107
|
+
onChange={handleChange}
|
|
108
|
+
onReset={handleHueReset}
|
|
109
|
+
classNames='[--hue-preview-size:1.25rem] justify-self-end'
|
|
110
|
+
/>
|
|
111
|
+
</ControlItem>
|
|
112
|
+
);
|
|
113
|
+
},
|
|
114
|
+
edgeReplication: ({ type, label, getValue, onValueChange }) => {
|
|
115
|
+
const handleChange = useCallback((checked: boolean) => onValueChange(type, checked), [onValueChange, type]);
|
|
116
|
+
return (
|
|
117
|
+
<ControlItemInput title={label} description={t('edge replication description')}>
|
|
118
|
+
<Input.Switch checked={getValue()} onCheckedChange={handleChange} classNames='justify-self-end' />
|
|
119
|
+
</ControlItemInput>
|
|
120
|
+
);
|
|
121
|
+
},
|
|
122
|
+
}),
|
|
123
|
+
[t],
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<Form
|
|
128
|
+
schema={SpaceForm}
|
|
129
|
+
values={values}
|
|
130
|
+
autoSave
|
|
131
|
+
onSave={handleSave}
|
|
132
|
+
Custom={customElements}
|
|
133
|
+
classNames='p-0 container-max-width [&_[role="form"]]:grid [&_[role="form"]]:grid-cols-1 md:[&_[role="form"]]:grid-cols-[1fr_min-content] [&_[role="form"]]:gap-4'
|
|
134
|
+
/>
|
|
135
|
+
);
|
|
136
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback, useMemo } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Surface, useCapabilities, useCapability } from '@dxos/app-framework';
|
|
8
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
9
|
+
import { toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
10
|
+
import { ControlSectionHeading } from '@dxos/react-ui-form';
|
|
11
|
+
import { Accordion } from '@dxos/react-ui-list';
|
|
12
|
+
import { StackItem } from '@dxos/react-ui-stack';
|
|
13
|
+
import { byPosition } from '@dxos/util';
|
|
14
|
+
|
|
15
|
+
import { SpaceCapabilities } from '../../capabilities';
|
|
16
|
+
import { SPACE_PLUGIN } from '../../meta';
|
|
17
|
+
|
|
18
|
+
export const SPACE_SETTINGS_DIALOG = `${SPACE_PLUGIN}/SpaceSettingsDialog`;
|
|
19
|
+
|
|
20
|
+
export type SpaceSettingsTab = 'members' | 'settings';
|
|
21
|
+
|
|
22
|
+
export type SpaceSettingsContainerProps = {
|
|
23
|
+
space: Space;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) => {
|
|
27
|
+
const { t } = useTranslation(SPACE_PLUGIN);
|
|
28
|
+
const state = useCapability(SpaceCapabilities.MutableState);
|
|
29
|
+
const items = useCapabilities(SpaceCapabilities.SettingsSection).toSorted(byPosition);
|
|
30
|
+
const data = useMemo(() => ({ subject: space }), [space]);
|
|
31
|
+
|
|
32
|
+
const handleOpenSectionChange = useCallback(
|
|
33
|
+
(sections: string[]) => {
|
|
34
|
+
state.spaceSettingsOpenSections.splice(0, state.spaceSettingsOpenSections.length, ...sections);
|
|
35
|
+
},
|
|
36
|
+
[state],
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<StackItem.Content classNames='p-2 block overflow-y-auto'>
|
|
41
|
+
<Accordion.Root<SpaceCapabilities.SettingsSection>
|
|
42
|
+
items={items}
|
|
43
|
+
value={state.spaceSettingsOpenSections}
|
|
44
|
+
onValueChange={handleOpenSectionChange}
|
|
45
|
+
>
|
|
46
|
+
{({ items }) => (
|
|
47
|
+
<>
|
|
48
|
+
{items.map((item) => (
|
|
49
|
+
<Accordion.Item key={item.id} item={item} classNames='container-max-width'>
|
|
50
|
+
<Accordion.ItemHeader classNames='pie-6' asChild>
|
|
51
|
+
<ControlSectionHeading title={toLocalizedString(item.label, t)} />
|
|
52
|
+
</Accordion.ItemHeader>
|
|
53
|
+
<Accordion.ItemBody>
|
|
54
|
+
<Surface role={`space-settings--${item.id}`} data={data} />
|
|
55
|
+
</Accordion.ItemBody>
|
|
56
|
+
</Accordion.Item>
|
|
57
|
+
))}
|
|
58
|
+
</>
|
|
59
|
+
)}
|
|
60
|
+
</Accordion.Root>
|
|
61
|
+
</StackItem.Content>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
@@ -94,7 +94,7 @@ export const SyncStatusDetail = ({ classNames, state, summary, debug }: SyncStat
|
|
|
94
94
|
|
|
95
95
|
// TODO(burdon): Normalize to max document count?
|
|
96
96
|
return (
|
|
97
|
-
<div className={mx('flex flex-col gap-3 p-2 text-xs min-w-
|
|
97
|
+
<div className={mx('flex flex-col gap-3 p-2 text-xs min-w-[400px]', classNames)}>
|
|
98
98
|
<div role='none' className='flex items-center'>
|
|
99
99
|
<h1 className='flex-1'>{t('sync status title')}</h1>
|
|
100
100
|
<div className='flex items-center gap-2'>
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type
|
|
5
|
+
import { type CleanupFn } from '@dxos/async';
|
|
6
6
|
import { type Client } from '@dxos/client';
|
|
7
7
|
import { type Space, type SpaceId } from '@dxos/client/echo';
|
|
8
8
|
import { Context } from '@dxos/context';
|
|
9
9
|
|
|
10
10
|
export const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 'saving') => void) => {
|
|
11
|
-
const
|
|
11
|
+
const CleanupFns: Record<SpaceId, CleanupFn> = {};
|
|
12
12
|
const state: Record<SpaceId, 'saved' | 'saving'> = {};
|
|
13
13
|
|
|
14
14
|
const install = (spaces: Space[]) => {
|
|
@@ -18,7 +18,7 @@ export const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 's
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
state[space.id] = 'saved';
|
|
21
|
-
|
|
21
|
+
CleanupFns[space.id] = createSpaceSaveTracker(space, (s) => {
|
|
22
22
|
state[space.id] = s;
|
|
23
23
|
cb(Object.values(state).some((s) => s === 'saving') ? 'saving' : 'saved');
|
|
24
24
|
});
|
|
@@ -30,13 +30,13 @@ export const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 's
|
|
|
30
30
|
install(client.spaces.get());
|
|
31
31
|
|
|
32
32
|
return () => {
|
|
33
|
-
for (const unsubscribe of Object.values(
|
|
33
|
+
for (const unsubscribe of Object.values(CleanupFns)) {
|
|
34
34
|
unsubscribe();
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
const createSpaceSaveTracker = (space: Space, cb: (state: 'saved' | 'saving') => void):
|
|
39
|
+
const createSpaceSaveTracker = (space: Space, cb: (state: 'saved' | 'saving') => void): CleanupFn => {
|
|
40
40
|
const ctx = new Context();
|
|
41
41
|
|
|
42
42
|
void space.waitUntilReady().then(() => {
|
package/src/components/index.ts
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
export * from './AdvancedObjectSettings';
|
|
6
5
|
export * from './AwaitingObject';
|
|
7
|
-
export * from './BaseObjectSettings';
|
|
8
6
|
export * from './CreateDialog';
|
|
9
7
|
export * from './CollectionMain';
|
|
10
8
|
export * from './CollectionSection';
|
|
11
9
|
export * from './JoinDialog';
|
|
10
|
+
export * from './MembersContainer';
|
|
12
11
|
export * from './MenuFooter';
|
|
12
|
+
export * from './ObjectSettingsContainer';
|
|
13
13
|
export * from './PersistenceStatus';
|
|
14
14
|
export * from './PopoverAddSpace';
|
|
15
15
|
export * from './PopoverRenameObject';
|
package/src/events.ts
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { defineEvent } from '@dxos/app-framework';
|
|
5
|
+
import { defineEvent, Events } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
7
|
import { SPACE_PLUGIN } from './meta';
|
|
8
8
|
|
|
9
9
|
export namespace SpaceEvents {
|
|
10
|
+
export const StateReady = Events.createStateEvent(`${SPACE_PLUGIN}/event/state-ready`);
|
|
10
11
|
export const SetupSettingsPanel = defineEvent(`${SPACE_PLUGIN}/event/setup-settings-panel`);
|
|
11
|
-
export const StateReady = defineEvent(`${SPACE_PLUGIN}/event/state-ready`);
|
|
12
12
|
export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
|
|
13
13
|
}
|
|
14
14
|
|
package/src/meta.ts
CHANGED
|
@@ -6,8 +6,8 @@ import { type PluginMeta } from '@dxos/app-framework';
|
|
|
6
6
|
|
|
7
7
|
export const SPACE_PLUGIN = 'dxos.org/plugin/space';
|
|
8
8
|
|
|
9
|
-
export const meta = {
|
|
9
|
+
export const meta: PluginMeta = {
|
|
10
10
|
id: SPACE_PLUGIN,
|
|
11
11
|
name: 'Spaces',
|
|
12
12
|
icon: 'ph--planet--regular',
|
|
13
|
-
}
|
|
13
|
+
};
|
package/src/translations.ts
CHANGED
|
@@ -10,6 +10,7 @@ export default [
|
|
|
10
10
|
'en-US': {
|
|
11
11
|
[CollectionType.typename]: {
|
|
12
12
|
'typename label': 'Collection',
|
|
13
|
+
'object name placeholder': 'New collection',
|
|
13
14
|
},
|
|
14
15
|
[SPACE_PLUGIN]: {
|
|
15
16
|
'plugin name': 'Spaces',
|
|
@@ -39,7 +40,7 @@ export default [
|
|
|
39
40
|
'confirm restore title': 'Overwrite files in this space?',
|
|
40
41
|
'confirm restore body': 'Restoring from a backup will overwrite the contents of any documents that match.',
|
|
41
42
|
'upload file message': 'Drag file here or click to browse',
|
|
42
|
-
'object
|
|
43
|
+
'object placeholder': 'Type a title here…',
|
|
43
44
|
'personal space label': 'Personal Space',
|
|
44
45
|
'spaces label': 'Spaces',
|
|
45
46
|
'show hidden spaces label': 'Show closed spaces',
|
|
@@ -64,9 +65,6 @@ export default [
|
|
|
64
65
|
'missing object message': 'Object not available.',
|
|
65
66
|
'missing object description':
|
|
66
67
|
'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',
|
|
67
|
-
'create collection label': 'Create collection',
|
|
68
|
-
'unnamed object label': 'New object',
|
|
69
|
-
'unnamed collection label': 'New collection',
|
|
70
68
|
'create object in space label': 'Add to space',
|
|
71
69
|
'create object in collection label': 'Add to collection',
|
|
72
70
|
'share space label': 'Share',
|
|
@@ -98,18 +96,13 @@ export default [
|
|
|
98
96
|
'join success label': 'Successfully joined space',
|
|
99
97
|
'name label': 'Name',
|
|
100
98
|
'name placeholder': 'Name',
|
|
101
|
-
'
|
|
99
|
+
'object settings label': 'Settings',
|
|
102
100
|
'edge replication label': 'Enable EDGE Replication',
|
|
103
101
|
'saving locally label': 'Writing to disk',
|
|
104
102
|
'downloading label': 'Replicating from peers',
|
|
105
103
|
'uploading label': 'Replicating to peers',
|
|
106
104
|
'offline persisted label': 'Saved to disk (offline)',
|
|
107
105
|
'remote synced label': 'Synced with peers',
|
|
108
|
-
'open settings panel label': 'Show Settings',
|
|
109
|
-
'settings panel label': 'Settings',
|
|
110
|
-
'open space settings label': 'Space Settings',
|
|
111
|
-
'members tab label': 'Members',
|
|
112
|
-
'settings tab label': 'Settings',
|
|
113
106
|
'syncing label': 'Space syncing',
|
|
114
107
|
'show all label': 'Show all',
|
|
115
108
|
'no sync status label': 'No space with missing objects.',
|
|
@@ -125,8 +118,24 @@ export default [
|
|
|
125
118
|
'advanced settings label': 'Advanced',
|
|
126
119
|
'foreign keys': 'Foreign Keys',
|
|
127
120
|
'add key': 'Add Key',
|
|
128
|
-
|
|
129
|
-
'
|
|
121
|
+
|
|
122
|
+
'members panel label': 'Members',
|
|
123
|
+
'members verbose label': 'Manage space members',
|
|
124
|
+
'members description': 'You can view the current status of space members here as well as invite new members.',
|
|
125
|
+
'members label': 'Members',
|
|
126
|
+
'invitations label': 'Invitations',
|
|
127
|
+
'space invitation description': 'Manage invitations to the space.',
|
|
128
|
+
'qr code description': 'Share this QR code, or copy the URL and share it with the person you want to invite.',
|
|
129
|
+
|
|
130
|
+
'settings panel label': 'Space Settings',
|
|
131
|
+
'open space settings label': 'Space Settings',
|
|
132
|
+
'space settings properties label': 'General',
|
|
133
|
+
'display name input placeholder': 'Space name',
|
|
134
|
+
'display name description': 'Name of the space as it appears in the app.',
|
|
135
|
+
'icon description': 'Icon used to represent the space in the app.',
|
|
136
|
+
'hue description': 'Color used to represent the space in the app.',
|
|
137
|
+
'edge replication description':
|
|
138
|
+
"Only change this if you know what you're doing. Disabling this will prevent the space from replicating through Composer's EDGE services, and relies solely on peer-to-peer sync.",
|
|
130
139
|
},
|
|
131
140
|
},
|
|
132
141
|
},
|