@dxos/plugin-space 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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