@dxos/plugin-space 0.8.4-main.f9ba587 → 0.8.4-main.fffef41

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 (361) hide show
  1. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs +31 -0
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs +528 -0
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
  14. package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-CKACGS7T.mjs} +714 -571
  16. package/dist/lib/browser/chunk-CKACGS7T.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  18. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-KFUMADZF.mjs} +301 -73
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-VGKOXAPE.mjs} +87 -12
  22. package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-ZQMSGD5J.mjs} +95 -19
  28. package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +148 -59
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-3FNTO3VW.mjs} +236 -68
  34. package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
  37. package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-TTHS332A.mjs} +98 -100
  39. package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
  41. package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-QCND4DVY.mjs} +21 -18
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
  46. package/dist/lib/browser/{state-522XTUR4.mjs → state-Q7YRE5KG.mjs} +7 -7
  47. package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs +32 -0
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs +529 -0
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-6VEONPNZ.mjs} +95 -19
  62. package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
  64. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-OK2L7N2F.mjs} +301 -73
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-QBRPYAEL.mjs} +87 -12
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-XGAMJC5C.mjs} +714 -571
  74. package/dist/lib/node-esm/chunk-XGAMJC5C.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +148 -59
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-6O5FSB7Z.mjs} +236 -68
  82. package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-K66W3FMA.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-Y7FTEIDF.mjs} +98 -100
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
  89. package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-P7CKVXBE.mjs} +21 -18
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-362I5BMK.mjs} +7 -7
  95. package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +2 -2
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +14 -7
  103. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  105. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +11 -12
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  111. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  115. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/settings.d.ts +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  118. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/state.d.ts +1 -1
  120. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  121. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  122. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  123. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  124. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  125. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +5 -4
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
  129. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +7 -5
  131. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  133. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  134. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  135. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  136. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  137. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  138. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  139. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
  141. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  150. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  152. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  154. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  159. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  161. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  164. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  165. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  166. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  168. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  169. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  170. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  171. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  172. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  173. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  175. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  177. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  179. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  181. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  184. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  186. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  187. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  188. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  189. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  190. package/dist/types/src/components/ViewEditor.d.ts +7 -0
  191. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  192. package/dist/types/src/components/index.d.ts +11 -5
  193. package/dist/types/src/components/index.d.ts.map +1 -1
  194. package/dist/types/src/events.d.ts +1 -0
  195. package/dist/types/src/events.d.ts.map +1 -1
  196. package/dist/types/src/helpers/index.d.ts +2 -0
  197. package/dist/types/src/helpers/index.d.ts.map +1 -0
  198. package/dist/types/src/helpers/query.d.ts +8 -0
  199. package/dist/types/src/helpers/query.d.ts.map +1 -0
  200. package/dist/types/src/helpers/query.test.d.ts +2 -0
  201. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  202. package/dist/types/src/hooks/index.d.ts +1 -0
  203. package/dist/types/src/hooks/index.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  206. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  207. package/dist/types/src/hooks/usePath.d.ts +1 -1
  208. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  209. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  210. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  211. package/dist/types/src/index.d.ts +1 -0
  212. package/dist/types/src/index.d.ts.map +1 -1
  213. package/dist/types/src/meta.d.ts +0 -1
  214. package/dist/types/src/meta.d.ts.map +1 -1
  215. package/dist/types/src/translations.d.ts +1382 -11
  216. package/dist/types/src/translations.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +141 -66
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +40 -10
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +67 -61
  223. package/src/SpacePlugin.ts +232 -139
  224. package/src/capabilities/app-graph-builder.ts +335 -88
  225. package/src/capabilities/app-graph-serializer.ts +12 -12
  226. package/src/capabilities/capabilities.ts +21 -10
  227. package/src/capabilities/identity-created.ts +3 -3
  228. package/src/capabilities/index.ts +0 -1
  229. package/src/capabilities/intent-resolver.ts +191 -54
  230. package/src/capabilities/react-root.tsx +6 -4
  231. package/src/capabilities/react-surface.tsx +94 -119
  232. package/src/capabilities/schema-defs.ts +4 -3
  233. package/src/capabilities/spaces-ready.ts +16 -10
  234. package/src/capabilities/state.ts +5 -4
  235. package/src/components/AwaitingObject.tsx +16 -20
  236. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +8 -5
  237. package/src/components/CollectionSection.tsx +8 -6
  238. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  239. package/src/components/CreateDialog/CreateObjectDialog.tsx +76 -54
  240. package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
  241. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  242. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  243. package/src/components/JoinDialog/index.ts +5 -0
  244. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  245. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +27 -24
  246. package/src/components/MembersContainer/index.ts +5 -0
  247. package/src/components/MenuFooter.tsx +4 -5
  248. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  249. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  250. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  251. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +11 -17
  252. package/src/components/ObjectRenamePopover/index.ts +5 -0
  253. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  254. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  255. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  256. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  257. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  258. package/src/components/ObjectSettings/index.ts +3 -1
  259. package/src/components/RecordArticle.stories.tsx +115 -0
  260. package/src/components/RecordArticle.tsx +114 -0
  261. package/src/components/SchemaContainer.tsx +25 -28
  262. package/src/components/SpacePluginSettings.tsx +16 -11
  263. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
  264. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
  265. package/src/components/SpacePresence/index.ts +5 -0
  266. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  267. package/src/components/SpaceRenamePopover/index.ts +5 -0
  268. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  269. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +49 -28
  270. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  271. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  272. package/src/components/SyncStatus/SyncStatus.tsx +110 -13
  273. package/src/components/SyncStatus/status.ts +4 -4
  274. package/src/components/ViewEditor.tsx +92 -0
  275. package/src/components/index.ts +10 -5
  276. package/src/events.ts +7 -6
  277. package/src/helpers/index.ts +5 -0
  278. package/src/helpers/query.test.ts +24 -0
  279. package/src/helpers/query.ts +158 -0
  280. package/src/hooks/index.ts +1 -0
  281. package/src/hooks/useActiveSpace.ts +3 -2
  282. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  283. package/src/hooks/usePath.ts +1 -1
  284. package/src/hooks/useTypeOptions.ts +59 -0
  285. package/src/index.ts +1 -0
  286. package/src/meta.ts +6 -3
  287. package/src/translations.ts +85 -7
  288. package/src/types/types.ts +94 -22
  289. package/src/util.tsx +297 -75
  290. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs +0 -363
  291. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
  292. package/dist/lib/browser/app-graph-serializer-UKYMBX4O.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-C7KGJTAL.mjs +0 -18
  295. package/dist/lib/browser/chunk-C7KGJTAL.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  297. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  301. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-XXIPJLJF.mjs +0 -19
  304. package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
  305. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  306. package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
  307. package/dist/lib/browser/react-root-7S6FIC5G.mjs +0 -29
  308. package/dist/lib/browser/react-root-7S6FIC5G.mjs.map +0 -7
  309. package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
  310. package/dist/lib/browser/schema-defs-K3B3OAH4.mjs.map +0 -7
  311. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  312. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  313. package/dist/lib/browser/spaces-ready-K7NSNBHM.mjs.map +0 -7
  314. package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs +0 -364
  316. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
  317. package/dist/lib/node-esm/app-graph-serializer-LA3IZDXJ.mjs.map +0 -7
  318. package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-72QMMRKC.mjs +0 -19
  320. package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-AT7LGFER.mjs +0 -20
  322. package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  325. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  328. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
  330. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  331. package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-root-HUK3ANLV.mjs.map +0 -7
  333. package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-defs-4MCDG4DV.mjs.map +0 -7
  335. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  336. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  337. package/dist/lib/node-esm/spaces-ready-UM2P3DCR.mjs.map +0 -7
  338. package/dist/lib/node-esm/state-C4IOXPZP.mjs.map +0 -7
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  340. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  341. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  342. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  343. package/dist/types/src/components/CollectionMain.d.ts +0 -6
  344. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  345. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  347. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  348. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  349. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  350. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  351. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  352. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  353. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  355. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  356. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  357. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  358. package/src/capabilities/schema-tool.test.ts +0 -44
  359. package/src/capabilities/schema-tools.ts +0 -125
  360. package/src/components/MembersContainer.stories.tsx +0 -30
  361. package/src/components/PersistenceStatus.tsx +0 -84
@@ -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).pipe(Option.map((schema) => schema.snapshot));
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,13 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, useLayout, type PluginContext } 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
 
9
10
  export const getActiveSpace = (context: PluginContext) => {
10
- const layout = context.getCapability(Capabilities.Layout);
11
11
  const client = context.getCapability(ClientCapabilities.Client);
12
+ const layout = context.getCapability(Capabilities.Layout);
12
13
  const { spaceId } = parseId(layout.workspace);
13
14
  return spaceId ? client.spaces.get(spaceId) : undefined;
14
15
  };
@@ -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 { usePluginManager, isSurfaceAvailable, Surface } 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,59 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useMemo } from 'react';
6
+
7
+ import { useCapabilities } from '@dxos/app-framework/react';
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 { Collection, type TypenameAnnotation, getTypenames } from '@dxos/schema';
14
+
15
+ import { SpaceCapabilities } from '../capabilities';
16
+
17
+ const OMIT = [Collection.Collection.typename, Type.getTypename(Collection.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/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,8 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Type } from '@dxos/echo';
6
+ import { StoredSchema } from '@dxos/echo/internal';
5
7
  import { type Resource } from '@dxos/react-ui';
6
- import { DataType } from '@dxos/schema';
8
+ import { Collection, View } from '@dxos/schema';
9
+ import { Event, Organization, Person, Project, Task } from '@dxos/types';
7
10
 
8
11
  import { meta } from './meta';
9
12
 
@@ -11,19 +14,76 @@ import { meta } from './meta';
11
14
  export const translations = [
12
15
  {
13
16
  'en-US': {
14
- [DataType.Collection.typename]: {
17
+ [Collection.Collection.typename]: {
15
18
  'typename label': 'Collection',
16
19
  'typename label_zero': 'Collections',
17
20
  'typename label_one': 'Collection',
18
21
  'typename label_other': 'Collections',
19
22
  'object name placeholder': 'New collection',
23
+ 'rename object label': 'Rename collection',
24
+ 'delete object label': 'Delete collection',
20
25
  },
21
- [DataType.QueryCollection.typename]: {
26
+ [Type.getTypename(Collection.QueryCollection)]: {
22
27
  'typename label': 'Smart Collection',
23
28
  'typename label_zero': 'Smart Collections',
24
29
  'typename label_one': 'Smart Collection',
25
30
  'typename label_other': 'Smart Collections',
26
31
  'object name placeholder': 'New smart collection',
32
+ 'rename object label': 'Rename smart collection',
33
+ 'delete object label': 'Delete smart collection',
34
+ },
35
+ [StoredSchema.typename]: {
36
+ 'typename label': 'Record',
37
+ 'typename label_zero': 'Records',
38
+ 'typename label_one': 'Record',
39
+ 'typename label_other': 'Records',
40
+ 'object name placeholder': 'New record type',
41
+ 'rename object label': 'Rename record type',
42
+ 'delete object label': 'Delete record type',
43
+ },
44
+ [Type.getTypename(View.View)]: {
45
+ 'typename label': 'View',
46
+ 'typename label_zero': 'Views',
47
+ 'typename label_one': 'View',
48
+ 'typename label_other': 'Views',
49
+ 'object name placeholder': 'New view',
50
+ 'rename object label': 'Rename view',
51
+ 'delete object label': 'Delete view',
52
+ },
53
+ [Event.Event.typename]: {
54
+ 'typename label': 'Event',
55
+ 'typename label_zero': 'Events',
56
+ 'typename label_one': 'Event',
57
+ 'typename label_other': 'Events',
58
+ 'object name placeholder': 'New event',
59
+ },
60
+ [Organization.Organization.typename]: {
61
+ 'typename label': 'Organization',
62
+ 'typename label_zero': 'Organizations',
63
+ 'typename label_one': 'Organization',
64
+ 'typename label_other': 'Organizations',
65
+ 'object name placeholder': 'New organization',
66
+ },
67
+ [Person.Person.typename]: {
68
+ 'typename label': 'Person',
69
+ 'typename label_zero': 'People',
70
+ 'typename label_one': 'Person',
71
+ 'typename label_other': 'People',
72
+ 'object name placeholder': 'New person',
73
+ },
74
+ [Project.Project.typename]: {
75
+ 'typename label': 'Project',
76
+ 'typename label_zero': 'Projects',
77
+ 'typename label_one': 'Project',
78
+ 'typename label_other': 'Projects',
79
+ 'object name placeholder': 'New project',
80
+ },
81
+ [Task.Task.typename]: {
82
+ 'typename label': 'Task',
83
+ 'typename label_zero': 'Tasks',
84
+ 'typename label_one': 'Task',
85
+ 'typename label_other': 'Tasks',
86
+ 'object name placeholder': 'New task',
27
87
  },
28
88
  [meta.id]: {
29
89
  'plugin name': 'Spaces',
@@ -62,6 +122,7 @@ export const translations = [
62
122
  'show hidden spaces label': 'Show archived spaces',
63
123
  'save files to directory label': 'Save files to disk',
64
124
  'select path label': 'Select path',
125
+ 'snapshot by schema label': 'Snapshot of objects',
65
126
  'rename collection label': 'Rename collection',
66
127
  'rename object label': 'Rename item',
67
128
  'duplicate object label': 'Duplicate item',
@@ -131,10 +192,16 @@ export const translations = [
131
192
  'creating in collection label': 'In Collection',
132
193
  'clear input label': 'Clear',
133
194
  'expose object label': 'Expose in navtree',
195
+ 'add tag label': 'Add tag',
134
196
  'advanced settings label': 'Advanced',
135
197
  'foreign keys': 'Foreign Keys',
136
198
  'add key': 'Add Key',
137
199
  'open space settings label': 'Open settings',
200
+ 'related objects label': 'Related Items',
201
+
202
+ 'row details no selection label': 'No objects selected',
203
+ 'companion selected objects label': 'Selected',
204
+ 'field deleted label': 'Field deleted',
138
205
 
139
206
  'members panel label': 'Members',
140
207
  'members verbose label': 'Manage space members',
@@ -152,10 +219,10 @@ export const translations = [
152
219
  'space settings properties label': 'General settings',
153
220
  'space properties settings verbose label': 'Manage space properties',
154
221
  'space properties settings description': 'You can configure how this space is displayed in the app here.',
155
- 'space settings schema label': 'Schema',
156
- 'schema verbose label': 'Manage schema',
157
- 'schema description': 'You can manage all of the schema stored within this space here.',
158
- 'no schemas found message': 'No schemas found',
222
+ 'space settings schema label': 'Record types',
223
+ 'schema verbose label': 'Manage record types',
224
+ 'schema description': 'You can manage all of the record types stored within this space here.',
225
+ 'no schemas found message': 'No record types found',
159
226
  'display name input placeholder': 'Space name',
160
227
  'display name description': 'Name of the space as it appears in the app.',
161
228
  'icon description': 'Icon used to represent the space in the app.',
@@ -165,7 +232,18 @@ export const translations = [
165
232
  'archive space description':
166
233
  '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.',
167
234
  'archive space label': 'Archive',
235
+ 'backup space label': 'Backup',
236
+ 'backup space description':
237
+ 'Download a backup of the space. Contains all data in the space in an unencrypted format.',
238
+ 'download backup': 'Download backup',
168
239
  'unarchive space label': 'Unarchive',
240
+
241
+ 'sync edge connected label': 'Edge connected',
242
+ 'sync edge disconnected label': 'Edge disconnected',
243
+ 'sync no connection label': 'No connection to edge service',
244
+ 'sync latency label': 'Latency',
245
+ 'sync upload label': 'Upload',
246
+ 'sync download label': 'Download',
169
247
  },
170
248
  },
171
249
  },
@@ -2,21 +2,22 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { type AnyIntentChain } from '@dxos/app-framework';
8
- import { Type, type Obj } from '@dxos/echo';
9
- import { type BaseObject, type TypedObject } from '@dxos/echo-schema';
8
+ import { type Obj, QueryAST, Type } from '@dxos/echo';
9
+ import { type BaseObject, EchoSchema, StoredSchema } from '@dxos/echo/internal';
10
10
  import { type PublicKey } from '@dxos/react-client';
11
11
  // TODO(wittjosiah): This pulls in full client.
12
12
  import { EchoObjectSchema, ReactiveObjectSchema, type Space, SpaceSchema } from '@dxos/react-client/echo';
13
13
  import { CancellableInvitationObservable, Invitation } from '@dxos/react-client/invitations';
14
- import { DataType, TypenameAnnotationId } from '@dxos/schema';
14
+ import { Collection, FieldSchema, TypenameAnnotationId, View } from '@dxos/schema';
15
15
  import { type ComplexMap } from '@dxos/util';
16
16
 
17
- import { SPACE_PLUGIN } from '../meta';
17
+ import { meta } from '../meta';
18
+
19
+ export const SPACE_DIRECTORY_HANDLE = `${meta.id}/directory`;
18
20
 
19
- export const SPACE_DIRECTORY_HANDLE = 'dxos.org/plugin/space/directory';
20
21
  export const SPACE_TYPE = 'dxos.org/type/Space';
21
22
 
22
23
  export type ObjectViewerProps = {
@@ -105,8 +106,7 @@ export const SpaceForm = Schema.Struct({
105
106
  });
106
107
 
107
108
  export type ObjectForm<T extends BaseObject = BaseObject> = {
108
- // TODO(dmaretskyi): Change to Schema.Schema.AnyNoContext
109
- objectSchema: TypedObject;
109
+ objectSchema: Schema.Schema.AnyNoContext;
110
110
  formSchema?: Schema.Schema<T, any>;
111
111
  hidden?: boolean;
112
112
  getIntent: (props: T, options: { space: Space }) => AnyIntentChain;
@@ -114,7 +114,7 @@ export type ObjectForm<T extends BaseObject = BaseObject> = {
114
114
 
115
115
  export const defineObjectForm = <T extends BaseObject>(form: ObjectForm<T>) => form;
116
116
 
117
- export const SPACE_ACTION = `${SPACE_PLUGIN}/action`;
117
+ export const SPACE_ACTION = `${meta.id}/action`;
118
118
 
119
119
  export namespace SpaceAction {
120
120
  export class OpenCreateSpace extends Schema.TaggedClass<OpenCreateSpace>()(`${SPACE_ACTION}/open-create-space`, {
@@ -217,11 +217,82 @@ export namespace SpaceAction {
217
217
  output: Schema.Boolean,
218
218
  }) {}
219
219
 
220
+ export class Snapshot extends Schema.TaggedClass<Snapshot>()(`${SPACE_ACTION}/snapshot`, {
221
+ input: Schema.Struct({
222
+ space: SpaceSchema,
223
+ query: QueryAST.Query.pipe(Schema.optional),
224
+ }),
225
+ output: Schema.Struct({
226
+ snapshot: Schema.instanceOf(Blob),
227
+ }),
228
+ }) {}
229
+
230
+ export const StoredSchemaForm = Schema.Struct({
231
+ name: Schema.optional(Schema.String),
232
+ typename: Schema.optional(
233
+ Schema.String.annotations({
234
+ [TypenameAnnotationId]: ['unused-static'],
235
+ }),
236
+ ),
237
+ });
238
+
239
+ export class UseStaticSchema extends Schema.TaggedClass<UseStaticSchema>()(`${SPACE_ACTION}/use-static-schema`, {
240
+ input: Schema.Struct({
241
+ space: SpaceSchema,
242
+ typename: Schema.String,
243
+ // TODO(wittjosiah): This is leaky.
244
+ show: Schema.optional(Schema.Boolean),
245
+ }),
246
+ output: Schema.Struct({}),
247
+ }) {}
248
+
249
+ export class AddSchema extends Schema.TaggedClass<AddSchema>()(`${SPACE_ACTION}/add-schema`, {
250
+ input: Schema.Struct({
251
+ space: SpaceSchema,
252
+ name: Schema.optional(Schema.String),
253
+ typename: Schema.optional(Schema.String),
254
+ // TODO(wittjosiah): Semantic version format.
255
+ version: Schema.optional(Schema.String),
256
+ // TODO(wittjosiah): Schema for schema?
257
+ schema: Schema.Any,
258
+ // TODO(wittjosiah): This is leaky.
259
+ show: Schema.optional(Schema.Boolean),
260
+ }),
261
+ output: Schema.Struct({
262
+ // TODO(wittjosiah): ObjectId.
263
+ id: Schema.String,
264
+ object: StoredSchema,
265
+ schema: Schema.instanceOf(EchoSchema),
266
+ }),
267
+ }) {}
268
+
269
+ export class DeleteField extends Schema.TaggedClass<DeleteField>()(`${SPACE_ACTION}/delete-field`, {
270
+ input: Schema.Struct({
271
+ view: View.View,
272
+ fieldId: Schema.String,
273
+ // TODO(wittjosiah): Separate fields for undo data?
274
+ deletionData: Schema.optional(
275
+ Schema.Struct({
276
+ field: FieldSchema,
277
+ // TODO(wittjosiah): This creates a type error.
278
+ // props: PropertySchema,
279
+ props: Schema.Any,
280
+ index: Schema.Number,
281
+ }),
282
+ ),
283
+ }),
284
+ output: Schema.Void,
285
+ }) {}
286
+
220
287
  export class OpenCreateObject extends Schema.TaggedClass<OpenCreateObject>()(`${SPACE_ACTION}/open-create-object`, {
221
288
  input: Schema.Struct({
222
- target: Schema.Union(SpaceSchema, DataType.Collection),
289
+ target: Schema.Union(SpaceSchema, Collection.Collection),
290
+ views: Schema.optional(Schema.Boolean),
223
291
  typename: Schema.optional(Schema.String),
292
+ initialFormValues: Schema.optional(Schema.Any),
224
293
  navigable: Schema.optional(Schema.Boolean),
294
+ // TODO(wittjosiah): This is a function, is there a better way to handle this?
295
+ onCreateObject: Schema.optional(Schema.Any),
225
296
  }),
226
297
  output: Schema.Void,
227
298
  }) {}
@@ -229,10 +300,11 @@ export namespace SpaceAction {
229
300
  export class AddObject extends Schema.TaggedClass<AddObject>()(`${SPACE_ACTION}/add-object`, {
230
301
  input: Schema.Struct({
231
302
  object: ReactiveObjectSchema,
232
- target: Schema.Union(SpaceSchema, DataType.Collection),
303
+ target: Schema.Union(SpaceSchema, Collection.Collection),
233
304
  hidden: Schema.optional(Schema.Boolean),
234
305
  }),
235
306
  output: Schema.Struct({
307
+ // TODO(wittjosiah): ObjectId.
236
308
  id: Schema.String,
237
309
  subject: Schema.Array(Schema.String),
238
310
  object: EchoObjectSchema,
@@ -256,7 +328,7 @@ export namespace SpaceAction {
256
328
 
257
329
  export const DeletionData = Schema.Struct({
258
330
  objects: Schema.Array(EchoObjectSchema),
259
- parentCollection: DataType.Collection,
331
+ parentCollection: Collection.Collection,
260
332
  indices: Schema.Array(Schema.Number),
261
333
  nestedObjectsList: Schema.Array(Schema.Array(EchoObjectSchema)),
262
334
  wasActive: Schema.Array(Schema.String),
@@ -266,8 +338,9 @@ export namespace SpaceAction {
266
338
 
267
339
  export class RemoveObjects extends Schema.TaggedClass<RemoveObjects>()(`${SPACE_ACTION}/remove-objects`, {
268
340
  input: Schema.Struct({
269
- objects: Schema.Array(EchoObjectSchema),
270
- target: Schema.optional(DataType.Collection),
341
+ // TODO(wittjosiah): Should be Schema.Union(Type.Obj, Type.Relation).
342
+ objects: Schema.Array(ReactiveObjectSchema),
343
+ target: Schema.optional(Collection.Collection),
271
344
  deletionData: Schema.optional(DeletionData),
272
345
  }),
273
346
  output: Schema.Void,
@@ -284,7 +357,7 @@ export namespace SpaceAction {
284
357
  export class DuplicateObject extends Schema.TaggedClass<DuplicateObject>()(`${SPACE_ACTION}/duplicate-object`, {
285
358
  input: Schema.Struct({
286
359
  object: EchoObjectSchema,
287
- target: Schema.Union(SpaceSchema, DataType.Collection),
360
+ target: Schema.Union(SpaceSchema, Collection.Collection),
288
361
  }),
289
362
  output: Schema.Void,
290
363
  }) {}
@@ -303,17 +376,15 @@ export namespace CollectionAction {
303
376
  name: Schema.optional(Schema.String),
304
377
  }),
305
378
  output: Schema.Struct({
306
- object: DataType.Collection,
379
+ object: Collection.Collection,
307
380
  }),
308
381
  }) {}
309
382
 
310
383
  export const QueryCollectionForm = Schema.Struct({
311
384
  name: Schema.optional(Schema.String),
312
- typename: Schema.optional(
313
- Schema.String.annotations({
314
- [TypenameAnnotationId]: ['object-form'],
315
- }),
316
- ),
385
+ typename: Schema.String.annotations({
386
+ [TypenameAnnotationId]: ['object-form'],
387
+ }),
317
388
  });
318
389
 
319
390
  export class CreateQueryCollection extends Schema.TaggedClass<CreateQueryCollection>()(
@@ -321,7 +392,8 @@ export namespace CollectionAction {
321
392
  {
322
393
  input: QueryCollectionForm,
323
394
  output: Schema.Struct({
324
- object: DataType.QueryCollection,
395
+ // TODO(wittjosiah): Remove cast.
396
+ object: EchoObjectSchema, // Collection.QueryCollection,
325
397
  }),
326
398
  },
327
399
  ) {}