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