@dxos/plugin-space 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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