@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,158 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Array from 'effect/Array';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as EffectFunction from 'effect/Function';
8
+ import * as Match from 'effect/Match';
9
+ import * as Option from 'effect/Option';
10
+ import type * as Schema from 'effect/Schema';
11
+ import * as SchemaAST from 'effect/SchemaAST';
12
+
13
+ import { DXN, Filter, Query, type QueryAST } from '@dxos/echo';
14
+ import {
15
+ ReferenceAnnotationId,
16
+ type ReferenceAnnotationValue,
17
+ getTypeAnnotation,
18
+ unwrapOptional,
19
+ } from '@dxos/echo/internal';
20
+ import { log } from '@dxos/log';
21
+ import { type Client } from '@dxos/react-client';
22
+ import { type Space } from '@dxos/react-client/echo';
23
+ import { Person } from '@dxos/types';
24
+
25
+ // TODO(wittjosiah): Factor out and add tests.
26
+ // TODO(wittjosiah): Support arbitrary type imports.
27
+ export const evalQuery = (queryString: string): Query.Any => {
28
+ const globals = { Query, Filter, Person };
29
+ try {
30
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
31
+ return new Function(...Object.keys(globals), `return ${queryString}`)(...Object.values(globals));
32
+ } catch (err) {
33
+ log.catch(err);
34
+ return Query.select(Filter.nothing());
35
+ }
36
+ };
37
+
38
+ export const resolveSchemaWithClientAndSpace = (client: Client, space: Space, query: QueryAST.Query) => {
39
+ const resolve = Effect.fn(function* (dxn: string) {
40
+ const typename = DXN.parse(dxn).asTypeDXN()?.type;
41
+ if (!typename) {
42
+ return Option.none();
43
+ }
44
+
45
+ const staticSchema = client.graph.schemaRegistry.getSchema(typename);
46
+ if (staticSchema) {
47
+ return Option.some(staticSchema);
48
+ }
49
+
50
+ const query = space.db.schemaRegistry.query({ typename });
51
+ const schemas = yield* Effect.promise(() => query.run());
52
+ return Array.head(schemas);
53
+ });
54
+
55
+ return resolveSchema(query, resolve).pipe(
56
+ Effect.map((schema) => Option.getOrUndefined(schema)),
57
+ Effect.runPromise,
58
+ );
59
+ };
60
+
61
+ const resolveSchema = (
62
+ query: QueryAST.Query,
63
+ resolve: (dxn: string) => Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>>,
64
+ ): Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>> => {
65
+ return Match.value(query).pipe(
66
+ Match.withReturnType<Effect.Effect<Option.Option<Schema.Schema.AnyNoContext>>>(),
67
+ // TODO(wittjosiah): Reconcile with filter match?
68
+ Match.when({ type: 'select' }, ({ filter }) =>
69
+ typenameFromFilter(filter).pipe(
70
+ Option.map((typename) => resolve(typename)),
71
+ Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
72
+ ),
73
+ ),
74
+ Match.when({ type: 'filter' }, ({ filter }) =>
75
+ typenameFromFilter(filter).pipe(
76
+ Option.map((typename) => resolve(typename)),
77
+ Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
78
+ ),
79
+ ),
80
+ Match.when({ type: 'reference-traversal' }, ({ anchor, property }) =>
81
+ resolveSchema(anchor, resolve).pipe(
82
+ Effect.map((base) =>
83
+ base.pipe(
84
+ Option.map((schema) => SchemaAST.getPropertySignatures(schema.ast)),
85
+ Option.flatMap((properties) => Array.findFirst(properties, (p) => p.name === property)),
86
+ Option.flatMap((property) =>
87
+ SchemaAST.getAnnotation<ReferenceAnnotationValue>(ReferenceAnnotationId)(unwrapOptional(property)),
88
+ ),
89
+ Option.map((annotation) => annotation.typename),
90
+ ),
91
+ ),
92
+ Effect.flatMap(
93
+ Option.match({
94
+ onNone: () => Effect.succeed(Option.none()),
95
+ onSome: (typename) => resolve(DXN.fromTypename(typename).toString()),
96
+ }),
97
+ ),
98
+ ),
99
+ ),
100
+ Match.when({ type: 'relation', filter: Match.defined }, ({ filter }) =>
101
+ typenameFromFilter(filter).pipe(
102
+ Option.map((typename) => resolve(typename)),
103
+ Option.getOrElse(() => Effect.succeed(Option.none<Schema.Schema.AnyNoContext>())),
104
+ ),
105
+ ),
106
+ Match.when({ type: 'relation-traversal' }, ({ anchor, direction }) =>
107
+ resolveSchema(anchor, resolve).pipe(
108
+ Effect.map((base) =>
109
+ base.pipe(
110
+ Option.map((schema) => getTypeAnnotation(schema)),
111
+ Option.flatMap((annotation) =>
112
+ Option.fromNullable(direction === 'source' ? annotation?.sourceSchema : annotation?.targetSchema),
113
+ ),
114
+ ),
115
+ ),
116
+ Effect.flatMap(
117
+ Option.match({
118
+ onNone: () => Effect.succeed(Option.none()),
119
+ onSome: (typename) => resolve(typename),
120
+ }),
121
+ ),
122
+ ),
123
+ ),
124
+ Match.when({ type: 'options' }, ({ query }) => resolveSchema(query, resolve)),
125
+ Match.orElse((_q) => {
126
+ // TODO(wittjosiah): Implement other cases.
127
+ return Effect.succeed(Option.none());
128
+ }),
129
+ );
130
+ };
131
+
132
+ const typenameFromFilter = (filter: QueryAST.Filter): Option.Option<string> =>
133
+ Match.value(filter).pipe(
134
+ Match.withReturnType<Option.Option<string>>(),
135
+ Match.when({ type: 'object' }, ({ typename }) => Option.fromNullable(typename)),
136
+ Match.when({ type: 'and' }, ({ filters }) =>
137
+ EffectFunction.pipe(filters, Array.map(typenameFromFilter), Array.findFirst(Option.isSome), Option.flatten),
138
+ ),
139
+ Match.when({ type: 'or' }, ({ filters }) =>
140
+ EffectFunction.pipe(filters, Array.map(typenameFromFilter), Array.findFirst(Option.isSome), Option.flatten),
141
+ ),
142
+ Match.orElse(() => Option.none()),
143
+ );
144
+
145
+ // TODO(wittjosiah): Currently assumes options is at the top-level of the ast.
146
+ export const getQueryTarget = (query: QueryAST.Query, space?: Space) => {
147
+ return Match.value(query).pipe(
148
+ Match.when({ type: 'options' }, ({ options }) => {
149
+ return Option.fromNullable(options.queues).pipe(
150
+ Option.flatMap((queues) => Array.head(queues)),
151
+ Option.flatMap((queueDxn) => Option.fromNullable(DXN.tryParse(queueDxn))),
152
+ Option.flatMap((queueDxn) => Option.fromNullable(space?.queues.get(queueDxn))),
153
+ Option.getOrElse(() => space),
154
+ );
155
+ }),
156
+ Match.orElse(() => space),
157
+ );
158
+ };
@@ -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,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, type PluginContext, useLayout } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext } from '@dxos/app-framework';
6
+ import { useLayout } from '@dxos/app-framework/react';
6
7
  import { ClientCapabilities } from '@dxos/plugin-client';
7
8
  import { parseId, useSpace } from '@dxos/react-client/echo';
8
9
 
@@ -2,10 +2,10 @@
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
- import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework';
8
+ import { Surface, isSurfaceAvailable, usePluginManager } from '@dxos/app-framework/react';
9
9
  import { type InputProps } from '@dxos/react-ui-form';
10
10
 
11
11
  // TODO(ZaymonFC): Move this if you find yourself needing it elsewhere.
@@ -20,7 +20,12 @@ export const useInputSurfaceLookup = (baseData?: Record<string, any>) => {
20
20
  return useCallback(
21
21
  ({ prop, schema, inputProps }: { prop: string; schema: Schema.Schema<any>; inputProps: InputProps }) => {
22
22
  const composedData = { prop, schema, ...baseData };
23
- if (!isSurfaceAvailable(pluginManager.context, { role: 'form-input', data: composedData })) {
23
+ if (
24
+ !isSurfaceAvailable(pluginManager.context, {
25
+ role: 'form-input',
26
+ data: composedData,
27
+ })
28
+ ) {
24
29
  return undefined;
25
30
  }
26
31
 
@@ -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,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useMemo } from 'react';
6
+
7
+ import { useClient } from '@dxos/react-client';
8
+ import { type Space } from '@dxos/react-client/echo';
9
+ import { useTranslation } from '@dxos/react-ui';
10
+
11
+ import { type TypeInputOptions, getTypenames } from '../types';
12
+
13
+ export const useTypeOptions = ({ space, annotation }: { space?: Space; annotation: TypeInputOptions }) => {
14
+ const { t } = useTranslation();
15
+ const client = useClient();
16
+ const typenames = getTypenames({ annotation, space, client });
17
+ return useMemo(
18
+ () =>
19
+ typenames
20
+ .map((typename) => ({
21
+ value: typename,
22
+ label: t('typename label', { ns: typename, defaultValue: typename }),
23
+ }))
24
+ .toSorted((a, b) => a.label.localeCompare(b.label)),
25
+ [t, typenames],
26
+ );
27
+ };
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ export { SpaceCapabilities } from './capabilities';
6
6
  export { SpaceEvents } from './events';
7
7
 
8
8
  export * from './components';
9
+ export * from './helpers';
9
10
  export * from './hooks';
10
11
  export * from './meta';
11
12
  export * from './SpacePlugin';
package/src/meta.ts CHANGED
@@ -3,11 +3,14 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const SPACE_PLUGIN = 'dxos.org/plugin/space';
6
+ import { trim } from '@dxos/util';
8
7
 
9
8
  export const meta: PluginMeta = {
10
- id: SPACE_PLUGIN,
9
+ id: 'dxos.org/plugin/space',
11
10
  name: 'Spaces',
11
+ description: trim`
12
+ Core workspace container system for organizing and sharing collaborative environments.
13
+ Create, manage, and share spaces with granular access control and invitation management.
14
+ `,
12
15
  icon: 'ph--planet--regular',
13
16
  };
@@ -2,9 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { StoredSchema } from '@dxos/echo-schema';
5
+ import { Type } from '@dxos/echo';
6
6
  import { type Resource } from '@dxos/react-ui';
7
- import { DataType } from '@dxos/schema';
7
+ import { Collection } from '@dxos/schema';
8
+ import { Event, Message, Organization, Person, Project, Task } from '@dxos/types';
8
9
 
9
10
  import { meta } from './meta';
10
11
 
@@ -12,7 +13,7 @@ import { meta } from './meta';
12
13
  export const translations = [
13
14
  {
14
15
  'en-US': {
15
- [DataType.Collection.typename]: {
16
+ [Collection.Collection.typename]: {
16
17
  'typename label': 'Collection',
17
18
  'typename label_zero': 'Collections',
18
19
  'typename label_one': 'Collection',
@@ -20,63 +21,54 @@ export const translations = [
20
21
  'object name placeholder': 'New collection',
21
22
  'rename object label': 'Rename collection',
22
23
  'delete object label': 'Delete collection',
24
+ 'object deleted label': 'Collection deleted',
23
25
  },
24
- [DataType.QueryCollection.typename]: {
25
- 'typename label': 'Smart Collection',
26
- 'typename label_zero': 'Smart Collections',
27
- 'typename label_one': 'Smart Collection',
28
- 'typename label_other': 'Smart Collections',
29
- 'object name placeholder': 'New smart collection',
30
- 'rename object label': 'Rename smart collection',
31
- 'delete object label': 'Delete smart collection',
26
+ [Type.getTypename(Type.PersistentType)]: {
27
+ 'typename label': 'Type',
28
+ 'typename label_zero': 'Types',
29
+ 'typename label_one': 'Type',
30
+ 'typename label_other': 'Types',
31
+ 'object name placeholder': 'New type',
32
+ 'rename object label': 'Rename type',
33
+ 'delete object label': 'Delete type',
34
+ 'object deleted label': 'Type deleted',
32
35
  },
33
- [StoredSchema.typename]: {
34
- 'typename label': 'Record',
35
- 'typename label_zero': 'Records',
36
- 'typename label_one': 'Record',
37
- 'typename label_other': 'Records',
38
- 'object name placeholder': 'New record type',
39
- 'rename object label': 'Rename record type',
40
- 'delete object label': 'Delete record type',
41
- },
42
- [DataType.View.typename]: {
43
- 'typename label': 'View',
44
- 'typename label_zero': 'Views',
45
- 'typename label_one': 'View',
46
- 'typename label_other': 'Views',
47
- 'object name placeholder': 'New view',
48
- 'rename object label': 'Rename view',
49
- 'delete object label': 'Delete view',
50
- },
51
- [DataType.Event.typename]: {
36
+ [Event.Event.typename]: {
52
37
  'typename label': 'Event',
53
38
  'typename label_zero': 'Events',
54
39
  'typename label_one': 'Event',
55
40
  'typename label_other': 'Events',
56
41
  'object name placeholder': 'New event',
57
42
  },
58
- [DataType.Organization.typename]: {
43
+ [Message.Message.typename]: {
44
+ 'typename label': 'Message',
45
+ 'typename label_zero': 'Messages',
46
+ 'typename label_one': 'Message',
47
+ 'typename label_other': 'Messages',
48
+ 'object name placeholder': 'New message',
49
+ },
50
+ [Organization.Organization.typename]: {
59
51
  'typename label': 'Organization',
60
52
  'typename label_zero': 'Organizations',
61
53
  'typename label_one': 'Organization',
62
54
  'typename label_other': 'Organizations',
63
55
  'object name placeholder': 'New organization',
64
56
  },
65
- [DataType.Person.typename]: {
57
+ [Person.Person.typename]: {
66
58
  'typename label': 'Person',
67
59
  'typename label_zero': 'People',
68
60
  'typename label_one': 'Person',
69
61
  'typename label_other': 'People',
70
62
  'object name placeholder': 'New person',
71
63
  },
72
- [DataType.Project.typename]: {
64
+ [Project.Project.typename]: {
73
65
  'typename label': 'Project',
74
66
  'typename label_zero': 'Projects',
75
67
  'typename label_one': 'Project',
76
68
  'typename label_other': 'Projects',
77
69
  'object name placeholder': 'New project',
78
70
  },
79
- [DataType.Task.typename]: {
71
+ [Task.Task.typename]: {
80
72
  'typename label': 'Task',
81
73
  'typename label_zero': 'Tasks',
82
74
  'typename label_one': 'Task',
@@ -98,7 +90,7 @@ export const translations = [
98
90
  'rename space label': 'Rename space',
99
91
  'active space label': 'Active space:',
100
92
  'space name label': 'Space name',
101
- 'object name label': 'Item name',
93
+ 'object name label': 'Object name',
102
94
  'close space label': 'Close space',
103
95
  'open space label': 'Open space',
104
96
  'export data label': 'Export data',
@@ -116,32 +108,31 @@ export const translations = [
116
108
  'spaces label': 'Spaces',
117
109
  'space settings label': 'Spaces',
118
110
  'space settings description':
119
- 'Each space has its own settings you can configure, where you can adjust its properties, membership, integrations, and other items specific to that space.',
111
+ 'Each space has its own settings you can configure, where you can adjust its properties, membership, integrations, and other objects specific to that space.',
120
112
  'show hidden spaces label': 'Show archived spaces',
121
113
  'save files to directory label': 'Save files to disk',
122
114
  'select path label': 'Select path',
115
+ 'snapshot by schema label': 'Snapshot of objects',
123
116
  'rename collection label': 'Rename collection',
124
- 'rename object label': 'Rename item',
125
- 'duplicate object label': 'Duplicate item',
126
- 'delete collection label': 'Delete collection',
127
- 'delete object label': 'Delete item',
128
- 'collection deleted label': 'Collection deleted',
129
- 'object deleted label': 'Item deleted',
130
- 'objects deleted label': 'Items deleted',
131
- 'go to object label': 'Open item',
117
+ 'rename object label': 'Rename object',
118
+ 'duplicate object label': 'Duplicate object',
119
+ 'object deleted label': 'Object deleted',
120
+ 'objects deleted label': 'Objects deleted',
121
+ 'go to object label': 'Open object',
132
122
  'found object label': 'Ready.',
133
- 'found object description': 'The requested item is now available.',
123
+ 'found object description': 'The requested object is now available.',
134
124
  'waiting for object label': 'Loading…',
135
- 'waiting for object description': 'The requested item is still being synchronized.',
125
+ 'waiting for object description': 'The requested object is still being synchronized.',
136
126
  'object not found label': 'Nothing found.',
137
127
  'object not found description':
138
- 'The requested item has not been found yet. Ensure there are enough peers online in the space with an updated copy.',
139
- 'missing object message': 'Item not available.',
128
+ 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',
129
+ 'missing object message': 'Object not available.',
140
130
  'missing object description':
141
- 'The requested item has not been found yet. Ensure there are enough peers online in the space with an updated copy.',
131
+ 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',
142
132
  'create object in space label': 'Add to space',
143
133
  'create object in collection label': 'Add to collection',
144
- 'create object in smart collection label': 'Add to smart collection',
134
+ 'create object in system collection label': 'Add to system collection',
135
+ 'add view to schema label': 'Add view to type',
145
136
  'space members label': 'Space members',
146
137
  'active space members heading': 'Online ({{count}})',
147
138
  'inactive space members heading': 'Offline ({{count}})',
@@ -159,10 +150,10 @@ export const translations = [
159
150
  'location label': 'Located in',
160
151
  'space limit label': 'Space Limit Reached',
161
152
  'space limit description':
162
- 'This space has reached the maximum number of items for the beta. This limit includes deleted items currently, but those can be permanently removed with the cleanup action.',
153
+ 'This space has reached the maximum number of objects for the beta. This limit includes deleted objects currently, but those can be permanently removed with the cleanup action.',
163
154
  'space limit close label': 'Close',
164
155
  'remove deleted objects label': 'Cleanup',
165
- 'remove deleted objects alt': 'Permanently remove deleted items to free up space.',
156
+ 'remove deleted objects alt': 'Permanently remove deleted objects to free up space.',
166
157
  'copy link label': 'Copy link',
167
158
  'default on space create label': 'On space create',
168
159
  'sync status title': 'Sync status',
@@ -179,20 +170,22 @@ export const translations = [
179
170
  'remote synced label': 'Synced with peers',
180
171
  'syncing label': 'Space syncing',
181
172
  'show all label': 'Show all',
182
- 'no sync status label': 'No space with missing items.',
173
+ 'no sync status label': 'No space with missing objects.',
183
174
  'create space dialog title': 'Create Space',
184
175
  'create object dialog title': 'Create {{object}}',
185
176
  'space input placeholder': 'Select space',
186
- 'schema input placeholder': 'Select item type',
177
+ 'schema input placeholder': 'Select type',
187
178
  'creating object type label': 'Type',
188
179
  'creating in space label': 'Location',
189
180
  'creating in collection label': 'In Collection',
190
181
  'clear input label': 'Clear',
191
182
  'expose object label': 'Expose in navtree',
183
+ 'add tag label': 'Add tag',
192
184
  'advanced settings label': 'Advanced',
193
185
  'foreign keys': 'Foreign Keys',
194
186
  'add key': 'Add Key',
195
187
  'open space settings label': 'Open settings',
188
+ 'related objects label': 'Related Objects',
196
189
 
197
190
  'row details no selection label': 'No objects selected',
198
191
  'companion selected objects label': 'Selected',
@@ -214,10 +207,10 @@ export const translations = [
214
207
  'space settings properties label': 'General settings',
215
208
  'space properties settings verbose label': 'Manage space properties',
216
209
  'space properties settings description': 'You can configure how this space is displayed in the app here.',
217
- 'space settings schema label': 'Record types',
218
- 'schema verbose label': 'Manage record types',
219
- 'schema description': 'You can manage all of the record types stored within this space here.',
220
- 'no schemas found message': 'No record types found',
210
+ 'space settings schema label': 'Types',
211
+ 'schema verbose label': 'Manage types',
212
+ 'schema description': 'You can manage all of the types stored within this space here.',
213
+ 'no schemas found message': 'No types found',
221
214
  'display name input placeholder': 'Space name',
222
215
  'display name description': 'Name of the space as it appears in the app.',
223
216
  'icon description': 'Icon used to represent the space in the app.',
@@ -228,6 +221,23 @@ export const translations = [
228
221
  '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.',
229
222
  'archive space label': 'Archive',
230
223
  'unarchive space label': 'Unarchive',
224
+
225
+ 'space controls title': 'Space Controls',
226
+ 'space controls description': 'Advanced controls for this space.',
227
+ 'backup space title': 'Backup Space',
228
+ 'backup space description':
229
+ 'Download a backup of the space. Contains all data in the space in an unencrypted format.',
230
+ 'download backup label': 'Download backup',
231
+ 'repair space title': 'Repair Space',
232
+ 'repair space description': 'Run repair operations on the space.',
233
+ 'repair space label': 'Run repairs',
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',
231
241
  },
232
242
  },
233
243
  },
@@ -0,0 +1,75 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { type Client } from '@dxos/client';
9
+ import { type Space } from '@dxos/client/echo';
10
+ import { Type } from '@dxos/echo';
11
+ import { EntityKind, SystemTypeAnnotation, createAnnotationHelper, getTypeAnnotation } from '@dxos/echo/internal';
12
+
13
+ export const TypeInputOptions = Schema.Struct({
14
+ location: Schema.Array(Schema.Literal('database', 'runtime')),
15
+ kind: Schema.Array(Schema.Literal('system', 'user')),
16
+ registered: Schema.Array(Schema.Literal('registered', 'unregistered')),
17
+ });
18
+
19
+ export type TypeInputOptions = Schema.Schema.Type<typeof TypeInputOptions>;
20
+
21
+ /**
22
+ * Used in forms to identify the field representing an object's type and determine which types are shown as options.
23
+ */
24
+ export const TypeInputOptionsAnnotationId = Symbol.for('@dxos/schema/annotation/TypeInputOptions');
25
+ export const TypeInputOptionsAnnotation = createAnnotationHelper<TypeInputOptions>(TypeInputOptionsAnnotationId);
26
+
27
+ // TODO(wittjosiah): This is way to complicated and needs to be simplified.
28
+ export const getTypenames = ({
29
+ annotation,
30
+ space,
31
+ client,
32
+ }: {
33
+ annotation: TypeInputOptions;
34
+ space?: Space;
35
+ client: Client;
36
+ }) => {
37
+ const includeRuntime = annotation.location.includes('runtime');
38
+ const includeDatabase = annotation.location.includes('database');
39
+ const includeSystemType = annotation.kind.includes('system');
40
+ const includeUserType = annotation.kind.includes('user');
41
+ const includeRegistered = annotation.registered.includes('registered');
42
+ const includeUnregistered = annotation.registered.includes('unregistered');
43
+
44
+ const runtimeTypenames = includeRuntime
45
+ ? client.graph.schemaRegistry.schemas
46
+ .filter((schema) => {
47
+ const relation = getTypeAnnotation(schema)?.kind === EntityKind.Relation;
48
+ if (relation) {
49
+ return includeSystemType;
50
+ }
51
+
52
+ const system = SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false));
53
+ if (system) {
54
+ return includeSystemType;
55
+ }
56
+
57
+ return includeUserType;
58
+ })
59
+ .filter((schema) => {
60
+ const registered = space?.properties.staticRecords?.includes(Type.getTypename(schema));
61
+ return registered ? includeRegistered : includeUnregistered;
62
+ })
63
+ .map((schema) => Type.getTypename(schema))
64
+ : [];
65
+
66
+ const databaseTypenames =
67
+ includeDatabase && includeRegistered && space
68
+ ? space.db.schemaRegistry
69
+ .query()
70
+ .runSync()
71
+ .map((schema) => schema.typename)
72
+ : [];
73
+
74
+ return Array.from(new Set<string>([...runtimeTypenames, ...databaseTypenames])).sort();
75
+ };
@@ -2,4 +2,5 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './form';
5
6
  export * from './types';