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