@dxos/plugin-space 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446
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-GMFCSOLG.mjs +315 -0
- package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-VRU57AEZ.mjs → app-graph-serializer-DSF2U3A5.mjs} +10 -10
- package/dist/lib/browser/app-graph-serializer-DSF2U3A5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-UBSVH2NQ.mjs → chunk-5BDV575R.mjs} +10 -21
- package/dist/lib/browser/chunk-5BDV575R.mjs.map +7 -0
- package/dist/lib/browser/chunk-AYW4IDRT.mjs +275 -0
- package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-43UQWMD3.mjs → chunk-JZXWPMLA.mjs} +740 -390
- package/dist/lib/browser/chunk-JZXWPMLA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-IQFFOAWD.mjs → chunk-LO5UL6RU.mjs} +173 -78
- package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-ANRJHNMQ.mjs → identity-created-JR7BNXFH.mjs} +5 -5
- package/dist/lib/browser/identity-created-JR7BNXFH.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +47 -30
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-KRINV5QI.mjs → intent-resolver-RKYILWWQ.mjs} +106 -98
- package/dist/lib/browser/intent-resolver-RKYILWWQ.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-J3SP2HVW.mjs → react-root-6H7NX2M2.mjs} +4 -5
- package/dist/lib/{node-esm/react-root-S2LW4FS7.mjs.map → browser/react-root-6H7NX2M2.mjs.map} +1 -1
- package/dist/lib/browser/{react-surface-J7T2IMH4.mjs → react-surface-7AGLOVMK.mjs} +53 -120
- package/dist/lib/browser/react-surface-7AGLOVMK.mjs.map +7 -0
- package/dist/lib/browser/schema-FHTA26SW.mjs +24 -0
- package/dist/lib/browser/schema-FHTA26SW.mjs.map +7 -0
- package/dist/lib/browser/{schema-tools-MYC4LTQD.mjs → schema-tools-YAXPRIXP.mjs} +22 -22
- package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +7 -0
- package/dist/lib/browser/{settings-G24447B7.mjs → settings-PJPTJUPE.mjs} +4 -4
- package/dist/lib/browser/settings-PJPTJUPE.mjs.map +7 -0
- package/dist/lib/browser/{spaces-ready-5I3RKYTT.mjs → spaces-ready-BSSP7HHG.mjs} +17 -18
- package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +7 -0
- package/dist/lib/browser/{state-SI4B5GHC.mjs → state-X7VLCC6E.mjs} +4 -2
- package/dist/lib/browser/state-X7VLCC6E.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +1 -7
- package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs +318 -0
- package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-VLBCR3IX.cjs → app-graph-serializer-JELGJUAY.cjs} +22 -22
- package/dist/lib/node/app-graph-serializer-JELGJUAY.cjs.map +7 -0
- package/dist/lib/node/{chunk-MXBE2VET.cjs → chunk-3GKCNADA.cjs} +751 -412
- package/dist/lib/node/chunk-3GKCNADA.cjs.map +7 -0
- package/dist/lib/node/{chunk-5YHUQJVB.cjs → chunk-PU2EYH4E.cjs} +14 -25
- package/dist/lib/node/chunk-PU2EYH4E.cjs.map +7 -0
- package/dist/lib/node/{chunk-SCATWJKX.cjs → chunk-TUZWEPGX.cjs} +198 -100
- package/dist/lib/node/chunk-TUZWEPGX.cjs.map +7 -0
- package/dist/lib/node/chunk-WDEIFDTX.cjs +300 -0
- package/dist/lib/node/chunk-WDEIFDTX.cjs.map +7 -0
- package/dist/lib/node/{identity-created-NIPYGVG3.cjs → identity-created-XU4HFV2T.cjs} +7 -7
- package/dist/lib/node/identity-created-XU4HFV2T.cjs.map +7 -0
- package/dist/lib/node/index.cjs +97 -79
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-MJVRY6YE.cjs → intent-resolver-VJ7YV74L.cjs} +151 -144
- package/dist/lib/node/intent-resolver-VJ7YV74L.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-M4BZ6VXB.cjs → react-root-TEL5RW3N.cjs} +8 -9
- package/dist/lib/node/{react-root-M4BZ6VXB.cjs.map → react-root-TEL5RW3N.cjs.map} +1 -1
- package/dist/lib/node/{react-surface-RYKSYYKM.cjs → react-surface-2H3S5TY5.cjs} +75 -142
- package/dist/lib/node/react-surface-2H3S5TY5.cjs.map +7 -0
- package/dist/lib/node/{schema-defs-2HJLXSNK.cjs → schema-PPJ5BZ3A.cjs} +11 -13
- package/dist/lib/node/schema-PPJ5BZ3A.cjs.map +7 -0
- package/dist/lib/node/{schema-tools-OE3MFYYH.cjs → schema-tools-BLIMOZYY.cjs} +24 -24
- package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +7 -0
- package/dist/lib/node/{settings-AFWO4AWK.cjs → settings-WVFP2UEP.cjs} +7 -7
- package/dist/lib/node/settings-WVFP2UEP.cjs.map +7 -0
- package/dist/lib/node/{spaces-ready-BMPXSFHF.cjs → spaces-ready-7DNZSUOG.cjs} +24 -25
- package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +7 -0
- package/dist/lib/node/{state-L2ZSDKLS.cjs → state-5KX6WBJH.cjs} +7 -5
- package/dist/lib/node/state-5KX6WBJH.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +12 -18
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs +316 -0
- package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-GEUYYXKD.mjs → app-graph-serializer-FXONFKOE.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-serializer-FXONFKOE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5NIBYPVF.mjs → chunk-3ZOUV4DF.mjs} +10 -21
- package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-FI3WV22Y.mjs → chunk-BEWBZ4Q4.mjs} +740 -390
- package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FC4UHDPL.mjs +276 -0
- package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-S2W6HS4A.mjs → chunk-ZGLK25WQ.mjs} +173 -78
- package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-O5X2FFWU.mjs → identity-created-WJKAS2PV.mjs} +5 -5
- package/dist/lib/node-esm/identity-created-WJKAS2PV.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +47 -30
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-JT6EB47M.mjs → intent-resolver-ZFNSA4CM.mjs} +106 -98
- package/dist/lib/node-esm/intent-resolver-ZFNSA4CM.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-S2LW4FS7.mjs → react-root-PRBJMWLQ.mjs} +4 -5
- package/dist/lib/node-esm/{react-surface-ZNNMO7QQ.mjs → react-surface-RCZG2PNF.mjs} +53 -120
- package/dist/lib/node-esm/react-surface-RCZG2PNF.mjs.map +7 -0
- package/dist/lib/node-esm/schema-OUZKVYM5.mjs +25 -0
- package/dist/lib/node-esm/schema-OUZKVYM5.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-tools-YTJLA3NQ.mjs → schema-tools-IU7EX5A5.mjs} +22 -22
- package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-MJVSCOI4.mjs → settings-FJZPC2TV.mjs} +4 -4
- package/dist/lib/node-esm/settings-FJZPC2TV.mjs.map +7 -0
- package/dist/lib/node-esm/{spaces-ready-XKG57SL5.mjs → spaces-ready-7X5PGB2V.mjs} +17 -18
- package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +7 -0
- package/dist/lib/node-esm/{state-QUDYGEU6.mjs → state-Z6E2YTNC.mjs} +4 -2
- package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +1 -7
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +179 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +2 -2
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts +2 -2
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +184 -9
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +3 -4
- 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-tools.d.ts +2 -2
- package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema.d.ts +4 -0
- package/dist/types/src/capabilities/schema.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready.d.ts +2 -2
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- 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/CollectionMain.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -2
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MenuFooter.d.ts +2 -2
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/BaseObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +1 -0
- package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/ObjectSettingsContainer.d.ts +2 -2
- package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
- package/dist/types/src/components/PopoverAddSpace.d.ts +4 -0
- package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -0
- package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/ShareSpaceButton.d.ts +9 -0
- package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -0
- package/dist/types/src/components/ShareSpaceButton.stories.d.ts +10 -0
- package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +1 -0
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- 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 +2 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/index.d.ts +1 -0
- package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/Space.d.ts +13 -0
- package/dist/types/src/components/SyncStatus/Space.d.ts.map +1 -0
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +8 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +9 -0
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +1 -0
- package/dist/types/src/components/SyncStatus/save-tracker.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/status.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/sync-state.d.ts +18 -0
- package/dist/types/src/components/SyncStatus/sync-state.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +0 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/usePath.d.ts +2 -3
- package/dist/types/src/hooks/usePath.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +242 -17
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/collection.d.ts +8 -9
- package/dist/types/src/types/collection.d.ts.map +1 -1
- package/dist/types/src/types/thread.d.ts +110 -205
- package/dist/types/src/types/thread.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +146 -157
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +20 -36
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +44 -51
- package/src/SpacePlugin.tsx +20 -11
- package/src/capabilities/app-graph-builder.ts +230 -377
- package/src/capabilities/app-graph-serializer.ts +8 -8
- package/src/capabilities/identity-created.ts +5 -5
- package/src/capabilities/index.ts +2 -2
- package/src/capabilities/intent-resolver.ts +110 -94
- package/src/capabilities/react-surface.tsx +50 -111
- package/src/capabilities/schema-tool.test.ts +3 -2
- package/src/capabilities/schema-tools.ts +25 -25
- package/src/capabilities/schema.ts +27 -0
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/spaces-ready.ts +14 -16
- package/src/capabilities/state.ts +5 -3
- package/src/components/AwaitingObject.tsx +1 -1
- package/src/components/CollectionMain.tsx +5 -2
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +4 -4
- package/src/components/CreateDialog/CreateObjectDialog.tsx +4 -4
- package/src/components/CreateDialog/CreateObjectPanel.tsx +25 -3
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +3 -6
- package/src/components/MembersContainer.stories.tsx +5 -1
- package/src/components/MembersContainer.tsx +54 -80
- package/src/components/MenuFooter.tsx +2 -2
- package/src/components/{ObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.tsx +2 -2
- package/src/components/{ObjectSettings → ObjectSettingsContainer}/BaseObjectSettings.tsx +2 -2
- package/src/components/{ObjectSettings → ObjectSettingsContainer}/ObjectSettingsContainer.tsx +4 -4
- package/src/components/PersistenceStatus.tsx +14 -11
- package/src/components/PopoverAddSpace.tsx +46 -0
- package/src/components/PopoverRenameObject.tsx +8 -14
- package/src/components/PopoverRenameSpace.tsx +0 -8
- package/src/components/ShareSpaceButton.stories.tsx +27 -0
- package/src/components/ShareSpaceButton.tsx +32 -0
- package/src/components/SpacePluginSettings.tsx +2 -27
- package/src/components/SpacePresence.stories.tsx +1 -1
- package/src/components/SpacePresence.tsx +65 -60
- package/src/components/SpaceSettings/{SpaceSettingsContainer.stories.tsx → SpacePropertiesForm.stories.tsx} +6 -6
- package/src/components/SpaceSettings/SpacePropertiesForm.tsx +136 -0
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +39 -159
- package/src/components/SpaceSettings/index.ts +1 -0
- package/src/components/SyncStatus/InlineSyncStatus.tsx +24 -15
- package/src/components/SyncStatus/Space.tsx +133 -0
- package/src/components/SyncStatus/SyncStatus.tsx +69 -6
- package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +89 -0
- package/src/components/SyncStatus/sync-state.ts +101 -0
- package/src/components/index.ts +3 -2
- package/src/hooks/index.ts +0 -2
- package/src/hooks/usePath.ts +6 -9
- package/src/index.ts +0 -1
- package/src/translations.ts +7 -19
- package/src/types/collection.ts +4 -6
- package/src/types/thread.ts +8 -14
- package/src/types/types.ts +101 -115
- package/src/util.tsx +172 -75
- package/dist/lib/browser/app-graph-builder-7X3SIPCD.mjs +0 -328
- package/dist/lib/browser/app-graph-builder-7X3SIPCD.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-VRU57AEZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-43UQWMD3.mjs.map +0 -7
- package/dist/lib/browser/chunk-AR5R2F6B.mjs +0 -88
- package/dist/lib/browser/chunk-AR5R2F6B.mjs.map +0 -7
- package/dist/lib/browser/chunk-CY35NLWL.mjs +0 -296
- package/dist/lib/browser/chunk-CY35NLWL.mjs.map +0 -7
- package/dist/lib/browser/chunk-IQFFOAWD.mjs.map +0 -7
- package/dist/lib/browser/chunk-UBSVH2NQ.mjs.map +0 -7
- package/dist/lib/browser/identity-created-ANRJHNMQ.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-KRINV5QI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-J7T2IMH4.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-OCBY7APN.mjs +0 -26
- package/dist/lib/browser/schema-defs-OCBY7APN.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-MYC4LTQD.mjs.map +0 -7
- package/dist/lib/browser/settings-G24447B7.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-5I3RKYTT.mjs.map +0 -7
- package/dist/lib/browser/state-SI4B5GHC.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-C2ISDMSL.cjs +0 -328
- package/dist/lib/node/app-graph-builder-C2ISDMSL.cjs.map +0 -7
- package/dist/lib/node/app-graph-serializer-VLBCR3IX.cjs.map +0 -7
- package/dist/lib/node/chunk-5YHUQJVB.cjs.map +0 -7
- package/dist/lib/node/chunk-DQN4ZQDW.cjs +0 -119
- package/dist/lib/node/chunk-DQN4ZQDW.cjs.map +0 -7
- package/dist/lib/node/chunk-K6ZO4WDJ.cjs +0 -324
- package/dist/lib/node/chunk-K6ZO4WDJ.cjs.map +0 -7
- package/dist/lib/node/chunk-MXBE2VET.cjs.map +0 -7
- package/dist/lib/node/chunk-SCATWJKX.cjs.map +0 -7
- package/dist/lib/node/identity-created-NIPYGVG3.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-MJVRY6YE.cjs.map +0 -7
- package/dist/lib/node/react-surface-RYKSYYKM.cjs.map +0 -7
- package/dist/lib/node/schema-defs-2HJLXSNK.cjs.map +0 -7
- package/dist/lib/node/schema-tools-OE3MFYYH.cjs.map +0 -7
- package/dist/lib/node/settings-AFWO4AWK.cjs.map +0 -7
- package/dist/lib/node/spaces-ready-BMPXSFHF.cjs.map +0 -7
- package/dist/lib/node/state-L2ZSDKLS.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-WVCQZ324.mjs +0 -329
- package/dist/lib/node-esm/app-graph-builder-WVCQZ324.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-GEUYYXKD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5NIBYPVF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CLRCW6PU.mjs +0 -297
- package/dist/lib/node-esm/chunk-CLRCW6PU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FI3WV22Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HNKAG5CX.mjs +0 -90
- package/dist/lib/node-esm/chunk-HNKAG5CX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-S2W6HS4A.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-O5X2FFWU.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-JT6EB47M.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-ZNNMO7QQ.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-B74N3GQ5.mjs +0 -27
- package/dist/lib/node-esm/schema-defs-B74N3GQ5.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-YTJLA3NQ.mjs.map +0 -7
- package/dist/lib/node-esm/settings-MJVSCOI4.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-XKG57SL5.mjs.map +0 -7
- package/dist/lib/node-esm/state-QUDYGEU6.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/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.map +0 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts.map +0 -1
- package/dist/types/src/components/SchemaContainer.d.ts +0 -13
- package/dist/types/src/components/SchemaContainer.d.ts.map +0 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +0 -7
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +0 -1
- package/dist/types/src/hooks/useActiveSpace.d.ts +0 -4
- package/dist/types/src/hooks/useActiveSpace.d.ts.map +0 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +0 -14
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +0 -1
- package/src/capabilities/schema-defs.ts +0 -30
- package/src/components/SchemaContainer.tsx +0 -59
- package/src/hooks/useActiveSpace.ts +0 -20
- package/src/hooks/useInputSurfaceLookup.tsx +0 -31
- /package/dist/lib/{browser/react-root-J3SP2HVW.mjs.map → node-esm/react-root-PRBJMWLQ.mjs.map} +0 -0
- /package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/ForeignKeys.d.ts +0 -0
- /package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/index.d.ts +0 -0
- /package/src/components/{ObjectSettings → ObjectSettingsContainer}/ForeignKeys.tsx +0 -0
- /package/src/components/{ObjectSettings → ObjectSettingsContainer}/index.ts +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/AwaitingObject.tsx", "../../../src/components/CreateDialog/CreateObjectDialog.tsx", "../../../src/components/CreateDialog/CreateObjectPanel.tsx", "../../../src/capabilities/index.ts", "../../../src/components/CreateDialog/CreateSpaceDialog.tsx", "../../../src/components/CollectionMain.tsx", "../../../src/components/CollectionSection.tsx", "../../../src/components/JoinDialog.tsx", "../../../src/components/MembersContainer.tsx", "../../../src/components/MenuFooter.tsx", "../../../src/components/ObjectSettings/ObjectSettingsContainer.tsx", "../../../src/components/ObjectSettings/BaseObjectSettings.tsx", "../../../src/components/PersistenceStatus.tsx", "../../../src/components/PopoverRenameObject.tsx", "../../../src/components/PopoverRenameSpace.tsx", "../../../src/components/SchemaContainer.tsx", "../../../src/components/SpacePresence.tsx", "../../../src/components/SpacePluginSettings.tsx", "../../../src/components/SpaceSettings/SpaceSettingsContainer.tsx", "../../../src/components/SyncStatus/InlineSyncStatus.tsx", "../../../src/components/SyncStatus/SyncStatus.tsx", "../../../src/components/SyncStatus/save-tracker.ts", "../../../src/components/SyncStatus/status.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, CircleDashed, CircleNotch } from '@phosphor-icons/react';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';\nimport { Button, Toast, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { SpaceAction } from '../types';\n\nconst WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes\nconst TOAST_TIMEOUT = 240e3; // 4 minutes\n\nexport const AwaitingObject = ({ id }: { id: string }) => {\n const [open, setOpen] = useState(true);\n const [waiting, setWaiting] = useState(true);\n const [found, setFound] = useState(false);\n const { t } = useTranslation(SPACE_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const layout = useLayout();\n\n const client = useClient();\n const objects = useQuery(client.spaces, Filter.everything());\n\n useEffect(() => {\n if (!id) {\n return;\n }\n\n const timeout = setTimeout(() => {\n setWaiting(false);\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n () => clearTimeout(timeout);\n }, [id]);\n\n useEffect(() => {\n if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {\n setFound(true);\n\n if (layout.active.includes(id)) {\n setOpen(false);\n }\n }\n }, [id, objects, layout]);\n\n const handleClose = useCallback(\n async () => dispatch(createIntent(SpaceAction.WaitForObject, { id: undefined })),\n [dispatch],\n );\n\n const handleNavigate = useCallback(() => {\n void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [id] }));\n void handleClose();\n }, [id, handleClose, dispatch]);\n\n return (\n <Toast.Root open={open} duration={TOAST_TIMEOUT} onOpenChange={setOpen}>\n <Toast.Body>\n <Toast.Title classNames='flex items-center gap-2'>\n {found ? (\n <>\n <CheckCircle className={getSize(5)} />\n <span>{t('found object label')}</span>\n </>\n ) : waiting ? (\n <>\n <CircleNotch className={mx(getSize(5), 'animate-spin')} />\n <span>{t('waiting for object label')}</span>\n </>\n ) : (\n <>\n <CircleDashed className={getSize(5)} />\n <span>{t('object not found label')}</span>\n </>\n )}\n </Toast.Title>\n <Toast.Description>\n {t(\n found\n ? 'found object description'\n : waiting\n ? 'waiting for object description'\n : 'object not found description',\n )}\n </Toast.Description>\n </Toast.Body>\n <Toast.Actions>\n {found ? (\n <>\n <Toast.Action altText={t('go to object alt')} asChild>\n <Button variant='primary' onClick={handleNavigate}>\n {t('go to object label')}\n </Button>\n </Toast.Action>\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t('close label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n </>\n ) : (\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t(waiting ? 'close label' : 'confirm label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n )}\n </Toast.Actions>\n </Toast.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport React, { useCallback, useRef } from 'react';\n\nimport {\n Capabilities,\n chain,\n createIntent,\n LayoutAction,\n useCapabilities,\n useIntentDispatcher,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, isLiveObject, isSpace, type Live, useSpaces } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';\nimport { SpaceCapabilities } from '../../capabilities';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { type ObjectForm, SpaceAction } from '../../types';\n\nexport const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;\n\nexport type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {\n shouldNavigate?: (object: Live<any>) => boolean;\n};\n\nexport const CreateObjectDialog = ({\n target,\n typename,\n name,\n shouldNavigate: _shouldNavigate,\n}: CreateObjectDialogProps) => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const manager = usePluginManager();\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const spaces = useSpaces();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const forms = useCapabilities(SpaceCapabilities.ObjectForm);\n\n const resolve = useCallback(\n (typename: string) =>\n manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},\n [manager],\n );\n\n const handleCreateObject = useCallback(\n async ({\n form,\n target,\n data = {},\n }: {\n form: ObjectForm;\n target: CreateObjectPanelProps['target'];\n data?: Record<string, any>;\n }) => {\n if (!target) {\n // TODO(wittjosiah): UI feedback.\n return;\n }\n\n // NOTE: Must close before navigating or attention won't follow object.\n closeRef.current?.click();\n\n const space = isSpace(target) ? target : getSpace(target);\n invariant(space, 'Missing space');\n const result = await dispatch(form.getIntent(data, { space }));\n const object = result.data?.object;\n if (isLiveObject(object)) {\n const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden: form.hidden });\n const shouldNavigate = _shouldNavigate ?? (() => true);\n if (shouldNavigate(object)) {\n await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));\n } else {\n await dispatch(addObjectIntent);\n }\n }\n },\n [dispatch, resolve],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>\n <Dialog.Title>{t('create object dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n\n <CreateObjectPanel\n classNames='p-4'\n forms={forms}\n spaces={spaces}\n target={target}\n typename={typename}\n name={name}\n defaultSpaceId={client.spaces.default.id}\n resolve={resolve}\n onCreateObject={handleCreateObject}\n />\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { getTypeAnnotation, type TypeAnnotation } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId, type Space } from '@dxos/react-client/echo';\nimport { Icon, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNonNullable, type MaybePromise } from '@dxos/util';\n\nimport { useInputSurfaceLookup } from '../../hooks';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { type ObjectForm, type CollectionType } from '../../types';\nimport { getSpaceDisplayName } from '../../util';\n\nexport type CreateObjectPanelProps = ThemedClassName<{\n forms: ObjectForm[];\n spaces: Space[];\n typename?: string;\n target?: Space | CollectionType;\n name?: string;\n defaultSpaceId?: SpaceId;\n resolve?: (typename: string) => Record<string, any>;\n onCreateObject?: (params: {\n form: ObjectForm;\n target: Space | CollectionType;\n data?: Record<string, any>;\n }) => MaybePromise<void>;\n}>;\n\nexport const CreateObjectPanel = ({\n classNames,\n forms,\n spaces,\n typename: initialTypename,\n target: initialTarget,\n name: initialName,\n defaultSpaceId,\n resolve,\n onCreateObject,\n}: CreateObjectPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [typename, setTypename] = useState<string | undefined>(initialTypename);\n const [target, setTarget] = useState<Space | CollectionType | undefined>(initialTarget);\n const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);\n const options: TypeAnnotation[] = forms\n .map((form) => getTypeAnnotation(form.objectSchema))\n .filter(isNonNullable)\n .sort((a, b) => {\n const nameA = t('typename label', { ns: a.typename, defaultValue: a.typename });\n const nameB = t('typename label', { ns: b.typename, defaultValue: b.typename });\n return nameA.localeCompare(nameB);\n });\n\n const handleCreateObject = useCallback(\n async (props: Record<string, any>) => {\n if (!form || !target) {\n return;\n }\n await onCreateObject?.({ form, target, data: props });\n },\n [onCreateObject, form, target],\n );\n\n const handleSetTypename = useCallback(\n async (typename: string) => {\n invariant(target, 'target is required');\n const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);\n if (form && !form.formSchema) {\n await onCreateObject?.({ form, target });\n } else {\n setTypename(typename);\n }\n },\n [forms, onCreateObject, target],\n );\n\n const inputSurfaceLookup = useInputSurfaceLookup({ target });\n\n // TODO(wittjosiah): These inputs should be rolled into a `Form` once it supports the necessary variants.\n return (\n <div role='form' className={mx('flex flex-col gap-2', classNames)}>\n {!form ? (\n <SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />\n ) : !target ? (\n <SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={setTarget} />\n ) : form.formSchema ? (\n <Form\n classNames='!p-0'\n autoFocus\n values={{ name: initialName }}\n schema={form.formSchema}\n testId='create-object-form'\n onSave={handleCreateObject}\n lookupComponent={inputSurfaceLookup}\n />\n ) : undefined}\n </div>\n );\n};\n\nconst SelectSpace = ({\n spaces,\n defaultSpaceId,\n onChange,\n}: { onChange: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <SearchList.Root label={t('space input label')} classNames='flex flex-col grow overflow-hidden'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.space-input'\n placeholder={t('space input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {spaces\n .sort((a, b) => {\n const aName = toLocalizedString(getSpaceDisplayName(a, { personal: a.id === defaultSpaceId }), t);\n const bName = toLocalizedString(getSpaceDisplayName(b, { personal: b.id === defaultSpaceId }), t);\n return aName.localeCompare(bName);\n })\n .map((space) => (\n <SearchList.Item\n key={space.id}\n value={toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n onSelect={() => onChange(space)}\n classNames='flex items-center gap-2'\n >\n <span className='grow truncate'>\n {toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n};\n\nconst SelectSchema = ({\n options,\n resolve,\n onChange,\n}: {\n options: TypeAnnotation[];\n onChange: (type: string) => void;\n} & Pick<CreateObjectPanelProps, 'resolve'>) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <SearchList.Root label={t('schema input label')} classNames='flex flex-col grow overflow-hidden'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.schema-input'\n placeholder={t('schema input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {options.map((option) => (\n <SearchList.Item\n key={option.typename}\n value={t('typename label', { ns: option.typename, defaultValue: option.typename })}\n onSelect={() => onChange(option.typename)}\n classNames='flex items-center gap-2'\n >\n <span className='flex gap-2 items-center grow truncate'>\n <Icon icon={resolve?.(option.typename).icon ?? 'ph--placeholder--regular'} size={5} />\n {t('typename label', { ns: option.typename, defaultValue: option.typename })}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const AppGraphSerializer = lazy(() => import('./app-graph-serializer'));\nexport const IdentityCreated = lazy(() => import('./identity-created'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const SchemaDefs = lazy(() => import('./schema-defs'));\nexport const SchemaTools = lazy(() => import('./schema-tools'));\nexport const SpaceSettings = lazy(() => import('./settings'));\nexport const SpaceState = lazy(() => import('./state'));\nexport const SpacesReady = lazy(() => import('./spaces-ready'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Effect, type Schema } from 'effect';\nimport React, { useCallback, useRef } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { useInputSurfaceLookup } from '../../hooks';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { SpaceAction, SpaceForm } from '../../types';\n\nexport const CREATE_SPACE_DIALOG = `${SPACE_PLUGIN}/CreateSpaceDialog`;\n\ntype FormValues = Schema.Schema.Type<typeof SpaceForm>;\nconst initialValues: FormValues = { edgeReplication: true };\n\nexport const CreateSpaceDialog = () => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const { t } = useTranslation(SPACE_PLUGIN);\n const { dispatch } = useIntentDispatcher();\n\n const inputSurfaceLookup = useInputSurfaceLookup();\n\n const handleCreateSpace = useCallback(\n async (data: FormValues) => {\n const program = Effect.gen(function* () {\n const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));\n yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));\n yield* dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));\n });\n await Effect.runPromise(program);\n },\n [dispatch],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[16rem] max-bs-full md:max-is-[32rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>\n <Dialog.Title>{t('create space dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div className='p-4'>\n <Form\n testId='create-space-form'\n classNames='!p-0'\n autoFocus\n values={initialValues}\n schema={SpaceForm}\n lookupComponent={inputSurfaceLookup}\n onSave={handleCreateSpace}\n />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionMain = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div\n role='none'\n className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}\n data-testid='composer.firstRunMessage'\n >\n <p\n role='alert'\n className={mx(descriptionMessage, 'rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words')}\n >\n {collection.name ?? t('unnamed collection label')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionSection = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n // TODO(wittjosiah): Better placeholder.\n return (\n <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>\n <span className='truncate'>{collection.name ?? t('unnamed collection label')}</span>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { createIntent, LayoutAction, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { Trigger } from '@dxos/async';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type InvitationResult } from '@dxos/react-client/invitations';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;\n\nexport type JoinDialogProps = JoinPanelProps & {\n navigableCollections?: boolean;\n};\n\nexport const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialogProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const { graph } = useAppGraph();\n const { t } = useTranslation(SPACE_PLUGIN);\n\n const handleDone = useCallback(\n async (result: InvitationResult | null) => {\n const spaceKey = result?.spaceKey;\n if (!spaceKey) {\n return;\n }\n\n await Promise.all([\n dispatch(\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/join-success`,\n duration: 5_000,\n title: ['join success label', { ns: SPACE_PLUGIN }],\n closeLabel: ['dismiss label', { ns: SPACE_PLUGIN }],\n },\n }),\n ),\n dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n options: {\n state: false,\n },\n }),\n ),\n ]);\n\n let space = client.spaces.get(spaceKey);\n if (!space) {\n // TODO(wittjosiah): Add api to wait for a space.\n const trigger = new Trigger<Space>();\n client.spaces.subscribe(() => {\n const space = client.spaces.get(spaceKey);\n if (space) {\n trigger.wake(space);\n }\n });\n space = await trigger.wait();\n }\n\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));\n\n // TODO(wittjosiah): If navigableCollections is false and there's no target,\n // should try to navigate to the first object of the space replicates.\n // Potentially this could also be done on the inviters side to ensure there's always a target.\n const target = result?.target || (navigableCollections ? space?.id : undefined);\n if (target) {\n // Wait before navigating to the target node.\n // If the target has not yet replicated, this will trigger a loading toast.\n await graph.waitForPath({ target }).catch(() => {});\n await Promise.all([\n dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [target] })),\n dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: target })),\n ]);\n }\n\n await onDone?.(result);\n\n if (space) {\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n }),\n );\n }\n },\n [dispatch, client, graph],\n );\n\n return (\n <Dialog.Content>\n <Dialog.Title classNames='sr-only'>{t('join space label', { ns: 'os' })}</Dialog.Title>\n <JoinPanel\n {...props}\n exitActionParent={<Dialog.Close asChild />}\n doneActionParent={<Dialog.Close asChild />}\n onDone={handleDone}\n />\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Check, X } from '@phosphor-icons/react';\nimport React, { type Dispatch, type SetStateAction, useCallback, useMemo, useState } from 'react';\nimport { QR } from 'react-qr-rounded';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { fullyQualifiedId, useSpaceInvitations, type Space } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/react-ui';\nimport { ControlPage, ControlSection, ControlFrame, ControlFrameItem, ControlItemInput } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport {\n type ActionMenuItem,\n AuthCode,\n BifurcatedAction,\n Centered,\n Emoji,\n InvitationList,\n SpaceMemberList,\n Viewport,\n} from '@dxos/shell/react';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { CollectionType, SpaceAction } from '../types';\nimport { COMPOSER_SPACE_LOCK } from '../util';\n\n// TODO(wittjosiah): Copied from Shell.\nconst activeActionKey = 'dxos:react-shell/space-manager/active-action';\n\nconst handleInvitationEvent = (invitation: Invitation, subscription: ZenObservable.Subscription) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n};\n\nexport const MembersContainer = ({\n space,\n createInvitationUrl,\n}: {\n space: Space;\n createInvitationUrl: (invitationCode: string) => string;\n}) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const config = useConfig();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const invitations = useSpaceInvitations(space.key);\n const visibleInvitations = invitations?.filter(\n (invitation) => ![Invitation.State.CANCELLED].includes(invitation.get().state),\n );\n\n const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteMany');\n\n const setActiveAction = (nextAction: string) => {\n setInternalActiveAction(nextAction);\n localStorage.setItem(activeActionKey, nextAction);\n };\n\n // TODO(wittjosiah): Track which was the most recently viewed object.\n const target = space.properties[CollectionType.typename]?.target?.objects[0]?.target;\n\n const locked = space.properties[COMPOSER_SPACE_LOCK];\n const handleChangeLocked = useCallback(() => {\n space.properties[COMPOSER_SPACE_LOCK] = !locked;\n }, [locked, space]);\n\n const inviteActions = useMemo(\n (): Record<string, ActionMenuItem> => ({\n inviteOne: {\n label: t('invite one label', { ns: 'os' }),\n description: t('invite one description', { ns: 'os' }),\n icon: () => <Icon icon='ph--user-plus--regular' size={5} />,\n testId: 'membersContainer.inviteOne',\n onClick: async () => {\n const { data: invitation } = await dispatch(\n createIntent(SpaceAction.Share, {\n space,\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n multiUse: false,\n target: target && fullyQualifiedId(target),\n }),\n );\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n },\n },\n inviteMany: {\n label: t('invite many label', { ns: 'os' }),\n description: t('invite many description', { ns: 'os' }),\n icon: () => <Icon icon='ph--users-three--regular' size={5} />,\n testId: 'membersContainer.inviteMany',\n onClick: async () => {\n const { data: invitation } = await dispatch(\n createIntent(SpaceAction.Share, {\n space,\n type: Invitation.Type.DELEGATED,\n authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,\n multiUse: true,\n target: target && fullyQualifiedId(target),\n }),\n );\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n },\n },\n }),\n [t, space, target],\n );\n\n const [selectedInvitation, setSelectedInvitation] = useState<CancellableInvitationObservable | null>(null);\n const handleSend = (event: { type: 'selectInvitation'; invitation: CancellableInvitationObservable }) => {\n setSelectedInvitation(event.invitation);\n };\n const handleBack = () => {\n setSelectedInvitation(null);\n };\n\n return (\n <Clipboard.Provider>\n <StackItem.Content classNames='block overflow-y-auto'>\n <ControlPage>\n <ControlSection title={t('members verbose label')} description={t('members description')}>\n <ControlFrame>\n <ControlFrameItem title={t('members label')}>\n <SpaceMemberList spaceKey={space.key} includeSelf />\n </ControlFrameItem>\n {locked && (\n <ControlFrameItem title={t('invitations label')}>\n <p className='text-description mbe-2'>{t('locked space description')}</p>\n </ControlFrameItem>\n )}\n {!locked && (\n <ControlFrameItem title={t('invitations label')}>\n {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}\n {!selectedInvitation && (\n <>\n <p className='text-description mbe-2'>{t('space invitation description')}</p>\n <InvitationList\n className='mb-2'\n send={handleSend}\n invitations={visibleInvitations ?? []}\n onClickRemove={(invitation) => invitation.cancel()}\n createInvitationUrl={createInvitationUrl}\n />\n <BifurcatedAction\n actions={inviteActions}\n activeAction={activeAction}\n onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}\n data-testid='membersContainer.createInvitation'\n />\n </>\n )}\n </ControlFrameItem>\n )}\n </ControlFrame>\n {/* TODO(wittjosiah): Make ControlItemInput & ControlFrame compatible. */}\n <div className='justify-center gap-4 p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>\n <ControlItemInput title={t('space locked label')} description={t('space locked description')}>\n <Input.Switch checked={locked} onCheckedChange={handleChangeLocked} classNames='justify-self-end' />\n </ControlItemInput>\n </div>\n </ControlSection>\n </ControlPage>\n </StackItem.Content>\n </Clipboard.Provider>\n );\n};\n\n// TODO(wittjosiah): Reconcile the below components with DevicesContainer in @dxos/plugin-client.\n\ntype InvitationComponentProps = Partial<\n Pick<Invitation, 'authCode' | 'invitationId'> & {\n state: Invitation.State;\n url: string;\n onBack: () => void;\n }\n>;\n\nconst InvitationSection = ({\n state = Invitation.State.INIT,\n authCode,\n invitationId = 'never',\n url = 'never',\n onBack,\n}: InvitationComponentProps) => {\n const activeView =\n state < 0\n ? 'init'\n : state >= Invitation.State.CANCELLED\n ? 'complete'\n : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode\n ? 'auth-code'\n : 'qr-code';\n return (\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='init'>\n {/* This view intentionally left blank while conditionally rendering the viewport. */}\n </Viewport.View>\n <Viewport.View id='complete'>\n <InvitationComplete statusValue={state} />\n </Viewport.View>\n <Viewport.View id='auth-code'>\n <InvitationAuthCode id={invitationId} code={authCode ?? 'never'} onCancel={onBack} />\n </Viewport.View>\n <Viewport.View id='qr-code'>\n <InvitationQR id={invitationId} url={url} onCancel={onBack} />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n );\n};\n\nconst InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel?: () => void }) => {\n const { t } = useTranslation('os');\n const qrLabel = useId('members-container__qr-code');\n const emoji = hexToEmoji(id);\n return (\n <>\n <p className='text-description'>{t('qr code description', { ns: SPACE_PLUGIN })}</p>\n <div role='group' className='grid grid-cols-[1fr_min-content] mlb-2 gap-2'>\n <div role='none' className='is-full aspect-square relative text-description'>\n <QR\n rounding={100}\n backgroundColor='transparent'\n color='currentColor'\n aria-labelledby={qrLabel}\n errorCorrectionLevel='Q'\n cutout={true}\n >\n {url ?? 'never'}\n </QR>\n <Centered>\n <Emoji text={emoji} />\n </Centered>\n </div>\n <span id={qrLabel} className='sr-only'>\n {t('qr label')}\n </span>\n <Clipboard.Button value={url ?? 'never'} />\n </div>\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel label')}\n </Button>\n </>\n );\n};\n\nconst InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel?: () => void }) => {\n const { t } = useTranslation('os');\n const emoji = hexToEmoji(id);\n\n return (\n <>\n <p className='text-description'>{t('auth other device emoji message')}</p>\n {emoji && <Emoji text={emoji} className='mli-auto mlb-2 text-center' />}\n <p className='text-description'>{t('auth code message')}</p>\n <AuthCode code={code} large classNames='mli-auto mlb-2 text-center grow' />\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel label')}\n </Button>\n </>\n );\n};\n\nconst InvitationComplete = ({ statusValue }: { statusValue: number }) => {\n return statusValue > 0 ? <Check className={mx('m-1.5', getSize(6))} /> : <X className={mx('m-1.5', getSize(6))} />;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type AnyLiveObject, getSpace } from '@dxos/client/echo';\nimport { useClient } from '@dxos/react-client';\nimport { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { getSpaceDisplayName } from '../util';\n\nexport const MenuFooter = ({ object }: { object: AnyLiveObject<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = getSpace(object);\n const spaceName = space ? getSpaceDisplayName(space, { personal: client.spaces.default === space }) : '';\n return space ? (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.GroupLabel>{t('menu footer label')}</DropdownMenu.GroupLabel>\n <dl className='pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2'>\n <dt className='uppercase text-[.75em] tracking-wide font-medium mbs-px self-start'>{t('location label')}</dt>\n <dd className='line-clamp-3'>\n <Planet className='inline-block mie-1' />\n {toLocalizedString(spaceName, t)}\n </dd>\n </dl>\n </>\n ) : null;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type AnyLiveObject } from '@dxos/react-client/echo';\nimport { Clipboard } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { BaseObjectSettings } from './BaseObjectSettings';\n\nexport type ObjectSettingsContainerProps = {\n object: AnyLiveObject<any>;\n role: string;\n};\n\nexport const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContainerProps) => {\n const data = useMemo(() => ({ subject: object }), [object]);\n\n return (\n <Clipboard.Provider>\n <StackItem.Content toolbar={false} role={role}>\n <div className='flex flex-col overflow-y-auto divide-y divide-separator'>\n <BaseObjectSettings object={object}>\n <Surface role='base-object-settings' data={data} />\n </BaseObjectSettings>\n <Surface role='object-settings' data={data} />\n {/* TODO(wittjosiah): Remove? */}\n {/* <AdvancedObjectSettings object={object} /> */}\n </div>\n </StackItem.Content>\n </Clipboard.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useRef } from 'react';\n\nimport { type AnyLiveObject } from '@dxos/react-client/echo';\nimport { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nexport type BaseObjectSettingsProps = ThemedClassName<\n PropsWithChildren<{\n object: AnyLiveObject<any>;\n }>\n>;\n\nexport const BaseObjectSettings = ({ classNames, children, object }: BaseObjectSettingsProps) => {\n const { t } = useTranslation(meta.id);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // TODO(wittjosiah): This should be a form based on the schema of the object.\n // The form should only include fields with a specific settings annotation.\n // Perhaps also including the field of the title annotation as well.\n return (\n <form className={mx('flex flex-col p-2 gap-2', classNames)}>\n <Input.Root>\n <Input.Label>{t('name label')}</Input.Label>\n <Input.TextInput\n ref={inputRef}\n placeholder={t('name placeholder')}\n value={object.name ?? ''}\n onChange={(event) => {\n object.name = event.target.value;\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n inputRef.current?.blur();\n }\n }}\n />\n </Input.Root>\n {children}\n </form>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowsCounterClockwise, CheckCircle, Warning } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { type EchoDatabase } from '@dxos/react-client/echo';\nimport { Tooltip, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx, staticPlaceholderText, warningText } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nenum Status {\n PERSISTED_LOCALLY = 0,\n PENDING = 1,\n ERROR = 2,\n}\n\n// TODO(zan): This now has no usages. Remove it?\nexport const PersistenceStatus = ({ db }: { db: EchoDatabase }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [displayMessage, setDisplayMessage] = useState(false);\n const [status, naturalSetStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const [prevStatus, setPrevStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const _setStatus = debounce(naturalSetStatus, 500);\n\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // return db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setStatus(Status.ERROR);\n // } else if (duration === undefined) {\n // setStatus(Status.PENDING);\n // } else {\n // setStatus(Status.PERSISTED_LOCALLY);\n // }\n // });\n // }, [db]);\n\n useEffect(() => {\n // If this is changed outside the effect it's batched with setStatus and the following condition will never be true.\n setPrevStatus(status);\n\n if (prevStatus !== status && status === Status.PERSISTED_LOCALLY) {\n setDisplayMessage(true);\n const timeout = setTimeout(() => setDisplayMessage(false), 5000);\n return () => clearTimeout(timeout);\n }\n }, [status]); // `prevStatus` omitted from dependency array to prevent timeout from being reset.\n\n switch (status) {\n case Status.ERROR:\n return (\n <div className='flex items-center'>\n <Warning className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', warningText)}>{t('persistence error label')}</span>\n </div>\n );\n case Status.PENDING:\n return (\n <div className='flex items-center'>\n <ArrowsCounterClockwise className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persistence pending label')}</span>\n </div>\n );\n case Status.PERSISTED_LOCALLY:\n default:\n return (\n <Tooltip.Trigger\n delayDuration={400}\n role='status'\n content={t('persisted locally message')}\n className='flex items-center'\n >\n <CheckCircle className={mx(getSize(4), 'me-1')} />\n {displayMessage && (\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persisted locally label')}</span>\n )}\n </Tooltip.Trigger>\n );\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { type Live } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { Button, Input, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;\n\nexport const PopoverRenameObject = ({ object: obj }: { object: Live<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n // TODO(wittjosiah): Use schema here.\n const object = obj as any;\n // TODO(burdon): Field should not be hardcoded field.\n const [name, setName] = useState(object.name || object.title || '');\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleDone = useCallback(() => {\n try {\n object.name = name;\n } catch {\n try {\n object.title = name;\n } catch (err) {\n log.error('Failed to rename object', { err });\n }\n }\n void dispatch(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n options: { variant: 'react', anchorId: '', state: false },\n }),\n );\n }, [object, name]);\n\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('object name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('object placeholder')}\n value={name}\n data-testid='spacePlugin.renameObject.input'\n onChange={({ target: { value } }) => setName(value)}\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const POPOVER_RENAME_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;\n\nexport const PopoverRenameSpace = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n const [name, setName] = useState(space.properties.name ?? '');\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleDone = useCallback(() => {\n space.properties.name = name;\n void dispatch(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n options: { variant: 'react', anchorId: '', state: false },\n }),\n );\n }, [space, name]);\n\n // TODO(thure): Why does the input value need to be uncontrolled to work?\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('space name label')}</Input.Label>\n <Input.TextInput\n defaultValue={space.properties.name ?? ''}\n placeholder={t('unnamed space label')}\n onChange={({ target: { value } }) => setName(value)}\n // TODO(wittjosiah): Ideally this should access the popover context to close the popover.\n // Currently this is not possible because Radix does not expose the popover context.\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Popover.Close asChild>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </Popover.Close>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useState, useEffect } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { controlItemClasses, ControlPage, ControlSection } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { SPACE_PLUGIN } from '../meta';\n\ntype SchemaPanelProps = { space: Space };\n\n// TODO(ZaymonFC):\n// - Support deleting Schema. This should tie in to some sort of\n// 'DangerZone™️' / 'Are you really sure?' / 'this might have consequences' component.\n\n/**\n * Subscribe to and retrieve all schemas from a space's schema registry.\n */\nexport const useQuerySpaceSchemas = (space: Space): EchoSchema[] => {\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n\n useEffect(() => {\n const query = space.db.schemaRegistry.query();\n const initialResults = query.runSync();\n setSchemas(initialResults);\n\n const unsubscribe = query.subscribe(() => setSchemas(query.results));\n return () => unsubscribe();\n }, [space]);\n\n return schemas;\n};\n\nexport const SchemaContainer = ({ space }: SchemaPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const schemas = useQuerySpaceSchemas(space);\n\n return (\n <StackItem.Content classNames='block overflow-y-auto'>\n <ControlPage>\n <ControlSection title={t('schema verbose label')} description={t('schema description')}>\n <div role='none' className={controlItemClasses}>\n {schemas.length === 0 && <div className='text-center plb-4'>{t('no schemas found message')}</div>}\n {schemas.map((schema) => (\n <div key={schema.id}>\n <div>{schema.typename}</div>\n </div>\n ))}\n </div>\n </ControlSection>\n </ControlPage>\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Option } from 'effect';\nimport React, { forwardRef, useCallback, useEffect, useState } from 'react';\n\nimport { useAppGraph, useCapability } from '@dxos/app-framework';\nimport { generateName } from '@dxos/display-name';\nimport { type Expando } from '@dxos/echo-schema';\nimport { PublicKey, useClient } from '@dxos/react-client';\nimport { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport {\n Avatar,\n type AvatarContentProps,\n type Size,\n type ThemedClassName,\n Tooltip,\n Popover,\n useTranslation,\n List,\n ListItem,\n useDefaultValue,\n type DxAvatar,\n} from '@dxos/react-ui';\nimport { AttentionGlyph, useAttended, useAttention, type AttentionGlyphProps } from '@dxos/react-ui-attention';\nimport { ComplexMap, keyToFallback } from '@dxos/util';\n\nimport { SpaceCapabilities } from '../capabilities';\nimport { usePath } from '../hooks';\nimport { SPACE_PLUGIN } from '../meta';\nimport type { ObjectViewerProps } from '../types';\n\n// TODO(thure): Get/derive these values from protocol\nconst REFRESH_INTERVAL = 5000;\nconst ACTIVITY_DURATION = 30_000;\n\n// TODO(thure): This is chiefly meant to satisfy TS & provide an empty map after `deepSignal` interactions.\nconst noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);\n\n// TODO(wittjosiah): Factor out?\nconst getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n\nexport const SpacePresence = ({ object, spaceKey }: { object: Expando; spaceKey?: PublicKey }) => {\n // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.\n const spaceState = useCapability(SpaceCapabilities.MutableState);\n const client = useClient();\n const identity = useIdentity();\n const space = spaceKey ? client.spaces.get(spaceKey) : getSpace(object);\n const spaceMembers = useMembers(space?.key);\n\n const [_moment, setMoment] = useState(Date.now());\n\n // NOTE(thure): This is necessary so Presence updates without any underlying data updating.\n useEffect(() => {\n const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, []);\n\n const memberOnline = useCallback((member: SpaceMember) => member.presence === 1, []);\n const memberIsNotSelf = useCallback(\n (member: SpaceMember) => !identity?.identityKey.equals(member.identity.identityKey),\n [identity?.identityKey],\n );\n\n // TODO(thure): Could it be a smell to return early when there are interactions with `deepSignal` later, since it\n // prevents reactivity?\n if (!identity || !spaceState || !space) {\n return null;\n }\n\n const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId(object)] ?? noViewers;\n\n const membersForObject = spaceMembers\n .filter((member) => memberOnline(member) && memberIsNotSelf(member))\n .filter((member) => currentObjectViewers.has(member.identity.identityKey))\n .map((member) => {\n const objectView = currentObjectViewers.get(member.identity.identityKey);\n const lastSeen = objectView?.lastSeen ?? -Infinity;\n const currentlyAttended = objectView?.currentlyAttended ?? false;\n\n return {\n ...member,\n currentlyAttended,\n lastSeen,\n };\n })\n .toSorted((a, b) => a.lastSeen - b.lastSeen);\n\n return <FullPresence members={membersForObject} />;\n};\n\nexport type Member = SpaceMember & {\n /**\n * Last time a member was seen on this object.\n */\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type MemberPresenceProps = ThemedClassName<{\n size?: Size;\n members?: Member[];\n showCount?: boolean;\n onMemberClick?: (member: Member) => void;\n}>;\n\nexport const FullPresence = (props: MemberPresenceProps) => {\n const { size = 9, onMemberClick } = props;\n const members = useDefaultValue(props.members, () => []);\n\n if (members.length === 0) {\n return null;\n }\n\n return (\n <div className='dx-avatar-group' data-testid='spacePlugin.presence'>\n {members.slice(0, 3).map((member, i) => (\n <Tooltip.Trigger\n key={member.identity.identityKey.toHex()}\n side='bottom'\n content={getName(member.identity)}\n className='grid focus:outline-none'\n >\n <PresenceAvatar\n identity={member.identity}\n match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.\n index={members.length - i}\n onClick={() => onMemberClick?.(member)}\n size={size}\n />\n </Tooltip.Trigger>\n ))}\n\n {members.length > 3 && (\n <Popover.Root>\n <Popover.Trigger className='grid focus:outline-none'>\n <Avatar.Root>\n {/* TODO(wittjosiah): Make text fit. */}\n <Avatar.Content\n status='inactive'\n style={{ zIndex: members.length - 4 }}\n fallback={`+${members.length - 3}`}\n size={size}\n />\n </Avatar.Root>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content side='bottom'>\n <Popover.Arrow />\n <List classNames='max-h-56 overflow-y-auto'>\n {members.map((member) => (\n <ListItem.Root\n key={member.identity.identityKey.toHex()}\n classNames='flex gap-2 items-center cursor-pointer mbe-2'\n onClick={() => onMemberClick?.(member)}\n data-testid='identity-list-item'\n >\n {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}\n <PresenceAvatar identity={member.identity} size={size} showName match={member.currentlyAttended} />\n </ListItem.Root>\n ))}\n </List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n </div>\n );\n};\n\ntype PresenceAvatarProps = Pick<AvatarContentProps, 'size'> & {\n identity: Identity;\n showName?: boolean;\n match?: boolean;\n index?: number;\n onClick?: () => void;\n};\n\nconst PresenceAvatar = forwardRef<DxAvatar, PresenceAvatarProps>(\n ({ identity, showName, match, index, onClick, size }, forwardedRef) => {\n const status = match ? 'current' : 'active';\n const fallbackValue = keyToFallback(identity.identityKey);\n return (\n <Avatar.Root>\n <Avatar.Content\n status={status}\n hue={identity.profile?.data?.hue || fallbackValue.hue}\n data-testid='spacePlugin.presence.member'\n data-status={status}\n size={size}\n {...(index ? { style: { zIndex: index } } : {})}\n onClick={onClick}\n fallback={identity.profile?.data?.emoji || fallbackValue.emoji}\n ref={forwardedRef}\n />\n <Avatar.Label classNames={showName ? 'text-sm truncate pli-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>\n </Avatar.Root>\n );\n },\n);\n\nexport type SmallPresenceLiveProps = {\n id?: string;\n open?: boolean;\n viewers?: ComplexMap<PublicKey, ObjectViewerProps>;\n};\n\nexport const SmallPresenceLive = ({ id, open, viewers }: SmallPresenceLiveProps) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const isAttended = hasAttention || isAncestor || isRelated;\n\n // TODO(wittjosiah): If the attended node is deep in the graph and the graph is not fully loaded\n // this will result in an empty path until the graph is connected.\n // TODO(wittjosiah): Consider using this indicator for all open nodes instead of just attended.\n const { graph } = useAppGraph();\n const attended = useAttended();\n const startOfAttention = attended.at(-1);\n const path = usePath(graph, startOfAttention);\n const containsAttended = !open && !isAttended && id && Option.isSome(path) ? path.value.includes(id) : false;\n\n const getActiveViewers = (viewers: ComplexMap<PublicKey, ObjectViewerProps>): ObjectViewerProps[] => {\n const moment = Date.now();\n return Array.from<ObjectViewerProps>(viewers.values()).filter(\n (viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION,\n );\n };\n\n const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);\n\n useEffect(() => {\n if (viewers) {\n setActiveViewers(getActiveViewers(viewers));\n const interval = setInterval(() => {\n setActiveViewers(getActiveViewers(viewers));\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }\n }, [viewers]);\n\n return <SmallPresence count={activeViewers.length} attended={isAttended} containsAttended={containsAttended} />;\n};\n\nexport type SmallPresenceProps = {\n count?: number;\n} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;\n\nexport const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <Tooltip.Trigger asChild content={t('presence label', { count })} side='bottom'>\n <AttentionGlyph\n attended={attended}\n containsAttended={containsAttended}\n presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'}\n classNames='self-center mie-1'\n />\n </Tooltip.Trigger>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { useSpaces } from '@dxos/react-client/echo';\nimport { Input, toLocalizedString, useTranslation, List, ListItem, Button } from '@dxos/react-ui';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { SpaceAction, type SpaceSettingsProps } from '../types';\nimport { getSpaceDisplayName } from '../util';\n\nexport const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const spaces = useSpaces({ all: settings.showHidden });\n\n // TODO(wittjosiah): Migrate to new form container.\n return (\n <DeprecatedFormContainer>\n <DeprecatedFormInput label={t('show hidden spaces label')}>\n <Input.Switch checked={settings.showHidden} onCheckedChange={(checked) => (settings.showHidden = !!checked)} />\n </DeprecatedFormInput>\n <div role='none'>\n <h2 className='text-xl my-4'>Space Settings</h2>\n <List classNames='max-w-md mx-auto'>\n {spaces.map((space) => (\n <ListItem.Root key={space.id}>\n <ListItem.Heading classNames='flex flex-col grow truncate mbe-2'>\n {toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t)}\n </ListItem.Heading>\n <ListItem.Endcap>\n <Button onClick={() => dispatch(createIntent(SpaceAction.OpenSettings, { space }))}>\n {t('open space settings label')}\n </Button>\n </ListItem.Endcap>\n </ListItem.Root>\n ))}\n </List>\n </div>\n </DeprecatedFormContainer>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { pipe, Schema } from 'effect';\nimport React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';\n\nimport { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { SpaceState, type Space } from '@dxos/react-client/echo';\nimport { Button, Input, useMulticastObservable, useTranslation } from '@dxos/react-ui';\nimport {\n Form,\n type InputComponent,\n ControlItem,\n ControlItemInput,\n ControlSection,\n ControlPage,\n} from '@dxos/react-ui-form';\nimport { HuePicker, IconPicker } from '@dxos/react-ui-pickers';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { SPACE_PLUGIN } from '../../meta';\nimport { SpaceAction, SpaceForm } from '../../types';\n\nconst FormSchema = SpaceForm.pipe(\n Schema.extend(Schema.Struct({ archived: Schema.Boolean.annotations({ title: 'Archive space' }) })),\n);\n\nexport type SpaceSettingsContainerProps = {\n space: Space;\n};\n\n// TODO(wittjosiah): Handle space migrations here?\nexport const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const archived = useMulticastObservable(space.state) === SpaceState.SPACE_INACTIVE;\n const [edgeReplication, setEdgeReplication] = useState(\n space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED,\n );\n const toggleEdgeReplication = useCallback(\n async (next: boolean) => {\n setEdgeReplication(next);\n await space?.internal\n .setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED)\n .catch((err: unknown) => {\n log.catch(err);\n setEdgeReplication(!next);\n });\n },\n [space],\n );\n\n const handleSave = useCallback(\n (properties: Schema.Schema.Type<typeof FormSchema>) => {\n void toggleEdgeReplication(properties.edgeReplication);\n if (properties.name !== space.properties.name) {\n space.properties.name = properties.name;\n }\n if (properties.icon !== space.properties.icon) {\n space.properties.icon = properties.icon;\n }\n if (properties.hue !== space.properties.hue) {\n space.properties.hue = properties.hue;\n }\n if (properties.archived && !archived) {\n void dispatch(\n pipe(\n createIntent(SpaceAction.Close, { space }),\n chain(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: client.spaces.default.id }),\n ),\n );\n } else if (!properties.archived && archived) {\n void dispatch(createIntent(SpaceAction.Open, { space }));\n }\n },\n [space, toggleEdgeReplication, archived],\n );\n\n const values = useMemo(\n () => ({\n name: space.properties.name,\n icon: space.properties.icon,\n hue: space.properties.hue,\n edgeReplication,\n archived,\n }),\n [space.properties.name, space.properties.icon, space.properties.hue, edgeReplication, archived],\n );\n\n const customElements: Partial<Record<string, InputComponent>> = useMemo(\n () => ({\n name: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback(\n ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),\n [onValueChange, type],\n );\n return (\n <ControlItemInput title={label} description={t('display name description')}>\n <Input.TextInput\n value={getValue()}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='min-is-64'\n />\n </ControlItemInput>\n );\n },\n icon: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback((nextEmoji: string) => onValueChange(type, nextEmoji), [onValueChange, type]);\n const handleEmojiReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);\n return (\n <ControlItem title={label} description={t('icon description')}>\n <IconPicker\n value={getValue()}\n onChange={handleChange}\n onReset={handleEmojiReset}\n classNames='justify-self-end'\n iconSize={5}\n />\n </ControlItem>\n );\n },\n hue: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);\n const handleHueReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);\n return (\n <ControlItem title={label} description={t('hue description')}>\n <HuePicker\n value={getValue()}\n onChange={handleChange}\n onReset={handleHueReset}\n classNames='[--hue-preview-size:1.25rem] justify-self-end'\n />\n </ControlItem>\n );\n },\n edgeReplication: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback((checked: boolean) => onValueChange(type, checked), [onValueChange, type]);\n return (\n <ControlItemInput title={label} description={t('edge replication description')}>\n <Input.Switch checked={getValue()} onCheckedChange={handleChange} classNames='justify-self-end' />\n </ControlItemInput>\n );\n },\n archived: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback(() => onValueChange(type, !getValue()), [onValueChange, type, getValue]);\n return (\n <ControlItemInput title={label} description={t('archive space description')}>\n <Button disabled={space === client.spaces.default} onClick={handleChange}>\n {getValue() ? t('unarchive space label') : t('archive space label')}\n </Button>\n </ControlItemInput>\n );\n },\n }),\n [t, space],\n );\n\n return (\n <StackItem.Content classNames='block overflow-y-auto pli-2'>\n <ControlPage>\n <ControlSection\n title={t('space properties settings verbose label', { ns: SPACE_PLUGIN })}\n description={t('space properties settings description', { ns: SPACE_PLUGIN })}\n >\n <Form\n schema={FormSchema}\n values={values}\n autoSave\n onSave={handleSave}\n Custom={customElements}\n 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'\n />\n </ControlSection>\n </ControlPage>\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Option } from 'effect';\nimport React, { useEffect, useState } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Space, useSpaceSyncState } from '@dxos/react-client/echo';\nimport { Tooltip, useTranslation } from '@dxos/react-ui';\nimport { AttentionGlyph, useAttended, useAttention } from '@dxos/react-ui-attention';\n\nimport { usePath } from '../../hooks';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst useEdgeStatus = (): EdgeStatus => {\n const [status, setStatus] = useState(EdgeStatus.NOT_CONNECTED);\n const client = useClient();\n useEffect(() => {\n client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {\n setStatus(status);\n });\n }, [client]);\n\n return status;\n};\n\nexport const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const id = space.id;\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const isAttended = hasAttention || isAncestor || isRelated;\n\n // TODO(wittjosiah): If the attended node is deep in the graph and the graph is not fully loaded\n // this will result in an empty path until the graph is connected.\n // TODO(wittjosiah): Consider using this indicator for all open nodes instead of just attended.\n const { graph } = useAppGraph();\n const attended = useAttended();\n const startOfAttention = attended.at(-1);\n const path = usePath(graph, startOfAttention);\n const containsAttended = !open && !isAttended && id && Option.isSome(path) ? path.value.includes(id) : false;\n\n const connectedToEdge = useEdgeStatus() === EdgeStatus.CONNECTED;\n // TODO(wittjosiah): This is not reactive.\n const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;\n const syncState = useSpaceSyncState(space);\n const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;\n\n return (\n <Tooltip.Trigger asChild content={t('syncing label')} side='bottom'>\n <AttentionGlyph\n syncing={syncing}\n attended={isAttended}\n containsAttended={containsAttended}\n classNames='self-center mie-1'\n />\n </Tooltip.Trigger>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { useClient } from '@dxos/react-client';\nimport { getSyncSummary, type SpaceSyncStateMap, useSyncState } from '@dxos/react-client/echo';\nimport { Icon, useTranslation } from '@dxos/react-ui';\n\nimport { createClientSaveTracker } from './save-tracker';\nimport { getIcon, getStatus } from './status';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst SYNC_STALLED_TIMEOUT = 5_000;\n\nexport const SyncStatus = () => {\n const client = useClient();\n const state = useSyncState();\n const [saved, setSaved] = useState(true);\n\n useEffect(() => {\n return createClientSaveTracker(client, (state) => {\n setSaved(state === 'saved');\n });\n }, []);\n\n return <SyncStatusIndicator state={state} saved={saved} />;\n};\n\nexport const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: Boolean }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const summary = getSyncSummary(state);\n const offline = Object.values(state).length === 0;\n const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;\n const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;\n const status = getStatus({ offline, saved, needsToUpload, needsToDownload });\n\n const [classNames, setClassNames] = useState<string>();\n useEffect(() => {\n setClassNames(undefined);\n if (offline || (!needsToUpload && !needsToDownload)) {\n return;\n }\n\n const t = setTimeout(() => {\n // TODO(wittjosiah): Use semantic color tokens.\n setClassNames('text-orange-500');\n }, SYNC_STALLED_TIMEOUT);\n return () => clearTimeout(t);\n }, [offline, needsToUpload, needsToDownload]);\n\n const title = t(`${status} label`);\n const icon = <Icon icon={getIcon(status)} size={4} classNames={classNames} />;\n\n return <StatusBar.Item title={title}>{icon}</StatusBar.Item>;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type CleanupFn } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { type Space, type SpaceId } from '@dxos/client/echo';\nimport { Context } from '@dxos/context';\n\nexport const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 'saving') => void) => {\n const CleanupFns: Record<SpaceId, CleanupFn> = {};\n const state: Record<SpaceId, 'saved' | 'saving'> = {};\n\n const install = (spaces: Space[]) => {\n for (const space of spaces) {\n if (state[space.id]) {\n continue;\n }\n\n state[space.id] = 'saved';\n CleanupFns[space.id] = createSpaceSaveTracker(space, (s) => {\n state[space.id] = s;\n cb(Object.values(state).some((s) => s === 'saving') ? 'saving' : 'saved');\n });\n }\n };\n client.spaces.subscribe((spaces) => {\n install(spaces);\n });\n install(client.spaces.get());\n\n return () => {\n for (const unsubscribe of Object.values(CleanupFns)) {\n unsubscribe();\n }\n };\n};\n\nconst createSpaceSaveTracker = (space: Space, cb: (state: 'saved' | 'saving') => void): CleanupFn => {\n const ctx = new Context();\n\n void space.waitUntilReady().then(() => {\n if (ctx.disposed) {\n return;\n }\n\n let hasUnsavedChanges = false;\n let lastFlushPromise: Promise<void> | undefined;\n space.crud.saveStateChanged.on(ctx, ({ unsavedDocuments }) => {\n hasUnsavedChanges = unsavedDocuments.length > 0;\n });\n space.crud.saveStateChanged.debounce(500).on(ctx, () => {\n if (hasUnsavedChanges) {\n lastFlushPromise = undefined;\n cb('saving');\n } else {\n const flushPromise = space.crud.flush();\n lastFlushPromise = flushPromise;\n void flushPromise.then(() => {\n if (lastFlushPromise === flushPromise) {\n cb('saved');\n }\n });\n }\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport type Status = 'saving locally' | 'downloading' | 'uploading' | 'offline persisted' | 'remote synced';\n\nexport const getStatus = ({\n offline,\n saved,\n needsToUpload,\n needsToDownload,\n}: {\n offline: Boolean;\n saved: Boolean;\n needsToUpload: Boolean;\n needsToDownload: Boolean;\n}): Status => {\n if (!saved) {\n return 'saving locally';\n } else if (!offline && needsToDownload) {\n return 'downloading';\n } else if (!offline && needsToUpload) {\n return 'uploading';\n } else if (offline && !needsToUpload && !needsToDownload) {\n return 'offline persisted';\n } else {\n return 'remote synced';\n }\n};\n\nexport const getIcon = (status: Status) => {\n switch (status) {\n case 'saving locally':\n return 'ph--download--regular';\n case 'downloading':\n return 'ph--cloud-arrow-down--regular';\n case 'uploading':\n return 'ph--cloud-arrow-up--regular';\n case 'offline persisted':\n return 'ph--check-circle--regular';\n case 'remote synced':\n return 'ph--cloud-check--regular';\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_app_framework", "import_react_client", "import_echo", "import_react_ui", "import_invariant", "import_react_ui_theme", "import_effect", "import_react_ui_form", "import_util", "import_react_ui_stack", "import_async", "import_log", "import_metadata", "import_react_ui_attention", "WAIT_FOR_OBJECT_TIMEOUT", "TOAST_TIMEOUT", "AwaitingObject", "id", "open", "setOpen", "useState", "waiting", "setWaiting", "found", "setFound", "t", "useTranslation", "SPACE_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "layout", "useLayout", "client", "useClient", "objects", "useQuery", "spaces", "Filter", "everything", "useEffect", "timeout", "setTimeout", "clearTimeout", "findIndex", "object", "fullyQualifiedId", "active", "includes", "handleClose", "useCallback", "createIntent", "SpaceAction", "WaitForObject", "undefined", "handleNavigate", "LayoutAction", "Open", "part", "subject", "React", "Toast", "Root", "duration", "onOpenChange", "Body", "Title", "classNames", "CheckCircle", "className", "getSize", "span", "CircleNotch", "mx", "CircleDashed", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "ns", "CreateObjectPanel", "forms", "typename", "initialTypename", "target", "initialTarget", "name", "initialName", "defaultSpaceId", "resolve", "onCreateObject", "setTypename", "setTarget", "form", "find", "getTypeAnnotation", "objectSchema", "options", "map", "filter", "isNonNullable", "sort", "a", "b", "nameA", "defaultValue", "nameB", "localeCompare", "handleCreateObject", "props", "data", "handleSetTypename", "invariant", "formSchema", "inputSurfaceLookup", "useInputSurfaceLookup", "div", "role", "SelectSchema", "onChange", "SelectSpace", "Form", "autoFocus", "values", "schema", "testId", "onSave", "lookupComponent", "SearchList", "label", "Input", "data-testid", "placeholder", "Content", "aName", "toLocalizedString", "getSpaceDisplayName", "personal", "bName", "space", "Item", "key", "value", "onSelect", "option", "Icon", "icon", "size", "AppGraphBuilder", "lazy", "AppGraphSerializer", "IdentityCreated", "IntentResolver", "ReactRoot", "ReactSurface", "SchemaDefs", "SchemaTools", "SpaceSettings", "SpaceState", "SpacesReady", "CREATE_OBJECT_DIALOG", "CreateObjectDialog", "shouldNavigate", "_shouldNavigate", "closeRef", "useRef", "manager", "usePluginManager", "useSpaces", "useCapabilities", "SpaceCapabilities", "ObjectForm", "context", "getCapabilities", "Capabilities", "Metadata", "metadata", "current", "click", "isSpace", "getSpace", "result", "getIntent", "isLiveObject", "addObjectIntent", "AddObject", "hidden", "pipe", "chain", "Dialog", "ref", "density", "default", "CREATE_SPACE_DIALOG", "initialValues", "edgeReplication", "CreateSpaceDialog", "handleCreateSpace", "program", "Effect", "gen", "Create", "SwitchWorkspace", "OpenCreateObject", "runPromise", "SpaceForm", "CollectionMain", "collection", "baseSurface", "p", "descriptionMessage", "CollectionSection", "JOIN_DIALOG", "JoinDialog", "navigableCollections", "onDone", "graph", "useAppGraph", "handleDone", "spaceKey", "Promise", "all", "AddToast", "title", "closeLabel", "UpdateDialog", "state", "get", "trigger", "Trigger", "subscribe", "wake", "wait", "waitForPath", "catch", "Expose", "ObservabilityAction", "SendEvent", "properties", "spaceId", "JoinPanel", "exitActionParent", "doneActionParent", "activeActionKey", "handleInvitationEvent", "invitation", "subscription", "invitationCode", "InvitationEncoder", "encode", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "MembersContainer", "createInvitationUrl", "config", "useConfig", "invitations", "useSpaceInvitations", "visibleInvitations", "CANCELLED", "activeAction", "setInternalActiveAction", "localStorage", "getItem", "setActiveAction", "nextAction", "setItem", "CollectionType", "locked", "COMPOSER_SPACE_LOCK", "handleChangeLocked", "inviteActions", "useMemo", "inviteOne", "description", "Share", "type", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "SHARED_SECRET", "multiUse", "runtime", "app", "env", "DX_ENVIRONMENT", "inviteMany", "DELEGATED", "KNOWN_PUBLIC_KEY", "selectedInvitation", "setSelectedInvitation", "handleSend", "event", "handleBack", "Clipboard", "Provider", "StackItem", "ControlPage", "ControlSection", "ControlFrame", "ControlFrameItem", "SpaceMemberList", "includeSelf", "InvitationSection", "onBack", "InvitationList", "send", "onClickRemove", "cancel", "BifurcatedAction", "actions", "onChangeActiveAction", "ControlItemInput", "Switch", "checked", "onCheckedChange", "INIT", "invitationId", "url", "activeView", "READY_FOR_AUTHENTICATION", "Viewport", "Views", "View", "InvitationComplete", "statusValue", "InvitationAuthCode", "code", "onCancel", "InvitationQR", "qrLabel", "useId", "emoji", "hexToEmoji", "QR", "rounding", "backgroundColor", "color", "aria-labelledby", "errorCorrectionLevel", "cutout", "Centered", "Emoji", "text", "AuthCode", "large", "Check", "X", "MenuFooter", "spaceName", "DropdownMenu", "Separator", "GroupLabel", "dl", "dt", "dd", "Planet", "BaseObjectSettings", "children", "meta", "inputRef", "Label", "TextInput", "onKeyDown", "blur", "ObjectSettingsContainer", "toolbar", "Surface", "Status", "PersistenceStatus", "db", "displayMessage", "setDisplayMessage", "status", "naturalSetStatus", "prevStatus", "setPrevStatus", "_setStatus", "debounce", "Warning", "warningText", "ArrowsCounterClockwise", "staticPlaceholderText", "Tooltip", "delayDuration", "content", "POPOVER_RENAME_OBJECT", "PopoverRenameObject", "obj", "doneButton", "setName", "err", "error", "UpdatePopover", "anchorId", "srOnly", "POPOVER_RENAME_SPACE", "PopoverRenameSpace", "Popover", "useQuerySpaceSchemas", "schemas", "setSchemas", "query", "schemaRegistry", "initialResults", "runSync", "results", "SchemaContainer", "controlItemClasses", "length", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "ComplexMap", "PublicKey", "hash", "getName", "identity", "profile", "displayName", "generateName", "identityKey", "toHex", "SpacePresence", "spaceState", "useCapability", "MutableState", "useIdentity", "spaceMembers", "useMembers", "_moment", "setMoment", "Date", "now", "interval", "setInterval", "clearInterval", "memberOnline", "member", "presence", "memberIsNotSelf", "equals", "currentObjectViewers", "viewersByObject", "membersForObject", "has", "objectView", "lastSeen", "currentlyAttended", "toSorted", "FullPresence", "members", "onMemberClick", "useDefaultValue", "slice", "i", "side", "PresenceAvatar", "match", "index", "Avatar", "style", "zIndex", "fallback", "Portal", "Arrow", "List", "ListItem", "showName", "forwardRef", "forwardedRef", "fallbackValue", "keyToFallback", "hue", "data-status", "SmallPresenceLive", "viewers", "hasAttention", "isAncestor", "isRelated", "useAttention", "isAttended", "attended", "useAttended", "startOfAttention", "at", "path", "usePath", "containsAttended", "Option", "isSome", "getActiveViewers", "moment", "Array", "from", "viewer", "activeViewers", "setActiveViewers", "SmallPresence", "count", "AttentionGlyph", "SpacePluginSettings", "settings", "showHidden", "DeprecatedFormContainer", "DeprecatedFormInput", "h2", "Heading", "Endcap", "OpenSettings", "FormSchema", "Schema", "extend", "Struct", "archived", "Boolean", "annotations", "SpaceSettingsContainer", "useMulticastObservable", "SPACE_INACTIVE", "setEdgeReplication", "internal", "EdgeReplicationSetting", "ENABLED", "toggleEdgeReplication", "next", "setEdgeReplicationPreference", "DISABLED", "handleSave", "customElements", "getValue", "onValueChange", "handleChange", "nextEmoji", "handleEmojiReset", "ControlItem", "IconPicker", "onReset", "iconSize", "nextHue", "handleHueReset", "HuePicker", "disabled", "autoSave", "Custom", "useEdgeStatus", "setStatus", "EdgeStatus", "NOT_CONNECTED", "services", "EdgeAgentService", "queryEdgeStatus", "InlineSyncStatus", "connectedToEdge", "CONNECTED", "edgeSyncEnabled", "syncState", "useSpaceSyncState", "syncing", "missingOnLocal", "createClientSaveTracker", "cb", "CleanupFns", "install", "createSpaceSaveTracker", "s", "Object", "some", "ctx", "Context", "waitUntilReady", "then", "disposed", "hasUnsavedChanges", "lastFlushPromise", "crud", "saveStateChanged", "on", "unsavedDocuments", "flushPromise", "flush", "dispose", "getStatus", "offline", "saved", "needsToUpload", "needsToDownload", "getIcon", "SYNC_STALLED_TIMEOUT", "SyncStatus", "useSyncState", "setSaved", "SyncStatusIndicator", "summary", "getSyncSummary", "differentDocuments", "missingOnRemote", "setClassNames", "StatusBar"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/util.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\n\nimport { createIntent, LayoutAction, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { type BaseObject, EXPANDO_TYPENAME, getTypeAnnotation, getTypename, type Expando } from '@dxos/echo-schema';\nimport { getSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { makeRef } from '@dxos/live-object';\nimport { Migrations } from '@dxos/migrations';\nimport {\n ACTION_GROUP_TYPE,\n ACTION_TYPE,\n type ReadableGraph,\n type ActionData,\n type InvokeParams,\n type Node,\n type NodeArg,\n} from '@dxos/plugin-graph';\nimport {\n fullyQualifiedId,\n getSpace,\n isEchoObject,\n type QueryResult,\n SpaceState,\n type AnyLiveObject,\n type Space,\n} from '@dxos/react-client/echo';\nimport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nimport { SPACE_PLUGIN } from './meta';\nimport { CollectionType, SpaceAction, SPACE_TYPE } from './types';\n\nexport const SPACES = `${SPACE_PLUGIN}-spaces`;\nexport const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';\n// TODO(wittjosiah): Remove.\nexport const SHARED = 'shared-spaces';\n\n/**\n * Convert a query result to an Rx value of the objects.\n */\nexport const rxFromQuery = <T extends BaseObject>(query: QueryResult<T>): Rx.Rx<T[]> => {\n return Rx.make((get) => {\n const unsubscribe = query.subscribe((result) => {\n get.setSelf(result.objects);\n });\n\n get.addFinalizer(() => unsubscribe());\n\n return query.objects;\n });\n};\n\n// TODO(wittjosiah): Factor out? Expose via capability?\nexport const getSpaceDisplayName = (\n space: Space,\n { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},\n): string | [string, { ns: string }] => {\n return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0\n ? space.properties.name\n : namesCache[space.id]\n ? namesCache[space.id]\n : personal\n ? ['personal space label', { ns: SPACE_PLUGIN }]\n : ['unnamed space label', { ns: SPACE_PLUGIN }];\n};\n\nconst getCollectionGraphNodePartials = ({\n navigable,\n collection,\n space,\n resolve,\n}: {\n navigable: boolean;\n collection: CollectionType;\n space: Space;\n resolve: (typename: string) => Record<string, any>;\n}) => {\n return {\n acceptPersistenceClass: new Set(['echo']),\n acceptPersistenceKey: new Set([space.id]),\n role: 'branch',\n onRearrangeChildren: (nextOrder: unknown[]) => {\n // Change on disk.\n collection.objects = nextOrder.filter(isEchoObject).map(makeRef);\n },\n onTransferStart: (child: Node<AnyLiveObject<any>>, index?: number) => {\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // if (space && childSpace && !childSpace.key.equals(space.key)) {\n // // Create clone of child and add to destination space.\n // const newObject = clone(child.data, {\n // // TODO(wittjosiah): This needs to be generalized and not hardcoded here.\n // additional: [\n // child.data.content,\n // ...(child.data.objects ?? []),\n // ...(child.data.objects ?? []).map((object: TypedObject) => object.content),\n // ],\n // });\n // space.db.add(newObject);\n // collection.objects.push(newObject);\n // } else {\n\n // Add child to destination collection.\n // TODO(dmaretskyi): Compare by id.\n if (!collection.objects.find((object) => object.target === child.data)) {\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, makeRef(child.data));\n } else {\n collection.objects.push(makeRef(child.data));\n }\n }\n\n // }\n },\n onTransferEnd: (child: Node<AnyLiveObject<any>>, destination: Node) => {\n // Remove child from origin collection.\n const index = collection.objects.findIndex((object) => object.target === child.data);\n if (index > -1) {\n collection.objects.splice(index, 1);\n }\n\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // const destinationSpace =\n // destination.data instanceof SpaceProxy ? destination.data : getSpace(destination.data);\n // if (destinationSpace && childSpace && !childSpace.key.equals(destinationSpace.key)) {\n // // Mark child as deleted in origin space.\n // childSpace.db.remove(child.data);\n // }\n },\n onCopy: async (child: Node<AnyLiveObject<any>>, index?: number) => {\n // Create clone of child and add to destination space.\n const newObject = await cloneObject(child.data, resolve, space);\n space.db.add(newObject);\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, makeRef(newObject));\n } else {\n collection.objects.push(makeRef(newObject));\n }\n },\n };\n};\n\nconst checkPendingMigration = (space: Space) => {\n return (\n space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||\n (space.state.get() === SpaceState.SPACE_READY &&\n !!Migrations.versionProperty &&\n space.properties[Migrations.versionProperty] !== Migrations.targetVersion)\n );\n};\n\nexport const constructSpaceNode = ({\n space,\n navigable = false,\n personal,\n namesCache,\n resolve,\n}: {\n space: Space;\n navigable?: boolean;\n personal?: boolean;\n namesCache?: Record<string, string>;\n resolve: (typename: string) => Record<string, any>;\n}) => {\n const hasPendingMigration = checkPendingMigration(space);\n const collection = space.state.get() === SpaceState.SPACE_READY && space.properties[CollectionType.typename]?.target;\n const partials =\n space.state.get() === SpaceState.SPACE_READY && collection instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection, space, resolve, navigable })\n : {};\n\n return {\n id: space.id,\n type: SPACE_TYPE,\n cacheable: ['label', 'icon', 'role'],\n data: space,\n properties: {\n ...partials,\n label: getSpaceDisplayName(space, { personal, namesCache }),\n description: space.state.get() === SpaceState.SPACE_READY && space.properties.description,\n hue: space.state.get() === SpaceState.SPACE_READY && space.properties.hue,\n icon:\n space.state.get() === SpaceState.SPACE_READY && space.properties.icon\n ? `ph--${space.properties.icon}--regular`\n : undefined,\n disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n testId: 'spacePlugin.space',\n },\n nodes: [\n {\n id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,\n type: `${SPACE_PLUGIN}/settings`,\n data: null,\n properties: {\n label: ['settings panel label', { ns: SPACE_PLUGIN }],\n icon: 'ph--faders--regular',\n disposition: 'alternate-tree',\n },\n nodes: [\n {\n id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,\n type: `${SPACE_PLUGIN}/properties`,\n data: `${SPACE_PLUGIN}/properties`,\n properties: {\n label: ['space settings properties label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sliders--regular',\n position: 'hoist',\n },\n },\n {\n id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,\n type: `${SPACE_PLUGIN}/members`,\n data: `${SPACE_PLUGIN}/members`,\n properties: {\n label: ['members panel label', { ns: SPACE_PLUGIN }],\n icon: 'ph--users--regular',\n position: 'hoist',\n },\n },\n {\n id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,\n type: `${SPACE_PLUGIN}/schema`,\n data: `${SPACE_PLUGIN}/schema`,\n properties: {\n label: ['space settings schema label', { ns: SPACE_PLUGIN }],\n icon: 'ph--shapes--regular',\n },\n },\n ],\n },\n ],\n };\n};\n\nexport const constructSpaceActions = ({\n space,\n dispatch,\n personal,\n migrating,\n}: {\n space: Space;\n dispatch: PromiseIntentDispatcher;\n personal?: boolean;\n migrating?: boolean;\n}) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const getId = (id: string) => `${id}/${space.id}`;\n const actions: NodeArg<ActionData>[] = [];\n\n if (hasPendingMigration) {\n actions.push({\n id: getId(SpaceAction.Migrate._tag),\n type: ACTION_GROUP_TYPE,\n data: async () => {\n await dispatch(createIntent(SpaceAction.Migrate, { space }));\n },\n properties: {\n label: ['migrate space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--database--regular',\n disposition: 'list-item-primary',\n disabled: migrating || Migrations.running(space),\n },\n });\n }\n\n if (state === SpaceState.SPACE_READY && !hasPendingMigration) {\n actions.push(\n {\n id: getId(SpaceAction.OpenCreateObject._tag),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));\n },\n properties: {\n label: ['create object in space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'item',\n testId: 'spacePlugin.createObject',\n },\n },\n {\n id: getId(SpaceAction.Rename._tag),\n type: ACTION_TYPE,\n data: async (params?: InvokeParams) => {\n await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));\n },\n properties: {\n label: ['rename space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--pencil-simple-line--regular',\n keyBinding: {\n macos: 'shift+F6',\n windows: 'shift+F6',\n },\n },\n },\n );\n }\n\n return actions;\n};\n\nexport const createObjectNode = ({\n object,\n space,\n navigable = false,\n resolve,\n}: {\n object: AnyLiveObject<any>;\n space: Space;\n navigable?: boolean;\n resolve: (typename: string) => Record<string, any>;\n}) => {\n const type = getTypename(object);\n if (!type) {\n return undefined;\n }\n\n const metadata = resolve(type);\n if (Object.keys(metadata).length === 0) {\n return undefined;\n }\n\n const partials =\n object instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection: object, space, resolve, navigable })\n : metadata.graphProps;\n\n return {\n id: fullyQualifiedId(object),\n type,\n cacheable: ['label', 'icon', 'role'],\n data: object,\n properties: {\n ...partials,\n label: metadata.label?.(object) ||\n object.name || ['object name placeholder', { ns: type, default: 'New object' }],\n icon: metadata.icon ?? 'ph--placeholder--regular',\n testId: 'spacePlugin.object',\n persistenceClass: 'echo',\n persistenceKey: space?.id,\n },\n };\n};\n\nexport const constructObjectActions = ({\n object,\n graph,\n dispatch,\n navigable = false,\n}: {\n object: AnyLiveObject<any>;\n graph: ReadableGraph;\n dispatch: PromiseIntentDispatcher;\n navigable?: boolean;\n}) => {\n const space = getSpace(object);\n invariant(space, 'Space not found');\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<ActionData>[] = [\n ...(object instanceof CollectionType\n ? [\n {\n id: getId(SpaceAction.OpenCreateObject._tag),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));\n },\n properties: {\n label: ['create object in collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'list-item-primary',\n testId: 'spacePlugin.createObject',\n },\n },\n ]\n : []),\n {\n id: getId(SpaceAction.RenameObject._tag),\n type: ACTION_TYPE,\n data: async (params?: InvokeParams) => {\n await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'rename collection label' : 'rename object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--pencil-simple-line--regular',\n // TODO(wittjosiah): Need's focus.\n keyBinding: {\n macos: 'shift+F6',\n },\n testId: 'spacePlugin.renameObject',\n },\n },\n {\n id: getId(SpaceAction.RemoveObjects._tag),\n type: ACTION_TYPE,\n data: async () => {\n const collection = graph\n .getConnections(fullyQualifiedId(object), 'inbound')\n .find(({ data }) => data instanceof CollectionType)?.data;\n await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'delete collection label' : 'delete object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--trash--regular',\n keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',\n testId: 'spacePlugin.deleteObject',\n },\n },\n ...(navigable || !(object instanceof CollectionType)\n ? [\n {\n id: getId('copy-link'),\n type: ACTION_TYPE,\n data: async () => {\n const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;\n await navigator.clipboard.writeText(url);\n },\n properties: {\n label: ['copy link label', { ns: SPACE_PLUGIN }],\n icon: 'ph--link--regular',\n testId: 'spacePlugin.copyLink',\n },\n },\n ]\n : []),\n // TODO(wittjosiah): Factor out and apply to all nodes.\n {\n id: getId(LayoutAction.Expose._tag),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));\n },\n properties: {\n label: ['expose object label', { ns: SPACE_PLUGIN }],\n icon: 'ph--eye--regular',\n testId: 'spacePlugin.exposeObject',\n },\n },\n ];\n\n return actions;\n};\n\n/**\n * @deprecated This is a temporary solution.\n */\nexport const getNestedObjects = async (\n object: AnyLiveObject<any>,\n resolve: (typename: string) => Record<string, any>,\n): Promise<AnyLiveObject<any>[]> => {\n const type = getTypename(object);\n if (!type) {\n return [];\n }\n\n const metadata = resolve(type);\n const loadReferences = metadata?.loadReferences;\n if (typeof loadReferences !== 'function') {\n return [];\n }\n\n const objects: AnyLiveObject<any>[] = await loadReferences(object);\n const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));\n return [...objects, ...nested.flat()];\n};\n\n/**\n * @deprecated Workaround for ECHO not supporting clone.\n */\n// TODO(burdon): Remove.\nexport const cloneObject = async (\n object: Expando,\n resolve: (typename: string) => Record<string, any>,\n newSpace: Space,\n): Promise<Expando> => {\n const schema = getSchema(object);\n const typename = schema ? getTypeAnnotation(schema)?.typename ?? EXPANDO_TYPENAME : EXPANDO_TYPENAME;\n const metadata = resolve(typename);\n const serializer = metadata.serializer;\n invariant(serializer, `No serializer for type: ${typename}`);\n const content = await serializer.serialize({ object });\n return serializer.deserialize({ content, space: newSpace, newId: true });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_echo_schema", "SPACES", "SPACE_PLUGIN", "COMPOSER_SPACE_LOCK", "SHARED", "rxFromQuery", "query", "Rx", "make", "get", "unsubscribe", "subscribe", "result", "setSelf", "objects", "addFinalizer", "getSpaceDisplayName", "space", "personal", "namesCache", "state", "SpaceState", "SPACE_READY", "properties", "name", "length", "id", "ns", "getCollectionGraphNodePartials", "navigable", "collection", "resolve", "acceptPersistenceClass", "Set", "acceptPersistenceKey", "role", "onRearrangeChildren", "nextOrder", "filter", "isEchoObject", "map", "makeRef", "onTransferStart", "child", "index", "find", "object", "target", "data", "splice", "push", "onTransferEnd", "destination", "findIndex", "onCopy", "newObject", "cloneObject", "db", "add", "checkPendingMigration", "SPACE_REQUIRES_MIGRATION", "Migrations", "versionProperty", "targetVersion", "constructSpaceNode", "hasPendingMigration", "CollectionType", "typename", "partials", "type", "SPACE_TYPE", "cacheable", "label", "description", "hue", "icon", "undefined", "disabled", "testId", "nodes", "ATTENDABLE_PATH_SEPARATOR", "disposition", "position", "constructSpaceActions", "dispatch", "migrating", "getId", "actions", "SpaceAction", "Migrate", "_tag", "ACTION_GROUP_TYPE", "createIntent", "running", "OpenCreateObject", "ACTION_TYPE", "Rename", "params", "caller", "keyBinding", "macos", "windows", "createObjectNode", "getTypename", "metadata", "Object", "keys", "graphProps", "fullyQualifiedId", "default", "persistenceClass", "persistenceKey", "constructObjectActions", "graph", "getSpace", "invariant", "RenameObject", "RemoveObjects", "getConnections", "url", "window", "location", "origin", "navigator", "clipboard", "writeText", "LayoutAction", "Expose", "part", "subject", "getNestedObjects", "loadReferences", "nested", "Promise", "all", "flat", "newSpace", "schema", "getSchema", "getTypeAnnotation", "EXPANDO_TYPENAME", "serializer", "content", "serialize", "deserialize", "newId"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/identity-created.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginContext, Capabilities } from '@dxos/app-framework';\nimport { live, makeRef } from '@dxos/live-object';\nimport { Migrations } from '@dxos/migrations';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { CollectionType } from '../types';\n\nexport default async (context: PluginContext) => {\n const client = context.getCapability(ClientCapabilities.Client);\n await client.spaces.waitUntilReady();\n\n const defaultSpace = client.spaces.default;\n await defaultSpace.waitUntilReady();\n\n // Create root collection structure.\n defaultSpace.properties[CollectionType.typename] = makeRef(live(CollectionType, { objects: [], views: {} }));\n if (Migrations.versionProperty) {\n defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n\n return contributes(Capabilities.Null, null);\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA8D;AAC9D,yBAA8B;AAC9B,wBAA2B;AAC3B,2BAAmC;AAInC,IAAA,2BAAe,OAAOA,YAAAA;AACpB,QAAMC,SAASD,QAAQE,cAAcC,wCAAmBC,MAAM;AAC9D,QAAMH,OAAOI,OAAOC,eAAc;AAElC,QAAMC,eAAeN,OAAOI,OAAOG;AACnC,QAAMD,aAAaD,eAAc;AAGjCC,eAAaE,WAAWC,qCAAeC,QAAQ,QAAIC,gCAAQC,yBAAKH,sCAAgB;IAAEI,SAAS,CAAA;IAAIC,OAAO,CAAC;EAAE,CAAA,CAAA;AACzG,MAAIC,6BAAWC,iBAAiB;AAC9BV,iBAAaE,WAAWO,6BAAWC,eAAe,IAAID,6BAAWE;EACnE;AAEA,aAAOC,kCAAYC,kCAAaC,MAAM,IAAA;AACxC;",
|
|
6
|
-
"names": ["context", "client", "getCapability", "ClientCapabilities", "Client", "spaces", "waitUntilReady", "defaultSpace", "default", "properties", "CollectionType", "typename", "makeRef", "live", "objects", "views", "Migrations", "versionProperty", "targetVersion", "contributes", "Capabilities", "Null"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect } from 'effect';\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n createResolver,\n LayoutAction,\n type PluginContext,\n} from '@dxos/app-framework';\nimport { type Expando, getTypename, type HasId } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { live, makeRef, type Live } from '@dxos/live-object';\nimport { Migrations } from '@dxos/migrations';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { isSpace, getSpace, SpaceState, fullyQualifiedId, isEchoObject } from '@dxos/react-client/echo';\nimport { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nimport { SpaceCapabilities } from './capabilities';\nimport {\n CREATE_SPACE_DIALOG,\n JOIN_DIALOG,\n type JoinDialogProps,\n POPOVER_RENAME_SPACE,\n CREATE_OBJECT_DIALOG,\n type CreateObjectDialogProps,\n POPOVER_RENAME_OBJECT,\n} from '../components';\nimport { SPACE_PLUGIN } from '../meta';\nimport { CollectionAction, CollectionType, SpaceAction } from '../types';\nimport { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';\n\n// TODO(wittjosiah): Remove.\nconst SPACE_MAX_OBJECTS = 500;\n\ntype IntentResolverOptions = {\n context: PluginContext;\n createInvitationUrl: (invitationCode: string) => string;\n observability?: boolean;\n};\n\nexport default ({ context, observability, createInvitationUrl }: IntentResolverOptions) => {\n const resolve = (typename: string) =>\n context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: SpaceAction.OpenCreateSpace,\n resolve: () => ({\n intents: [\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: CREATE_SPACE_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n ],\n }),\n }),\n createResolver({\n intent: SpaceAction.Create,\n resolve: async ({ name, hue, icon, edgeReplication }) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const space = await client.spaces.create({ name, hue, icon });\n if (edgeReplication) {\n await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);\n }\n await space.waitUntilReady();\n const collection = live(CollectionType, { objects: [], views: {} });\n space.properties[CollectionType.typename] = makeRef(collection);\n\n if (Migrations.versionProperty) {\n space.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n\n return {\n data: {\n id: space.id,\n subject: [space.id],\n space,\n },\n intents: [\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.create',\n properties: {\n spaceId: space.id,\n },\n }),\n ]\n : []),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.Join,\n resolve: ({ invitationCode, onDone }) => ({\n intents: [\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: JOIN_DIALOG,\n options: {\n blockAlign: 'start',\n props: {\n initialInvitationCode: invitationCode,\n onDone,\n } satisfies Partial<JoinDialogProps>,\n },\n }),\n ],\n }),\n }),\n createResolver({\n intent: SpaceAction.OpenMembers,\n resolve: ({ space }) => ({\n intents: [\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [`members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`],\n options: {\n workspace: space.id,\n },\n }),\n ],\n }),\n }),\n createResolver({\n intent: SpaceAction.Share,\n resolve: ({ space, type, authMethod, multiUse, target }) => {\n const invitation = space.share({ type, authMethod, multiUse, target });\n return {\n data: invitation,\n intents: observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.share',\n properties: {\n spaceId: space.id,\n },\n }),\n ]\n : [],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.GetShareLink,\n resolve: ({ space, target, copyToClipboard }) =>\n Effect.gen(function* () {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const invitation = yield* dispatch(\n createIntent(SpaceAction.Share, {\n space,\n type: Invitation.Type.DELEGATED,\n authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,\n multiUse: true,\n target,\n }),\n );\n\n // TODO(wittjosiah): Better api to for this.\n // NOTE: Delegated invitations are invalid until the connecting state when keys are filled in.\n const invitationCode = yield* Effect.tryPromise(\n () =>\n new Promise<string>((resolve) => {\n invitation.subscribe((invitation) => {\n if (invitation.state === Invitation.State.CONNECTING) {\n resolve(InvitationEncoder.encode(invitation));\n }\n });\n }),\n );\n const url = createInvitationUrl(invitationCode);\n if (copyToClipboard) {\n yield* Effect.tryPromise(() => navigator.clipboard.writeText(url));\n }\n\n return { data: url };\n }),\n }),\n createResolver({\n intent: SpaceAction.Lock,\n resolve: ({ space }) => {\n space.properties[COMPOSER_SPACE_LOCK] = true;\n return {\n intents: [\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.lock',\n properties: {\n spaceId: space.id,\n },\n }),\n ]\n : []),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.Unlock,\n resolve: ({ space }) => {\n space.properties[COMPOSER_SPACE_LOCK] = false;\n return {\n intents: [\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.unlock',\n properties: {\n spaceId: space.id,\n },\n }),\n ]\n : []),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.Rename,\n resolve: ({ caller, space }) => {\n return {\n intents: [\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n subject: POPOVER_RENAME_SPACE,\n options: {\n anchorId: `dxos.org/ui/${caller}/${space.id}`,\n props: space,\n },\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.OpenSettings,\n resolve: ({ space }) => ({\n intents: [\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [`properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`],\n options: {\n workspace: space.id,\n },\n }),\n ],\n }),\n }),\n createResolver({\n intent: SpaceAction.Open,\n resolve: async ({ space }) => {\n await space.open();\n },\n }),\n createResolver({\n intent: SpaceAction.Close,\n resolve: async ({ space }) => {\n await space.close();\n },\n }),\n createResolver({\n intent: SpaceAction.Migrate,\n resolve: async ({ space, version: targetVersion }) => {\n const state = context.getCapability(SpaceCapabilities.MutableState);\n\n if (space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n state.sdkMigrationRunning[space.id] = true;\n await space.internal.migrate();\n state.sdkMigrationRunning[space.id] = false;\n }\n const result = await Migrations.migrate(space, targetVersion);\n const version = Migrations.versionProperty ? space.properties[Migrations.versionProperty] : undefined;\n return {\n data: result,\n intents: [\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.migrate',\n properties: {\n spaceId: space.id,\n targetVersion,\n version,\n },\n }),\n ]\n : []),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.OpenCreateObject,\n resolve: ({ target, navigable = true }) => {\n const state = context.getCapability(SpaceCapabilities.State);\n\n return {\n intents: [\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: CREATE_OBJECT_DIALOG,\n options: {\n blockAlign: 'start',\n props: {\n target,\n shouldNavigate: navigable\n ? (object: Live<any>) => !(object instanceof CollectionType) || state.navigableCollections\n : () => false,\n } satisfies Partial<CreateObjectDialogProps>,\n },\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.AddObject,\n resolve: async ({ target, object, hidden }) => {\n const space = isSpace(target) ? target : getSpace(target);\n invariant(space, 'Space not found.');\n\n if (space.db.coreDatabase.getAllObjectIds().length >= SPACE_MAX_OBJECTS) {\n return {\n error: new Error('Space limit reached.'),\n intents: [\n createIntent(LayoutAction.AddToast, {\n part: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/space-limit`,\n title: ['space limit label', { ns: SPACE_PLUGIN }],\n description: ['space limit description', { ns: SPACE_PLUGIN }],\n duration: 5_000,\n icon: 'ph--warning--regular',\n actionLabel: ['remove deleted objects label', { ns: SPACE_PLUGIN }],\n actionAlt: ['remove deleted objects alt', { ns: SPACE_PLUGIN }],\n closeLabel: ['close label', { ns: 'os' }],\n onAction: () => space.db.coreDatabase.unlinkDeletedObjects(),\n },\n }),\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.limit',\n properties: {\n spaceId: space.id,\n },\n }),\n ]\n : []),\n ],\n };\n }\n\n if (target instanceof CollectionType) {\n target.objects.push(makeRef(object as HasId));\n } else if (isSpace(target) && hidden) {\n space.db.add(object);\n } else if (isSpace(target)) {\n const collection = space.properties[CollectionType.typename]?.target;\n if (collection instanceof CollectionType) {\n collection.objects.push(makeRef(object as HasId));\n } else {\n // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.\n const collection = live(CollectionType, { objects: [makeRef(object as HasId)], views: {} });\n space.properties[CollectionType.typename] = makeRef(collection);\n }\n }\n\n return {\n data: {\n id: fullyQualifiedId(object),\n subject: [fullyQualifiedId(object)],\n object: object as HasId,\n },\n intents: [\n ...(observability\n ? [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'space.object.add',\n properties: {\n spaceId: space.id,\n objectId: object.id,\n typename: getTypename(object),\n },\n }),\n ]\n : []),\n ],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.RemoveObjects,\n resolve: async ({ objects, target, deletionData }, undo) => {\n const layout = context.getCapability(Capabilities.Layout);\n\n // All objects must be a member of the same space.\n const space = getSpace(objects[0]);\n invariant(space && objects.every((obj) => isEchoObject(obj) && getSpace(obj) === space));\n const openObjectIds = new Set<string>(layout.active);\n\n if (!undo) {\n const parentCollection: CollectionType = target ?? space.properties[CollectionType.typename]?.target;\n const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));\n\n const deletionData = {\n objects,\n parentCollection,\n indices: objects.map((obj) =>\n parentCollection instanceof CollectionType\n ? parentCollection.objects.findIndex((object) => object.target === obj)\n : -1,\n ),\n nestedObjectsList,\n wasActive: objects\n .flatMap((obj, i) => [obj, ...nestedObjectsList[i]])\n .map((obj) => fullyQualifiedId(obj))\n .filter((id) => openObjectIds.has(id)),\n } satisfies SpaceAction.DeletionData;\n\n if (deletionData.parentCollection instanceof CollectionType) {\n [...deletionData.indices]\n .sort((a, b) => b - a)\n .forEach((index: number) => {\n if (index !== -1) {\n deletionData.parentCollection.objects.splice(index, 1);\n }\n });\n }\n\n deletionData.nestedObjectsList.flat().forEach((obj) => {\n space.db.remove(obj);\n });\n objects.forEach((obj) => space.db.remove(obj));\n\n const undoMessageKey = objects.some((obj) => obj instanceof CollectionType)\n ? 'collection deleted label'\n : objects.length > 1\n ? 'objects deleted label'\n : 'object deleted label';\n\n return {\n undoable: {\n // TODO(ZaymonFC): Pluralize if more than one object.\n message: [undoMessageKey, { ns: SPACE_PLUGIN }],\n data: { deletionData },\n },\n intents:\n deletionData.wasActive.length > 0\n ? [\n createIntent(LayoutAction.Close, {\n part: 'main',\n subject: deletionData.wasActive,\n options: { state: false },\n }),\n ]\n : undefined,\n };\n } else {\n if (\n deletionData?.objects?.length &&\n deletionData.objects.every(isEchoObject) &&\n deletionData.parentCollection instanceof CollectionType\n ) {\n // Restore the object to the space.\n const restoredObjects = deletionData.objects.map((obj: Expando) => space.db.add(obj));\n\n // Restore nested objects to the space.\n deletionData.nestedObjectsList.flat().forEach((obj: Expando) => {\n space.db.add(obj);\n });\n\n deletionData.indices.forEach((index: number, i: number) => {\n if (index !== -1) {\n deletionData.parentCollection.objects.splice(index, 0, makeRef(restoredObjects[i] as Expando));\n }\n });\n\n return {\n intents:\n deletionData.wasActive.length > 0\n ? [\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: deletionData.wasActive,\n }),\n ]\n : undefined,\n };\n }\n }\n },\n }),\n createResolver({\n intent: SpaceAction.RenameObject,\n resolve: async ({ object, caller }) => ({\n intents: [\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n subject: POPOVER_RENAME_OBJECT,\n options: {\n anchorId: `dxos.org/ui/${caller}/${fullyQualifiedId(object)}`,\n props: object,\n },\n }),\n ],\n }),\n }),\n createResolver({\n intent: SpaceAction.DuplicateObject,\n resolve: async ({ object, target }) => {\n const space = isSpace(target) ? target : getSpace(target);\n invariant(space, 'Space not found.');\n\n const newObject = await cloneObject(object, resolve, space);\n return {\n intents: [createIntent(SpaceAction.AddObject, { object: newObject, target })],\n };\n },\n }),\n createResolver({\n intent: SpaceAction.WaitForObject,\n resolve: async ({ id }) => {\n const state = context.getCapability(SpaceCapabilities.MutableState);\n state.awaiting = id;\n },\n }),\n createResolver({\n intent: CollectionAction.Create,\n resolve: async ({ name }) => ({\n data: { object: live(CollectionType, { name, objects: [], views: {} }) },\n }),\n }),\n ]);\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["SPACE_MAX_OBJECTS", "context", "observability", "createInvitationUrl", "resolve", "typename", "getCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "IntentResolver", "createResolver", "intent", "SpaceAction", "OpenCreateSpace", "intents", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "CREATE_SPACE_DIALOG", "options", "blockAlign", "Create", "name", "hue", "icon", "edgeReplication", "client", "getCapability", "ClientCapabilities", "Client", "space", "spaces", "create", "internal", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "waitUntilReady", "collection", "live", "CollectionType", "objects", "views", "properties", "makeRef", "Migrations", "versionProperty", "targetVersion", "data", "ObservabilityAction", "SendEvent", "spaceId", "Join", "invitationCode", "onDone", "JOIN_DIALOG", "props", "initialInvitationCode", "OpenMembers", "Open", "ATTENDABLE_PATH_SEPARATOR", "workspace", "Share", "type", "authMethod", "multiUse", "target", "invitation", "share", "GetShareLink", "copyToClipboard", "Effect", "gen", "dispatch", "IntentDispatcher", "Invitation", "Type", "DELEGATED", "AuthMethod", "KNOWN_PUBLIC_KEY", "tryPromise", "Promise", "subscribe", "state", "State", "CONNECTING", "InvitationEncoder", "encode", "url", "navigator", "clipboard", "writeText", "Lock", "COMPOSER_SPACE_LOCK", "Unlock", "Rename", "caller", "UpdatePopover", "POPOVER_RENAME_SPACE", "anchorId", "OpenSettings", "open", "Close", "close", "Migrate", "version", "SpaceCapabilities", "MutableState", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "sdkMigrationRunning", "migrate", "result", "undefined", "OpenCreateObject", "navigable", "CREATE_OBJECT_DIALOG", "shouldNavigate", "object", "navigableCollections", "AddObject", "hidden", "isSpace", "getSpace", "invariant", "db", "coreDatabase", "getAllObjectIds", "length", "error", "Error", "AddToast", "SPACE_PLUGIN", "title", "ns", "description", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "unlinkDeletedObjects", "push", "add", "fullyQualifiedId", "objectId", "getTypename", "RemoveObjects", "deletionData", "undo", "layout", "Layout", "every", "obj", "isEchoObject", "openObjectIds", "Set", "active", "parentCollection", "nestedObjectsList", "all", "map", "getNestedObjects", "indices", "findIndex", "wasActive", "flatMap", "i", "filter", "has", "sort", "a", "b", "forEach", "index", "splice", "flat", "remove", "undoMessageKey", "some", "undoable", "message", "restoredObjects", "RenameObject", "POPOVER_RENAME_OBJECT", "DuplicateObject", "newObject", "cloneObject", "WaitForObject", "awaiting", "CollectionAction"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { Capabilities, contributes, createSurface, Surface, useCapability, useLayout } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { SettingsStore } from '@dxos/local-storage';\nimport {\n getSpace,\n isEchoObject,\n isLiveObject,\n isSpace,\n parseId,\n SpaceState,\n useSpace,\n type AnyLiveObject,\n type Space,\n} from '@dxos/react-client/echo';\nimport { Input } from '@dxos/react-ui';\nimport { type InputProps } from '@dxos/react-ui-form';\nimport { HuePicker, IconPicker } from '@dxos/react-ui-pickers';\nimport { type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SpaceCapabilities } from './capabilities';\nimport {\n CollectionMain,\n CollectionSection,\n CREATE_OBJECT_DIALOG,\n CREATE_SPACE_DIALOG,\n CreateObjectDialog,\n CreateSpaceDialog,\n InlineSyncStatus,\n JOIN_DIALOG,\n JoinDialog,\n MembersContainer,\n MenuFooter,\n ObjectSettingsContainer,\n POPOVER_RENAME_OBJECT,\n POPOVER_RENAME_SPACE,\n PopoverRenameObject,\n PopoverRenameSpace,\n SchemaContainer,\n SmallPresenceLive,\n SpacePluginSettings,\n SpacePresence,\n SpaceSettingsContainer,\n SyncStatus,\n type CreateObjectDialogProps,\n} from '../components';\nimport { SPACE_PLUGIN } from '../meta';\nimport { CollectionType, HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';\n\ntype ReactSurfaceOptions = {\n createInvitationUrl: (invitationCode: string) => string;\n};\n\nexport default ({ createInvitationUrl }: ReactSurfaceOptions) =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${SPACE_PLUGIN}/article`,\n role: 'article',\n filter: (data): data is { subject: Space } =>\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,\n component: ({ data, role, ...rest }) => (\n <Surface\n data={{ id: data.subject.id, subject: data.subject.properties[CollectionType.typename]?.target }}\n role={role}\n {...rest}\n />\n ),\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-fallback`,\n role: 'article',\n position: 'fallback',\n filter: (data): data is { subject: CollectionType } => isInstanceOf(CollectionType, data.subject),\n component: ({ data }) => <CollectionMain collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,\n component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/companion/object-settings`,\n role: 'article',\n filter: (data): data is { companionTo: AnyLiveObject<any> } =>\n isEchoObject(data.companionTo) && data.subject === 'settings',\n component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-properties`,\n role: 'article',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <SpaceSettingsContainer space={space} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-members`,\n role: 'article',\n position: 'hoist',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <MembersContainer space={space} createInvitationUrl={createInvitationUrl} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-schema`,\n role: 'article',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <SchemaContainer space={space} />;\n },\n }),\n createSurface({\n id: JOIN_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,\n component: ({ data }) => <JoinDialog {...data.props} />,\n }),\n createSurface({\n id: CREATE_SPACE_DIALOG,\n role: 'dialog',\n filter: (data): data is any => data.component === CREATE_SPACE_DIALOG,\n component: () => <CreateSpaceDialog />,\n }),\n createSurface({\n id: CREATE_OBJECT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: CreateObjectDialogProps } => data.component === CREATE_OBJECT_DIALOG,\n component: ({ data }) => <CreateObjectDialog {...data.props} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);\n return !!annotation;\n },\n component: ({ data: _, ...inputProps }) => {\n const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);\n return (\n <Input.Root>\n <Input.Label>{label}</Input.Label>\n <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />\n </Input.Root>\n );\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);\n return !!annotation;\n },\n component: ({ data: _, ...inputProps }) => {\n const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;\n const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);\n return (\n <Input.Root>\n <Input.Label>{label}</Input.Label>\n <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />\n </Input.Root>\n );\n },\n }),\n createSurface({\n id: POPOVER_RENAME_SPACE,\n role: 'popover',\n filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),\n component: ({ data }) => <PopoverRenameSpace space={data.props} />,\n }),\n createSurface({\n id: POPOVER_RENAME_OBJECT,\n role: 'popover',\n filter: (data): data is { props: AnyLiveObject<any> } =>\n data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),\n component: ({ data }) => <PopoverRenameObject object={data.props} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/menu-footer`,\n role: 'menu-footer',\n filter: (data): data is { subject: AnyLiveObject<any> } => isEchoObject(data.subject),\n component: ({ data }) => <MenuFooter object={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-presence`,\n role: 'navtree-item-end',\n filter: (data): data is { id: string; subject: AnyLiveObject<any>; open?: boolean } =>\n typeof data.id === 'string' && isEchoObject(data.subject),\n component: ({ data }) => {\n // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.\n const state = useCapability(SpaceCapabilities.MutableState);\n return <SmallPresenceLive id={data.id} open={data.open} viewers={state.viewersByObject[data.id]} />;\n },\n }),\n // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-presence-fallback`,\n role: 'navtree-item-end',\n position: 'fallback',\n filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',\n component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,\n }),\n // TODO(wittjosiah): Broken?\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-sync-status`,\n role: 'navtree-item-end',\n filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),\n component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navbar-presence`,\n role: 'navbar-end',\n position: 'hoist',\n filter: (data): data is { subject: Space | AnyLiveObject<any> } =>\n isSpace(data.subject) || isEchoObject(data.subject),\n component: ({ data }) => {\n const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);\n const object = isSpace(data.subject)\n ? data.subject.state.get() === SpaceState.SPACE_READY\n ? (space?.properties[CollectionType.typename]?.target as CollectionType)\n : undefined\n : data.subject;\n\n return object ? <SpacePresence object={object} /> : null;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-section`,\n role: 'section',\n filter: (data): data is { subject: CollectionType } => isInstanceOf(CollectionType, data.subject),\n component: ({ data }) => <CollectionSection collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/status`,\n role: 'status',\n component: () => <SyncStatus />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["createInvitationUrl", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "SPACE_PLUGIN", "role", "filter", "data", "isSpace", "subject", "state", "get", "SpaceState", "SPACE_READY", "component", "rest", "React", "Surface", "properties", "CollectionType", "typename", "target", "position", "isInstanceOf", "CollectionMain", "collection", "SettingsStore", "prefix", "SpacePluginSettings", "settings", "value", "isEchoObject", "companionTo", "ObjectSettingsContainer", "object", "layout", "useLayout", "spaceId", "parseId", "workspace", "space", "useSpace", "SpaceSettingsContainer", "MembersContainer", "SchemaContainer", "JOIN_DIALOG", "JoinDialog", "props", "CREATE_SPACE_DIALOG", "CreateSpaceDialog", "CREATE_OBJECT_DIALOG", "CreateObjectDialog", "annotation", "findAnnotation", "schema", "ast", "HueAnnotationId", "_", "inputProps", "label", "disabled", "type", "getValue", "onValueChange", "handleChange", "useCallback", "nextHue", "handleReset", "undefined", "Input", "Root", "Label", "HuePicker", "onChange", "onReset", "IconAnnotationId", "nextIcon", "IconPicker", "POPOVER_RENAME_SPACE", "PopoverRenameSpace", "POPOVER_RENAME_OBJECT", "isLiveObject", "PopoverRenameObject", "MenuFooter", "useCapability", "SpaceCapabilities", "MutableState", "SmallPresenceLive", "open", "viewers", "viewersByObject", "InlineSyncStatus", "getSpace", "SpacePresence", "CollectionSection", "SyncStatus"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/schema-defs.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { SpaceCapabilities } from './capabilities';\nimport { type ObjectForm } from '../types';\n\nexport default (context: PluginContext) => {\n const registry = context.getCapability(Capabilities.RxRegistry);\n const client = context.getCapability(ClientCapabilities.Client);\n\n // TODO(wittjosiah): Unregister schemas when they are disabled.\n let previous: ObjectForm[] = [];\n const cancel = registry.subscribe(\n context.capabilities(SpaceCapabilities.ObjectForm),\n (_forms) => {\n const forms = Array.from(new Set(_forms));\n // TODO(wittjosiah): Filter out schemas which the client has already registered.\n const newSchemas = forms.filter((form) => !previous.includes(form)).map((form) => form.objectSchema);\n previous = forms;\n client.addTypes(newSchemas);\n },\n { immediate: true },\n );\n\n return contributes(Capabilities.Null, null, () => cancel());\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA8D;AAC9D,2BAAmC;AAKnC,IAAA,sBAAe,CAACA,YAAAA;AACd,QAAMC,WAAWD,QAAQE,cAAcC,kCAAaC,UAAU;AAC9D,QAAMC,SAASL,QAAQE,cAAcI,wCAAmBC,MAAM;AAG9D,MAAIC,WAAyB,CAAA;AAC7B,QAAMC,SAASR,SAASS,UACtBV,QAAQW,aAAaC,wCAAkBC,UAAU,GACjD,CAACC,WAAAA;AACC,UAAMC,QAAQC,MAAMC,KAAK,IAAIC,IAAIJ,MAAAA,CAAAA;AAEjC,UAAMK,aAAaJ,MAAMK,OAAO,CAACC,SAAS,CAACb,SAASc,SAASD,IAAAA,CAAAA,EAAOE,IAAI,CAACF,SAASA,KAAKG,YAAY;AACnGhB,eAAWO;AACXV,WAAOoB,SAASN,UAAAA;EAClB,GACA;IAAEO,WAAW;EAAK,CAAA;AAGpB,aAAOC,kCAAYxB,kCAAayB,MAAM,MAAM,MAAMnB,OAAAA,CAAAA;AACpD;",
|
|
6
|
-
"names": ["context", "registry", "getCapability", "Capabilities", "RxRegistry", "client", "ClientCapabilities", "Client", "previous", "cancel", "subscribe", "capabilities", "SpaceCapabilities", "ObjectForm", "_forms", "forms", "Array", "from", "Set", "newSchemas", "filter", "form", "includes", "map", "objectSchema", "addTypes", "immediate", "contributes", "Null"]
|
|
7
|
-
}
|