@dxos/plugin-space 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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