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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) 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-ACGHWPDX.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs +517 -0
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-3A6KBYWT.mjs → app-graph-serializer-G3VFEGTN.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
  14. package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-C6DAPIFF.mjs +20 -0
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-DCY3W36E.mjs → chunk-GJOZILGC.mjs} +210 -142
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-J6YZG77T.mjs → chunk-KCZ527AM.mjs} +641 -500
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-ELJDGQTO.mjs → chunk-P25R3AOK.mjs} +35 -5
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-POFUXISV.mjs} +69 -62
  24. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.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 -131
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-7E3IZIJS.mjs → intent-resolver-RZEWNJ2K.mjs} +105 -100
  34. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs +30 -0
  37. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-GL4CE2F4.mjs → react-surface-VOETEAG3.mjs} +91 -111
  39. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  41. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-B6MMHLPS.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-B6MMHLPS.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-QVABOCO3.mjs → spaces-ready-OHGCWZHQ.mjs} +22 -15
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-2RGW7FQG.mjs → state-C7N6EDDZ.mjs} +7 -7
  47. package/dist/lib/browser/state-C7N6EDDZ.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +10 -4
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs +518 -0
  58. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-M45TH5LR.mjs → app-graph-serializer-2NLWWFUB.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-Q6AAQLQG.mjs → chunk-7EV4SN47.mjs} +34 -5
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-AX3UGL5D.mjs} +69 -62
  64. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-AUQ3SKL2.mjs → chunk-I6FZP42D.mjs} +210 -142
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-ZCEH2VYE.mjs → chunk-JAMGJUFU.mjs} +641 -500
  72. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +21 -0
  74. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  76. package/dist/lib/node-esm/chunk-X34VDVMY.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 -131
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-UVO4MKWX.mjs → intent-resolver-4PHJWDXW.mjs} +105 -100
  82. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5EKYI66P.mjs → react-root-O5I5CDJ7.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-IOC6YSVQ.mjs → react-surface-J3XDMU2D.mjs} +91 -111
  87. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  88. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  89. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-MS6GHPFR.mjs → spaces-ready-ZPU24DA2.mjs} +22 -15
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-7VBVBGNS.mjs → state-45TXZQJ6.mjs} +7 -7
  95. package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +10 -4
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/capabilities.d.ts +13 -7
  101. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/index.d.ts +1 -1
  103. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/repair.d.ts +4 -0
  108. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  110. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  111. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  112. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  113. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  114. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  115. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +218 -215
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +16 -9
  120. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  121. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  123. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  124. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  125. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  126. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  127. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  128. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  129. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  130. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  131. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  133. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  134. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  135. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  136. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  137. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  138. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  139. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  140. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  141. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  142. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  143. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  144. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  146. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  148. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  149. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  150. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  151. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  152. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  153. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  154. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +219 -216
  155. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  156. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  157. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  160. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  161. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +220 -217
  162. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  163. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  164. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  165. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  166. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  167. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  168. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  169. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +218 -215
  171. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  172. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +219 -216
  174. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  176. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  177. package/dist/types/src/components/index.d.ts +10 -17
  178. package/dist/types/src/components/index.d.ts.map +1 -1
  179. package/dist/types/src/events.d.ts.map +1 -1
  180. package/dist/types/src/helpers/index.d.ts +2 -0
  181. package/dist/types/src/helpers/index.d.ts.map +1 -0
  182. package/dist/types/src/helpers/query.d.ts +8 -0
  183. package/dist/types/src/helpers/query.d.ts.map +1 -0
  184. package/dist/types/src/helpers/query.test.d.ts +2 -0
  185. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  186. package/dist/types/src/hooks/index.d.ts +1 -0
  187. package/dist/types/src/hooks/index.d.ts.map +1 -1
  188. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  189. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  190. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  191. package/dist/types/src/hooks/usePath.d.ts +1 -1
  192. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  194. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  195. package/dist/types/src/index.d.ts +1 -0
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/meta.d.ts +0 -1
  198. package/dist/types/src/meta.d.ts.map +1 -1
  199. package/dist/types/src/translations.d.ts +1261 -67
  200. package/dist/types/src/translations.d.ts.map +1 -1
  201. package/dist/types/src/types/form.d.ts +24 -0
  202. package/dist/types/src/types/form.d.ts.map +1 -0
  203. package/dist/types/src/types/index.d.ts +1 -0
  204. package/dist/types/src/types/index.d.ts.map +1 -1
  205. package/dist/types/src/types/types.d.ts +82 -142
  206. package/dist/types/src/types/types.d.ts.map +1 -1
  207. package/dist/types/src/util.d.ts +21 -34
  208. package/dist/types/src/util.d.ts.map +1 -1
  209. package/dist/types/tsconfig.tsbuildinfo +1 -1
  210. package/package.json +68 -59
  211. package/src/SpacePlugin.ts +181 -215
  212. package/src/capabilities/app-graph-builder.ts +205 -267
  213. package/src/capabilities/app-graph-serializer.ts +12 -12
  214. package/src/capabilities/capabilities.ts +26 -16
  215. package/src/capabilities/identity-created.ts +2 -2
  216. package/src/capabilities/index.ts +1 -1
  217. package/src/capabilities/intent-resolver.ts +78 -75
  218. package/src/capabilities/react-root.tsx +4 -3
  219. package/src/capabilities/react-surface.tsx +95 -145
  220. package/src/capabilities/repair.ts +57 -0
  221. package/src/capabilities/spaces-ready.ts +15 -6
  222. package/src/capabilities/state.ts +2 -2
  223. package/src/components/AwaitingObject.tsx +12 -14
  224. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  225. package/src/components/CollectionSection.tsx +8 -6
  226. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
  227. package/src/components/CreateDialog/CreateObjectDialog.tsx +63 -43
  228. package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -31
  229. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  230. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  231. package/src/components/JoinDialog/index.ts +5 -0
  232. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
  233. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
  234. package/src/components/MembersContainer/index.ts +5 -0
  235. package/src/components/MenuFooter.tsx +2 -2
  236. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  237. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  238. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  239. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  240. package/src/components/ObjectRenamePopover/index.ts +5 -0
  241. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +6 -7
  242. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  243. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  244. package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
  245. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  246. package/src/components/ObjectSettings/index.ts +3 -1
  247. package/src/components/RecordArticle.stories.tsx +115 -0
  248. package/src/components/RecordArticle.tsx +114 -0
  249. package/src/components/SchemaContainer.tsx +24 -27
  250. package/src/components/SpacePluginSettings.tsx +10 -4
  251. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
  252. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  253. package/src/components/SpacePresence/index.ts +5 -0
  254. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  255. package/src/components/SpaceRenamePopover/index.ts +5 -0
  256. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  257. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +63 -23
  258. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  259. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  260. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  261. package/src/components/ViewEditor.tsx +57 -23
  262. package/src/components/index.ts +7 -8
  263. package/src/events.ts +6 -6
  264. package/src/helpers/index.ts +5 -0
  265. package/src/helpers/query.test.ts +24 -0
  266. package/src/helpers/query.ts +158 -0
  267. package/src/hooks/index.ts +1 -0
  268. package/src/hooks/useActiveSpace.ts +2 -1
  269. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  270. package/src/hooks/usePath.ts +1 -1
  271. package/src/hooks/useTypeOptions.ts +27 -0
  272. package/src/index.ts +1 -0
  273. package/src/meta.ts +6 -3
  274. package/src/translations.ts +68 -58
  275. package/src/types/form.ts +75 -0
  276. package/src/types/index.ts +1 -0
  277. package/src/types/types.ts +44 -50
  278. package/src/util.tsx +216 -143
  279. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  280. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  281. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  282. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  283. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  284. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs +0 -516
  285. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-serializer-3A6KBYWT.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  288. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-DCY3W36E.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  292. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-J6YZG77T.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-RQVV4XVF.mjs +0 -343
  295. package/dist/lib/browser/chunk-RQVV4XVF.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  297. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  299. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  300. package/dist/lib/browser/intent-resolver-7E3IZIJS.mjs.map +0 -7
  301. package/dist/lib/browser/react-root-RWMT2RCK.mjs +0 -29
  302. package/dist/lib/browser/react-root-RWMT2RCK.mjs.map +0 -7
  303. package/dist/lib/browser/react-surface-GL4CE2F4.mjs.map +0 -7
  304. package/dist/lib/browser/schema-defs-YDPFZELA.mjs +0 -26
  305. package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
  306. package/dist/lib/browser/spaces-ready-QVABOCO3.mjs.map +0 -7
  307. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  308. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  309. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  310. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  311. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  312. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  313. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs +0 -517
  314. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-serializer-M45TH5LR.mjs.map +0 -7
  316. package/dist/lib/node-esm/chunk-AUQ3SKL2.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  318. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  320. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-WKQTO37U.mjs +0 -344
  326. package/dist/lib/node-esm/chunk-WKQTO37U.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-ZCEH2VYE.mjs.map +0 -7
  328. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  329. package/dist/lib/node-esm/intent-resolver-UVO4MKWX.mjs.map +0 -7
  330. package/dist/lib/node-esm/react-root-5EKYI66P.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-surface-IOC6YSVQ.mjs.map +0 -7
  332. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs +0 -27
  333. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
  334. package/dist/lib/node-esm/spaces-ready-MS6GHPFR.mjs.map +0 -7
  335. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  336. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  337. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  338. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  339. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  340. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  341. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  342. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  343. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  344. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  345. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  346. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  347. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  348. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  349. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  350. package/dist/types/src/components/RecordMain.d.ts +0 -7
  351. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  352. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  353. package/src/capabilities/schema-defs.ts +0 -31
  354. package/src/components/ObjectDetailsPanel.tsx +0 -77
  355. package/src/components/PersistenceStatus.tsx +0 -83
  356. package/src/components/RecordMain.tsx +0 -43
  357. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
@@ -0,0 +1,115 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Filter, Obj, Ref, Relation, type Type } from '@dxos/echo';
11
+ import { faker } from '@dxos/random';
12
+ import { useQuery } from '@dxos/react-client/echo';
13
+ import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
14
+ import { withTheme } from '@dxos/react-ui/testing';
15
+ import { Card } from '@dxos/react-ui-stack';
16
+ import { Json } from '@dxos/react-ui-syntax-highlighter';
17
+ import { type ValueGenerator, createAsyncGenerator } from '@dxos/schema/testing';
18
+ import { translations as shellTranslations } from '@dxos/shell/react';
19
+ import { render } from '@dxos/storybook-utils';
20
+ import { HasSubject, Organization, Person, Task } from '@dxos/types';
21
+
22
+ import { translations } from '../translations';
23
+
24
+ import { RecordArticle } from './RecordArticle';
25
+
26
+ faker.seed(1);
27
+ const generator: ValueGenerator = faker as any;
28
+
29
+ const DefaultStory = () => {
30
+ const { space } = useClientProvider();
31
+ const [object] = useQuery(space, Filter.type(Organization.Organization));
32
+ if (!object) {
33
+ return null;
34
+ }
35
+
36
+ return <RecordArticle subject={object} />;
37
+ };
38
+
39
+ const meta = {
40
+ title: 'plugins/plugin-space/RecordArticle',
41
+ component: RecordArticle as any,
42
+ render: render(DefaultStory),
43
+ decorators: [
44
+ withTheme,
45
+ // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
46
+ withPluginManager({
47
+ capabilities: [
48
+ contributes(Capabilities.ReactSurface, [
49
+ createSurface({
50
+ id: 'section',
51
+ role: 'section',
52
+ component: ({ data }) => (
53
+ <Card.SurfaceRoot>
54
+ <Json classNames='text-sm' data={data} />
55
+ </Card.SurfaceRoot>
56
+ ),
57
+ }),
58
+ createSurface({
59
+ id: 'card',
60
+ role: 'card',
61
+ component: ({ data }) => (
62
+ <Card.SurfaceRoot>
63
+ <Json classNames='text-sm' data={data} />
64
+ </Card.SurfaceRoot>
65
+ ),
66
+ }),
67
+ ]),
68
+ ],
69
+ }),
70
+ // TODO(burdon): Use plugin.
71
+ withClientProvider({
72
+ createIdentity: true,
73
+ createSpace: true,
74
+ types: [Organization.Organization, Person.Person, Task.Task, HasSubject.HasSubject],
75
+ onCreateSpace: async ({ space }) => {
76
+ const org = space.db.add(
77
+ Obj.make(Organization.Organization, {
78
+ name: 'DXOS',
79
+ }),
80
+ );
81
+ const task = space.db.add(
82
+ Obj.make(Task.Task, {
83
+ title: 'Task',
84
+ }),
85
+ );
86
+ space.db.add(
87
+ Relation.make(HasSubject.HasSubject, {
88
+ [Relation.Source]: task,
89
+ [Relation.Target]: org,
90
+ completedAt: new Date().toISOString(),
91
+ }),
92
+ );
93
+ const objectGenerator = createAsyncGenerator(generator, Person.Person as Type.Obj.Any, {
94
+ db: space?.db,
95
+ force: true,
96
+ });
97
+ await objectGenerator.createObjects(3).then((objects) => {
98
+ objects.forEach((object) => {
99
+ object.organization = Ref.make(org);
100
+ });
101
+ });
102
+ },
103
+ }),
104
+ ],
105
+ parameters: {
106
+ layout: 'fullscreen',
107
+ translations: [...translations, ...shellTranslations],
108
+ },
109
+ } satisfies Meta<typeof DefaultStory>;
110
+
111
+ export default meta;
112
+
113
+ type Story = StoryObj<typeof meta>;
114
+
115
+ export const Default: Story = {};
@@ -0,0 +1,114 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework/react';
8
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
9
+ import { type Entity, Filter, type Obj, Ref, Relation } from '@dxos/echo';
10
+ import { type Space, getSpace, useQuery } from '@dxos/react-client/echo';
11
+ import { useTranslation } from '@dxos/react-ui';
12
+ import { Masonry } from '@dxos/react-ui-masonry';
13
+ import { StackItem } from '@dxos/react-ui-stack';
14
+ import { mx } from '@dxos/react-ui-theme';
15
+ import { isNonNullable } from '@dxos/util';
16
+
17
+ import { meta } from '../meta';
18
+
19
+ export const RecordArticle = ({ subject }: SurfaceComponentProps) => {
20
+ const { t } = useTranslation(meta.id);
21
+ const space = getSpace(subject);
22
+ const data = useMemo(() => ({ subject }), [subject]);
23
+ const related = useRelatedObjects(space, subject, {
24
+ references: true,
25
+ relations: true,
26
+ });
27
+ const singleColumn = related.length === 1;
28
+
29
+ return (
30
+ <StackItem.Content>
31
+ <div role='none' className={mx('flex flex-col gap-4 p-4 is-full overflow-y-auto')}>
32
+ <div role='none' className={mx('flex is-full card-max-width')}>
33
+ <Surface role='section' data={data} limit={1} />
34
+ </div>
35
+
36
+ {related.length > 0 && (
37
+ <div role='none' className={mx('flex flex-col gap-1', singleColumn ? 'card-max-width' : 'is-full')}>
38
+ <label className='mbs-2 text-sm text-description'>{t('related objects label')}</label>
39
+ <Masonry.Root<Entity.Unknown>
40
+ items={related}
41
+ render={Card}
42
+ columnCount={singleColumn ? 1 : undefined}
43
+ intrinsicHeight
44
+ />
45
+ </div>
46
+ )}
47
+ </div>
48
+ </StackItem.Content>
49
+ );
50
+ };
51
+
52
+ const Card = ({ data: subject }: { data: Entity.Unknown }) => {
53
+ const data = useMemo(() => ({ subject }), [subject]);
54
+ return <Surface role='card' data={data} limit={1} />;
55
+ };
56
+
57
+ // TODO(wittjosiah): This is a hack. ECHO needs to have a back reference index to easily query for related objects.
58
+ const useRelatedObjects = (
59
+ space?: Space,
60
+ record?: Obj.Any,
61
+ options: { references?: boolean; relations?: boolean } = {},
62
+ ) => {
63
+ const objects = useQuery(space, Filter.everything());
64
+ return useMemo(() => {
65
+ if (!record) {
66
+ return [];
67
+ }
68
+
69
+ const related: Entity.Unknown[] = [];
70
+
71
+ // TODO(burdon): Change Person => Organization to relations.
72
+ if (options.references) {
73
+ const getReferences = (obj: Entity.Unknown): Ref.Any[] => {
74
+ return Object.getOwnPropertyNames(obj)
75
+ .map((name) => obj[name as keyof Obj.Any])
76
+ .filter((value) => Ref.isRef(value)) as Ref.Any[];
77
+ };
78
+
79
+ const references = getReferences(record);
80
+ const referenceTargets = references.map((ref) => ref.target).filter(isNonNullable);
81
+ const referenceSources = objects.filter((obj) => {
82
+ const refs = getReferences(obj);
83
+ return refs.some((ref) => ref.target === record);
84
+ });
85
+
86
+ related.push(...referenceTargets, ...referenceSources);
87
+ }
88
+
89
+ if (options.relations) {
90
+ // TODO(dmaretskyi): Workaround until https://github.com/dxos/dxos/pull/10100 lands.
91
+ const isValidRelation = (obj: Relation.Any) => {
92
+ try {
93
+ return Relation.isRelation(obj) && Relation.getSource(obj) && Relation.getTarget(obj);
94
+ } catch {
95
+ return false;
96
+ }
97
+ };
98
+
99
+ const relations = objects.filter((obj) => Relation.isRelation(obj)).filter((obj) => isValidRelation(obj));
100
+ const targetObjects = relations
101
+ .filter((relation) => Relation.getTarget(relation) === record)
102
+ .map((relation) => Relation.getSource(relation));
103
+ const sourceObjects = relations
104
+ .filter((relation) => Relation.getSource(relation) === record)
105
+ .map((relation) => Relation.getTarget(relation));
106
+
107
+ related.push(...targetObjects, ...sourceObjects);
108
+ }
109
+
110
+ return related;
111
+ }, [record, objects]);
112
+ };
113
+
114
+ export default RecordArticle;
@@ -10,45 +10,24 @@ import { useTranslation } from '@dxos/react-ui';
10
10
  import { ControlPage, ControlSection, controlItemClasses } from '@dxos/react-ui-form';
11
11
  import { StackItem } from '@dxos/react-ui-stack';
12
12
 
13
- import { SPACE_PLUGIN } from '../meta';
13
+ import { meta } from '../meta';
14
14
 
15
15
  type SchemaPanelProps = { space: Space };
16
16
 
17
- // TODO(ZaymonFC):
18
- // - Support deleting Schema. This should tie in to some sort of
19
- // 'DangerZone™️' / 'Are you really sure?' / 'this might have consequences' component.
20
-
21
- /**
22
- * Subscribe to and retrieve all schemas from a space's schema registry.
23
- */
24
- export const useQuerySpaceSchemas = (space: Space): Type.Schema[] => {
25
- const [schemas, setSchemas] = useState<Type.Schema[]>([]);
26
-
27
- useEffect(() => {
28
- const query = space.db.schemaRegistry.query();
29
- const initialResults = query.runSync();
30
- setSchemas(initialResults);
31
-
32
- const unsubscribe = query.subscribe(() => setSchemas(query.results));
33
- return () => unsubscribe();
34
- }, [space]);
35
-
36
- return schemas;
37
- };
38
-
39
17
  export const SchemaContainer = ({ space }: SchemaPanelProps) => {
40
- const { t } = useTranslation(SPACE_PLUGIN);
18
+ const { t } = useTranslation(meta.id);
41
19
  const schemas = useQuerySpaceSchemas(space);
42
20
 
21
+ // TODO(ZaymonFC): Support deleting Schema (DangerZone section).
43
22
  return (
44
- <StackItem.Content classNames='block overflow-y-auto'>
23
+ <StackItem.Content scrollable>
45
24
  <ControlPage>
46
25
  <ControlSection title={t('schema verbose label')} description={t('schema description')}>
47
26
  <div role='none' className={controlItemClasses}>
48
27
  {schemas.length === 0 && <div className='text-center plb-4'>{t('no schemas found message')}</div>}
49
28
  {schemas.map((schema) => (
50
- <div key={schema.id}>
51
- <div>{schema.typename}</div>
29
+ <div role='none' key={schema.id}>
30
+ {schema.typename}
52
31
  </div>
53
32
  ))}
54
33
  </div>
@@ -57,3 +36,21 @@ export const SchemaContainer = ({ space }: SchemaPanelProps) => {
57
36
  </StackItem.Content>
58
37
  );
59
38
  };
39
+
40
+ /**
41
+ * Subscribe to and retrieve all schemas from a space's schema registry.
42
+ */
43
+ export const useQuerySpaceSchemas = (space: Space): Type.RuntimeType[] => {
44
+ const [schemas, setSchemas] = useState<Type.RuntimeType[]>([]);
45
+
46
+ useEffect(() => {
47
+ const query = space.db.schemaRegistry.query();
48
+ const initialResults = query.runSync();
49
+ setSchemas(initialResults);
50
+
51
+ const unsubscribe = query.subscribe(() => setSchemas(query.results));
52
+ return () => unsubscribe();
53
+ }, [space]);
54
+
55
+ return schemas;
56
+ };
@@ -4,18 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { createIntent } from '@dxos/app-framework';
8
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
8
9
  import { useClient } from '@dxos/react-client';
9
10
  import { useSpaces } from '@dxos/react-client/echo';
10
11
  import { IconButton, Input, List, ListItem, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
12
  import { ControlGroup, ControlItemInput, ControlPage, ControlSection, controlItemClasses } from '@dxos/react-ui-form';
12
13
 
13
- import { SPACE_PLUGIN } from '../meta';
14
+ import { meta } from '../meta';
14
15
  import { SpaceAction, type SpaceSettingsProps } from '../types';
15
16
  import { getSpaceDisplayName } from '../util';
16
17
 
17
18
  export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {
18
- const { t } = useTranslation(SPACE_PLUGIN);
19
+ const { t } = useTranslation(meta.id);
19
20
  const client = useClient();
20
21
  const spaces = useSpaces({ all: settings.showHidden });
21
22
  const { dispatchPromise: dispatch } = useIntentDispatcher();
@@ -36,7 +37,12 @@ export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps
36
37
  <ListItem.Root key={space.id} classNames='is-full items-center'>
37
38
  {/* TODO(burdon): Should auto center and truncate; NOTE truncate doesn't work with flex grow. */}
38
39
  <ListItem.Heading classNames='grow truncate !min-bs-0'>
39
- {toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t)}
40
+ {toLocalizedString(
41
+ getSpaceDisplayName(space, {
42
+ personal: space === client.spaces.default,
43
+ }),
44
+ t,
45
+ )}
40
46
  </ListItem.Heading>
41
47
  <IconButton
42
48
  icon='ph--faders--regular'
@@ -2,20 +2,18 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta, type StoryObj } from '@storybook/react-vite';
5
+ import { type Meta } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
8
  import { IdentityDid, PublicKey } from '@dxos/keys';
11
9
  import { HaloSpaceMember, SpaceMember } from '@dxos/react-client/echo';
12
- import { withLayout, withTheme } from '@dxos/storybook-utils';
10
+ import { withTheme } from '@dxos/react-ui/testing';
13
11
 
14
- import { translations } from '../translations';
12
+ import { translations } from '../../translations';
15
13
 
16
14
  import { FullPresence, type Member, type MemberPresenceProps, SmallPresence } from './SpacePresence';
17
15
 
18
- const nViewers = (n: number, currentlyAttended = true): Member[] =>
16
+ const viewers = (n: number, currentlyAttended = true): Member[] =>
19
17
  Array.from({ length: n }, () => ({
20
18
  role: HaloSpaceMember.Role.ADMIN,
21
19
  identity: { did: IdentityDid.random(), identityKey: PublicKey.random() },
@@ -24,6 +22,16 @@ const nViewers = (n: number, currentlyAttended = true): Member[] =>
24
22
  currentlyAttended,
25
23
  }));
26
24
 
25
+ const meta = {
26
+ title: 'plugins/plugin-space/SpacePresence',
27
+ decorators: [withTheme],
28
+ parameters: {
29
+ translations,
30
+ },
31
+ } satisfies Meta<typeof IdentityDid>;
32
+
33
+ export default meta;
34
+
27
35
  export const Full = (props: MemberPresenceProps) => {
28
36
  const p: MemberPresenceProps = {
29
37
  ...props,
@@ -32,31 +40,31 @@ export const Full = (props: MemberPresenceProps) => {
32
40
  return (
33
41
  <div className='p-4'>
34
42
  <div className='p-3'>
35
- <FullPresence members={nViewers(1)} {...p} />
43
+ <FullPresence members={viewers(1)} {...p} />
36
44
  </div>
37
45
  <div className='p-3'>
38
- <FullPresence members={nViewers(2)} {...p} />
46
+ <FullPresence members={viewers(2)} {...p} />
39
47
  </div>
40
48
  <div className='p-3'>
41
- <FullPresence members={nViewers(3)} {...p} />
49
+ <FullPresence members={viewers(3)} {...p} />
42
50
  </div>
43
51
  <div className='p-3'>
44
- <FullPresence members={nViewers(3, false)} {...p} />
52
+ <FullPresence members={viewers(3, false)} {...p} />
45
53
  </div>
46
54
  <div className='p-3'>
47
- <FullPresence members={nViewers(4)} {...p} />
55
+ <FullPresence members={viewers(4)} {...p} />
48
56
  </div>
49
57
  <div className='p-3'>
50
- <FullPresence members={nViewers(5)} {...p} />
58
+ <FullPresence members={viewers(5)} {...p} />
51
59
  </div>
52
60
  <div className='p-3'>
53
- <FullPresence members={nViewers(5, false)} {...p} />
61
+ <FullPresence members={viewers(5, false)} {...p} />
54
62
  </div>
55
63
  <div className='p-3'>
56
- <FullPresence members={nViewers(10)} {...p} />
64
+ <FullPresence members={viewers(10)} {...p} />
57
65
  </div>
58
66
  <div className='p-3'>
59
- <FullPresence members={nViewers(100)} {...p} />
67
+ <FullPresence members={viewers(100)} {...p} />
60
68
  </div>
61
69
  </div>
62
70
  );
@@ -98,13 +106,3 @@ export const Small = () => {
98
106
  </div>
99
107
  );
100
108
  };
101
-
102
- const meta = {
103
- title: 'plugins/plugin-space/SpacePresence',
104
- decorators: [withTheme, withLayout()],
105
- parameters: { translations },
106
- } satisfies Meta<typeof IdentityDid>;
107
-
108
- export default meta;
109
-
110
- type Story = StoryObj<typeof meta>;
@@ -2,14 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Option } from 'effect';
5
+ import * as Option from 'effect/Option';
6
6
  import React, { forwardRef, useCallback, useEffect, useState } from 'react';
7
7
 
8
- import { useAppGraph, useCapability } from '@dxos/app-framework';
8
+ import { useAppGraph, useCapability } from '@dxos/app-framework/react';
9
9
  import { generateName } from '@dxos/display-name';
10
- import { type Type } from '@dxos/echo';
10
+ import { Obj } from '@dxos/echo';
11
11
  import { PublicKey, useClient } from '@dxos/react-client';
12
- import { type SpaceMember, fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';
12
+ import { type SpaceMember, getSpace, useMembers } from '@dxos/react-client/echo';
13
13
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
14
14
  import {
15
15
  Avatar,
@@ -27,10 +27,10 @@ import {
27
27
  import { AttentionGlyph, type AttentionGlyphProps, useAttended, useAttention } from '@dxos/react-ui-attention';
28
28
  import { ComplexMap, keyToFallback } from '@dxos/util';
29
29
 
30
- import { SpaceCapabilities } from '../capabilities';
31
- import { usePath } from '../hooks';
32
- import { SPACE_PLUGIN } from '../meta';
33
- import type { ObjectViewerProps } from '../types';
30
+ import { SpaceCapabilities } from '../../capabilities';
31
+ import { usePath } from '../../hooks';
32
+ import { meta } from '../../meta';
33
+ import { type ObjectViewerProps } from '../../types';
34
34
 
35
35
  // TODO(thure): Get/derive these values from protocol
36
36
  const REFRESH_INTERVAL = 5000;
@@ -42,7 +42,12 @@ const noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);
42
42
  // TODO(wittjosiah): Factor out?
43
43
  const getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
44
44
 
45
- export const SpacePresence = ({ object, spaceKey }: { object: Type.Expando; spaceKey?: PublicKey }) => {
45
+ export type SpacePresenceProps = {
46
+ object: Obj.Any;
47
+ spaceKey?: PublicKey;
48
+ };
49
+
50
+ export const SpacePresence = ({ object, spaceKey }: SpacePresenceProps) => {
46
51
  // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
47
52
  const spaceState = useCapability(SpaceCapabilities.MutableState);
48
53
  const client = useClient();
@@ -70,7 +75,7 @@ export const SpacePresence = ({ object, spaceKey }: { object: Type.Expando; spac
70
75
  return null;
71
76
  }
72
77
 
73
- const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId(object)] ?? noViewers;
78
+ const currentObjectViewers = spaceState.viewersByObject[Obj.getDXN(object).toString()] ?? noViewers;
74
79
 
75
80
  const membersForObject = spaceMembers
76
81
  .filter((member) => memberOnline(member) && memberIsNotSelf(member))
@@ -254,7 +259,7 @@ export type SmallPresenceProps = {
254
259
  } & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
255
260
 
256
261
  export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
257
- const { t } = useTranslation(SPACE_PLUGIN);
262
+ const { t } = useTranslation(meta.id);
258
263
 
259
264
  return (
260
265
  <Tooltip.Trigger asChild content={t('presence label', { count })} side='bottom'>
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './SpacePresence';
@@ -4,16 +4,17 @@
4
4
 
5
5
  import React, { useCallback, useRef, useState } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type Space } from '@dxos/react-client/echo';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
9
+ import { type Space } from '@dxos/client/echo';
9
10
  import { Button, Input, Popover, useTranslation } from '@dxos/react-ui';
10
11
 
11
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../../meta';
12
13
 
13
- export const POPOVER_RENAME_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;
14
+ export const SPACE_RENAME_POPOVER = `${meta.id}/SpaceRenamePopover`;
14
15
 
15
- export const PopoverRenameSpace = ({ space }: { space: Space }) => {
16
- const { t } = useTranslation(SPACE_PLUGIN);
16
+ export const SpaceRenamePopover = ({ space }: { space: Space }) => {
17
+ const { t } = useTranslation(meta.id);
17
18
  const doneButton = useRef<HTMLButtonElement>(null);
18
19
  const [name, setName] = useState(space.properties.name ?? '');
19
20
  const { dispatchPromise: dispatch } = useIntentDispatcher();
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './SpaceRenamePopover';
@@ -2,13 +2,13 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
11
- import { withTheme } from '@dxos/storybook-utils';
11
+ import { withTheme } from '@dxos/react-ui/testing';
12
12
 
13
13
  import { translations } from '../../translations';
14
14
 
@@ -27,7 +27,12 @@ const meta = {
27
27
  title: 'plugins/plugin-space/SpaceSettingsContainer',
28
28
  component: SpaceSettingsContainer,
29
29
  render: Story,
30
- decorators: [withClientProvider({ createIdentity: true, createSpace: true }), withTheme],
30
+ decorators: [
31
+ withTheme,
32
+ withClientProvider({ createIdentity: true, createSpace: true }),
33
+ // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
34
+ withPluginManager({ plugins: [IntentPlugin()] }),
35
+ ],
31
36
  parameters: {
32
37
  translations,
33
38
  layout: 'centered',