@dxos/plugin-space 0.8.2-staging.7ac8446 → 0.8.2

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.
Files changed (341) hide show
  1. package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs +328 -0
  2. package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-DSF2U3A5.mjs → app-graph-serializer-MLU7XI2P.mjs} +10 -10
  4. package/dist/lib/browser/app-graph-serializer-MLU7XI2P.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-KVRYWFZU.mjs → chunk-3LN4LJN6.mjs} +3 -8
  6. package/dist/lib/{node-esm/chunk-PIYAWT5N.mjs.map → browser/chunk-3LN4LJN6.mjs.map} +3 -3
  7. package/dist/lib/browser/chunk-7Y4M7GXO.mjs +94 -0
  8. package/dist/lib/browser/chunk-7Y4M7GXO.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-LO5UL6RU.mjs → chunk-N5QMRLKI.mjs} +78 -173
  10. package/dist/lib/browser/chunk-N5QMRLKI.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-Q4BTFH2P.mjs +1900 -0
  12. package/dist/lib/browser/chunk-Q4BTFH2P.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-5BDV575R.mjs → chunk-VEBKN45O.mjs} +21 -10
  14. package/dist/lib/browser/chunk-VEBKN45O.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-W46VVHFM.mjs +288 -0
  16. package/dist/lib/browser/chunk-W46VVHFM.mjs.map +7 -0
  17. package/dist/lib/browser/{identity-created-JR7BNXFH.mjs → identity-created-O63SIYOF.mjs} +5 -5
  18. package/dist/lib/browser/identity-created-O63SIYOF.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +34 -54
  20. package/dist/lib/browser/index.mjs.map +3 -3
  21. package/dist/lib/browser/{intent-resolver-RKYILWWQ.mjs → intent-resolver-KBF3YU6I.mjs} +116 -108
  22. package/dist/lib/browser/intent-resolver-KBF3YU6I.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/{react-root-6H7NX2M2.mjs → react-root-PVKJE4EZ.mjs} +6 -5
  25. package/dist/lib/browser/{react-surface-7AGLOVMK.mjs → react-surface-252P4NCK.mjs} +121 -54
  26. package/dist/lib/browser/react-surface-252P4NCK.mjs.map +7 -0
  27. package/dist/lib/browser/schema-defs-JMN74RNK.mjs +26 -0
  28. package/dist/lib/browser/schema-defs-JMN74RNK.mjs.map +7 -0
  29. package/dist/lib/browser/{schema-tools-YAXPRIXP.mjs → schema-tools-JIEMHUXV.mjs} +26 -26
  30. package/dist/lib/browser/schema-tools-JIEMHUXV.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-PJPTJUPE.mjs → settings-2IN2WLUK.mjs} +4 -4
  32. package/dist/lib/browser/settings-2IN2WLUK.mjs.map +7 -0
  33. package/dist/lib/browser/{spaces-ready-BSSP7HHG.mjs → spaces-ready-L4QAGTDE.mjs} +20 -19
  34. package/dist/lib/browser/spaces-ready-L4QAGTDE.mjs.map +7 -0
  35. package/dist/lib/browser/{state-X7VLCC6E.mjs → state-6HOSHLIN.mjs} +3 -5
  36. package/dist/lib/browser/state-6HOSHLIN.mjs.map +7 -0
  37. package/dist/lib/browser/types/index.mjs +7 -7
  38. package/dist/lib/node/app-graph-builder-WC445X77.cjs +328 -0
  39. package/dist/lib/node/app-graph-builder-WC445X77.cjs.map +7 -0
  40. package/dist/lib/node/{app-graph-serializer-JELGJUAY.cjs → app-graph-serializer-UPQOQVMJ.cjs} +22 -22
  41. package/dist/lib/node/app-graph-serializer-UPQOQVMJ.cjs.map +7 -0
  42. package/dist/lib/node/chunk-5WLAXYE3.cjs +125 -0
  43. package/dist/lib/node/chunk-5WLAXYE3.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-IKIDS6XF.cjs → chunk-7GQGM4ZF.cjs} +7 -13
  45. package/dist/lib/node/{chunk-IKIDS6XF.cjs.map → chunk-7GQGM4ZF.cjs.map} +3 -3
  46. package/dist/lib/node/{chunk-TUZWEPGX.cjs → chunk-COQYISES.cjs} +100 -198
  47. package/dist/lib/node/chunk-COQYISES.cjs.map +7 -0
  48. package/dist/lib/node/{chunk-PU2EYH4E.cjs → chunk-DXL5TDFP.cjs} +25 -14
  49. package/dist/lib/node/chunk-DXL5TDFP.cjs.map +7 -0
  50. package/dist/lib/node/chunk-FXHI7JNY.cjs +315 -0
  51. package/dist/lib/node/chunk-FXHI7JNY.cjs.map +7 -0
  52. package/dist/lib/node/chunk-Q3YZEYZT.cjs +1904 -0
  53. package/dist/lib/node/chunk-Q3YZEYZT.cjs.map +7 -0
  54. package/dist/lib/node/{identity-created-XU4HFV2T.cjs → identity-created-UXEAUGC7.cjs} +7 -7
  55. package/dist/lib/node/identity-created-UXEAUGC7.cjs.map +7 -0
  56. package/dist/lib/node/index.cjs +83 -105
  57. package/dist/lib/node/index.cjs.map +3 -3
  58. package/dist/lib/node/{intent-resolver-VJ7YV74L.cjs → intent-resolver-SVFJKUH7.cjs} +161 -152
  59. package/dist/lib/node/intent-resolver-SVFJKUH7.cjs.map +7 -0
  60. package/dist/lib/node/meta.json +1 -1
  61. package/dist/lib/node/{react-root-TEL5RW3N.cjs → react-root-DDPDUMCG.cjs} +11 -10
  62. package/dist/lib/node/{react-root-TEL5RW3N.cjs.map → react-root-DDPDUMCG.cjs.map} +1 -1
  63. package/dist/lib/node/{react-surface-2H3S5TY5.cjs → react-surface-JUIU37BX.cjs} +144 -77
  64. package/dist/lib/node/react-surface-JUIU37BX.cjs.map +7 -0
  65. package/dist/lib/node/{schema-PPJ5BZ3A.cjs → schema-defs-XLFBG3XK.cjs} +14 -12
  66. package/dist/lib/node/schema-defs-XLFBG3XK.cjs.map +7 -0
  67. package/dist/lib/node/{schema-tools-BLIMOZYY.cjs → schema-tools-ZG6Z2QRC.cjs} +32 -32
  68. package/dist/lib/node/schema-tools-ZG6Z2QRC.cjs.map +7 -0
  69. package/dist/lib/node/{settings-WVFP2UEP.cjs → settings-FOH7EB5C.cjs} +7 -7
  70. package/dist/lib/node/settings-FOH7EB5C.cjs.map +7 -0
  71. package/dist/lib/node/{spaces-ready-7DNZSUOG.cjs → spaces-ready-VXQYCBII.cjs} +27 -26
  72. package/dist/lib/node/spaces-ready-VXQYCBII.cjs.map +7 -0
  73. package/dist/lib/node/{state-5KX6WBJH.cjs → state-ZT3MTZXB.cjs} +7 -9
  74. package/dist/lib/node/state-ZT3MTZXB.cjs.map +7 -0
  75. package/dist/lib/node/types/index.cjs +15 -15
  76. package/dist/lib/node/types/index.cjs.map +1 -1
  77. package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs +329 -0
  78. package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs.map +7 -0
  79. package/dist/lib/node-esm/{app-graph-serializer-FXONFKOE.mjs → app-graph-serializer-UCMSLPIA.mjs} +10 -10
  80. package/dist/lib/node-esm/app-graph-serializer-UCMSLPIA.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-PIYAWT5N.mjs → chunk-4X4Y63ND.mjs} +3 -8
  82. package/dist/lib/{browser/chunk-KVRYWFZU.mjs.map → node-esm/chunk-4X4Y63ND.mjs.map} +3 -3
  83. package/dist/lib/node-esm/chunk-FTELJGEG.mjs +289 -0
  84. package/dist/lib/node-esm/chunk-FTELJGEG.mjs.map +7 -0
  85. package/dist/lib/node-esm/chunk-GH2FGJXH.mjs +96 -0
  86. package/dist/lib/node-esm/chunk-GH2FGJXH.mjs.map +7 -0
  87. package/dist/lib/node-esm/chunk-HL2Z2GNW.mjs +1901 -0
  88. package/dist/lib/node-esm/chunk-HL2Z2GNW.mjs.map +7 -0
  89. package/dist/lib/node-esm/{chunk-3ZOUV4DF.mjs → chunk-OSPEGYX3.mjs} +21 -10
  90. package/dist/lib/node-esm/chunk-OSPEGYX3.mjs.map +7 -0
  91. package/dist/lib/node-esm/{chunk-ZGLK25WQ.mjs → chunk-XAZNQ3QN.mjs} +78 -173
  92. package/dist/lib/node-esm/chunk-XAZNQ3QN.mjs.map +7 -0
  93. package/dist/lib/node-esm/{identity-created-WJKAS2PV.mjs → identity-created-ZECO4NH3.mjs} +5 -5
  94. package/dist/lib/node-esm/identity-created-ZECO4NH3.mjs.map +7 -0
  95. package/dist/lib/node-esm/index.mjs +34 -54
  96. package/dist/lib/node-esm/index.mjs.map +3 -3
  97. package/dist/lib/node-esm/{intent-resolver-ZFNSA4CM.mjs → intent-resolver-K2UDBF2R.mjs} +116 -108
  98. package/dist/lib/node-esm/intent-resolver-K2UDBF2R.mjs.map +7 -0
  99. package/dist/lib/node-esm/meta.json +1 -1
  100. package/dist/lib/node-esm/{react-root-PRBJMWLQ.mjs → react-root-6F7B3OVO.mjs} +6 -5
  101. package/dist/lib/{browser/react-root-6H7NX2M2.mjs.map → node-esm/react-root-6F7B3OVO.mjs.map} +1 -1
  102. package/dist/lib/node-esm/{react-surface-RCZG2PNF.mjs → react-surface-NP3Y6BNZ.mjs} +121 -54
  103. package/dist/lib/node-esm/react-surface-NP3Y6BNZ.mjs.map +7 -0
  104. package/dist/lib/node-esm/schema-defs-QZJS6UXN.mjs +27 -0
  105. package/dist/lib/node-esm/schema-defs-QZJS6UXN.mjs.map +7 -0
  106. package/dist/lib/node-esm/{schema-tools-IU7EX5A5.mjs → schema-tools-2Y4D42PD.mjs} +26 -26
  107. package/dist/lib/node-esm/schema-tools-2Y4D42PD.mjs.map +7 -0
  108. package/dist/lib/node-esm/{settings-FJZPC2TV.mjs → settings-Q4XDFSYD.mjs} +4 -4
  109. package/dist/lib/node-esm/settings-Q4XDFSYD.mjs.map +7 -0
  110. package/dist/lib/node-esm/{spaces-ready-7X5PGB2V.mjs → spaces-ready-JHKPD4PH.mjs} +20 -19
  111. package/dist/lib/node-esm/spaces-ready-JHKPD4PH.mjs.map +7 -0
  112. package/dist/lib/node-esm/{state-Z6E2YTNC.mjs → state-4ATRHSKA.mjs} +3 -5
  113. package/dist/lib/node-esm/state-4ATRHSKA.mjs.map +7 -0
  114. package/dist/lib/node-esm/types/index.mjs +7 -7
  115. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  117. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/app-graph-serializer.d.ts +2 -2
  119. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/capabilities.d.ts +0 -8
  121. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  122. package/dist/types/src/capabilities/identity-created.d.ts +2 -2
  123. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/index.d.ts +9 -184
  125. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  126. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -3
  127. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/schema-defs.d.ts +4 -0
  130. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/schema-tools.d.ts +3 -3
  132. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/spaces-ready.d.ts +2 -2
  134. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/state.d.ts +2 -2
  136. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  137. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  138. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  139. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  140. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -2
  141. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  142. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  143. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  144. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  145. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/MenuFooter.d.ts +2 -2
  148. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  149. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/AdvancedObjectSettings.d.ts +2 -2
  150. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -0
  151. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/BaseObjectSettings.d.ts +2 -2
  152. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -0
  153. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -0
  154. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/ObjectSettingsContainer.d.ts +2 -2
  155. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -0
  156. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -0
  157. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  158. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  159. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  160. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  161. package/dist/types/src/components/SchemaContainer.d.ts +13 -0
  162. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -0
  163. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  164. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  165. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +0 -2
  167. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  168. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +7 -0
  169. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -0
  170. package/dist/types/src/components/SpaceSettings/index.d.ts +0 -1
  171. package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
  172. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -8
  174. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  175. package/dist/types/src/components/SyncStatus/save-tracker.d.ts.map +1 -1
  176. package/dist/types/src/components/SyncStatus/status.d.ts.map +1 -1
  177. package/dist/types/src/components/index.d.ts +2 -3
  178. package/dist/types/src/components/index.d.ts.map +1 -1
  179. package/dist/types/src/hooks/index.d.ts +2 -0
  180. package/dist/types/src/hooks/index.d.ts.map +1 -1
  181. package/dist/types/src/hooks/useActiveSpace.d.ts +4 -0
  182. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -0
  183. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +14 -0
  184. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -0
  185. package/dist/types/src/hooks/usePath.d.ts +3 -2
  186. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  187. package/dist/types/src/index.d.ts +3 -2
  188. package/dist/types/src/index.d.ts.map +1 -1
  189. package/dist/types/src/translations.d.ts +17 -242
  190. package/dist/types/src/translations.d.ts.map +1 -1
  191. package/dist/types/src/types/collection.d.ts +9 -8
  192. package/dist/types/src/types/collection.d.ts.map +1 -1
  193. package/dist/types/src/types/index.d.ts +0 -1
  194. package/dist/types/src/types/index.d.ts.map +1 -1
  195. package/dist/types/src/types/types.d.ts +173 -146
  196. package/dist/types/src/types/types.d.ts.map +1 -1
  197. package/dist/types/src/util.d.ts +36 -20
  198. package/dist/types/src/util.d.ts.map +1 -1
  199. package/dist/types/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +54 -47
  201. package/src/SpacePlugin.tsx +11 -20
  202. package/src/capabilities/app-graph-builder.ts +377 -230
  203. package/src/capabilities/app-graph-serializer.ts +8 -8
  204. package/src/capabilities/capabilities.ts +0 -9
  205. package/src/capabilities/identity-created.ts +5 -5
  206. package/src/capabilities/index.ts +2 -2
  207. package/src/capabilities/intent-resolver.ts +107 -111
  208. package/src/capabilities/react-surface.tsx +111 -50
  209. package/src/capabilities/schema-defs.ts +30 -0
  210. package/src/capabilities/schema-tool.test.ts +2 -3
  211. package/src/capabilities/schema-tools.ts +29 -29
  212. package/src/capabilities/settings.ts +2 -2
  213. package/src/capabilities/spaces-ready.ts +17 -15
  214. package/src/capabilities/state.ts +3 -5
  215. package/src/components/AwaitingObject.tsx +1 -1
  216. package/src/components/CollectionMain.tsx +2 -5
  217. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +4 -4
  218. package/src/components/CreateDialog/CreateObjectDialog.tsx +4 -4
  219. package/src/components/CreateDialog/CreateObjectPanel.tsx +3 -25
  220. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -3
  221. package/src/components/MembersContainer.stories.tsx +1 -5
  222. package/src/components/MembersContainer.tsx +80 -54
  223. package/src/components/MenuFooter.tsx +2 -2
  224. package/src/components/{ObjectSettingsContainer → ObjectSettings}/AdvancedObjectSettings.tsx +4 -4
  225. package/src/components/{ObjectSettingsContainer → ObjectSettings}/BaseObjectSettings.tsx +2 -2
  226. package/src/components/{ObjectSettingsContainer → ObjectSettings}/ObjectSettingsContainer.tsx +4 -4
  227. package/src/components/PersistenceStatus.tsx +11 -14
  228. package/src/components/PopoverRenameObject.tsx +15 -9
  229. package/src/components/PopoverRenameSpace.tsx +9 -1
  230. package/src/components/SchemaContainer.tsx +59 -0
  231. package/src/components/SpacePluginSettings.tsx +27 -2
  232. package/src/components/SpacePresence.stories.tsx +1 -1
  233. package/src/components/SpacePresence.tsx +60 -65
  234. package/src/components/SpaceSettings/{SpacePropertiesForm.stories.tsx → SpaceSettingsContainer.stories.tsx} +6 -6
  235. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +159 -39
  236. package/src/components/SpaceSettings/index.ts +0 -1
  237. package/src/components/SyncStatus/InlineSyncStatus.tsx +15 -24
  238. package/src/components/SyncStatus/SyncStatus.tsx +6 -69
  239. package/src/components/index.ts +2 -3
  240. package/src/hooks/index.ts +2 -0
  241. package/src/hooks/useActiveSpace.ts +20 -0
  242. package/src/hooks/useInputSurfaceLookup.tsx +31 -0
  243. package/src/hooks/usePath.ts +9 -6
  244. package/src/index.ts +3 -2
  245. package/src/translations.ts +19 -7
  246. package/src/types/collection.ts +6 -4
  247. package/src/types/index.ts +0 -1
  248. package/src/types/types.ts +130 -101
  249. package/src/util.tsx +75 -172
  250. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs +0 -315
  251. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +0 -7
  252. package/dist/lib/browser/app-graph-serializer-DSF2U3A5.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-5BDV575R.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-AYW4IDRT.mjs +0 -275
  255. package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-JZXWPMLA.mjs +0 -2081
  257. package/dist/lib/browser/chunk-JZXWPMLA.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +0 -7
  259. package/dist/lib/browser/identity-created-JR7BNXFH.mjs.map +0 -7
  260. package/dist/lib/browser/intent-resolver-RKYILWWQ.mjs.map +0 -7
  261. package/dist/lib/browser/react-surface-7AGLOVMK.mjs.map +0 -7
  262. package/dist/lib/browser/schema-FHTA26SW.mjs +0 -24
  263. package/dist/lib/browser/schema-FHTA26SW.mjs.map +0 -7
  264. package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +0 -7
  265. package/dist/lib/browser/settings-PJPTJUPE.mjs.map +0 -7
  266. package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +0 -7
  267. package/dist/lib/browser/state-X7VLCC6E.mjs.map +0 -7
  268. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs +0 -318
  269. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +0 -7
  270. package/dist/lib/node/app-graph-serializer-JELGJUAY.cjs.map +0 -7
  271. package/dist/lib/node/chunk-3GKCNADA.cjs +0 -2074
  272. package/dist/lib/node/chunk-3GKCNADA.cjs.map +0 -7
  273. package/dist/lib/node/chunk-PU2EYH4E.cjs.map +0 -7
  274. package/dist/lib/node/chunk-TUZWEPGX.cjs.map +0 -7
  275. package/dist/lib/node/chunk-WDEIFDTX.cjs +0 -300
  276. package/dist/lib/node/chunk-WDEIFDTX.cjs.map +0 -7
  277. package/dist/lib/node/identity-created-XU4HFV2T.cjs.map +0 -7
  278. package/dist/lib/node/intent-resolver-VJ7YV74L.cjs.map +0 -7
  279. package/dist/lib/node/react-surface-2H3S5TY5.cjs.map +0 -7
  280. package/dist/lib/node/schema-PPJ5BZ3A.cjs.map +0 -7
  281. package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +0 -7
  282. package/dist/lib/node/settings-WVFP2UEP.cjs.map +0 -7
  283. package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +0 -7
  284. package/dist/lib/node/state-5KX6WBJH.cjs.map +0 -7
  285. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs +0 -316
  286. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +0 -7
  287. package/dist/lib/node-esm/app-graph-serializer-FXONFKOE.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs +0 -2082
  290. package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs +0 -276
  292. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +0 -7
  294. package/dist/lib/node-esm/identity-created-WJKAS2PV.mjs.map +0 -7
  295. package/dist/lib/node-esm/intent-resolver-ZFNSA4CM.mjs.map +0 -7
  296. package/dist/lib/node-esm/react-surface-RCZG2PNF.mjs.map +0 -7
  297. package/dist/lib/node-esm/schema-OUZKVYM5.mjs +0 -25
  298. package/dist/lib/node-esm/schema-OUZKVYM5.mjs.map +0 -7
  299. package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +0 -7
  300. package/dist/lib/node-esm/settings-FJZPC2TV.mjs.map +0 -7
  301. package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +0 -7
  302. package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +0 -7
  303. package/dist/types/src/capabilities/schema.d.ts +0 -4
  304. package/dist/types/src/capabilities/schema.d.ts.map +0 -1
  305. package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +0 -1
  306. package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +0 -1
  307. package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +0 -1
  308. package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +0 -1
  309. package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +0 -1
  310. package/dist/types/src/components/PopoverAddSpace.d.ts +0 -4
  311. package/dist/types/src/components/PopoverAddSpace.d.ts.map +0 -1
  312. package/dist/types/src/components/ShareSpaceButton.d.ts +0 -9
  313. package/dist/types/src/components/ShareSpaceButton.d.ts.map +0 -1
  314. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +0 -10
  315. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +0 -1
  316. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts +0 -7
  317. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts.map +0 -1
  318. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts +0 -7
  319. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts.map +0 -1
  320. package/dist/types/src/components/SyncStatus/Space.d.ts +0 -13
  321. package/dist/types/src/components/SyncStatus/Space.d.ts.map +0 -1
  322. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +0 -9
  323. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +0 -1
  324. package/dist/types/src/components/SyncStatus/sync-state.d.ts +0 -18
  325. package/dist/types/src/components/SyncStatus/sync-state.d.ts.map +0 -1
  326. package/dist/types/src/types/thread.d.ts +0 -128
  327. package/dist/types/src/types/thread.d.ts.map +0 -1
  328. package/src/capabilities/schema.ts +0 -27
  329. package/src/components/PopoverAddSpace.tsx +0 -46
  330. package/src/components/ShareSpaceButton.stories.tsx +0 -27
  331. package/src/components/ShareSpaceButton.tsx +0 -32
  332. package/src/components/SpaceSettings/SpacePropertiesForm.tsx +0 -136
  333. package/src/components/SyncStatus/Space.tsx +0 -133
  334. package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +0 -89
  335. package/src/components/SyncStatus/sync-state.ts +0 -101
  336. package/src/types/thread.ts +0 -24
  337. /package/dist/lib/{node-esm/react-root-PRBJMWLQ.mjs.map → browser/react-root-PVKJE4EZ.mjs.map} +0 -0
  338. /package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/ForeignKeys.d.ts +0 -0
  339. /package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/index.d.ts +0 -0
  340. /package/src/components/{ObjectSettingsContainer → ObjectSettings}/ForeignKeys.tsx +0 -0
  341. /package/src/components/{ObjectSettingsContainer → ObjectSettings}/index.ts +0 -0
@@ -1,2074 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_3GKCNADA_exports = {};
30
- __export(chunk_3GKCNADA_exports, {
31
- AppGraphBuilder: () => AppGraphBuilder,
32
- AppGraphSerializer: () => AppGraphSerializer,
33
- AwaitingObject: () => AwaitingObject,
34
- CREATE_OBJECT_DIALOG: () => CREATE_OBJECT_DIALOG,
35
- CREATE_SPACE_DIALOG: () => CREATE_SPACE_DIALOG,
36
- CollectionMain: () => CollectionMain,
37
- CollectionSection: () => CollectionSection,
38
- CreateObjectDialog: () => CreateObjectDialog,
39
- CreateSpaceDialog: () => CreateSpaceDialog,
40
- FullPresence: () => FullPresence,
41
- IdentityCreated: () => IdentityCreated,
42
- InlineSyncStatus: () => InlineSyncStatus,
43
- IntentResolver: () => IntentResolver,
44
- JOIN_DIALOG: () => JOIN_DIALOG,
45
- JoinDialog: () => JoinDialog,
46
- MembersContainer: () => MembersContainer,
47
- MenuFooter: () => MenuFooter,
48
- ObjectSettingsContainer: () => ObjectSettingsContainer,
49
- POPOVER_ADD_SPACE: () => POPOVER_ADD_SPACE,
50
- POPOVER_RENAME_OBJECT: () => POPOVER_RENAME_OBJECT,
51
- POPOVER_RENAME_SPACE: () => POPOVER_RENAME_SPACE,
52
- PersistenceStatus: () => PersistenceStatus,
53
- PopoverAddSpace: () => PopoverAddSpace,
54
- PopoverRenameObject: () => PopoverRenameObject,
55
- PopoverRenameSpace: () => PopoverRenameSpace,
56
- ReactRoot: () => ReactRoot,
57
- ReactSurface: () => ReactSurface,
58
- SPACE_SETTINGS_DIALOG: () => SPACE_SETTINGS_DIALOG,
59
- Schema: () => Schema,
60
- ShareSpaceButton: () => ShareSpaceButton,
61
- ShareSpaceButtonImpl: () => ShareSpaceButtonImpl,
62
- SmallPresence: () => SmallPresence,
63
- SmallPresenceLive: () => SmallPresenceLive,
64
- SpacePluginSettings: () => SpacePluginSettings,
65
- SpacePresence: () => SpacePresence,
66
- SpacePropertiesForm: () => SpacePropertiesForm,
67
- SpaceSettings: () => SpaceSettings,
68
- SpaceSettingsContainer: () => SpaceSettingsContainer,
69
- SpaceState: () => SpaceState,
70
- SpacesReady: () => SpacesReady,
71
- SyncStatus: () => SyncStatus,
72
- SyncStatusDetail: () => SyncStatusDetail,
73
- SyncStatusIndicator: () => SyncStatusIndicator,
74
- Tools: () => Tools
75
- });
76
- module.exports = __toCommonJS(chunk_3GKCNADA_exports);
77
- var import_chunk_IKIDS6XF = require("./chunk-IKIDS6XF.cjs");
78
- var import_chunk_TUZWEPGX = require("./chunk-TUZWEPGX.cjs");
79
- var import_chunk_WDEIFDTX = require("./chunk-WDEIFDTX.cjs");
80
- var import_chunk_6P2DB4QQ = require("./chunk-6P2DB4QQ.cjs");
81
- var import_react = require("@phosphor-icons/react");
82
- var import_react2 = __toESM(require("react"));
83
- var import_app_framework = require("@dxos/app-framework");
84
- var import_react_client = require("@dxos/react-client");
85
- var import_echo = require("@dxos/react-client/echo");
86
- var import_react_ui = require("@dxos/react-ui");
87
- var import_react_ui_theme = require("@dxos/react-ui-theme");
88
- var import_effect = require("effect");
89
- var import_react3 = __toESM(require("react"));
90
- var import_app_framework2 = require("@dxos/app-framework");
91
- var import_invariant = require("@dxos/invariant");
92
- var import_react_client2 = require("@dxos/react-client");
93
- var import_echo2 = require("@dxos/react-client/echo");
94
- var import_react_ui2 = require("@dxos/react-ui");
95
- var import_react4 = __toESM(require("react"));
96
- var import_app_framework3 = require("@dxos/app-framework");
97
- var import_echo_schema = require("@dxos/echo-schema");
98
- var import_invariant2 = require("@dxos/invariant");
99
- var import_react_ui3 = require("@dxos/react-ui");
100
- var import_react_ui_form = require("@dxos/react-ui-form");
101
- var import_react_ui_searchlist = require("@dxos/react-ui-searchlist");
102
- var import_react_ui_theme2 = require("@dxos/react-ui-theme");
103
- var import_util = require("@dxos/util");
104
- var import_app_framework4 = require("@dxos/app-framework");
105
- var import_effect2 = require("effect");
106
- var import_react5 = __toESM(require("react"));
107
- var import_app_framework5 = require("@dxos/app-framework");
108
- var import_react_ui4 = require("@dxos/react-ui");
109
- var import_react_ui_form2 = require("@dxos/react-ui-form");
110
- var import_react6 = __toESM(require("react"));
111
- var import_react_ui5 = require("@dxos/react-ui");
112
- var import_react_ui_theme3 = require("@dxos/react-ui-theme");
113
- var import_react7 = __toESM(require("react"));
114
- var import_react_ui6 = require("@dxos/react-ui");
115
- var import_react8 = __toESM(require("react"));
116
- var import_app_framework6 = require("@dxos/app-framework");
117
- var import_async = require("@dxos/async");
118
- var import_types = require("@dxos/plugin-observability/types");
119
- var import_react_client3 = require("@dxos/react-client");
120
- var import_react_ui7 = require("@dxos/react-ui");
121
- var import_react9 = require("@dxos/shell/react");
122
- var import_react10 = require("@phosphor-icons/react");
123
- var import_react11 = __toESM(require("react"));
124
- var import_react_qr_rounded = require("react-qr-rounded");
125
- var import_log = require("@dxos/log");
126
- var import_react_client4 = require("@dxos/react-client");
127
- var import_echo3 = require("@dxos/react-client/echo");
128
- var import_invitations = require("@dxos/react-client/invitations");
129
- var import_react_ui8 = require("@dxos/react-ui");
130
- var import_react_ui_form3 = require("@dxos/react-ui-form");
131
- var import_react_ui_stack = require("@dxos/react-ui-stack");
132
- var import_react_ui_theme4 = require("@dxos/react-ui-theme");
133
- var import_react12 = require("@dxos/shell/react");
134
- var import_util2 = require("@dxos/util");
135
- var import_react13 = require("@phosphor-icons/react");
136
- var import_react14 = __toESM(require("react"));
137
- var import_echo4 = require("@dxos/client/echo");
138
- var import_react_client5 = require("@dxos/react-client");
139
- var import_react_ui9 = require("@dxos/react-ui");
140
- var import_react15 = __toESM(require("react"));
141
- var import_app_framework7 = require("@dxos/app-framework");
142
- var import_react_ui10 = require("@dxos/react-ui");
143
- var import_react_ui_stack2 = require("@dxos/react-ui-stack");
144
- var import_react16 = __toESM(require("react"));
145
- var import_echo_schema2 = require("@dxos/echo-schema");
146
- var import_echo5 = require("@dxos/react-client/echo");
147
- var import_react_ui11 = require("@dxos/react-ui");
148
- var import_react_ui_form4 = require("@dxos/react-ui-form");
149
- var import_react17 = __toESM(require("react"));
150
- var import_react_ui12 = require("@dxos/react-ui");
151
- var import_react18 = __toESM(require("react"));
152
- var import_react_ui13 = require("@dxos/react-ui");
153
- var import_react_ui_theme5 = require("@dxos/react-ui-theme");
154
- var import_react19 = require("@phosphor-icons/react");
155
- var import_react20 = __toESM(require("react"));
156
- var import_async2 = require("@dxos/async");
157
- var import_react_ui14 = require("@dxos/react-ui");
158
- var import_react_ui_theme6 = require("@dxos/react-ui-theme");
159
- var import_react21 = __toESM(require("react"));
160
- var import_app_framework8 = require("@dxos/app-framework");
161
- var import_react_ui15 = require("@dxos/react-ui");
162
- var import_react22 = __toESM(require("react"));
163
- var import_log2 = require("@dxos/log");
164
- var import_react_ui16 = require("@dxos/react-ui");
165
- var import_react23 = __toESM(require("react"));
166
- var import_react_ui17 = require("@dxos/react-ui");
167
- var import_react24 = __toESM(require("react"));
168
- var import_app_framework9 = require("@dxos/app-framework");
169
- var import_react_ui18 = require("@dxos/react-ui");
170
- var import_react25 = __toESM(require("react"));
171
- var import_app_framework10 = require("@dxos/app-framework");
172
- var import_display_name = require("@dxos/display-name");
173
- var import_react_client6 = require("@dxos/react-client");
174
- var import_echo6 = require("@dxos/react-client/echo");
175
- var import_halo = require("@dxos/react-client/halo");
176
- var import_react_ui19 = require("@dxos/react-ui");
177
- var import_react_ui_attention = require("@dxos/react-ui-attention");
178
- var import_util3 = require("@dxos/util");
179
- var import_react26 = require("react");
180
- var import_react27 = __toESM(require("react"));
181
- var import_react_ui20 = require("@dxos/react-ui");
182
- var import_react_ui_form5 = require("@dxos/react-ui-form");
183
- var import_react28 = __toESM(require("react"));
184
- var import_log3 = require("@dxos/log");
185
- var import_metadata = require("@dxos/protocols/proto/dxos/echo/metadata");
186
- var import_react_ui21 = require("@dxos/react-ui");
187
- var import_react_ui_form6 = require("@dxos/react-ui-form");
188
- var import_react_ui_pickers = require("@dxos/react-ui-pickers");
189
- var import_react29 = __toESM(require("react"));
190
- var import_app_framework11 = require("@dxos/app-framework");
191
- var import_react_ui22 = require("@dxos/react-ui");
192
- var import_react_ui_form7 = require("@dxos/react-ui-form");
193
- var import_react_ui_list = require("@dxos/react-ui-list");
194
- var import_react_ui_stack3 = require("@dxos/react-ui-stack");
195
- var import_util4 = require("@dxos/util");
196
- var import_react30 = __toESM(require("react"));
197
- var import_app_framework12 = require("@dxos/app-framework");
198
- var import_services = require("@dxos/protocols/proto/dxos/client/services");
199
- var import_metadata2 = require("@dxos/protocols/proto/dxos/echo/metadata");
200
- var import_react_client7 = require("@dxos/react-client");
201
- var import_react_ui23 = require("@dxos/react-ui");
202
- var import_react_ui_attention2 = require("@dxos/react-ui-attention");
203
- var import_react31 = require("react");
204
- var import_context = require("@dxos/context");
205
- var import_protocols = require("@dxos/protocols");
206
- var import_react_client8 = require("@dxos/react-client");
207
- var import_react32 = __toESM(require("react"));
208
- var import_plugin_status_bar = require("@dxos/plugin-status-bar");
209
- var import_react_client9 = require("@dxos/react-client");
210
- var import_react_ui24 = require("@dxos/react-ui");
211
- var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
212
- var import_react_ui_theme7 = require("@dxos/react-ui-theme");
213
- var import_react33 = __toESM(require("react"));
214
- var import_react_client10 = require("@dxos/react-client");
215
- var import_echo7 = require("@dxos/react-client/echo");
216
- var import_react_ui25 = require("@dxos/react-ui");
217
- var import_react_ui_theme8 = require("@dxos/react-ui-theme");
218
- var import_context2 = require("@dxos/context");
219
- var WAIT_FOR_OBJECT_TIMEOUT = 18e4;
220
- var TOAST_TIMEOUT = 24e4;
221
- var AwaitingObject = ({ id }) => {
222
- const [open, setOpen] = (0, import_react2.useState)(true);
223
- const [waiting, setWaiting] = (0, import_react2.useState)(true);
224
- const [found, setFound] = (0, import_react2.useState)(false);
225
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
226
- const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
227
- const layout = (0, import_app_framework.useLayout)();
228
- const client = (0, import_react_client.useClient)();
229
- const objects = (0, import_echo.useQuery)(client.spaces, import_echo.Filter.all());
230
- (0, import_react2.useEffect)(() => {
231
- if (!id) {
232
- return;
233
- }
234
- const timeout = setTimeout(() => {
235
- setWaiting(false);
236
- }, WAIT_FOR_OBJECT_TIMEOUT);
237
- () => clearTimeout(timeout);
238
- }, [
239
- id
240
- ]);
241
- (0, import_react2.useEffect)(() => {
242
- if (objects.findIndex((object) => (0, import_echo.fullyQualifiedId)(object) === id) > -1) {
243
- setFound(true);
244
- if (layout.active.includes(id)) {
245
- setOpen(false);
246
- }
247
- }
248
- }, [
249
- id,
250
- objects,
251
- layout
252
- ]);
253
- const handleClose = (0, import_react2.useCallback)(async () => dispatch((0, import_app_framework.createIntent)(import_chunk_WDEIFDTX.SpaceAction.WaitForObject, {
254
- id: void 0
255
- })), [
256
- dispatch
257
- ]);
258
- const handleNavigate = (0, import_react2.useCallback)(() => {
259
- void dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.Open, {
260
- part: "main",
261
- subject: [
262
- id
263
- ]
264
- }));
265
- void handleClose();
266
- }, [
267
- id,
268
- handleClose,
269
- dispatch
270
- ]);
271
- return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Root, {
272
- open,
273
- duration: TOAST_TIMEOUT,
274
- onOpenChange: setOpen
275
- }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Body, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Title, {
276
- classNames: "flex items-center gap-2"
277
- }, found ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react.CheckCircle, {
278
- className: (0, import_react_ui_theme.getSize)(5)
279
- }), /* @__PURE__ */ import_react2.default.createElement("span", null, t("found object label"))) : waiting ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react.CircleNotch, {
280
- className: (0, import_react_ui_theme.mx)((0, import_react_ui_theme.getSize)(5), "animate-spin")
281
- }), /* @__PURE__ */ import_react2.default.createElement("span", null, t("waiting for object label"))) : /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react.CircleDashed, {
282
- className: (0, import_react_ui_theme.getSize)(5)
283
- }), /* @__PURE__ */ import_react2.default.createElement("span", null, t("object not found label")))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Description, null, t(found ? "found object description" : waiting ? "waiting for object description" : "object not found description"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Actions, null, found ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Action, {
284
- altText: t("go to object alt"),
285
- asChild: true
286
- }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
287
- variant: "primary",
288
- onClick: handleNavigate
289
- }, t("go to object label"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Close, {
290
- asChild: true
291
- }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
292
- onClick: handleClose
293
- }, t("close label", {
294
- ns: "appkit"
295
- })))) : /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toast.Close, {
296
- asChild: true
297
- }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
298
- onClick: handleClose
299
- }, t(waiting ? "close label" : "confirm label", {
300
- ns: "appkit"
301
- })))));
302
- };
303
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectPanel.tsx";
304
- var useInputSurfaceLookup = (baseData) => {
305
- const pluginManager = (0, import_app_framework3.usePluginManager)();
306
- return (0, import_react4.useCallback)(({ prop, schema, inputProps }) => {
307
- const composedData = {
308
- prop,
309
- schema,
310
- ...baseData
311
- };
312
- if (!(0, import_app_framework3.isSurfaceAvailable)(pluginManager.context, {
313
- role: "form-input",
314
- data: composedData
315
- })) {
316
- return void 0;
317
- }
318
- return /* @__PURE__ */ import_react4.default.createElement(import_app_framework3.Surface, {
319
- role: "form-input",
320
- data: composedData,
321
- ...inputProps
322
- });
323
- }, [
324
- pluginManager,
325
- baseData
326
- ]);
327
- };
328
- var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename, target: initialTarget, name: initialName, defaultSpaceId, resolve, onCreateObject }) => {
329
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
330
- const [typename, setTypename] = (0, import_react4.useState)(initialTypename);
331
- const [target, setTarget] = (0, import_react4.useState)(initialTarget);
332
- const form = forms.find((form2) => (0, import_echo_schema.getTypeAnnotation)(form2.objectSchema)?.typename === typename);
333
- const options = forms.map((form2) => (0, import_echo_schema.getTypeAnnotation)(form2.objectSchema)).filter(import_util.isNonNullable).sort((a, b) => {
334
- const nameA = t("typename label", {
335
- ns: a.typename,
336
- defaultValue: a.typename
337
- });
338
- const nameB = t("typename label", {
339
- ns: b.typename,
340
- defaultValue: b.typename
341
- });
342
- return nameA.localeCompare(nameB);
343
- });
344
- const handleCreateObject = (0, import_react4.useCallback)(async (props) => {
345
- if (!form || !target) {
346
- return;
347
- }
348
- await onCreateObject?.({
349
- form,
350
- target,
351
- data: props
352
- });
353
- }, [
354
- onCreateObject,
355
- form,
356
- target
357
- ]);
358
- const handleSetTypename = (0, import_react4.useCallback)(async (typename2) => {
359
- (0, import_invariant2.invariant)(target, "target is required", {
360
- F: __dxlog_file,
361
- L: 94,
362
- S: void 0,
363
- A: [
364
- "target",
365
- "'target is required'"
366
- ]
367
- });
368
- const form2 = forms.find((form3) => (0, import_echo_schema.getTypeAnnotation)(form3.objectSchema)?.typename === typename2);
369
- if (form2 && !form2.formSchema) {
370
- await onCreateObject?.({
371
- form: form2,
372
- target
373
- });
374
- } else {
375
- setTypename(typename2);
376
- }
377
- }, [
378
- forms,
379
- onCreateObject,
380
- target
381
- ]);
382
- const inputSurfaceLookup = useInputSurfaceLookup({
383
- target
384
- });
385
- return /* @__PURE__ */ import_react4.default.createElement("div", {
386
- role: "form",
387
- className: (0, import_react_ui_theme2.mx)("flex flex-col gap-2", classNames)
388
- }, !form ? /* @__PURE__ */ import_react4.default.createElement(SelectSchema, {
389
- options,
390
- resolve,
391
- onChange: handleSetTypename
392
- }) : !target ? /* @__PURE__ */ import_react4.default.createElement(SelectSpace, {
393
- spaces,
394
- defaultSpaceId,
395
- onChange: setTarget
396
- }) : form.formSchema ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui_form.Form, {
397
- classNames: "!p-0",
398
- autoFocus: true,
399
- values: {
400
- name: initialName
401
- },
402
- schema: form.formSchema,
403
- testId: "create-object-form",
404
- onSave: handleCreateObject,
405
- lookupComponent: inputSurfaceLookup
406
- }) : void 0);
407
- };
408
- var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
409
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
410
- return /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Root, {
411
- label: t("space input label"),
412
- classNames: "flex flex-col grow overflow-hidden"
413
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Input, {
414
- autoFocus: true,
415
- "data-testid": "create-object-form.space-input",
416
- placeholder: t("space input placeholder"),
417
- classNames: "px-1 my-2"
418
- }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Content, {
419
- classNames: "max-bs-[24rem] overflow-auto"
420
- }, spaces.sort((a, b) => {
421
- const aName = (0, import_react_ui3.toLocalizedString)((0, import_chunk_TUZWEPGX.getSpaceDisplayName)(a, {
422
- personal: a.id === defaultSpaceId
423
- }), t);
424
- const bName = (0, import_react_ui3.toLocalizedString)((0, import_chunk_TUZWEPGX.getSpaceDisplayName)(b, {
425
- personal: b.id === defaultSpaceId
426
- }), t);
427
- return aName.localeCompare(bName);
428
- }).map((space) => /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Item, {
429
- key: space.id,
430
- value: (0, import_react_ui3.toLocalizedString)((0, import_chunk_TUZWEPGX.getSpaceDisplayName)(space, {
431
- personal: space.id === defaultSpaceId
432
- }), t),
433
- onSelect: () => onChange(space),
434
- classNames: "flex items-center gap-2"
435
- }, /* @__PURE__ */ import_react4.default.createElement("span", {
436
- className: "grow truncate"
437
- }, (0, import_react_ui3.toLocalizedString)((0, import_chunk_TUZWEPGX.getSpaceDisplayName)(space, {
438
- personal: space.id === defaultSpaceId
439
- }), t))))));
440
- };
441
- var SelectSchema = ({ options, resolve, onChange }) => {
442
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
443
- return /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Root, {
444
- label: t("schema input label"),
445
- classNames: "flex flex-col grow overflow-hidden"
446
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Input, {
447
- autoFocus: true,
448
- "data-testid": "create-object-form.schema-input",
449
- placeholder: t("schema input placeholder"),
450
- classNames: "px-1 my-2"
451
- }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Content, {
452
- classNames: "max-bs-[24rem] overflow-auto"
453
- }, options.map((option) => /* @__PURE__ */ import_react4.default.createElement(import_react_ui_searchlist.SearchList.Item, {
454
- key: option.typename,
455
- value: t("typename label", {
456
- ns: option.typename,
457
- defaultValue: option.typename
458
- }),
459
- onSelect: () => onChange(option.typename),
460
- classNames: "flex items-center gap-2"
461
- }, /* @__PURE__ */ import_react4.default.createElement("span", {
462
- className: "flex gap-2 items-center grow truncate"
463
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
464
- icon: resolve?.(option.typename).icon ?? "ph--placeholder--regular",
465
- size: 5
466
- }), t("typename label", {
467
- ns: option.typename,
468
- defaultValue: option.typename
469
- }))))));
470
- };
471
- var AppGraphBuilder = (0, import_app_framework4.lazy)(() => import("./app-graph-builder-DPY7AUZE.cjs"));
472
- var AppGraphSerializer = (0, import_app_framework4.lazy)(() => import("./app-graph-serializer-JELGJUAY.cjs"));
473
- var IdentityCreated = (0, import_app_framework4.lazy)(() => import("./identity-created-XU4HFV2T.cjs"));
474
- var IntentResolver = (0, import_app_framework4.lazy)(() => import("./intent-resolver-VJ7YV74L.cjs"));
475
- var ReactRoot = (0, import_app_framework4.lazy)(() => import("./react-root-TEL5RW3N.cjs"));
476
- var ReactSurface = (0, import_app_framework4.lazy)(() => import("./react-surface-2H3S5TY5.cjs"));
477
- var Schema = (0, import_app_framework4.lazy)(() => import("./schema-PPJ5BZ3A.cjs"));
478
- var Tools = (0, import_app_framework4.lazy)(() => import("./schema-tools-BLIMOZYY.cjs"));
479
- var SpaceSettings = (0, import_app_framework4.lazy)(() => import("./settings-WVFP2UEP.cjs"));
480
- var SpaceState = (0, import_app_framework4.lazy)(() => import("./state-5KX6WBJH.cjs"));
481
- var SpacesReady = (0, import_app_framework4.lazy)(() => import("./spaces-ready-7DNZSUOG.cjs"));
482
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx";
483
- var CREATE_OBJECT_DIALOG = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/CreateObjectDialog`;
484
- var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavigate }) => {
485
- const closeRef = (0, import_react3.useRef)(null);
486
- const manager = (0, import_app_framework2.usePluginManager)();
487
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
488
- const client = (0, import_react_client2.useClient)();
489
- const spaces = (0, import_echo2.useSpaces)();
490
- const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
491
- const forms = (0, import_app_framework2.useCapabilities)(import_chunk_IKIDS6XF.SpaceCapabilities.ObjectForm);
492
- const resolve = (0, import_react3.useCallback)((typename2) => manager.context.requestCapabilities(import_app_framework2.Capabilities.Metadata).find(({ id }) => id === typename2)?.metadata ?? {}, [
493
- manager
494
- ]);
495
- const handleCreateObject = (0, import_react3.useCallback)(async ({ form, target: target2, data = {} }) => {
496
- if (!target2) {
497
- return;
498
- }
499
- closeRef.current?.click();
500
- const space = (0, import_echo2.isSpace)(target2) ? target2 : (0, import_echo2.getSpace)(target2);
501
- (0, import_invariant.invariant)(space, "Missing space", {
502
- F: __dxlog_file2,
503
- L: 72,
504
- S: void 0,
505
- A: [
506
- "space",
507
- "'Missing space'"
508
- ]
509
- });
510
- const result = await dispatch(form.getIntent(data, {
511
- space
512
- }));
513
- const object = result.data?.object;
514
- if ((0, import_echo2.isReactiveObject)(object)) {
515
- const addObjectIntent = (0, import_app_framework2.createIntent)(import_chunk_WDEIFDTX.SpaceAction.AddObject, {
516
- target: target2,
517
- object,
518
- hidden: form.hidden
519
- });
520
- const shouldNavigate = _shouldNavigate ?? (() => true);
521
- if (shouldNavigate(object)) {
522
- await dispatch((0, import_effect.pipe)(addObjectIntent, (0, import_app_framework2.chain)(import_app_framework2.LayoutAction.Open, {
523
- part: "main"
524
- })));
525
- } else {
526
- await dispatch(addObjectIntent);
527
- }
528
- }
529
- }, [
530
- dispatch,
531
- resolve
532
- ]);
533
- return (
534
- // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
535
- // Consider factoring it out to the tabs package.
536
- /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Dialog.Content, {
537
- classNames: "p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden"
538
- }, /* @__PURE__ */ import_react3.default.createElement("div", {
539
- role: "none",
540
- className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
541
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Dialog.Title, null, t("create object dialog title")), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Dialog.Close, {
542
- asChild: true
543
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
544
- ref: closeRef,
545
- density: "fine",
546
- variant: "ghost",
547
- autoFocus: true
548
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
549
- icon: "ph--x--regular",
550
- size: 4
551
- })))), /* @__PURE__ */ import_react3.default.createElement(CreateObjectPanel, {
552
- classNames: "p-4",
553
- forms,
554
- spaces,
555
- target,
556
- typename,
557
- name,
558
- defaultSpaceId: client.spaces.default.id,
559
- resolve,
560
- onCreateObject: handleCreateObject
561
- }))
562
- );
563
- };
564
- var CREATE_SPACE_DIALOG = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/CreateSpaceDialog`;
565
- var initialValues = {
566
- edgeReplication: true
567
- };
568
- var CreateSpaceDialog = () => {
569
- const closeRef = (0, import_react5.useRef)(null);
570
- const { t } = (0, import_react_ui4.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
571
- const { dispatch } = (0, import_app_framework5.useIntentDispatcher)();
572
- const handleCreateSpace = (0, import_react5.useCallback)(async (data) => {
573
- const program = import_effect2.Effect.gen(function* () {
574
- const { space } = yield* dispatch((0, import_app_framework5.createIntent)(import_chunk_WDEIFDTX.SpaceAction.Create, data));
575
- yield* dispatch((0, import_app_framework5.createIntent)(import_app_framework5.LayoutAction.SwitchWorkspace, {
576
- part: "workspace",
577
- subject: space.id
578
- }));
579
- yield* dispatch((0, import_app_framework5.createIntent)(import_chunk_WDEIFDTX.SpaceAction.OpenCreateObject, {
580
- target: space
581
- }));
582
- });
583
- await import_effect2.Effect.runPromise(program);
584
- }, [
585
- dispatch
586
- ]);
587
- return (
588
- // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
589
- // Consider factoring it out to the tabs package.
590
- /* @__PURE__ */ import_react5.default.createElement(import_react_ui4.Dialog.Content, {
591
- classNames: "p-0 bs-content min-bs-[16rem] max-bs-full md:max-is-[32rem] overflow-hidden"
592
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
593
- role: "none",
594
- className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
595
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui4.Dialog.Title, null, t("create space dialog title")), /* @__PURE__ */ import_react5.default.createElement(import_react_ui4.Dialog.Close, {
596
- asChild: true
597
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui4.Button, {
598
- ref: closeRef,
599
- density: "fine",
600
- variant: "ghost",
601
- autoFocus: true
602
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui4.Icon, {
603
- icon: "ph--x--regular",
604
- size: 4
605
- })))), /* @__PURE__ */ import_react5.default.createElement("div", {
606
- className: "p-4"
607
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_form2.Form, {
608
- testId: "create-space-form",
609
- classNames: "!p-0",
610
- autoFocus: true,
611
- values: initialValues,
612
- schema: import_chunk_WDEIFDTX.SpaceForm,
613
- onSave: handleCreateSpace
614
- })))
615
- );
616
- };
617
- var CollectionMain = ({ collection }) => {
618
- const { t } = (0, import_react_ui5.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
619
- return /* @__PURE__ */ import_react6.default.createElement("div", {
620
- role: "none",
621
- className: (0, import_react_ui_theme3.mx)(import_react_ui_theme3.baseSurface, "min-bs-screen is-full flex items-center justify-center p-8"),
622
- "data-testid": "composer.firstRunMessage"
623
- }, /* @__PURE__ */ import_react6.default.createElement("p", {
624
- role: "alert",
625
- className: (0, import_react_ui_theme3.mx)(import_react_ui_theme3.descriptionText, "border border-dashed border-neutral-400/50 rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words")
626
- }, collection.name ?? t("unnamed collection label")));
627
- };
628
- var CollectionSection = ({ collection }) => {
629
- const { t } = (0, import_react_ui6.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
630
- return /* @__PURE__ */ import_react7.default.createElement("div", {
631
- className: "min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center"
632
- }, /* @__PURE__ */ import_react7.default.createElement("span", {
633
- className: "truncate"
634
- }, collection.name ?? t("unnamed collection label")));
635
- };
636
- var JOIN_DIALOG = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/JoinDialog`;
637
- var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
638
- const { dispatchPromise: dispatch } = (0, import_app_framework6.useIntentDispatcher)();
639
- const client = (0, import_react_client3.useClient)();
640
- const { graph } = (0, import_app_framework6.useAppGraph)();
641
- const { t } = (0, import_react_ui7.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
642
- const handleDone = (0, import_react8.useCallback)(async (result) => {
643
- const spaceKey = result?.spaceKey;
644
- if (!spaceKey) {
645
- return;
646
- }
647
- await Promise.all([
648
- dispatch((0, import_app_framework6.createIntent)(import_app_framework6.LayoutAction.AddToast, {
649
- part: "toast",
650
- subject: {
651
- id: `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/join-success`,
652
- duration: 5e3,
653
- title: [
654
- "join success label",
655
- {
656
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
657
- }
658
- ],
659
- closeLabel: [
660
- "dismiss label",
661
- {
662
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
663
- }
664
- ]
665
- }
666
- })),
667
- dispatch((0, import_app_framework6.createIntent)(import_app_framework6.LayoutAction.UpdateDialog, {
668
- part: "dialog",
669
- options: {
670
- state: false
671
- }
672
- }))
673
- ]);
674
- let space = client.spaces.get(spaceKey);
675
- if (!space) {
676
- const trigger = new import_async.Trigger();
677
- client.spaces.subscribe(() => {
678
- const space2 = client.spaces.get(spaceKey);
679
- if (space2) {
680
- trigger.wake(space2);
681
- }
682
- });
683
- space = await trigger.wait();
684
- }
685
- await dispatch((0, import_app_framework6.createIntent)(import_app_framework6.LayoutAction.SwitchWorkspace, {
686
- part: "workspace",
687
- subject: space.id
688
- }));
689
- const target = result?.target || (navigableCollections ? space?.id : void 0);
690
- if (target) {
691
- await graph.waitForPath({
692
- target
693
- }).catch(() => {
694
- });
695
- await Promise.all([
696
- dispatch((0, import_app_framework6.createIntent)(import_app_framework6.LayoutAction.Open, {
697
- part: "main",
698
- subject: [
699
- target
700
- ]
701
- })),
702
- dispatch((0, import_app_framework6.createIntent)(import_app_framework6.LayoutAction.Expose, {
703
- part: "navigation",
704
- subject: target
705
- }))
706
- ]);
707
- }
708
- await onDone?.(result);
709
- if (space) {
710
- await dispatch((0, import_app_framework6.createIntent)(import_types.ObservabilityAction.SendEvent, {
711
- name: "space.join",
712
- properties: {
713
- spaceId: space.id
714
- }
715
- }));
716
- }
717
- }, [
718
- dispatch,
719
- client,
720
- graph
721
- ]);
722
- return /* @__PURE__ */ import_react8.default.createElement(import_react_ui7.Dialog.Content, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui7.Dialog.Title, {
723
- classNames: "sr-only"
724
- }, t("join space label", {
725
- ns: "os"
726
- })), /* @__PURE__ */ import_react8.default.createElement(import_react9.JoinPanel, {
727
- ...props,
728
- exitActionParent: /* @__PURE__ */ import_react8.default.createElement(import_react_ui7.Dialog.Close, {
729
- asChild: true
730
- }),
731
- doneActionParent: /* @__PURE__ */ import_react8.default.createElement(import_react_ui7.Dialog.Close, {
732
- asChild: true
733
- }),
734
- onDone: handleDone
735
- }));
736
- };
737
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/MembersContainer.tsx";
738
- var activeActionKey = "dxos:react-shell/space-manager/active-action";
739
- var handleInvitationEvent = (invitation, subscription) => {
740
- const invitationCode = import_invitations.InvitationEncoder.encode(invitation);
741
- if (invitation.state === import_invitations.Invitation.State.CONNECTING) {
742
- import_log.log.info(JSON.stringify({
743
- invitationCode,
744
- authCode: invitation.authCode
745
- }), void 0, {
746
- F: __dxlog_file3,
747
- L: 38,
748
- S: void 0,
749
- C: (f, a) => f(...a)
750
- });
751
- subscription.unsubscribe();
752
- }
753
- };
754
- var MembersContainer = ({ space, createInvitationUrl }) => {
755
- const { t } = (0, import_react_ui8.useTranslation)("os");
756
- const config = (0, import_react_client4.useConfig)();
757
- const invitations = (0, import_echo3.useSpaceInvitations)(space.key);
758
- const visibleInvitations = invitations?.filter((invitation) => ![
759
- import_invitations.Invitation.State.CANCELLED
760
- ].includes(invitation.get().state));
761
- const [activeAction, setInternalActiveAction] = (0, import_react11.useState)(localStorage.getItem(activeActionKey) ?? "inviteMany");
762
- const setActiveAction = (nextAction) => {
763
- setInternalActiveAction(nextAction);
764
- localStorage.setItem(activeActionKey, nextAction);
765
- };
766
- const target = space.properties[import_chunk_WDEIFDTX.CollectionType.typename]?.target?.objects[0]?.target;
767
- const inviteActions = (0, import_react11.useMemo)(() => ({
768
- inviteOne: {
769
- label: t("invite one label"),
770
- description: t("invite one description"),
771
- icon: () => /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Icon, {
772
- icon: "ph--user-plus--regular",
773
- size: 5
774
- }),
775
- testId: "membersContainer.inviteOne",
776
- onClick: () => {
777
- const invitation = space.share?.({
778
- type: import_invitations.Invitation.Type.INTERACTIVE,
779
- authMethod: import_invitations.Invitation.AuthMethod.SHARED_SECRET,
780
- multiUse: false,
781
- target: target && (0, import_echo3.fullyQualifiedId)(target)
782
- });
783
- if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
784
- const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
785
- }
786
- }
787
- },
788
- inviteMany: {
789
- label: t("invite many label"),
790
- description: t("invite many description"),
791
- icon: () => /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Icon, {
792
- icon: "ph--users-three--regular",
793
- size: 5
794
- }),
795
- testId: "membersContainer.inviteMany",
796
- onClick: () => {
797
- const invitation = space.share?.({
798
- type: import_invitations.Invitation.Type.DELEGATED,
799
- authMethod: import_invitations.Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
800
- multiUse: true,
801
- target: target && (0, import_echo3.fullyQualifiedId)(target)
802
- });
803
- if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
804
- const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
805
- }
806
- }
807
- }
808
- }), [
809
- t,
810
- space,
811
- target
812
- ]);
813
- const [selectedInvitation, setSelectedInvitation] = (0, import_react11.useState)(null);
814
- const handleSend = (event) => {
815
- setSelectedInvitation(event.invitation);
816
- };
817
- const handleBack = () => {
818
- setSelectedInvitation(null);
819
- };
820
- return /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Clipboard.Provider, null, /* @__PURE__ */ import_react11.default.createElement(import_react_ui_stack.StackItem.Content, {
821
- classNames: "p-2 block overflow-y-auto"
822
- }, /* @__PURE__ */ import_react11.default.createElement(import_react_ui_form3.ControlSection, {
823
- title: t("members verbose label", {
824
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
825
- }),
826
- description: t("members description", {
827
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
828
- })
829
- }, /* @__PURE__ */ import_react11.default.createElement(import_react_ui_form3.ControlFrame, null, /* @__PURE__ */ import_react11.default.createElement(import_react_ui_form3.ControlFrameItem, {
830
- title: t("members label", {
831
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
832
- })
833
- }, /* @__PURE__ */ import_react11.default.createElement(import_react12.SpaceMemberList, {
834
- spaceKey: space.key,
835
- includeSelf: true
836
- })), /* @__PURE__ */ import_react11.default.createElement(import_react_ui_form3.ControlFrameItem, {
837
- title: t("invitations label", {
838
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
839
- })
840
- }, selectedInvitation && /* @__PURE__ */ import_react11.default.createElement(InvitationSection, {
841
- ...selectedInvitation,
842
- onBack: handleBack
843
- }), !selectedInvitation && /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("p", {
844
- className: "text-description mbe-2"
845
- }, t("space invitation description", {
846
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
847
- })), /* @__PURE__ */ import_react11.default.createElement(import_react12.InvitationList, {
848
- className: "mb-2",
849
- send: handleSend,
850
- invitations: visibleInvitations ?? [],
851
- onClickRemove: (invitation) => invitation.cancel(),
852
- createInvitationUrl
853
- }), /* @__PURE__ */ import_react11.default.createElement(import_react12.BifurcatedAction, {
854
- actions: inviteActions,
855
- activeAction,
856
- onChangeActiveAction: setActiveAction,
857
- "data-testid": "membersContainer.createInvitation"
858
- })))))));
859
- };
860
- var InvitationSection = ({ state = import_invitations.Invitation.State.INIT, authCode, invitationId = "never", url = "never", onBack }) => {
861
- const activeView = state < 0 ? "init" : state >= import_invitations.Invitation.State.CANCELLED ? "complete" : state >= import_invitations.Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
862
- return /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.Root, {
863
- activeView
864
- }, /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.Views, null, /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.View, {
865
- id: "init"
866
- }), /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.View, {
867
- id: "complete"
868
- }, /* @__PURE__ */ import_react11.default.createElement(InvitationComplete, {
869
- statusValue: state
870
- })), /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.View, {
871
- id: "auth-code"
872
- }, /* @__PURE__ */ import_react11.default.createElement(InvitationAuthCode, {
873
- id: invitationId,
874
- code: authCode ?? "never",
875
- onCancel: onBack
876
- })), /* @__PURE__ */ import_react11.default.createElement(import_react12.Viewport.View, {
877
- id: "qr-code"
878
- }, /* @__PURE__ */ import_react11.default.createElement(InvitationQR, {
879
- id: invitationId,
880
- url,
881
- onCancel: onBack
882
- }))));
883
- };
884
- var InvitationQR = ({ id, url, onCancel }) => {
885
- const { t } = (0, import_react_ui8.useTranslation)("os");
886
- const qrLabel = (0, import_react_ui8.useId)("members-container__qr-code");
887
- const emoji = (0, import_util2.hexToEmoji)(id);
888
- return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("p", {
889
- className: "text-description"
890
- }, t("qr code description", {
891
- ns: import_chunk_6P2DB4QQ.SPACE_PLUGIN
892
- })), /* @__PURE__ */ import_react11.default.createElement("div", {
893
- role: "group",
894
- className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
895
- }, /* @__PURE__ */ import_react11.default.createElement("div", {
896
- role: "none",
897
- className: "is-full aspect-square relative text-description"
898
- }, /* @__PURE__ */ import_react11.default.createElement(import_react_qr_rounded.QR, {
899
- rounding: 100,
900
- backgroundColor: "transparent",
901
- color: "currentColor",
902
- "aria-labelledby": qrLabel,
903
- errorCorrectionLevel: "Q",
904
- cutout: true
905
- }, url ?? "never"), /* @__PURE__ */ import_react11.default.createElement(import_react12.Centered, null, /* @__PURE__ */ import_react11.default.createElement(import_react12.Emoji, {
906
- text: emoji
907
- }))), /* @__PURE__ */ import_react11.default.createElement("span", {
908
- id: qrLabel,
909
- className: "sr-only"
910
- }, t("qr label")), /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Clipboard.Button, {
911
- value: url ?? "never"
912
- })), /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Button, {
913
- variant: "ghost",
914
- onClick: onCancel
915
- }, t("cancel label")));
916
- };
917
- var InvitationAuthCode = ({ id, code, onCancel }) => {
918
- const { t } = (0, import_react_ui8.useTranslation)("os");
919
- const emoji = (0, import_util2.hexToEmoji)(id);
920
- return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("p", {
921
- className: "text-description"
922
- }, t("auth other device emoji message")), emoji && /* @__PURE__ */ import_react11.default.createElement(import_react12.Emoji, {
923
- text: emoji,
924
- className: "mli-auto mlb-2 text-center"
925
- }), /* @__PURE__ */ import_react11.default.createElement("p", {
926
- className: "text-description"
927
- }, t("auth code message")), /* @__PURE__ */ import_react11.default.createElement(import_react12.AuthCode, {
928
- code,
929
- large: true,
930
- classNames: "mli-auto mlb-2 text-center grow"
931
- }), /* @__PURE__ */ import_react11.default.createElement(import_react_ui8.Button, {
932
- variant: "ghost",
933
- onClick: onCancel
934
- }, t("cancel label")));
935
- };
936
- var InvitationComplete = ({ statusValue }) => {
937
- return statusValue > 0 ? /* @__PURE__ */ import_react11.default.createElement(import_react10.Check, {
938
- className: (0, import_react_ui_theme4.mx)("m-1.5", (0, import_react_ui_theme4.getSize)(6))
939
- }) : /* @__PURE__ */ import_react11.default.createElement(import_react10.X, {
940
- className: (0, import_react_ui_theme4.mx)("m-1.5", (0, import_react_ui_theme4.getSize)(6))
941
- });
942
- };
943
- var MenuFooter = ({ object }) => {
944
- const { t } = (0, import_react_ui9.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
945
- const client = (0, import_react_client5.useClient)();
946
- const space = (0, import_echo4.getSpace)(object);
947
- const spaceName = space ? (0, import_chunk_TUZWEPGX.getSpaceDisplayName)(space, {
948
- personal: client.spaces.default === space
949
- }) : "";
950
- return space ? /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement(import_react_ui9.DropdownMenu.Separator, null), /* @__PURE__ */ import_react14.default.createElement(import_react_ui9.DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ import_react14.default.createElement("dl", {
951
- className: "pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2"
952
- }, /* @__PURE__ */ import_react14.default.createElement("dt", {
953
- className: "uppercase text-[.75em] tracking-wide font-medium mbs-px self-start"
954
- }, t("location label")), /* @__PURE__ */ import_react14.default.createElement("dd", {
955
- className: "line-clamp-3"
956
- }, /* @__PURE__ */ import_react14.default.createElement(import_react13.Planet, {
957
- className: "inline-block mie-1"
958
- }), (0, import_react_ui9.toLocalizedString)(spaceName, t)))) : null;
959
- };
960
- var ForeignKeys = ({ keys, onDelete }) => {
961
- return /* @__PURE__ */ import_react17.default.createElement(import_react_ui12.List, {
962
- classNames: "flex flex-col gap-2"
963
- }, keys.map((key) => /* @__PURE__ */ import_react17.default.createElement(KeyItem, {
964
- key: key.id,
965
- forignKey: key,
966
- onDelete
967
- })));
968
- };
969
- var KeyItem = ({ forignKey, onDelete }) => {
970
- const { t } = (0, import_react_ui12.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
971
- const handleDelete = (0, import_react17.useCallback)(() => {
972
- onDelete?.(forignKey);
973
- }, [
974
- forignKey,
975
- onDelete
976
- ]);
977
- return /* @__PURE__ */ import_react17.default.createElement(import_react_ui12.ListItem.Root, {
978
- classNames: "px-2"
979
- }, /* @__PURE__ */ import_react17.default.createElement(import_react_ui12.ListItem.Heading, {
980
- classNames: "flex flex-col grow truncate"
981
- }, /* @__PURE__ */ import_react17.default.createElement("div", null, forignKey.source), /* @__PURE__ */ import_react17.default.createElement("div", {
982
- className: "text-description text-sm truncate"
983
- }, forignKey.id)), /* @__PURE__ */ import_react17.default.createElement(import_react_ui12.ListItem.Endcap, null, /* @__PURE__ */ import_react17.default.createElement(import_react_ui12.IconButton, {
984
- iconOnly: true,
985
- icon: "ph--x--regular",
986
- variant: "ghost",
987
- label: t("delete key"),
988
- onClick: handleDelete
989
- })));
990
- };
991
- var initialValues2 = {
992
- source: "",
993
- id: ""
994
- };
995
- var AdvancedObjectSettings = ({ object }) => {
996
- const { t } = (0, import_react_ui11.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
997
- const [adding, setAdding] = (0, import_react16.useState)(false);
998
- const keys = (0, import_echo5.getMeta)(object).keys;
999
- const handleNew = (0, import_react16.useCallback)(() => setAdding(true), []);
1000
- const handleCancel = (0, import_react16.useCallback)(() => setAdding(false), []);
1001
- const handleSave = (0, import_react16.useCallback)((key) => {
1002
- const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
1003
- if (index === -1) {
1004
- keys.push(key);
1005
- }
1006
- setAdding(false);
1007
- }, [
1008
- keys
1009
- ]);
1010
- const handleDelete = (0, import_react16.useCallback)((key) => {
1011
- const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
1012
- if (index !== -1) {
1013
- keys.splice(index, 1);
1014
- }
1015
- }, [
1016
- keys
1017
- ]);
1018
- return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement("div", {
1019
- className: "p-2 flex flex-col gap-4"
1020
- }, /* @__PURE__ */ import_react16.default.createElement("h2", null, t("advanced settings label")), /* @__PURE__ */ import_react16.default.createElement("div", {
1021
- className: "flex items-center"
1022
- }, /* @__PURE__ */ import_react16.default.createElement("h3", {
1023
- className: "text-sm font-semibold"
1024
- }, t("foreign keys")), /* @__PURE__ */ import_react16.default.createElement("div", {
1025
- className: "grow"
1026
- }), /* @__PURE__ */ import_react16.default.createElement(import_react_ui11.IconButton, {
1027
- classNames: adding && "invisible",
1028
- icon: "ph--plus--regular",
1029
- label: t("add key"),
1030
- onClick: handleNew
1031
- })), !adding && /* @__PURE__ */ import_react16.default.createElement(ForeignKeys, {
1032
- keys,
1033
- onDelete: handleDelete
1034
- })), adding && /* @__PURE__ */ import_react16.default.createElement(import_react_ui_form4.Form, {
1035
- schema: import_echo_schema2.ForeignKeySchema,
1036
- values: initialValues2,
1037
- onSave: handleSave,
1038
- onCancel: handleCancel
1039
- }));
1040
- };
1041
- var BaseObjectSettings = ({ classNames, children, object }) => {
1042
- const { t } = (0, import_react_ui13.useTranslation)(import_chunk_6P2DB4QQ.meta.id);
1043
- const inputRef = (0, import_react18.useRef)(null);
1044
- return /* @__PURE__ */ import_react18.default.createElement("form", {
1045
- className: (0, import_react_ui_theme5.mx)("flex flex-col p-2 gap-2", classNames)
1046
- }, /* @__PURE__ */ import_react18.default.createElement(import_react_ui13.Input.Root, null, /* @__PURE__ */ import_react18.default.createElement(import_react_ui13.Input.Label, null, t("name label")), /* @__PURE__ */ import_react18.default.createElement(import_react_ui13.Input.TextInput, {
1047
- ref: inputRef,
1048
- placeholder: t("name placeholder"),
1049
- value: object.name ?? "",
1050
- onChange: (event) => {
1051
- object.name = event.target.value;
1052
- },
1053
- onKeyDown: (event) => {
1054
- if (event.key === "Enter") {
1055
- inputRef.current?.blur();
1056
- }
1057
- }
1058
- })), children);
1059
- };
1060
- var ObjectSettingsContainer = ({ object, role }) => {
1061
- const data = (0, import_react15.useMemo)(() => ({
1062
- subject: object
1063
- }), [
1064
- object
1065
- ]);
1066
- return /* @__PURE__ */ import_react15.default.createElement(import_react_ui10.Clipboard.Provider, null, /* @__PURE__ */ import_react15.default.createElement(import_react_ui_stack2.StackItem.Content, {
1067
- toolbar: false,
1068
- role
1069
- }, /* @__PURE__ */ import_react15.default.createElement("div", {
1070
- className: "flex flex-col overflow-y-auto divide-y divide-separator"
1071
- }, /* @__PURE__ */ import_react15.default.createElement(BaseObjectSettings, {
1072
- object
1073
- }, /* @__PURE__ */ import_react15.default.createElement(import_app_framework7.Surface, {
1074
- role: "base-object-settings",
1075
- data
1076
- })), /* @__PURE__ */ import_react15.default.createElement(import_app_framework7.Surface, {
1077
- role: "object-settings",
1078
- data
1079
- }), /* @__PURE__ */ import_react15.default.createElement(AdvancedObjectSettings, {
1080
- object
1081
- }))));
1082
- };
1083
- var Status;
1084
- (function(Status2) {
1085
- Status2[Status2["PERSISTED_LOCALLY"] = 0] = "PERSISTED_LOCALLY";
1086
- Status2[Status2["PENDING"] = 1] = "PENDING";
1087
- Status2[Status2["ERROR"] = 2] = "ERROR";
1088
- })(Status || (Status = {}));
1089
- var PersistenceStatus = ({ db }) => {
1090
- const { t } = (0, import_react_ui14.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1091
- const [displayMessage, setDisplayMessage] = (0, import_react20.useState)(false);
1092
- const [status, naturalSetStatus] = (0, import_react20.useState)(0);
1093
- const [prevStatus, setPrevStatus] = (0, import_react20.useState)(0);
1094
- const _setStatus = (0, import_async2.debounce)(naturalSetStatus, 500);
1095
- (0, import_react20.useEffect)(() => {
1096
- setPrevStatus(status);
1097
- if (prevStatus !== status && status === 0) {
1098
- setDisplayMessage(true);
1099
- const timeout = setTimeout(() => setDisplayMessage(false), 5e3);
1100
- return () => clearTimeout(timeout);
1101
- }
1102
- }, [
1103
- status
1104
- ]);
1105
- switch (status) {
1106
- case 2:
1107
- return /* @__PURE__ */ import_react20.default.createElement("div", {
1108
- className: "flex items-center"
1109
- }, /* @__PURE__ */ import_react20.default.createElement(import_react19.Warning, {
1110
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
1111
- }), /* @__PURE__ */ import_react20.default.createElement("span", {
1112
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.warningText)
1113
- }, t("persistence error label")));
1114
- case 1:
1115
- return /* @__PURE__ */ import_react20.default.createElement("div", {
1116
- className: "flex items-center"
1117
- }, /* @__PURE__ */ import_react20.default.createElement(import_react19.ArrowsCounterClockwise, {
1118
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
1119
- }), /* @__PURE__ */ import_react20.default.createElement("span", {
1120
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.staticPlaceholderText)
1121
- }, t("persistence pending label")));
1122
- case 0:
1123
- default:
1124
- return /* @__PURE__ */ import_react20.default.createElement(import_react_ui14.Tooltip.Root, {
1125
- delayDuration: 400
1126
- }, /* @__PURE__ */ import_react20.default.createElement(import_react_ui14.Tooltip.Trigger, {
1127
- role: "status",
1128
- className: "flex items-center"
1129
- }, /* @__PURE__ */ import_react20.default.createElement(import_react19.CheckCircle, {
1130
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
1131
- }), displayMessage && /* @__PURE__ */ import_react20.default.createElement("span", {
1132
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.staticPlaceholderText)
1133
- }, t("persisted locally label"))), /* @__PURE__ */ import_react20.default.createElement(import_react_ui14.Tooltip.Portal, null, /* @__PURE__ */ import_react20.default.createElement(import_react_ui14.Tooltip.Content, null, t("persisted locally message"), /* @__PURE__ */ import_react20.default.createElement(import_react_ui14.Tooltip.Arrow, null))));
1134
- }
1135
- };
1136
- var POPOVER_ADD_SPACE = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/PopoverRenameSpace`;
1137
- var PopoverAddSpace = () => {
1138
- const { t } = (0, import_react_ui15.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1139
- const { dispatchPromise: dispatch } = (0, import_app_framework8.useIntentDispatcher)();
1140
- return /* @__PURE__ */ import_react21.default.createElement("div", {
1141
- role: "none",
1142
- className: "grid grid-cols-1 gap-1 [&>button]:justify-start"
1143
- }, /* @__PURE__ */ import_react21.default.createElement(import_react_ui15.IconButton, {
1144
- variant: "ghost",
1145
- label: t("create space label"),
1146
- icon: "ph--plus--regular",
1147
- onClick: () => {
1148
- void dispatch((0, import_app_framework8.createIntent)(import_chunk_WDEIFDTX.SpaceAction.OpenCreateSpace));
1149
- void dispatch((0, import_app_framework8.createIntent)(import_app_framework8.LayoutAction.UpdatePopover, {
1150
- part: "popover",
1151
- options: {
1152
- anchorId: "",
1153
- state: false
1154
- }
1155
- }));
1156
- },
1157
- "data-testid": "spacePlugin.createSpace"
1158
- }), /* @__PURE__ */ import_react21.default.createElement(import_react_ui15.IconButton, {
1159
- variant: "ghost",
1160
- label: t("join space label"),
1161
- icon: "ph--sign-in--regular",
1162
- onClick: () => {
1163
- void dispatch((0, import_app_framework8.createIntent)(import_chunk_WDEIFDTX.SpaceAction.Join));
1164
- void dispatch((0, import_app_framework8.createIntent)(import_app_framework8.LayoutAction.UpdatePopover, {
1165
- part: "popover",
1166
- options: {
1167
- anchorId: "",
1168
- state: false
1169
- }
1170
- }));
1171
- },
1172
- "data-testid": "spacePlugin.joinSpace"
1173
- }));
1174
- };
1175
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
1176
- var POPOVER_RENAME_OBJECT = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/PopoverRenameObject`;
1177
- var PopoverRenameObject = ({ object: obj }) => {
1178
- const { t } = (0, import_react_ui16.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1179
- const doneButton = (0, import_react22.useRef)(null);
1180
- const object = obj;
1181
- const [name, setName] = (0, import_react22.useState)(object.name || object.title || "");
1182
- const handleDone = (0, import_react22.useCallback)(() => {
1183
- try {
1184
- object.name = name;
1185
- } catch {
1186
- try {
1187
- object.title = name;
1188
- } catch (err) {
1189
- import_log2.log.error("Failed to rename object", {
1190
- err
1191
- }, {
1192
- F: __dxlog_file4,
1193
- L: 30,
1194
- S: void 0,
1195
- C: (f, a) => f(...a)
1196
- });
1197
- }
1198
- }
1199
- }, [
1200
- object,
1201
- name
1202
- ]);
1203
- return /* @__PURE__ */ import_react22.default.createElement("div", {
1204
- role: "none",
1205
- className: "p-1 flex gap-2"
1206
- }, /* @__PURE__ */ import_react22.default.createElement("div", {
1207
- role: "none",
1208
- className: "flex-1"
1209
- }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui16.Input.Root, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui16.Input.Label, {
1210
- srOnly: true
1211
- }, t("object name label")), /* @__PURE__ */ import_react22.default.createElement(import_react_ui16.Input.TextInput, {
1212
- placeholder: t("object placeholder"),
1213
- value: name,
1214
- "data-testid": "spacePlugin.renameObject.input",
1215
- onChange: ({ target: { value } }) => setName(value),
1216
- onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
1217
- }))), /* @__PURE__ */ import_react22.default.createElement(import_react_ui16.Popover.Close, {
1218
- asChild: true
1219
- }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui16.Button, {
1220
- ref: doneButton,
1221
- classNames: "self-stretch",
1222
- onClick: handleDone
1223
- }, t("done label", {
1224
- ns: "os"
1225
- }))));
1226
- };
1227
- var POPOVER_RENAME_SPACE = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/PopoverRenameSpace`;
1228
- var PopoverRenameSpace = ({ space }) => {
1229
- const { t } = (0, import_react_ui17.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1230
- const doneButton = (0, import_react23.useRef)(null);
1231
- const [name, setName] = (0, import_react23.useState)(space.properties.name ?? "");
1232
- const handleDone = (0, import_react23.useCallback)(() => {
1233
- space.properties.name = name;
1234
- }, [
1235
- space,
1236
- name
1237
- ]);
1238
- return /* @__PURE__ */ import_react23.default.createElement("div", {
1239
- role: "none",
1240
- className: "p-1 flex gap-2"
1241
- }, /* @__PURE__ */ import_react23.default.createElement("div", {
1242
- role: "none",
1243
- className: "flex-1"
1244
- }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui17.Input.Root, null, /* @__PURE__ */ import_react23.default.createElement(import_react_ui17.Input.Label, {
1245
- srOnly: true
1246
- }, t("space name label")), /* @__PURE__ */ import_react23.default.createElement(import_react_ui17.Input.TextInput, {
1247
- defaultValue: space.properties.name ?? "",
1248
- placeholder: t("unnamed space label"),
1249
- onChange: ({ target: { value } }) => setName(value),
1250
- // TODO(wittjosiah): Ideally this should access the popover context to close the popover.
1251
- // Currently this is not possible because Radix does not expose the popover context.
1252
- onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
1253
- }))), /* @__PURE__ */ import_react23.default.createElement(import_react_ui17.Popover.Close, {
1254
- asChild: true
1255
- }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui17.Button, {
1256
- ref: doneButton,
1257
- classNames: "self-stretch",
1258
- onClick: handleDone
1259
- }, t("done label", {
1260
- ns: "os"
1261
- }))));
1262
- };
1263
- var ShareSpaceButton = ({ space }) => {
1264
- const { dispatchPromise: dispatch } = (0, import_app_framework9.useIntentDispatcher)();
1265
- return /* @__PURE__ */ import_react24.default.createElement(ShareSpaceButtonImpl, {
1266
- onClick: () => dispatch((0, import_app_framework9.createIntent)(import_chunk_WDEIFDTX.SpaceAction.Share, {
1267
- space
1268
- }))
1269
- });
1270
- };
1271
- var ShareSpaceButtonImpl = ({ onClick }) => {
1272
- const { t } = (0, import_react_ui18.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1273
- return /* @__PURE__ */ import_react24.default.createElement(import_react_ui18.IconButton, {
1274
- "data-testid": "spacePlugin.shareSpaceButton",
1275
- icon: "ph--users--regular",
1276
- label: t("share space label"),
1277
- onClick
1278
- });
1279
- };
1280
- var usePath = (graph, id, timeout) => {
1281
- const [pathState, setPathState] = (0, import_react26.useState)(id ? graph.getPath({
1282
- target: id
1283
- }) : void 0);
1284
- (0, import_react26.useEffect)(() => {
1285
- if (!id && pathState) {
1286
- setPathState(void 0);
1287
- }
1288
- if (pathState?.at(-1) === id || !id) {
1289
- return;
1290
- }
1291
- const frame = requestAnimationFrame(async () => {
1292
- try {
1293
- const path = await graph.waitForPath({
1294
- target: id
1295
- }, {
1296
- timeout
1297
- });
1298
- if (path) {
1299
- setPathState(path);
1300
- }
1301
- } catch {
1302
- }
1303
- });
1304
- return () => cancelAnimationFrame(frame);
1305
- }, [
1306
- graph,
1307
- id,
1308
- timeout,
1309
- pathState
1310
- ]);
1311
- return pathState;
1312
- };
1313
- var REFRESH_INTERVAL = 5e3;
1314
- var ACTIVITY_DURATION = 3e4;
1315
- var noViewers = new import_util3.ComplexMap(import_react_client6.PublicKey.hash);
1316
- var getName = (identity) => identity.profile?.displayName ?? (0, import_display_name.generateName)(identity.identityKey.toHex());
1317
- var SpacePresence = ({ object, spaceKey }) => {
1318
- const spaceState = (0, import_app_framework10.useCapability)(import_chunk_IKIDS6XF.SpaceCapabilities.MutableState);
1319
- const client = (0, import_react_client6.useClient)();
1320
- const identity = (0, import_halo.useIdentity)();
1321
- const space = spaceKey ? client.spaces.get(spaceKey) : (0, import_echo6.getSpace)(object);
1322
- const spaceMembers = (0, import_echo6.useMembers)(space?.key);
1323
- const [_moment, setMoment] = (0, import_react25.useState)(Date.now());
1324
- (0, import_react25.useEffect)(() => {
1325
- const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
1326
- return () => clearInterval(interval);
1327
- }, []);
1328
- const memberOnline = (0, import_react25.useCallback)((member) => member.presence === 1, []);
1329
- const memberIsNotSelf = (0, import_react25.useCallback)((member) => !identity?.identityKey.equals(member.identity.identityKey), [
1330
- identity?.identityKey
1331
- ]);
1332
- if (!identity || !spaceState || !space) {
1333
- return null;
1334
- }
1335
- const currentObjectViewers = spaceState.viewersByObject[(0, import_echo6.fullyQualifiedId)(object)] ?? noViewers;
1336
- const membersForObject = spaceMembers.filter((member) => memberOnline(member) && memberIsNotSelf(member)).filter((member) => currentObjectViewers.has(member.identity.identityKey)).map((member) => {
1337
- const objectView = currentObjectViewers.get(member.identity.identityKey);
1338
- const lastSeen = objectView?.lastSeen ?? -Infinity;
1339
- const currentlyAttended = objectView?.currentlyAttended ?? false;
1340
- return {
1341
- ...member,
1342
- currentlyAttended,
1343
- lastSeen
1344
- };
1345
- }).toSorted((a, b) => a.lastSeen - b.lastSeen);
1346
- return /* @__PURE__ */ import_react25.default.createElement(FullPresence, {
1347
- members: membersForObject
1348
- });
1349
- };
1350
- var FullPresence = (props) => {
1351
- const { size = 9, onMemberClick } = props;
1352
- const members = (0, import_react_ui19.useDefaultValue)(props.members, () => []);
1353
- if (members.length === 0) {
1354
- return null;
1355
- }
1356
- return /* @__PURE__ */ import_react25.default.createElement("div", {
1357
- className: "dx-avatar-group",
1358
- "data-testid": "spacePlugin.presence"
1359
- }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Root, {
1360
- key: member.identity.identityKey.toHex()
1361
- }, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Trigger, null, /* @__PURE__ */ import_react25.default.createElement(PrensenceAvatar, {
1362
- identity: member.identity,
1363
- match: member.currentlyAttended,
1364
- index: members.length - i,
1365
- onClick: () => onMemberClick?.(member),
1366
- size
1367
- })), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Portal, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Content, {
1368
- side: "bottom"
1369
- }, /* @__PURE__ */ import_react25.default.createElement("span", null, getName(member.identity)), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Arrow, null))))), members.length > 3 && /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Root, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Trigger, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Avatar.Root, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Avatar.Content, {
1370
- status: "inactive",
1371
- style: {
1372
- zIndex: members.length - 4
1373
- },
1374
- fallback: `+${members.length - 3}`
1375
- }))), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Portal, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Content, {
1376
- side: "bottom"
1377
- }, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Arrow, null), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.List, {
1378
- classNames: "max-h-56 overflow-y-auto"
1379
- }, members.map((member) => /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.ListItem.Root, {
1380
- key: member.identity.identityKey.toHex(),
1381
- classNames: "flex gap-2 items-center cursor-pointer mbe-2",
1382
- onClick: () => onMemberClick?.(member),
1383
- "data-testid": "identity-list-item"
1384
- }, /* @__PURE__ */ import_react25.default.createElement(PrensenceAvatar, {
1385
- identity: member.identity,
1386
- size,
1387
- showName: true,
1388
- match: member.currentlyAttended
1389
- }))))))));
1390
- };
1391
- var PrensenceAvatar = ({ identity, showName, match, index, onClick, size }) => {
1392
- const status = match ? "current" : "active";
1393
- const fallbackValue = (0, import_util3.keyToFallback)(identity.identityKey);
1394
- return /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Avatar.Root, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Avatar.Content, {
1395
- status,
1396
- hue: identity.profile?.data?.hue || fallbackValue.hue,
1397
- "data-testid": "spacePlugin.presence.member",
1398
- "data-status": status,
1399
- size,
1400
- classNames: "mbs-2 mie-4",
1401
- ...index ? {
1402
- style: {
1403
- zIndex: index
1404
- }
1405
- } : {},
1406
- onClick: () => onClick?.(),
1407
- fallback: identity.profile?.data?.emoji || fallbackValue.emoji
1408
- }), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Avatar.Label, {
1409
- classNames: showName ? "text-sm truncate pli-2" : "sr-only"
1410
- }, getName(identity)));
1411
- };
1412
- var SmallPresenceLive = ({ id, open, viewers }) => {
1413
- const { hasAttention, isAncestor, isRelated } = (0, import_react_ui_attention.useAttention)(id);
1414
- const isAttended = hasAttention || isAncestor || isRelated;
1415
- const { graph } = (0, import_app_framework10.useAppGraph)();
1416
- const attended = (0, import_react_ui_attention.useAttended)();
1417
- const startOfAttention = attended.at(-1);
1418
- const path = usePath(graph, startOfAttention);
1419
- const containsAttended = !open && !isAttended && id && path ? path.includes(id) : false;
1420
- const getActiveViewers = (viewers2) => {
1421
- const moment = Date.now();
1422
- return Array.from(viewers2.values()).filter((viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION);
1423
- };
1424
- const [activeViewers, setActiveViewers] = (0, import_react25.useState)(viewers ? getActiveViewers(viewers) : []);
1425
- (0, import_react25.useEffect)(() => {
1426
- if (viewers) {
1427
- setActiveViewers(getActiveViewers(viewers));
1428
- const interval = setInterval(() => {
1429
- setActiveViewers(getActiveViewers(viewers));
1430
- }, REFRESH_INTERVAL);
1431
- return () => clearInterval(interval);
1432
- }
1433
- }, [
1434
- viewers
1435
- ]);
1436
- return /* @__PURE__ */ import_react25.default.createElement(SmallPresence, {
1437
- count: activeViewers.length,
1438
- attended: isAttended,
1439
- containsAttended
1440
- });
1441
- };
1442
- var SmallPresence = ({ count = 0, attended, containsAttended }) => {
1443
- const { t } = (0, import_react_ui19.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1444
- return /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Root, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Trigger, {
1445
- asChild: true
1446
- }, /* @__PURE__ */ import_react25.default.createElement(import_react_ui_attention.AttentionGlyph, {
1447
- attended,
1448
- containsAttended,
1449
- presence: count > 1 ? "many" : count === 1 ? "one" : "none",
1450
- classNames: "self-center mie-1"
1451
- })), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Portal, null, /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Content, {
1452
- side: "bottom"
1453
- }, /* @__PURE__ */ import_react25.default.createElement("span", null, t("presence label", {
1454
- count
1455
- })), /* @__PURE__ */ import_react25.default.createElement(import_react_ui19.Tooltip.Arrow, null))));
1456
- };
1457
- var SpacePluginSettings = ({ settings }) => {
1458
- const { t } = (0, import_react_ui20.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1459
- return /* @__PURE__ */ import_react27.default.createElement(import_react_ui_form5.DeprecatedFormContainer, null, /* @__PURE__ */ import_react27.default.createElement(import_react_ui_form5.DeprecatedFormInput, {
1460
- label: t("show hidden spaces label")
1461
- }, /* @__PURE__ */ import_react27.default.createElement(import_react_ui20.Input.Switch, {
1462
- checked: settings.showHidden,
1463
- onCheckedChange: (checked) => settings.showHidden = !!checked
1464
- })));
1465
- };
1466
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpacePropertiesForm.tsx";
1467
- var SpacePropertiesForm = ({ space }) => {
1468
- const { t } = (0, import_react_ui21.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1469
- const [edgeReplication, setEdgeReplication] = (0, import_react28.useState)(space.internal.data.edgeReplication === import_metadata.EdgeReplicationSetting.ENABLED);
1470
- const toggleEdgeReplication = (0, import_react28.useCallback)(async (next) => {
1471
- setEdgeReplication(next);
1472
- await space?.internal.setEdgeReplicationPreference(next ? import_metadata.EdgeReplicationSetting.ENABLED : import_metadata.EdgeReplicationSetting.DISABLED).catch((err) => {
1473
- import_log3.log.catch(err, void 0, {
1474
- F: __dxlog_file5,
1475
- L: 34,
1476
- S: void 0,
1477
- C: (f, a) => f(...a)
1478
- });
1479
- setEdgeReplication(!next);
1480
- });
1481
- }, [
1482
- space
1483
- ]);
1484
- const handleSave = (0, import_react28.useCallback)((properties) => {
1485
- void toggleEdgeReplication(properties.edgeReplication);
1486
- if (properties.name !== space.properties.name) {
1487
- space.properties.name = properties.name;
1488
- }
1489
- if (properties.icon !== space.properties.icon) {
1490
- space.properties.icon = properties.icon;
1491
- }
1492
- if (properties.hue !== space.properties.hue) {
1493
- space.properties.hue = properties.hue;
1494
- }
1495
- }, [
1496
- space,
1497
- toggleEdgeReplication
1498
- ]);
1499
- const values = (0, import_react28.useMemo)(() => ({
1500
- name: space.properties.name,
1501
- icon: space.properties.icon,
1502
- hue: space.properties.hue,
1503
- edgeReplication
1504
- }), [
1505
- space.properties.name,
1506
- space.properties.icon,
1507
- space.properties.hue,
1508
- edgeReplication
1509
- ]);
1510
- const customElements = (0, import_react28.useMemo)(() => ({
1511
- name: ({ type, label, getValue, onValueChange }) => {
1512
- const handleChange = (0, import_react28.useCallback)(({ target: { value } }) => onValueChange(type, value), [
1513
- onValueChange,
1514
- type
1515
- ]);
1516
- return /* @__PURE__ */ import_react28.default.createElement(import_react_ui_form6.ControlItemInput, {
1517
- title: label,
1518
- description: t("display name description")
1519
- }, /* @__PURE__ */ import_react28.default.createElement(import_react_ui21.Input.TextInput, {
1520
- value: getValue(),
1521
- onChange: handleChange,
1522
- placeholder: t("display name input placeholder"),
1523
- classNames: "min-is-64"
1524
- }));
1525
- },
1526
- icon: ({ type, label, getValue, onValueChange }) => {
1527
- const handleChange = (0, import_react28.useCallback)((nextEmoji) => onValueChange(type, nextEmoji), [
1528
- onValueChange,
1529
- type
1530
- ]);
1531
- const handleEmojiReset = (0, import_react28.useCallback)(() => onValueChange(type, void 0), [
1532
- onValueChange,
1533
- type
1534
- ]);
1535
- return /* @__PURE__ */ import_react28.default.createElement(import_react_ui_form6.ControlItem, {
1536
- title: label,
1537
- description: t("icon description")
1538
- }, /* @__PURE__ */ import_react28.default.createElement(import_react_ui_pickers.IconPicker, {
1539
- value: getValue(),
1540
- onChange: handleChange,
1541
- onReset: handleEmojiReset,
1542
- classNames: "justify-self-end",
1543
- iconSize: 5
1544
- }));
1545
- },
1546
- hue: ({ type, label, getValue, onValueChange }) => {
1547
- const handleChange = (0, import_react28.useCallback)((nextHue) => onValueChange(type, nextHue), [
1548
- onValueChange,
1549
- type
1550
- ]);
1551
- const handleHueReset = (0, import_react28.useCallback)(() => onValueChange(type, void 0), [
1552
- onValueChange,
1553
- type
1554
- ]);
1555
- return /* @__PURE__ */ import_react28.default.createElement(import_react_ui_form6.ControlItem, {
1556
- title: label,
1557
- description: t("hue description")
1558
- }, /* @__PURE__ */ import_react28.default.createElement(import_react_ui_pickers.HuePicker, {
1559
- value: getValue(),
1560
- onChange: handleChange,
1561
- onReset: handleHueReset,
1562
- classNames: "[--hue-preview-size:1.25rem] justify-self-end"
1563
- }));
1564
- },
1565
- edgeReplication: ({ type, label, getValue, onValueChange }) => {
1566
- const handleChange = (0, import_react28.useCallback)((checked) => onValueChange(type, checked), [
1567
- onValueChange,
1568
- type
1569
- ]);
1570
- return /* @__PURE__ */ import_react28.default.createElement(import_react_ui_form6.ControlItemInput, {
1571
- title: label,
1572
- description: t("edge replication description")
1573
- }, /* @__PURE__ */ import_react28.default.createElement(import_react_ui21.Input.Switch, {
1574
- checked: getValue(),
1575
- onCheckedChange: handleChange,
1576
- classNames: "justify-self-end"
1577
- }));
1578
- }
1579
- }), [
1580
- t
1581
- ]);
1582
- return /* @__PURE__ */ import_react28.default.createElement(import_react_ui_form6.Form, {
1583
- schema: import_chunk_WDEIFDTX.SpaceForm,
1584
- values,
1585
- autoSave: true,
1586
- onSave: handleSave,
1587
- Custom: customElements,
1588
- 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'
1589
- });
1590
- };
1591
- var SPACE_SETTINGS_DIALOG = `${import_chunk_6P2DB4QQ.SPACE_PLUGIN}/SpaceSettingsDialog`;
1592
- var SpaceSettingsContainer = ({ space }) => {
1593
- const { t } = (0, import_react_ui22.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1594
- const state = (0, import_app_framework11.useCapability)(import_chunk_IKIDS6XF.SpaceCapabilities.MutableState);
1595
- const items = (0, import_app_framework11.useCapabilities)(import_chunk_IKIDS6XF.SpaceCapabilities.SettingsSection).toSorted(import_util4.byPosition);
1596
- const data = (0, import_react29.useMemo)(() => ({
1597
- subject: space
1598
- }), [
1599
- space
1600
- ]);
1601
- const handleOpenSectionChange = (0, import_react29.useCallback)((sections) => {
1602
- state.spaceSettingsOpenSections.splice(0, state.spaceSettingsOpenSections.length, ...sections);
1603
- }, [
1604
- state
1605
- ]);
1606
- return /* @__PURE__ */ import_react29.default.createElement(import_react_ui_stack3.StackItem.Content, {
1607
- classNames: "p-2 block overflow-y-auto"
1608
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_ui_list.Accordion.Root, {
1609
- items,
1610
- value: state.spaceSettingsOpenSections,
1611
- onValueChange: handleOpenSectionChange
1612
- }, ({ items: items2 }) => /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, items2.map((item) => /* @__PURE__ */ import_react29.default.createElement(import_react_ui_list.Accordion.Item, {
1613
- key: item.id,
1614
- item,
1615
- classNames: "container-max-width"
1616
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_ui_list.Accordion.ItemHeader, {
1617
- classNames: "pie-6",
1618
- asChild: true
1619
- }, /* @__PURE__ */ import_react29.default.createElement(import_react_ui_form7.ControlSectionHeading, {
1620
- title: (0, import_react_ui22.toLocalizedString)(item.label, t)
1621
- })), /* @__PURE__ */ import_react29.default.createElement(import_react_ui_list.Accordion.ItemBody, null, /* @__PURE__ */ import_react29.default.createElement(import_app_framework11.Surface, {
1622
- role: `space-settings--${item.id}`,
1623
- data
1624
- })))))));
1625
- };
1626
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts";
1627
- var createEmptyEdgeSyncState = () => ({
1628
- missingOnLocal: 0,
1629
- missingOnRemote: 0,
1630
- localDocumentCount: 0,
1631
- remoteDocumentCount: 0,
1632
- differentDocuments: 0
1633
- });
1634
- var getSyncSummary = (syncMap) => {
1635
- return Object.entries(syncMap).reduce((summary, [_spaceId, peerState]) => {
1636
- summary.missingOnLocal += peerState.missingOnLocal;
1637
- summary.missingOnRemote += peerState.missingOnRemote;
1638
- summary.localDocumentCount += peerState.localDocumentCount;
1639
- summary.remoteDocumentCount += peerState.remoteDocumentCount;
1640
- summary.differentDocuments += peerState.differentDocuments;
1641
- return summary;
1642
- }, createEmptyEdgeSyncState());
1643
- };
1644
- var isEdgePeerId = (peerId, spaceId) => peerId.startsWith(`${import_protocols.EdgeService.AUTOMERGE_REPLICATOR}:${spaceId}`);
1645
- var useSyncState = () => {
1646
- const client = (0, import_react_client8.useClient)();
1647
- const [spaceState, setSpaceState] = (0, import_react31.useState)({});
1648
- (0, import_react31.useEffect)(() => {
1649
- const ctx = new import_context.Context(void 0, {
1650
- F: __dxlog_file6,
1651
- L: 48
1652
- });
1653
- const createSubscriptions = (spaces) => {
1654
- for (const space of spaces) {
1655
- if (spaceState[space.id]) {
1656
- continue;
1657
- }
1658
- ctx.onDispose(space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {
1659
- const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));
1660
- if (syncState) {
1661
- setSpaceState((spaceState2) => ({
1662
- ...spaceState2,
1663
- [space.id]: syncState
1664
- }));
1665
- }
1666
- }));
1667
- }
1668
- };
1669
- createSubscriptions(client.spaces.get());
1670
- client.spaces.subscribe((spaces) => {
1671
- createSubscriptions(spaces);
1672
- });
1673
- return () => {
1674
- void ctx.dispose();
1675
- };
1676
- }, [
1677
- client
1678
- ]);
1679
- return spaceState;
1680
- };
1681
- var useSpaceSyncState = (space) => {
1682
- const [spaceState, setSpaceState] = (0, import_react31.useState)();
1683
- (0, import_react31.useEffect)(() => {
1684
- const ctx = new import_context.Context(void 0, {
1685
- F: __dxlog_file6,
1686
- L: 87
1687
- });
1688
- space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {
1689
- const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));
1690
- if (syncState) {
1691
- setSpaceState(syncState);
1692
- }
1693
- });
1694
- return () => {
1695
- void ctx.dispose();
1696
- };
1697
- }, [
1698
- space
1699
- ]);
1700
- return spaceState;
1701
- };
1702
- var useEdgeStatus = () => {
1703
- const [status, setStatus] = (0, import_react30.useState)(import_services.QueryEdgeStatusResponse.EdgeStatus.NOT_CONNECTED);
1704
- const client = (0, import_react_client7.useClient)();
1705
- (0, import_react30.useEffect)(() => {
1706
- client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status: status2 }) => {
1707
- setStatus(status2);
1708
- });
1709
- }, [
1710
- client
1711
- ]);
1712
- return status;
1713
- };
1714
- var InlineSyncStatus = ({ space, open }) => {
1715
- const { t } = (0, import_react_ui23.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1716
- const id = space.id;
1717
- const { hasAttention, isAncestor, isRelated } = (0, import_react_ui_attention2.useAttention)(id);
1718
- const isAttended = hasAttention || isAncestor || isRelated;
1719
- const { graph } = (0, import_app_framework12.useAppGraph)();
1720
- const attended = (0, import_react_ui_attention2.useAttended)();
1721
- const startOfAttention = attended.at(-1);
1722
- const path = usePath(graph, startOfAttention);
1723
- const containsAttended = !open && !isAttended && id && path ? path.includes(id) : false;
1724
- const connectedToEdge = useEdgeStatus() === import_services.QueryEdgeStatusResponse.EdgeStatus.CONNECTED;
1725
- const edgeSyncEnabled = space.internal.data.edgeReplication === import_metadata2.EdgeReplicationSetting.ENABLED;
1726
- const syncState = useSpaceSyncState(space);
1727
- const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;
1728
- return /* @__PURE__ */ import_react30.default.createElement(import_react_ui23.Tooltip.Root, null, /* @__PURE__ */ import_react30.default.createElement(import_react_ui23.Tooltip.Trigger, {
1729
- asChild: true
1730
- }, /* @__PURE__ */ import_react30.default.createElement(import_react_ui_attention2.AttentionGlyph, {
1731
- syncing,
1732
- attended: isAttended,
1733
- containsAttended,
1734
- classNames: "self-center mie-1"
1735
- })), /* @__PURE__ */ import_react30.default.createElement(import_react_ui23.Tooltip.Portal, null, /* @__PURE__ */ import_react30.default.createElement(import_react_ui23.Tooltip.Content, {
1736
- side: "bottom",
1737
- classNames: "z-[70]"
1738
- }, /* @__PURE__ */ import_react30.default.createElement("span", null, t("syncing label")), /* @__PURE__ */ import_react30.default.createElement(import_react_ui23.Tooltip.Arrow, null))));
1739
- };
1740
- var SYNC_STALLED_TIMEOUT = 5e3;
1741
- var styles = {
1742
- barBg: "bg-neutral-50 dark:bg-green-900 text-black",
1743
- barFg: "bg-neutral-100 bg-green-500",
1744
- barHover: "dark:hover:bg-green-500"
1745
- };
1746
- var useActive = (count) => {
1747
- const [current, setCurrent] = (0, import_react33.useState)(count);
1748
- const [active, setActive] = (0, import_react33.useState)(false);
1749
- (0, import_react33.useEffect)(() => {
1750
- let t;
1751
- if (count !== current) {
1752
- setActive(true);
1753
- setCurrent(count);
1754
- t && clearTimeout(t);
1755
- t = setTimeout(() => {
1756
- setActive(false);
1757
- }, SYNC_STALLED_TIMEOUT);
1758
- }
1759
- return () => {
1760
- setActive(false);
1761
- clearTimeout(t);
1762
- };
1763
- }, [
1764
- count,
1765
- current
1766
- ]);
1767
- return active;
1768
- };
1769
- var SpaceRowContainer = ({ spaceId, state }) => {
1770
- const { t } = (0, import_react_ui25.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1771
- const client = (0, import_react_client10.useClient)();
1772
- const space = (0, import_echo7.useSpace)(spaceId);
1773
- if (!space) {
1774
- return null;
1775
- }
1776
- const spaceName = (0, import_react_ui25.toLocalizedString)((0, import_chunk_TUZWEPGX.getSpaceDisplayName)(space, {
1777
- personal: space === client.spaces.default
1778
- }), t);
1779
- return /* @__PURE__ */ import_react33.default.createElement(SpaceRow, {
1780
- spaceId,
1781
- spaceName,
1782
- state
1783
- });
1784
- };
1785
- var SpaceRow = ({ spaceId, spaceName, state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote } }) => {
1786
- const downActive = useActive(localDocumentCount);
1787
- const upActive = useActive(remoteDocumentCount);
1788
- return /* @__PURE__ */ import_react33.default.createElement("div", {
1789
- className: "flex items-center mx-0.5 gap-0.5 cursor-pointer",
1790
- title: spaceId,
1791
- onClick: () => {
1792
- void navigator.clipboard.writeText(spaceId);
1793
- }
1794
- }, /* @__PURE__ */ import_react33.default.createElement("span", {
1795
- className: "is-1/2 truncate"
1796
- }, spaceName), /* @__PURE__ */ import_react33.default.createElement(import_react_ui25.Icon, {
1797
- icon: "ph--arrow-fat-line-left--regular",
1798
- size: 3,
1799
- classNames: (0, import_react_ui_theme8.mx)(downActive && "animate-[pulse_1s_infinite]")
1800
- }), /* @__PURE__ */ import_react33.default.createElement(Candle, {
1801
- up: {
1802
- count: remoteDocumentCount,
1803
- total: remoteDocumentCount + missingOnRemote
1804
- },
1805
- down: {
1806
- count: localDocumentCount,
1807
- total: localDocumentCount + missingOnLocal
1808
- },
1809
- title: spaceId
1810
- }), /* @__PURE__ */ import_react33.default.createElement(import_react_ui25.Icon, {
1811
- icon: "ph--arrow-fat-line-right--regular",
1812
- size: 3,
1813
- classNames: (0, import_react_ui_theme8.mx)(upActive && "animate-[pulse_1s_step-start_infinite]")
1814
- }));
1815
- };
1816
- var Candle = ({ classNames, up, down }) => {
1817
- return /* @__PURE__ */ import_react33.default.createElement("div", {
1818
- className: (0, import_react_ui_theme8.mx)("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1819
- }, /* @__PURE__ */ import_react33.default.createElement(Bar, {
1820
- classNames: "justify-end",
1821
- ...up
1822
- }), /* @__PURE__ */ import_react33.default.createElement("div", {
1823
- className: "relative"
1824
- }, /* @__PURE__ */ import_react33.default.createElement("div", {
1825
- className: (0, import_react_ui_theme8.mx)("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1826
- }, up.total)), /* @__PURE__ */ import_react33.default.createElement(Bar, down));
1827
- };
1828
- var Bar = ({ classNames, count, total }) => {
1829
- let p = count / total * 100;
1830
- if (count < total) {
1831
- p = Math.min(p, 95);
1832
- }
1833
- return /* @__PURE__ */ import_react33.default.createElement("div", {
1834
- className: (0, import_react_ui_theme8.mx)("relative flex w-full", styles.barBg, classNames)
1835
- }, /* @__PURE__ */ import_react33.default.createElement("div", {
1836
- className: (0, import_react_ui_theme8.mx)("shrink-0", styles.barFg),
1837
- style: {
1838
- width: `${p}%`
1839
- }
1840
- }), count !== total && /* @__PURE__ */ import_react33.default.createElement("div", {
1841
- className: "absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs"
1842
- }, count));
1843
- };
1844
- var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/save-tracker.ts";
1845
- var createClientSaveTracker = (client, cb) => {
1846
- const CleanupFns = {};
1847
- const state = {};
1848
- const install = (spaces) => {
1849
- for (const space of spaces) {
1850
- if (state[space.id]) {
1851
- continue;
1852
- }
1853
- state[space.id] = "saved";
1854
- CleanupFns[space.id] = createSpaceSaveTracker(space, (s) => {
1855
- state[space.id] = s;
1856
- cb(Object.values(state).some((s2) => s2 === "saving") ? "saving" : "saved");
1857
- });
1858
- }
1859
- };
1860
- client.spaces.subscribe((spaces) => {
1861
- install(spaces);
1862
- });
1863
- install(client.spaces.get());
1864
- return () => {
1865
- for (const unsubscribe of Object.values(CleanupFns)) {
1866
- unsubscribe();
1867
- }
1868
- };
1869
- };
1870
- var createSpaceSaveTracker = (space, cb) => {
1871
- const ctx = new import_context2.Context(void 0, {
1872
- F: __dxlog_file7,
1873
- L: 40
1874
- });
1875
- void space.waitUntilReady().then(() => {
1876
- if (ctx.disposed) {
1877
- return;
1878
- }
1879
- let hasUnsavedChanges = false;
1880
- let lastFlushPromise;
1881
- space.crud.saveStateChanged.on(ctx, ({ unsavedDocuments }) => {
1882
- hasUnsavedChanges = unsavedDocuments.length > 0;
1883
- });
1884
- space.crud.saveStateChanged.debounce(500).on(ctx, () => {
1885
- if (hasUnsavedChanges) {
1886
- lastFlushPromise = void 0;
1887
- cb("saving");
1888
- } else {
1889
- const flushPromise = space.crud.flush();
1890
- lastFlushPromise = flushPromise;
1891
- void flushPromise.then(() => {
1892
- if (lastFlushPromise === flushPromise) {
1893
- cb("saved");
1894
- }
1895
- });
1896
- }
1897
- });
1898
- });
1899
- return () => {
1900
- void ctx.dispose();
1901
- };
1902
- };
1903
- var getStatus = ({ offline, saved, needsToUpload, needsToDownload }) => {
1904
- if (!saved) {
1905
- return "saving locally";
1906
- } else if (!offline && needsToDownload) {
1907
- return "downloading";
1908
- } else if (!offline && needsToUpload) {
1909
- return "uploading";
1910
- } else if (offline && !needsToUpload && !needsToDownload) {
1911
- return "offline persisted";
1912
- } else {
1913
- return "remote synced";
1914
- }
1915
- };
1916
- var getIcon = (status) => {
1917
- switch (status) {
1918
- case "saving locally":
1919
- return "ph--download--regular";
1920
- case "downloading":
1921
- return "ph--cloud-arrow-down--regular";
1922
- case "uploading":
1923
- return "ph--cloud-arrow-up--regular";
1924
- case "offline persisted":
1925
- return "ph--check-circle--regular";
1926
- case "remote synced":
1927
- return "ph--cloud-check--regular";
1928
- }
1929
- };
1930
- var SyncStatus = () => {
1931
- const client = (0, import_react_client9.useClient)();
1932
- const state = useSyncState();
1933
- const [saved, setSaved] = (0, import_react32.useState)(true);
1934
- (0, import_react32.useEffect)(() => {
1935
- return createClientSaveTracker(client, (state2) => {
1936
- setSaved(state2 === "saved");
1937
- });
1938
- }, []);
1939
- return /* @__PURE__ */ import_react32.default.createElement(SyncStatusIndicator, {
1940
- state,
1941
- saved
1942
- });
1943
- };
1944
- var SyncStatusIndicator = ({ state, saved }) => {
1945
- const { t } = (0, import_react_ui24.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1946
- const summary = getSyncSummary(state);
1947
- const offline = Object.values(state).length === 0;
1948
- const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
1949
- const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;
1950
- const status = getStatus({
1951
- offline,
1952
- saved,
1953
- needsToUpload,
1954
- needsToDownload
1955
- });
1956
- const [classNames, setClassNames] = (0, import_react32.useState)();
1957
- (0, import_react32.useEffect)(() => {
1958
- setClassNames(void 0);
1959
- if (offline || !needsToUpload && !needsToDownload) {
1960
- return;
1961
- }
1962
- const t2 = setTimeout(() => {
1963
- setClassNames("text-orange-500");
1964
- }, SYNC_STALLED_TIMEOUT);
1965
- return () => clearTimeout(t2);
1966
- }, [
1967
- offline,
1968
- needsToUpload,
1969
- needsToDownload
1970
- ]);
1971
- const title = t(`${status} label`);
1972
- const icon = /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Icon, {
1973
- icon: getIcon(status),
1974
- size: 4,
1975
- classNames
1976
- });
1977
- if (offline) {
1978
- return /* @__PURE__ */ import_react32.default.createElement(import_plugin_status_bar.StatusBar.Item, {
1979
- title
1980
- }, icon);
1981
- } else {
1982
- return /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Popover.Root, null, /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Popover.Trigger, {
1983
- asChild: true
1984
- }, /* @__PURE__ */ import_react32.default.createElement(import_plugin_status_bar.StatusBar.Button, {
1985
- title
1986
- }, icon)), /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Popover.Portal, null, /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Popover.Content, null, /* @__PURE__ */ import_react32.default.createElement(SyncStatusDetail, {
1987
- state,
1988
- summary,
1989
- debug: false
1990
- }), /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Popover.Arrow, null))));
1991
- }
1992
- };
1993
- var SyncStatusDetail = ({ classNames, state, summary, debug }) => {
1994
- const [showAll, setShowAll] = (0, import_react32.useState)(false);
1995
- const { t } = (0, import_react_ui24.useTranslation)(import_chunk_6P2DB4QQ.SPACE_PLUGIN);
1996
- const entries = Object.entries(state).filter(([_, value]) => showAll || value.missingOnLocal + value.missingOnRemote > 0).toSorted(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1997
- const handleCheckedChange = (0, import_react32.useCallback)((state2) => setShowAll(state2), [
1998
- setShowAll
1999
- ]);
2000
- return /* @__PURE__ */ import_react32.default.createElement("div", {
2001
- className: (0, import_react_ui_theme7.mx)("flex flex-col gap-3 p-2 text-xs min-w-[400px]", classNames)
2002
- }, /* @__PURE__ */ import_react32.default.createElement("div", {
2003
- role: "none",
2004
- className: "flex items-center"
2005
- }, /* @__PURE__ */ import_react32.default.createElement("h1", {
2006
- className: "flex-1"
2007
- }, t("sync status title")), /* @__PURE__ */ import_react32.default.createElement("div", {
2008
- className: "flex items-center gap-2"
2009
- }, /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Input.Root, null, /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Input.Label, {
2010
- classNames: "text-xs"
2011
- }, t("show all label")), /* @__PURE__ */ import_react32.default.createElement(import_react_ui24.Input.Checkbox, {
2012
- checked: showAll,
2013
- onCheckedChange: handleCheckedChange
2014
- })))), /* @__PURE__ */ import_react32.default.createElement("div", {
2015
- className: "flex flex-col gap-2"
2016
- }, entries.length === 0 && /* @__PURE__ */ import_react32.default.createElement("div", {
2017
- role: "none",
2018
- className: "flex justify-center"
2019
- }, t("no sync status label")), entries.map(([spaceId, state2]) => /* @__PURE__ */ import_react32.default.createElement(SpaceRowContainer, {
2020
- key: spaceId,
2021
- spaceId,
2022
- state: state2
2023
- }))), debug && /* @__PURE__ */ import_react32.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
2024
- language: "json"
2025
- }, JSON.stringify(summary, null, 2)));
2026
- };
2027
- // Annotate the CommonJS export names for ESM import in node:
2028
- 0 && (module.exports = {
2029
- AppGraphBuilder,
2030
- AppGraphSerializer,
2031
- AwaitingObject,
2032
- CREATE_OBJECT_DIALOG,
2033
- CREATE_SPACE_DIALOG,
2034
- CollectionMain,
2035
- CollectionSection,
2036
- CreateObjectDialog,
2037
- CreateSpaceDialog,
2038
- FullPresence,
2039
- IdentityCreated,
2040
- InlineSyncStatus,
2041
- IntentResolver,
2042
- JOIN_DIALOG,
2043
- JoinDialog,
2044
- MembersContainer,
2045
- MenuFooter,
2046
- ObjectSettingsContainer,
2047
- POPOVER_ADD_SPACE,
2048
- POPOVER_RENAME_OBJECT,
2049
- POPOVER_RENAME_SPACE,
2050
- PersistenceStatus,
2051
- PopoverAddSpace,
2052
- PopoverRenameObject,
2053
- PopoverRenameSpace,
2054
- ReactRoot,
2055
- ReactSurface,
2056
- SPACE_SETTINGS_DIALOG,
2057
- Schema,
2058
- ShareSpaceButton,
2059
- ShareSpaceButtonImpl,
2060
- SmallPresence,
2061
- SmallPresenceLive,
2062
- SpacePluginSettings,
2063
- SpacePresence,
2064
- SpacePropertiesForm,
2065
- SpaceSettings,
2066
- SpaceSettingsContainer,
2067
- SpaceState,
2068
- SpacesReady,
2069
- SyncStatus,
2070
- SyncStatusDetail,
2071
- SyncStatusIndicator,
2072
- Tools
2073
- });
2074
- //# sourceMappingURL=chunk-3GKCNADA.cjs.map