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

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 (265) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionMain-AX7KKXWP.mjs} +4 -4
  2. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs +145 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs +151 -0
  6. package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs.map +7 -0
  7. package/dist/lib/browser/RecordMain-MV535I2C.mjs +119 -0
  8. package/dist/lib/browser/RecordMain-MV535I2C.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-AFC6PNAB.mjs → app-graph-builder-6SNKPPKD.mjs} +61 -58
  10. package/dist/lib/browser/app-graph-builder-6SNKPPKD.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-Q7QG4EKW.mjs → app-graph-serializer-YGUHIKUW.mjs} +14 -14
  12. package/dist/lib/browser/app-graph-serializer-YGUHIKUW.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-WZYRDFW7.mjs → chunk-2IAM4LHT.mjs} +12 -4
  14. package/dist/lib/browser/chunk-2IAM4LHT.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-S33AYKSS.mjs → chunk-AB7EFWFA.mjs} +47 -38
  16. package/dist/lib/browser/chunk-AB7EFWFA.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-EIXZABXD.mjs +19 -0
  18. package/dist/lib/browser/chunk-EIXZABXD.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-IRKDREHY.mjs +11 -0
  20. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-6GRF7NEF.mjs → chunk-KXSDZJ5T.mjs} +258 -289
  22. package/dist/lib/browser/chunk-KXSDZJ5T.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-RLI2IAHK.mjs +20 -0
  24. package/dist/lib/browser/chunk-RLI2IAHK.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-TIVKWB5L.mjs +166 -0
  26. package/dist/lib/browser/chunk-TIVKWB5L.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-URST7EEN.mjs → chunk-WS2PJDES.mjs} +13 -9
  28. package/dist/lib/browser/chunk-WS2PJDES.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-PW2BA46S.mjs} +3 -3
  30. package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs.map → identity-created-PW2BA46S.mjs.map} +1 -1
  31. package/dist/lib/browser/index.mjs +34 -31
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-CO262Q44.mjs → intent-resolver-XQSUBM5U.mjs} +30 -28
  34. package/dist/lib/browser/intent-resolver-XQSUBM5U.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/{react-root-K4IVLFYZ.mjs → react-root-OIXDY6US.mjs} +11 -11
  37. package/dist/lib/browser/react-root-OIXDY6US.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-TPUOK2LC.mjs → react-surface-I4BQVF7V.mjs} +42 -73
  39. package/dist/lib/browser/react-surface-I4BQVF7V.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-YDPFZELA.mjs → schema-defs-7R7RKCAE.mjs} +5 -5
  41. package/dist/lib/browser/{schema-defs-YDPFZELA.mjs.map → schema-defs-7R7RKCAE.mjs.map} +1 -1
  42. package/dist/lib/browser/{settings-ZYH2JWNI.mjs → settings-OBFJ67ZG.mjs} +5 -5
  43. package/dist/lib/browser/{settings-ZYH2JWNI.mjs.map → settings-OBFJ67ZG.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-3I5LISH4.mjs → spaces-ready-6YB55EJK.mjs} +8 -8
  45. package/dist/lib/browser/spaces-ready-6YB55EJK.mjs.map +7 -0
  46. package/dist/lib/browser/{state-2RGW7FQG.mjs → state-LSPRFIRO.mjs} +7 -7
  47. package/dist/lib/browser/state-LSPRFIRO.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionMain-EU57SRYK.mjs} +4 -4
  50. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs +146 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs +152 -0
  54. package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordMain-ME2BU65P.mjs +120 -0
  56. package/dist/lib/node-esm/RecordMain-ME2BU65P.mjs.map +7 -0
  57. package/dist/lib/node-esm/{app-graph-builder-OW2EBYRI.mjs → app-graph-builder-PYG5N3FB.mjs} +61 -58
  58. package/dist/lib/node-esm/app-graph-builder-PYG5N3FB.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-6PGC5WR5.mjs → app-graph-serializer-FVQ2WB3U.mjs} +14 -14
  60. package/dist/lib/node-esm/app-graph-serializer-FVQ2WB3U.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-RXDT5LA5.mjs → chunk-4F25JKVT.mjs} +13 -9
  62. package/dist/lib/node-esm/chunk-4F25JKVT.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-LGNPMOXU.mjs → chunk-DNRBVD2G.mjs} +12 -4
  64. package/dist/lib/node-esm/chunk-DNRBVD2G.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-GHL2523Z.mjs +167 -0
  66. package/dist/lib/node-esm/chunk-GHL2523Z.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H5UPFRRH.mjs +21 -0
  68. package/dist/lib/node-esm/chunk-H5UPFRRH.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-HWNG4MEU.mjs → chunk-MWNATOXL.mjs} +2 -4
  70. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-TEUN2E4F.mjs → chunk-QHAVT7PC.mjs} +47 -38
  72. package/dist/lib/node-esm/chunk-QHAVT7PC.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +20 -0
  74. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-NMCD2PSG.mjs → chunk-X55EOSEF.mjs} +258 -289
  76. package/dist/lib/node-esm/chunk-X55EOSEF.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-AL7NNCKH.mjs → identity-created-MWTLGQRU.mjs} +3 -3
  78. package/dist/lib/node-esm/{identity-created-AL7NNCKH.mjs.map → identity-created-MWTLGQRU.mjs.map} +1 -1
  79. package/dist/lib/node-esm/index.mjs +34 -31
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-EXPK4B76.mjs → intent-resolver-27YPEIWX.mjs} +30 -28
  82. package/dist/lib/node-esm/intent-resolver-27YPEIWX.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-K7YPW753.mjs} +11 -11
  85. package/dist/lib/node-esm/react-root-K7YPW753.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-WXEXIDB7.mjs → react-surface-F5LL3JUY.mjs} +42 -73
  87. package/dist/lib/node-esm/react-surface-F5LL3JUY.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-OYBCWKAS.mjs → schema-defs-RYG5DSUE.mjs} +5 -5
  89. package/dist/lib/node-esm/{schema-defs-OYBCWKAS.mjs.map → schema-defs-RYG5DSUE.mjs.map} +1 -1
  90. package/dist/lib/node-esm/{settings-2RYFMMTP.mjs → settings-QGWWNMMZ.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-2RYFMMTP.mjs.map → settings-QGWWNMMZ.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-JAP22P57.mjs → spaces-ready-EPHL7RGX.mjs} +8 -8
  93. package/dist/lib/node-esm/spaces-ready-EPHL7RGX.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-7VBVBGNS.mjs → state-TCGOPLRO.mjs} +7 -7
  95. package/dist/lib/node-esm/state-TCGOPLRO.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 +4 -3
  101. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  103. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
  104. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  105. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +80 -1
  106. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +1 -1
  108. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  109. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  110. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  111. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  112. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  113. package/dist/types/src/components/MembersContainer.stories.d.ts +80 -1
  114. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  115. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  116. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  117. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  118. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  119. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  120. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  121. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +1 -1
  122. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  123. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1500 -0
  124. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  126. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  127. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  128. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  129. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -1
  130. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  131. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
  132. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  133. package/dist/types/src/components/RecordMain.d.ts +1 -1
  134. package/dist/types/src/components/RecordMain.d.ts.map +1 -1
  135. package/dist/types/src/components/SpacePresence.stories.d.ts +82 -3
  136. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  138. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +80 -1
  139. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  141. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +81 -2
  142. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +4 -4
  145. package/dist/types/src/components/index.d.ts.map +1 -1
  146. package/dist/types/src/events.d.ts.map +1 -1
  147. package/dist/types/src/hooks/index.d.ts +1 -0
  148. package/dist/types/src/hooks/index.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  150. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  151. package/dist/types/src/hooks/usePath.d.ts +1 -1
  152. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  153. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  154. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  155. package/dist/types/src/meta.d.ts +0 -1
  156. package/dist/types/src/meta.d.ts.map +1 -1
  157. package/dist/types/src/translations.d.ts +80 -0
  158. package/dist/types/src/translations.d.ts.map +1 -1
  159. package/dist/types/src/types/types.d.ts +54 -52
  160. package/dist/types/src/types/types.d.ts.map +1 -1
  161. package/dist/types/src/util.d.ts +6 -3
  162. package/dist/types/src/util.d.ts.map +1 -1
  163. package/dist/types/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +61 -59
  165. package/src/SpacePlugin.ts +206 -200
  166. package/src/capabilities/app-graph-builder.ts +53 -46
  167. package/src/capabilities/app-graph-serializer.ts +7 -7
  168. package/src/capabilities/capabilities.ts +15 -10
  169. package/src/capabilities/intent-resolver.ts +19 -19
  170. package/src/capabilities/react-root.tsx +2 -2
  171. package/src/capabilities/react-surface.tsx +31 -102
  172. package/src/capabilities/spaces-ready.ts +1 -1
  173. package/src/capabilities/state.ts +2 -2
  174. package/src/components/AwaitingObject.tsx +2 -2
  175. package/src/components/CollectionMain.tsx +2 -2
  176. package/src/components/CollectionSection.tsx +2 -2
  177. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +5 -5
  178. package/src/components/CreateDialog/CreateObjectDialog.tsx +8 -7
  179. package/src/components/CreateDialog/CreateObjectPanel.tsx +6 -6
  180. package/src/components/CreateDialog/CreateSpaceDialog.tsx +5 -4
  181. package/src/components/JoinDialog.tsx +6 -6
  182. package/src/components/MembersContainer.stories.tsx +6 -5
  183. package/src/components/MembersContainer.tsx +6 -6
  184. package/src/components/MenuFooter.tsx +2 -2
  185. package/src/components/{ObjectDetailsPanel.tsx → ObjectDetailsPanel/ObjectDetailsPanel.tsx} +9 -36
  186. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +75 -0
  187. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  188. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  189. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  190. package/src/components/ObjectSettings/BaseObjectSettings.tsx +96 -26
  191. package/src/components/ObjectSettings/ForeignKeys.tsx +3 -3
  192. package/src/components/ObjectSettings/index.ts +3 -1
  193. package/src/components/PersistenceStatus.tsx +2 -2
  194. package/src/components/PopoverRenameObject.tsx +3 -3
  195. package/src/components/PopoverRenameSpace.tsx +3 -3
  196. package/src/components/RecordMain.tsx +61 -9
  197. package/src/components/SchemaContainer.tsx +3 -3
  198. package/src/components/SpacePluginSettings.tsx +2 -2
  199. package/src/components/SpacePresence.stories.tsx +22 -24
  200. package/src/components/SpacePresence.tsx +3 -3
  201. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  202. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +13 -12
  203. package/src/components/SyncStatus/InlineSyncStatus.tsx +7 -7
  204. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  205. package/src/components/SyncStatus/SyncStatus.tsx +92 -5
  206. package/src/components/ViewEditor.tsx +6 -7
  207. package/src/components/index.ts +1 -1
  208. package/src/events.ts +6 -6
  209. package/src/hooks/index.ts +1 -0
  210. package/src/hooks/useInputSurfaceLookup.tsx +1 -1
  211. package/src/hooks/usePath.ts +1 -1
  212. package/src/hooks/useTypeOptions.ts +59 -0
  213. package/src/meta.ts +1 -3
  214. package/src/translations.ts +10 -1
  215. package/src/types/types.ts +11 -7
  216. package/src/util.tsx +46 -32
  217. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  218. package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs +0 -90
  219. package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs.map +0 -7
  220. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  221. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  222. package/dist/lib/browser/app-graph-builder-AFC6PNAB.mjs.map +0 -7
  223. package/dist/lib/browser/app-graph-serializer-Q7QG4EKW.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-6GRF7NEF.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  226. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-ELJDGQTO.mjs +0 -94
  228. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  229. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  230. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-S33AYKSS.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  233. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-URST7EEN.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-WZYRDFW7.mjs.map +0 -7
  236. package/dist/lib/browser/intent-resolver-CO262Q44.mjs.map +0 -7
  237. package/dist/lib/browser/react-root-K4IVLFYZ.mjs.map +0 -7
  238. package/dist/lib/browser/react-surface-TPUOK2LC.mjs.map +0 -7
  239. package/dist/lib/browser/spaces-ready-3I5LISH4.mjs.map +0 -7
  240. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  241. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  242. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs +0 -91
  243. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs.map +0 -7
  244. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  245. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  246. package/dist/lib/node-esm/app-graph-builder-OW2EBYRI.mjs.map +0 -7
  247. package/dist/lib/node-esm/app-graph-serializer-6PGC5WR5.mjs.map +0 -7
  248. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  249. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  251. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  253. package/dist/lib/node-esm/chunk-LGNPMOXU.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-NMCD2PSG.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs +0 -96
  256. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-RXDT5LA5.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-TEUN2E4F.mjs.map +0 -7
  259. package/dist/lib/node-esm/intent-resolver-EXPK4B76.mjs.map +0 -7
  260. package/dist/lib/node-esm/react-root-4OQ7MPGW.mjs.map +0 -7
  261. package/dist/lib/node-esm/react-surface-WXEXIDB7.mjs.map +0 -7
  262. package/dist/lib/node-esm/spaces-ready-JAP22P57.mjs.map +0 -7
  263. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  264. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  265. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
@@ -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
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,7 +2,7 @@
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
8
  import { useAppGraph, useCapability } from '@dxos/app-framework';
@@ -29,7 +29,7 @@ import { ComplexMap, keyToFallback } from '@dxos/util';
29
29
 
30
30
  import { SpaceCapabilities } from '../capabilities';
31
31
  import { usePath } from '../hooks';
32
- import { SPACE_PLUGIN } from '../meta';
32
+ import { meta } from '../meta';
33
33
  import type { ObjectViewerProps } from '../types';
34
34
 
35
35
  // TODO(thure): Get/derive these values from protocol
@@ -254,7 +254,7 @@ export type SmallPresenceProps = {
254
254
  } & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
255
255
 
256
256
  export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
257
- const { t } = useTranslation(SPACE_PLUGIN);
257
+ const { t } = useTranslation(meta.id);
258
258
 
259
259
  return (
260
260
  <Tooltip.Trigger asChild content={t('presence label', { count })} side='bottom'>
@@ -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',
@@ -2,7 +2,8 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema, pipe } from 'effect';
5
+ import * as Function from 'effect/Function';
6
+ import * as Schema from 'effect/Schema';
6
7
  import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
7
8
 
8
9
  import { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
@@ -22,7 +23,7 @@ import {
22
23
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
23
24
  import { StackItem } from '@dxos/react-ui-stack';
24
25
 
25
- import { SPACE_PLUGIN } from '../../meta';
26
+ import { meta } from '../../meta';
26
27
  import { SpaceAction, SpaceForm } from '../../types';
27
28
 
28
29
  const FormSchema = SpaceForm.pipe(
@@ -35,7 +36,7 @@ export type SpaceSettingsContainerProps = {
35
36
 
36
37
  // TODO(wittjosiah): Handle space migrations here?
37
38
  export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) => {
38
- const { t } = useTranslation(SPACE_PLUGIN);
39
+ const { t } = useTranslation(meta.id);
39
40
  const { dispatchPromise: dispatch } = useIntentDispatcher();
40
41
  const client = useClient();
41
42
  const archived = useMulticastObservable(space.state) === SpaceState.SPACE_INACTIVE;
@@ -69,7 +70,7 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
69
70
  }
70
71
  if (properties.archived && !archived) {
71
72
  void dispatch(
72
- pipe(
73
+ Function.pipe(
73
74
  createIntent(SpaceAction.Close, { space }),
74
75
  chain(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: client.spaces.default.id }),
75
76
  ),
@@ -111,14 +112,14 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
111
112
  );
112
113
  },
113
114
  icon: ({ type, label, getValue, onValueChange }) => {
114
- const handleChange = useCallback((nextEmoji: string) => onValueChange(type, nextEmoji), [onValueChange, type]);
115
- const handleEmojiReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
115
+ const handleChange = useCallback((icon: string) => onValueChange(type, icon), [onValueChange, type]);
116
+ const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
116
117
  return (
117
118
  <ControlItem title={label} description={t('icon description')}>
118
119
  <IconPicker
119
120
  value={getValue()}
120
121
  onChange={handleChange}
121
- onReset={handleEmojiReset}
122
+ onReset={handleReset}
122
123
  classNames='justify-self-end'
123
124
  iconSize={5}
124
125
  />
@@ -127,13 +128,13 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
127
128
  },
128
129
  hue: ({ type, label, getValue, onValueChange }) => {
129
130
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);
130
- const handleHueReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
131
+ const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
131
132
  return (
132
133
  <ControlItem title={label} description={t('hue description')}>
133
134
  <HuePicker
134
135
  value={getValue()}
135
136
  onChange={handleChange}
136
- onReset={handleHueReset}
137
+ onReset={handleReset}
137
138
  classNames='[--hue-preview-size:1.25rem] justify-self-end'
138
139
  />
139
140
  </ControlItem>
@@ -162,11 +163,11 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
162
163
  );
163
164
 
164
165
  return (
165
- <StackItem.Content classNames='block overflow-y-auto'>
166
+ <StackItem.Content scrollable>
166
167
  <ControlPage>
167
168
  <ControlSection
168
- title={t('space properties settings verbose label', { ns: SPACE_PLUGIN })}
169
- description={t('space properties settings description', { ns: SPACE_PLUGIN })}
169
+ title={t('space properties settings verbose label', { ns: meta.id })}
170
+ description={t('space properties settings description', { ns: meta.id })}
170
171
  >
171
172
  <Form
172
173
  schema={FormSchema}
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Option } from 'effect';
5
+ import * as Option from 'effect/Option';
6
6
  import React, { useEffect, useState } from 'react';
7
7
 
8
8
  import { useAppGraph } from '@dxos/app-framework';
@@ -14,14 +14,14 @@ import { Tooltip, useTranslation } from '@dxos/react-ui';
14
14
  import { AttentionGlyph, useAttended, useAttention } from '@dxos/react-ui-attention';
15
15
 
16
16
  import { usePath } from '../../hooks';
17
- import { SPACE_PLUGIN } from '../../meta';
17
+ import { meta } from '../../meta';
18
18
 
19
- const useEdgeStatus = (): EdgeStatus => {
20
- const [status, setStatus] = useState(EdgeStatus.NOT_CONNECTED);
19
+ const useEdgeStatus = (): EdgeStatus.ConnectionState => {
20
+ const [status, setStatus] = useState(EdgeStatus.ConnectionState.NOT_CONNECTED);
21
21
  const client = useClient();
22
22
  useEffect(() => {
23
23
  client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {
24
- setStatus(status);
24
+ setStatus(status.state);
25
25
  });
26
26
  }, [client]);
27
27
 
@@ -29,7 +29,7 @@ const useEdgeStatus = (): EdgeStatus => {
29
29
  };
30
30
 
31
31
  export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean }) => {
32
- const { t } = useTranslation(SPACE_PLUGIN);
32
+ const { t } = useTranslation(meta.id);
33
33
  const id = space.id;
34
34
  const { hasAttention, isAncestor, isRelated } = useAttention(id);
35
35
  const isAttended = hasAttention || isAncestor || isRelated;
@@ -43,7 +43,7 @@ export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean
43
43
  const path = usePath(graph, startOfAttention);
44
44
  const containsAttended = !open && !isAttended && id && Option.isSome(path) ? path.value.includes(id) : false;
45
45
 
46
- const connectedToEdge = useEdgeStatus() === EdgeStatus.CONNECTED;
46
+ const connectedToEdge = useEdgeStatus() === EdgeStatus.ConnectionState.CONNECTED;
47
47
  // TODO(wittjosiah): This is not reactive.
48
48
  const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;
49
49
  const syncState = useSpaceSyncState(space);
@@ -2,11 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
 
9
- import { withTheme } from '@dxos/storybook-utils';
7
+ import { withClientProvider } from '@dxos/react-client/testing';
8
+ import { withTheme } from '@dxos/react-ui/testing';
10
9
 
11
10
  import { translations } from '../../translations';
12
11
 
@@ -15,10 +14,10 @@ import { SyncStatusIndicator } from './SyncStatus';
15
14
  const meta = {
16
15
  title: 'plugins/plugin-space/SyncStatusIndicator',
17
16
  component: SyncStatusIndicator,
18
- decorators: [withTheme],
17
+ decorators: [withTheme, withClientProvider({ createIdentity: true })],
19
18
  parameters: {
20
- translations,
21
19
  layout: 'centered',
20
+ translations,
22
21
  },
23
22
  } satisfies Meta<typeof SyncStatusIndicator>;
24
23
 
@@ -5,11 +5,16 @@
5
5
  import React, { useEffect, useState } from 'react';
6
6
 
7
7
  import { StatusBar } from '@dxos/plugin-status-bar';
8
+ import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
9
+ import type { QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
8
10
  import { useClient } from '@dxos/react-client';
11
+ import { useStream } from '@dxos/react-client/devtools';
9
12
  import { type SpaceSyncStateMap, getSyncSummary, useSyncState } from '@dxos/react-client/echo';
10
- import { Icon, useTranslation } from '@dxos/react-ui';
13
+ import { Icon, Popover, useTranslation } from '@dxos/react-ui';
14
+ import { mx } from '@dxos/react-ui-theme';
15
+ import { Unit } from '@dxos/util';
11
16
 
12
- import { SPACE_PLUGIN } from '../../meta';
17
+ import { meta } from '../../meta';
13
18
 
14
19
  import { createClientSaveTracker } from './save-tracker';
15
20
  import { getIcon, getStatus } from './status';
@@ -31,7 +36,7 @@ export const SyncStatus = () => {
31
36
  };
32
37
 
33
38
  export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: boolean }) => {
34
- const { t } = useTranslation(SPACE_PLUGIN);
39
+ const { t } = useTranslation(meta.id);
35
40
  const summary = getSyncSummary(state);
36
41
  const offline = Object.values(state).length === 0;
37
42
  const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
@@ -53,7 +58,89 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
53
58
  }, [offline, needsToUpload, needsToDownload]);
54
59
 
55
60
  const title = t(`${status} label`);
56
- const icon = <Icon icon={getIcon(status)} size={4} classNames={classNames} />;
61
+ const icon = <Icon icon={getIcon(status)} classNames={classNames} />;
57
62
 
58
- return <StatusBar.Item title={title}>{icon}</StatusBar.Item>;
63
+ return (
64
+ <Popover.Root>
65
+ <Popover.Trigger asChild>
66
+ <StatusBar.Item title={title}>{icon}</StatusBar.Item>
67
+ </Popover.Trigger>
68
+ <Popover.Portal>
69
+ <Popover.Content>
70
+ <EdgeConnectionPopover />
71
+ <Popover.Arrow />
72
+ </Popover.Content>
73
+ </Popover.Portal>
74
+ </Popover.Root>
75
+ );
76
+ };
77
+
78
+ const useEdgeStatus = (): EdgeStatus | undefined => {
79
+ const client = useClient();
80
+ const { status } = useStream(
81
+ () => client.services.services.EdgeAgentService!.queryEdgeStatus(),
82
+ {} as QueryEdgeStatusResponse,
83
+ );
84
+ return status;
85
+ };
86
+
87
+ const EdgeConnectionPopover = () => {
88
+ const status = useEdgeStatus();
89
+ const { t } = useTranslation(meta.id);
90
+
91
+ const isConnected = status?.state === EdgeStatus.ConnectionState.CONNECTED;
92
+
93
+ return (
94
+ <div className='min-is-[240px] p-2'>
95
+ {/* Connection Status Header */}
96
+ <div className='flex items-center gap-2 mbe-2'>
97
+ <Icon
98
+ icon={isConnected ? 'ph--check-circle--regular' : 'ph--warning-circle--regular'}
99
+ classNames={mx(isConnected ? 'text-successText' : 'text-errorText animate-pulse')}
100
+ />
101
+ <span className='font-medium text-sm'>
102
+ {isConnected ? t('sync edge connected label') : t('sync edge disconnected label')}
103
+ </span>
104
+ </div>
105
+
106
+ {/* Connection Details */}
107
+ {status?.state === EdgeStatus.ConnectionState.NOT_CONNECTED && (
108
+ <div className='flex items-center gap-2 text-sm text-description'>
109
+ <Icon icon='ph--cloud-x--regular' />
110
+ <span>{t('sync no connection label')}</span>
111
+ </div>
112
+ )}
113
+
114
+ {status?.state === EdgeStatus.ConnectionState.CONNECTED && (
115
+ <div className='space-y-2'>
116
+ {/* Latency */}
117
+ <div className='flex items-center justify-between'>
118
+ <div className='flex items-center gap-2 text-sm text-description'>
119
+ <Icon icon='ph--timer--regular' />
120
+ <span>{t('sync latency label')}</span>
121
+ </div>
122
+ <span className='text-sm font-mono'>{status.rtt.toFixed(0)} ms</span>
123
+ </div>
124
+
125
+ {/* Upload Speed */}
126
+ <div className='flex items-center justify-between'>
127
+ <div className='flex items-center gap-2 text-sm text-description'>
128
+ <Icon icon='ph--arrow-up--regular' />
129
+ <span>{t('sync upload label')}</span>
130
+ </div>
131
+ <span className='text-sm font-mono'>{Unit.Kilobyte(status.rateBytesUp, 0)}/s</span>
132
+ </div>
133
+
134
+ {/* Download Speed */}
135
+ <div className='flex items-center justify-between'>
136
+ <div className='flex items-center gap-2 text-sm text-description'>
137
+ <Icon icon='ph--arrow-down--regular' />
138
+ <span>{t('sync download label')}</span>
139
+ </div>
140
+ <span className='text-sm font-mono'>{Unit.Kilobyte(status.rateBytesDown, 0)}/s</span>
141
+ </div>
142
+ </div>
143
+ )}
144
+ </div>
145
+ );
59
146
  };
@@ -5,12 +5,12 @@
5
5
  import React, { useCallback } from 'react';
6
6
 
7
7
  import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { Filter, Query, Type } from '@dxos/echo';
8
+ import { type QueryAST, Type } from '@dxos/echo';
9
9
  import { invariant } from '@dxos/invariant';
10
10
  import { useClient } from '@dxos/react-client';
11
11
  import { getSpace, useSchema } from '@dxos/react-client/echo';
12
12
  import { ViewEditor as NaturalViewEditor } from '@dxos/react-ui-form';
13
- import { type DataType, typenameFromQuery } from '@dxos/schema';
13
+ import { type DataType, getTypenameFromQuery } from '@dxos/schema';
14
14
 
15
15
  import { SpaceAction } from '../types';
16
16
 
@@ -20,17 +20,16 @@ export const ViewEditor = ({ view }: ViewEditorProps) => {
20
20
  const { dispatchPromise: dispatch } = useIntentDispatcher();
21
21
  const client = useClient();
22
22
  const space = getSpace(view);
23
- const typename = view.query ? typenameFromQuery(view.query) : undefined;
23
+ const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
24
24
  const schema = useSchema(client, space, typename);
25
25
 
26
26
  const handleUpdateQuery = useCallback(
27
- (typename: string) => {
27
+ (newQuery: QueryAST.Query) => {
28
28
  invariant(schema);
29
29
  invariant(Type.isMutable(schema));
30
30
 
31
- const newQuery = Query.select(Filter.typename(typename));
32
- view.query = newQuery.ast;
33
- schema.updateTypename(typename);
31
+ view.query.ast = newQuery;
32
+ schema.updateTypename(getTypenameFromQuery(newQuery));
34
33
  },
35
34
  [view, schema],
36
35
  );
@@ -10,7 +10,6 @@ export * from './CollectionSection';
10
10
  export * from './JoinDialog';
11
11
  export * from './MembersContainer';
12
12
  export * from './MenuFooter';
13
- export * from './ObjectSettings';
14
13
  export * from './PersistenceStatus';
15
14
  export * from './PopoverRenameObject';
16
15
  export * from './PopoverRenameSpace';
@@ -23,4 +22,5 @@ export * from './ViewEditor';
23
22
 
24
23
  export const CollectionMain = lazy(() => import('./CollectionMain'));
25
24
  export const ObjectDetailsPanel = lazy(() => import('./ObjectDetailsPanel'));
25
+ export const ObjectSettingsContainer = lazy(() => import('./ObjectSettings'));
26
26
  export const RecordMain = lazy(() => import('./RecordMain'));
package/src/events.ts CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  import { Events, defineEvent } from '@dxos/app-framework';
6
6
 
7
- import { SPACE_PLUGIN } from './meta';
7
+ import { meta } from './meta';
8
8
 
9
9
  export namespace SpaceEvents {
10
- export const StateReady = Events.createStateEvent(`${SPACE_PLUGIN}/event/state-ready`);
11
- export const SetupSettingsPanel = defineEvent(`${SPACE_PLUGIN}/event/setup-settings-panel`);
12
- export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
13
- export const SpaceCreated = defineEvent(`${SPACE_PLUGIN}/event/space-created`);
14
- export const SchemaAdded = defineEvent(`${SPACE_PLUGIN}/event/schema-added`);
10
+ export const StateReady = Events.createStateEvent(`${meta.id}/event/state-ready`);
11
+ export const SetupSettingsPanel = defineEvent(`${meta.id}/event/setup-settings-panel`);
12
+ export const DefaultSpaceReady = defineEvent(`${meta.id}/event/default-space-ready`);
13
+ export const SpaceCreated = defineEvent(`${meta.id}/event/space-created`);
14
+ export const SchemaAdded = defineEvent(`${meta.id}/event/schema-added`);
15
15
  }
@@ -5,3 +5,4 @@
5
5
  export * from './useActiveSpace';
6
6
  export * from './useInputSurfaceLookup';
7
7
  export * from './usePath';
8
+ export * from './useTypeOptions';
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
5
+ import type * as Schema from 'effect/Schema';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
8
  import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework';
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Option } from 'effect';
5
+ import * as Option from 'effect/Option';
6
6
  import { useEffect, useState } from 'react';
7
7
 
8
8
  import { type ReadableGraph } from '@dxos/plugin-graph';
@@ -0,0 +1,59 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useMemo } from 'react';
6
+
7
+ import { useCapabilities } from '@dxos/app-framework';
8
+ import { Type } from '@dxos/echo';
9
+ import { ClientCapabilities } from '@dxos/plugin-client';
10
+ import { useClient } from '@dxos/react-client';
11
+ import { type Space } from '@dxos/react-client/echo';
12
+ import { useTranslation } from '@dxos/react-ui';
13
+ import { DataType, type TypenameAnnotation, getTypenames } from '@dxos/schema';
14
+
15
+ import { SpaceCapabilities } from '../capabilities';
16
+
17
+ const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
18
+
19
+ export const useTypeOptions = ({ space, annotation }: { space?: Space; annotation: TypenameAnnotation[] }) => {
20
+ const { t } = useTranslation();
21
+ const client = useClient();
22
+
23
+ const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
24
+ const whitelistedTypenames = useMemo(
25
+ () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
26
+ [schemaWhitelists],
27
+ );
28
+
29
+ const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
30
+ const objectFormTypenames = useMemo(
31
+ () =>
32
+ new Set(
33
+ objectForms
34
+ .map((form) => Type.getTypename(form.objectSchema))
35
+ // TODO(wittjosiah): Remove.
36
+ .filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
37
+ ),
38
+ [objectForms],
39
+ );
40
+
41
+ const typenames = getTypenames({
42
+ annotation,
43
+ whitelistedTypenames,
44
+ objectFormTypenames,
45
+ space,
46
+ client,
47
+ });
48
+
49
+ return useMemo(
50
+ () =>
51
+ typenames
52
+ .map((typename) => ({
53
+ value: typename,
54
+ label: t('typename label', { ns: typename, defaultValue: typename }),
55
+ }))
56
+ .toSorted((a, b) => a.label.localeCompare(b.label)),
57
+ [t, typenames],
58
+ );
59
+ };
package/src/meta.ts CHANGED
@@ -4,10 +4,8 @@
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
6
 
7
- export const SPACE_PLUGIN = 'dxos.org/plugin/space';
8
-
9
7
  export const meta: PluginMeta = {
10
- id: SPACE_PLUGIN,
8
+ id: 'dxos.org/plugin/space',
11
9
  name: 'Spaces',
12
10
  icon: 'ph--planet--regular',
13
11
  };
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { Type } from '@dxos/echo';
6
- import { StoredSchema } from '@dxos/echo-schema';
6
+ import { StoredSchema } from '@dxos/echo/internal';
7
7
  import { type Resource } from '@dxos/react-ui';
8
8
  import { DataType } from '@dxos/schema';
9
9
 
@@ -190,10 +190,12 @@ export const translations = [
190
190
  'creating in collection label': 'In Collection',
191
191
  'clear input label': 'Clear',
192
192
  'expose object label': 'Expose in navtree',
193
+ 'add tag label': 'Add tag',
193
194
  'advanced settings label': 'Advanced',
194
195
  'foreign keys': 'Foreign Keys',
195
196
  'add key': 'Add Key',
196
197
  'open space settings label': 'Open settings',
198
+ 'related objects label': 'Related',
197
199
 
198
200
  'row details no selection label': 'No objects selected',
199
201
  'companion selected objects label': 'Selected',
@@ -229,6 +231,13 @@ export const translations = [
229
231
  'Archiving a space will remove it from the sidebar and stop replicating updates, but will not delete the data. You can unarchive it by enabling archived spaces in the app settings.',
230
232
  'archive space label': 'Archive',
231
233
  'unarchive space label': 'Unarchive',
234
+
235
+ 'sync edge connected label': 'Edge connected',
236
+ 'sync edge disconnected label': 'Edge disconnected',
237
+ 'sync no connection label': 'No connection to edge service',
238
+ 'sync latency label': 'Latency',
239
+ 'sync upload label': 'Upload',
240
+ 'sync download label': 'Download',
232
241
  },
233
242
  },
234
243
  },