@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.70d3990

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 (376) 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-H6AW7KGS.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-XUYKJUU7.mjs → chunk-GJOZILGC.mjs} +262 -143
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-KCZ527AM.mjs} +667 -525
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-P25R3AOK.mjs} +36 -6
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-QACNNDOT.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-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 +88 -135
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-RZEWNJ2K.mjs} +114 -101
  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-YWZZQF7H.mjs → react-surface-VOETEAG3.mjs} +101 -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-4IMP5RYT.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-OHGCWZHQ.mjs} +28 -19
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-QYZAB45H.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-2ICUGQQT.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-SSLBYZEY.mjs → chunk-7EV4SN47.mjs} +35 -6
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-P442DOQ3.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-4AOMYKDE.mjs → chunk-I6FZP42D.mjs} +262 -143
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-JAMGJUFU.mjs} +667 -525
  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-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 +88 -135
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-4PHJWDXW.mjs} +114 -101
  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-5Y7LJRX6.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-YQFNIKYT.mjs → react-surface-J3XDMU2D.mjs} +101 -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-SAOBPND3.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-ZPU24DA2.mjs} +28 -19
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-ZVEHQ4BJ.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 +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 -8
  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/repair.d.ts +4 -0
  115. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  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 +3 -3
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1588 -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 +18 -9
  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 +1591 -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/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  150. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  159. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  161. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  164. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  165. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  166. package/dist/types/src/components/RecordArticle.stories.d.ts +1591 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  169. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  171. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  172. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  173. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1421 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  179. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  181. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1421 -4
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1422 -5
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  188. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +10 -11
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/events.d.ts.map +1 -1
  192. package/dist/types/src/helpers/index.d.ts +2 -0
  193. package/dist/types/src/helpers/index.d.ts.map +1 -0
  194. package/dist/types/src/helpers/query.d.ts +8 -0
  195. package/dist/types/src/helpers/query.d.ts.map +1 -0
  196. package/dist/types/src/helpers/query.test.d.ts +2 -0
  197. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  198. package/dist/types/src/hooks/index.d.ts +1 -0
  199. package/dist/types/src/hooks/index.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  203. package/dist/types/src/hooks/usePath.d.ts +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  206. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  207. package/dist/types/src/index.d.ts +1 -0
  208. package/dist/types/src/index.d.ts.map +1 -1
  209. package/dist/types/src/meta.d.ts +0 -1
  210. package/dist/types/src/meta.d.ts.map +1 -1
  211. package/dist/types/src/translations.d.ts +1261 -67
  212. package/dist/types/src/translations.d.ts.map +1 -1
  213. package/dist/types/src/types/form.d.ts +24 -0
  214. package/dist/types/src/types/form.d.ts.map +1 -0
  215. package/dist/types/src/types/index.d.ts +1 -0
  216. package/dist/types/src/types/index.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +94 -155
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +25 -36
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +72 -63
  223. package/src/SpacePlugin.ts +182 -222
  224. package/src/capabilities/app-graph-builder.ts +221 -237
  225. package/src/capabilities/app-graph-serializer.ts +12 -12
  226. package/src/capabilities/capabilities.ts +28 -17
  227. package/src/capabilities/identity-created.ts +3 -3
  228. package/src/capabilities/index.ts +1 -2
  229. package/src/capabilities/intent-resolver.ts +91 -79
  230. package/src/capabilities/react-root.tsx +6 -4
  231. package/src/capabilities/react-surface.tsx +108 -149
  232. package/src/capabilities/repair.ts +57 -0
  233. package/src/capabilities/spaces-ready.ts +23 -11
  234. package/src/capabilities/state.ts +5 -4
  235. package/src/components/AwaitingObject.tsx +12 -14
  236. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  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 +74 -46
  240. package/src/components/CreateDialog/CreateObjectPanel.tsx +51 -33
  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} +22 -21
  246. package/src/components/MembersContainer/index.ts +5 -0
  247. package/src/components/MenuFooter.tsx +2 -2
  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} +10 -16
  252. package/src/components/ObjectRenamePopover/index.ts +5 -0
  253. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +7 -7
  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 +8 -8
  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 +26 -29
  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 +68 -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 +109 -12
  273. package/src/components/ViewEditor.tsx +57 -23
  274. package/src/components/index.ts +7 -7
  275. package/src/events.ts +7 -7
  276. package/src/helpers/index.ts +5 -0
  277. package/src/helpers/query.test.ts +24 -0
  278. package/src/helpers/query.ts +158 -0
  279. package/src/hooks/index.ts +1 -0
  280. package/src/hooks/useActiveSpace.ts +3 -2
  281. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  282. package/src/hooks/usePath.ts +1 -1
  283. package/src/hooks/useTypeOptions.ts +27 -0
  284. package/src/index.ts +1 -0
  285. package/src/meta.ts +6 -3
  286. package/src/translations.ts +68 -58
  287. package/src/types/form.ts +75 -0
  288. package/src/types/index.ts +1 -0
  289. package/src/types/types.ts +49 -50
  290. package/src/util.tsx +268 -145
  291. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  292. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  293. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  294. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs +0 -480
  295. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  296. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  298. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  300. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  303. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  305. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  306. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  308. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  309. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  310. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  311. package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
  312. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  313. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  314. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
  315. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  316. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  317. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  318. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  319. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  320. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  321. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  322. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  323. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs +0 -481
  324. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  325. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  329. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  331. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  333. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs +0 -339
  335. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  337. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  338. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  340. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  341. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  342. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
  343. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  344. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  345. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  346. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  347. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  348. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  349. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  351. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  352. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  353. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  354. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  355. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  356. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  357. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  358. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  359. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  360. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  361. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  362. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  363. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  364. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  365. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  366. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  367. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  368. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  369. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  370. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  371. package/src/capabilities/schema-defs.ts +0 -30
  372. package/src/capabilities/schema-tool.test.ts +0 -44
  373. package/src/capabilities/schema-tools.ts +0 -125
  374. package/src/components/MembersContainer.stories.tsx +0 -30
  375. package/src/components/ObjectDetailsPanel.tsx +0 -77
  376. package/src/components/PersistenceStatus.tsx +0 -83
package/src/util.tsx CHANGED
@@ -2,42 +2,44 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import { pipe } from 'effect';
7
-
8
- import { chain, createIntent, LayoutAction, type PromiseIntentDispatcher } from '@dxos/app-framework';
9
- import { Obj, Ref, Type } from '@dxos/echo';
10
- import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo-schema';
5
+ import { type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';
6
+ import { Atom } from '@effect-atom/atom-react';
7
+ import * as Function from 'effect/Function';
8
+ import type * as Schema from 'effect/Schema';
9
+
10
+ import { LayoutAction, type PromiseIntentDispatcher, chain, createIntent } from '@dxos/app-framework';
11
+ import { type Database, type Entity, Filter, Obj, Query, Ref, Type } from '@dxos/echo';
12
+ import { EXPANDO_TYPENAME } from '@dxos/echo/internal';
11
13
  import { invariant } from '@dxos/invariant';
12
14
  import { Migrations } from '@dxos/migrations';
13
15
  import {
14
16
  ACTION_GROUP_TYPE,
15
17
  ACTION_TYPE,
16
- type ReadableGraph,
17
18
  type ActionData,
18
19
  type InvokeParams,
19
20
  type Node,
20
21
  type NodeArg,
22
+ type ReadableGraph,
21
23
  isGraphNode,
22
24
  } from '@dxos/plugin-graph';
23
- import { fullyQualifiedId, getSpace, type QueryResult, SpaceState, type Space, isSpace } from '@dxos/react-client/echo';
25
+ import { type Space, SpaceState, getSpace, isSpace } from '@dxos/react-client/echo';
24
26
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
25
27
  import { type TreeData } from '@dxos/react-ui-list';
26
- import { DataType } from '@dxos/schema';
28
+ import { Collection } from '@dxos/schema';
27
29
 
28
- import { SPACE_PLUGIN } from './meta';
29
- import { SpaceAction, SPACE_TYPE, type ObjectForm } from './types';
30
+ import { meta } from './meta';
31
+ import { SPACE_TYPE, SpaceAction } from './types';
30
32
 
31
- export const SPACES = `${SPACE_PLUGIN}-spaces`;
32
- export const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';
33
+ export const SPACES = `${meta.id}-spaces`;
34
+ export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
33
35
  // TODO(wittjosiah): Remove.
34
36
  export const SHARED = 'shared-spaces';
35
37
 
36
38
  /**
37
- * Convert a query result to an Rx value of the objects.
39
+ * Convert a query result to an Atom value of the objects.
38
40
  */
39
- export const rxFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Rx.Rx<T[]> => {
40
- return Rx.make((get) => {
41
+ export const atomFromQuery = <T extends Entity.Unknown>(query: Database.QueryResult<T>): Atom.Atom<T[]> => {
42
+ return Atom.make((get) => {
41
43
  const unsubscribe = query.subscribe((result) => {
42
44
  get.setSelf(result.objects);
43
45
  });
@@ -53,12 +55,12 @@ export const getSpaceDisplayName = (
53
55
  { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
54
56
  ): string | [string, { ns: string }] => {
55
57
  return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
56
- ? space.properties.name
58
+ ? space.properties.name!
57
59
  : namesCache[space.id]
58
60
  ? namesCache[space.id]
59
61
  : personal
60
- ? ['personal space label', { ns: SPACE_PLUGIN }]
61
- : ['unnamed space label', { ns: SPACE_PLUGIN }];
62
+ ? ['personal space label', { ns: meta.id }]
63
+ : ['unnamed space label', { ns: meta.id }];
62
64
  };
63
65
 
64
66
  const getCollectionGraphNodePartials = ({
@@ -66,7 +68,7 @@ const getCollectionGraphNodePartials = ({
66
68
  space,
67
69
  resolve,
68
70
  }: {
69
- collection: DataType.Collection;
71
+ collection: Collection.Collection;
70
72
  space: Space;
71
73
  resolve: (typename: string) => Record<string, any>;
72
74
  }) => {
@@ -136,33 +138,23 @@ const getCollectionGraphNodePartials = ({
136
138
  };
137
139
  };
138
140
 
139
- const getQueryCollectionNodePartials = ({
141
+ const getSystemCollectionNodePartials = ({
140
142
  collection,
141
143
  space,
142
144
  resolve,
143
145
  }: {
144
- collection: DataType.QueryCollection;
146
+ collection: Collection.Managed;
145
147
  space: Space;
146
148
  resolve: (typename: string) => Record<string, any>;
147
149
  }) => {
150
+ const metadata = resolve(collection.key);
148
151
  return {
149
- icon: collection.query.typename && resolve(collection.query.typename)?.icon,
152
+ label: ['typename label', { ns: collection.key, count: 2 }],
153
+ icon: metadata.icon,
154
+ iconHue: metadata.iconHue,
150
155
  acceptPersistenceClass: new Set(['echo']),
151
156
  acceptPersistenceKey: new Set([space.id]),
152
157
  role: 'branch',
153
- canDrop: (source: TreeData) => {
154
- return (
155
- isGraphNode(source.item) &&
156
- Obj.isObject(source.item.data) &&
157
- Obj.getTypename(source.item.data) === collection.query.typename
158
- );
159
- },
160
- onTransferStart: (child: Node<Obj.Any>, index?: number) => {
161
- // No-op. Objects are moved into query collections by being removed from their original collection.
162
- },
163
- onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
164
- // No-op. Objects are moved out of query collections by being added to another collection.
165
- },
166
158
  };
167
159
  };
168
160
 
@@ -173,24 +165,6 @@ const getSchemaGraphNodePartials = () => {
173
165
  };
174
166
  };
175
167
 
176
- const getViewGraphNodePartials = ({
177
- view,
178
- resolve,
179
- }: {
180
- view: DataType.View;
181
- resolve: (typename: string) => Record<string, any>;
182
- }) => {
183
- const presentation = view.presentation.target;
184
- const typename = presentation ? Obj.getTypename(presentation) : undefined;
185
- const metadata = typename ? resolve(typename) : {};
186
-
187
- return {
188
- label: view.name || ['object name placeholder', { ns: typename, default: 'New view' }],
189
- icon: metadata.icon,
190
- canDrop: () => false,
191
- };
192
- };
193
-
194
168
  const checkPendingMigration = (space: Space) => {
195
169
  return (
196
170
  space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
@@ -215,9 +189,9 @@ export const constructSpaceNode = ({
215
189
  }) => {
216
190
  const hasPendingMigration = checkPendingMigration(space);
217
191
  const collection =
218
- space.state.get() === SpaceState.SPACE_READY && space.properties[DataType.Collection.typename]?.target;
192
+ space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
219
193
  const partials =
220
- space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(DataType.Collection, collection)
194
+ space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
221
195
  ? getCollectionGraphNodePartials({ collection, space, resolve })
222
196
  : {};
223
197
 
@@ -235,6 +209,7 @@ export const constructSpaceNode = ({
235
209
  space.state.get() === SpaceState.SPACE_READY && space.properties.icon
236
210
  ? `ph--${space.properties.icon}--regular`
237
211
  : undefined,
212
+ iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
238
213
  disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
239
214
  testId: 'spacePlugin.space',
240
215
  canDrop: (source: TreeData) => {
@@ -245,40 +220,40 @@ export const constructSpaceNode = ({
245
220
  nodes: [
246
221
  {
247
222
  id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
248
- type: `${SPACE_PLUGIN}/settings`,
223
+ type: `${meta.id}/settings`,
249
224
  data: null,
250
225
  properties: {
251
- label: ['settings panel label', { ns: SPACE_PLUGIN }],
226
+ label: ['settings panel label', { ns: meta.id }],
252
227
  icon: 'ph--faders--regular',
253
228
  disposition: 'alternate-tree',
254
229
  },
255
230
  nodes: [
256
231
  {
257
232
  id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
258
- type: `${SPACE_PLUGIN}/properties`,
259
- data: `${SPACE_PLUGIN}/properties`,
233
+ type: `${meta.id}/properties`,
234
+ data: `${meta.id}/properties`,
260
235
  properties: {
261
- label: ['space settings properties label', { ns: SPACE_PLUGIN }],
236
+ label: ['space settings properties label', { ns: meta.id }],
262
237
  icon: 'ph--sliders--regular',
263
238
  position: 'hoist',
264
239
  },
265
240
  },
266
241
  {
267
242
  id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
268
- type: `${SPACE_PLUGIN}/members`,
269
- data: `${SPACE_PLUGIN}/members`,
243
+ type: `${meta.id}/members`,
244
+ data: `${meta.id}/members`,
270
245
  properties: {
271
- label: ['members panel label', { ns: SPACE_PLUGIN }],
246
+ label: ['members panel label', { ns: meta.id }],
272
247
  icon: 'ph--users--regular',
273
248
  position: 'hoist',
274
249
  },
275
250
  },
276
251
  {
277
252
  id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
278
- type: `${SPACE_PLUGIN}/schema`,
279
- data: `${SPACE_PLUGIN}/schema`,
253
+ type: `${meta.id}/schema`,
254
+ data: `${meta.id}/schema`,
280
255
  properties: {
281
- label: ['space settings schema label', { ns: SPACE_PLUGIN }],
256
+ label: ['space settings schema label', { ns: meta.id }],
282
257
  icon: 'ph--shapes--regular',
283
258
  },
284
259
  },
@@ -312,7 +287,7 @@ export const constructSpaceActions = ({
312
287
  await dispatch(createIntent(SpaceAction.Migrate, { space }));
313
288
  },
314
289
  properties: {
315
- label: ['migrate space label', { ns: SPACE_PLUGIN }],
290
+ label: ['migrate space label', { ns: meta.id }],
316
291
  icon: 'ph--database--regular',
317
292
  disposition: 'list-item-primary',
318
293
  disabled: migrating || Migrations.running(space),
@@ -329,7 +304,7 @@ export const constructSpaceActions = ({
329
304
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
330
305
  },
331
306
  properties: {
332
- label: ['create object in space label', { ns: SPACE_PLUGIN }],
307
+ label: ['create object in space label', { ns: meta.id }],
333
308
  icon: 'ph--plus--regular',
334
309
  disposition: 'item',
335
310
  testId: 'spacePlugin.createObject',
@@ -342,7 +317,7 @@ export const constructSpaceActions = ({
342
317
  await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
343
318
  },
344
319
  properties: {
345
- label: ['rename space label', { ns: SPACE_PLUGIN }],
320
+ label: ['rename space label', { ns: meta.id }],
346
321
  icon: 'ph--pencil-simple-line--regular',
347
322
  keyBinding: {
348
323
  macos: 'shift+F6',
@@ -356,15 +331,23 @@ export const constructSpaceActions = ({
356
331
  return actions;
357
332
  };
358
333
 
359
- export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
334
+ export const createStaticSchemaNode = ({
335
+ schema,
336
+ space,
337
+ }: {
338
+ schema: Schema.Schema.AnyNoContext;
339
+ space: Space;
340
+ }): Node => {
360
341
  return {
361
342
  id: `${space.id}/${Type.getTypename(schema)}`,
362
- type: `${SPACE_PLUGIN}/static-schema`,
343
+ type: `${meta.id}/static-schema`,
363
344
  data: schema,
364
345
  properties: {
365
- label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
346
+ label: ['typename label', { ns: Type.getTypename(schema), count: 2, default: Type.getTypename(schema) }],
366
347
  icon: 'ph--database--regular',
348
+ iconHue: 'green',
367
349
  role: 'branch',
350
+ selectable: false,
368
351
  canDrop: () => false,
369
352
  space,
370
353
  },
@@ -374,15 +357,36 @@ export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any
374
357
  export const createStaticSchemaActions = ({
375
358
  schema,
376
359
  space,
360
+ dispatch,
377
361
  deletable,
378
362
  }: {
379
363
  schema: Type.Obj.Any;
380
364
  space: Space;
365
+ dispatch: PromiseIntentDispatcher;
381
366
  deletable: boolean;
382
367
  }) => {
383
368
  const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
384
369
 
385
370
  const actions: NodeArg<ActionData>[] = [
371
+ {
372
+ id: getId(SpaceAction.AddObject._tag),
373
+ type: ACTION_TYPE,
374
+ data: async () => {
375
+ await dispatch(
376
+ createIntent(SpaceAction.OpenCreateObject, {
377
+ target: space,
378
+ views: true,
379
+ initialFormValues: { typename: Type.getTypename(schema) },
380
+ }),
381
+ );
382
+ },
383
+ properties: {
384
+ label: ['add view to schema label', { ns: meta.id }],
385
+ icon: 'ph--plus--regular',
386
+ disposition: 'list-item-primary',
387
+ testId: 'spacePlugin.addViewToSchema',
388
+ },
389
+ },
386
390
  {
387
391
  id: getId(SpaceAction.RenameObject._tag),
388
392
  type: ACTION_TYPE,
@@ -390,7 +394,7 @@ export const createStaticSchemaActions = ({
390
394
  throw new Error('Not implemented');
391
395
  },
392
396
  properties: {
393
- label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
397
+ label: ['rename object label', { ns: Type.getTypename(Type.PersistentType) }],
394
398
  icon: 'ph--pencil-simple-line--regular',
395
399
  disabled: true,
396
400
  disposition: 'list-item',
@@ -409,13 +413,37 @@ export const createStaticSchemaActions = ({
409
413
  }
410
414
  },
411
415
  properties: {
412
- label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
416
+ label: ['delete object label', { ns: Type.getTypename(Type.PersistentType) }],
413
417
  icon: 'ph--trash--regular',
414
418
  disposition: 'list-item',
415
419
  disabled: !deletable,
416
420
  testId: 'spacePlugin.deleteObject',
417
421
  },
418
422
  },
423
+ {
424
+ id: getId(SpaceAction.Snapshot._tag),
425
+ type: ACTION_TYPE,
426
+ data: async () => {
427
+ const result = await dispatch(
428
+ createIntent(SpaceAction.Snapshot, {
429
+ space,
430
+ query: Query.select(Filter.type(schema)).ast,
431
+ }),
432
+ );
433
+ if (result.data?.snapshot) {
434
+ await downloadBlob(
435
+ result.data.snapshot,
436
+ // TODO(wittjosiah): Factor out file name construction.
437
+ `${new Date().toISOString()}-${space.id}-${Type.getTypename(schema)}.json`,
438
+ );
439
+ }
440
+ },
441
+ properties: {
442
+ label: ['snapshot by schema label', { ns: meta.id }],
443
+ icon: 'ph--camera--regular',
444
+ disposition: 'list-item',
445
+ },
446
+ },
419
447
  ];
420
448
 
421
449
  return actions;
@@ -424,47 +452,75 @@ export const createStaticSchemaActions = ({
424
452
  export const createObjectNode = ({
425
453
  space,
426
454
  object,
455
+ disposition,
427
456
  droppable = true,
428
457
  navigable = false,
458
+ managedCollectionChild = false,
429
459
  resolve,
430
460
  }: {
431
461
  space: Space;
432
462
  object: Obj.Any;
463
+ disposition?: string;
433
464
  droppable?: boolean;
434
465
  navigable?: boolean;
466
+ managedCollectionChild?: boolean;
435
467
  resolve: (typename: string) => Record<string, any>;
436
468
  }) => {
437
469
  const type = Obj.getTypename(object);
438
470
  if (!type) {
439
- return undefined;
471
+ return null;
440
472
  }
441
473
 
442
474
  const metadata = resolve(type);
443
- const partials = Obj.instanceOf(DataType.Collection, object)
475
+ const partials = Obj.instanceOf(Collection.Collection, object)
444
476
  ? getCollectionGraphNodePartials({ collection: object, space, resolve })
445
- : Obj.instanceOf(DataType.QueryCollection, object)
446
- ? getQueryCollectionNodePartials({ collection: object, space, resolve })
447
- : Obj.instanceOf(DataType.StoredSchema, object)
477
+ : Obj.instanceOf(Collection.Managed, object)
478
+ ? getSystemCollectionNodePartials({ collection: object, space, resolve })
479
+ : Obj.instanceOf(Type.PersistentType, object)
448
480
  ? getSchemaGraphNodePartials()
449
- : Obj.instanceOf(DataType.View, object)
450
- ? getViewGraphNodePartials({ view: object, resolve })
451
- : metadata.graphProps;
481
+ : metadata.graphProps;
452
482
 
453
- const label = Obj.getLabel(object) ||
483
+ // TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
484
+ // e.g., create new collection with no name and rename it.
485
+ const label = (object as any).name ||
486
+ Obj.getLabel(object) ||
454
487
  // TODO(wittjosiah): Remove metadata labels.
455
488
  metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
456
489
 
490
+ const selectable =
491
+ (!Obj.instanceOf(Type.PersistentType, object) &&
492
+ !Obj.instanceOf(Collection.Managed, object) &&
493
+ !Obj.instanceOf(Collection.Collection, object)) ||
494
+ (navigable && Obj.instanceOf(Collection.Collection, object));
495
+
457
496
  return {
458
- id: fullyQualifiedId(object),
497
+ id: Obj.getDXN(object).toString(),
459
498
  type,
460
499
  cacheable: ['label', 'icon', 'role'],
461
500
  data: object,
462
501
  properties: {
463
502
  label,
464
503
  icon: metadata.icon ?? 'ph--placeholder--regular',
504
+ iconHue: metadata.iconHue,
505
+ disposition,
465
506
  testId: 'spacePlugin.object',
466
507
  persistenceClass: 'echo',
467
508
  persistenceKey: space?.id,
509
+ selectable,
510
+ managedCollectionChild,
511
+ blockInstruction: (source: TreeData, instruction: Instruction) => {
512
+ if (source.item.properties.managedCollectionChild) {
513
+ // TODO(wittjosiah): Support reordering system collections.
514
+ // return !(managedCollectionChild && source.item.type === type && instruction.type.startsWith('reorder'));
515
+ return true;
516
+ }
517
+
518
+ if (Obj.instanceOf(Collection.Managed, object)) {
519
+ return !instruction.type.startsWith('reorder');
520
+ }
521
+
522
+ return managedCollectionChild;
523
+ },
468
524
  canDrop: (source: TreeData) => {
469
525
  return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
470
526
  },
@@ -477,14 +533,14 @@ export const constructObjectActions = ({
477
533
  object,
478
534
  graph,
479
535
  dispatch,
480
- objectForms,
536
+ resolve,
481
537
  deletable = true,
482
538
  navigable = false,
483
539
  }: {
484
540
  object: Obj.Any;
485
541
  graph: ReadableGraph;
486
542
  dispatch: PromiseIntentDispatcher;
487
- objectForms: ObjectForm<any>[];
543
+ resolve: (typename: string) => Record<string, any>;
488
544
  deletable?: boolean;
489
545
  navigable?: boolean;
490
546
  }) => {
@@ -493,15 +549,15 @@ export const constructObjectActions = ({
493
549
  const typename = Obj.getTypename(object);
494
550
  invariant(typename, 'Object has no typename');
495
551
 
496
- const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;
552
+ const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
497
553
 
498
- const queryCollection = Obj.instanceOf(DataType.QueryCollection, object) ? object : undefined;
499
- const matchingObjectForm = queryCollection
500
- ? objectForms.find((form) => Type.getTypename(form.objectSchema) === queryCollection.query.typename)
501
- : undefined;
554
+ const managedCollection = Obj.instanceOf(Collection.Managed, object) ? object : undefined;
555
+ const metadata = managedCollection ? resolve(managedCollection.key) : {};
556
+ const createObjectIntent = metadata.createObjectIntent;
557
+ const inputSchema = metadata.inputSchema;
502
558
 
503
559
  const actions: NodeArg<ActionData>[] = [
504
- ...(Obj.instanceOf(DataType.Collection, object)
560
+ ...(Obj.instanceOf(Collection.Collection, object)
505
561
  ? [
506
562
  {
507
563
  id: getId(SpaceAction.OpenCreateObject._tag),
@@ -510,7 +566,7 @@ export const constructObjectActions = ({
510
566
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
511
567
  },
512
568
  properties: {
513
- label: ['create object in collection label', { ns: SPACE_PLUGIN }],
569
+ label: ['create object in collection label', { ns: meta.id }],
514
570
  icon: 'ph--plus--regular',
515
571
  disposition: 'list-item-primary',
516
572
  testId: 'spacePlugin.createObject',
@@ -518,23 +574,70 @@ export const constructObjectActions = ({
518
574
  },
519
575
  ]
520
576
  : []),
521
- ...(matchingObjectForm
577
+ ...(Obj.instanceOf(Type.PersistentType, object)
578
+ ? [
579
+ {
580
+ id: getId(SpaceAction.AddObject._tag),
581
+ type: ACTION_TYPE,
582
+ data: async () => {
583
+ await dispatch(
584
+ createIntent(SpaceAction.OpenCreateObject, {
585
+ target: space,
586
+ views: true,
587
+ initialFormValues: { typename: object.typename },
588
+ }),
589
+ );
590
+ },
591
+ properties: {
592
+ label: ['add view to schema label', { ns: meta.id }],
593
+ icon: 'ph--plus--regular',
594
+ disposition: 'list-item-primary',
595
+ testId: 'spacePlugin.addViewToSchema',
596
+ },
597
+ },
598
+ {
599
+ id: getId(SpaceAction.Snapshot._tag),
600
+ type: ACTION_TYPE,
601
+ data: async () => {
602
+ const result = await dispatch(
603
+ createIntent(SpaceAction.Snapshot, {
604
+ space,
605
+ query: Query.select(Filter.type(Type.toEffectSchema(object.jsonSchema))).ast,
606
+ }),
607
+ );
608
+ if (result.data?.snapshot) {
609
+ await downloadBlob(
610
+ result.data.snapshot,
611
+ // TODO(wittjosiah): Factor out file name construction.
612
+ `${new Date().toISOString()}-${space.id}-${object.typename}.json`,
613
+ );
614
+ }
615
+ },
616
+ properties: {
617
+ label: ['snapshot by schema label', { ns: meta.id }],
618
+ icon: 'ph--camera--regular',
619
+ disposition: 'list-item',
620
+ },
621
+ },
622
+ ]
623
+ : []),
624
+ ...(createObjectIntent
522
625
  ? [
523
626
  {
524
627
  id: getId(SpaceAction.OpenCreateObject._tag),
525
628
  type: ACTION_TYPE,
526
629
  data: async () => {
527
- if (matchingObjectForm.formSchema) {
630
+ if (inputSchema) {
528
631
  await dispatch(
529
632
  createIntent(SpaceAction.OpenCreateObject, {
530
633
  target: space,
531
- typename: queryCollection?.query.typename,
634
+ typename: managedCollection ? managedCollection.key : undefined,
532
635
  }),
533
636
  );
534
637
  } else {
535
638
  await dispatch(
536
- pipe(
537
- matchingObjectForm.getIntent({}, { space }),
639
+ Function.pipe(
640
+ createObjectIntent({}, { space }),
538
641
  chain(SpaceAction.AddObject, { target: space, hidden: true }),
539
642
  chain(LayoutAction.Open, { part: 'main' }),
540
643
  ),
@@ -542,7 +645,7 @@ export const constructObjectActions = ({
542
645
  }
543
646
  },
544
647
  properties: {
545
- label: ['create object in smart collection label', { ns: SPACE_PLUGIN }],
648
+ label: ['create object in system collection label', { ns: meta.id }],
546
649
  icon: 'ph--plus--regular',
547
650
  disposition: 'list-item-primary',
548
651
  testId: 'spacePlugin.createObject',
@@ -550,56 +653,60 @@ export const constructObjectActions = ({
550
653
  },
551
654
  ]
552
655
  : []),
553
- {
554
- id: getId(SpaceAction.RenameObject._tag),
555
- type: ACTION_TYPE,
556
- data: async (params?: InvokeParams) => {
557
- await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
558
- },
559
- properties: {
560
- label: ['rename object label', { ns: typename }],
561
- icon: 'ph--pencil-simple-line--regular',
562
- disposition: 'list-item',
563
- // TODO(wittjosiah): Not working.
564
- // keyBinding: {
565
- // macos: 'shift+F6',
566
- // },
567
- testId: 'spacePlugin.renameObject',
568
- },
569
- },
570
- {
571
- id: getId(SpaceAction.RemoveObjects._tag),
572
- type: ACTION_TYPE,
573
- data: async () => {
574
- const collection = graph
575
- .getConnections(fullyQualifiedId(object), 'inbound')
576
- .find(({ data }) => Obj.instanceOf(DataType.Collection, data))?.data;
577
- await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
578
- },
579
- properties: {
580
- label: ['delete object label', { ns: typename }],
581
- icon: 'ph--trash--regular',
582
- disposition: 'list-item',
583
- disabled: !deletable,
584
- // TODO(wittjosiah): This is a browser shortcut.
585
- // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
586
- testId: 'spacePlugin.deleteObject',
587
- },
588
- },
656
+ ...(managedCollection
657
+ ? []
658
+ : [
659
+ {
660
+ id: getId(SpaceAction.RenameObject._tag),
661
+ type: ACTION_TYPE,
662
+ data: async (params?: InvokeParams) => {
663
+ await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
664
+ },
665
+ properties: {
666
+ label: ['rename object label', { ns: typename }],
667
+ icon: 'ph--pencil-simple-line--regular',
668
+ disposition: 'list-item',
669
+ // TODO(wittjosiah): Not working.
670
+ // keyBinding: {
671
+ // macos: 'shift+F6',
672
+ // },
673
+ testId: 'spacePlugin.renameObject',
674
+ },
675
+ },
676
+ {
677
+ id: getId(SpaceAction.RemoveObjects._tag),
678
+ type: ACTION_TYPE,
679
+ data: async () => {
680
+ const collection = graph
681
+ .getConnections(Obj.getDXN(object).toString(), 'inbound')
682
+ .find(({ data }) => Obj.instanceOf(Collection.Collection, data))?.data;
683
+ await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
684
+ },
685
+ properties: {
686
+ label: ['delete object label', { ns: typename }],
687
+ icon: 'ph--trash--regular',
688
+ disposition: 'list-item',
689
+ disabled: !deletable,
690
+ // TODO(wittjosiah): This is a browser shortcut.
691
+ // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
692
+ testId: 'spacePlugin.deleteObject',
693
+ },
694
+ },
695
+ ]),
589
696
  ...(navigable ||
590
- (!Obj.instanceOf(DataType.Collection, object) &&
591
- !Obj.instanceOf(DataType.QueryCollection, object) &&
592
- !Obj.instanceOf(DataType.StoredSchema, object))
697
+ (!Obj.instanceOf(Collection.Collection, object) &&
698
+ !Obj.instanceOf(Collection.Managed, object) &&
699
+ !Obj.instanceOf(Type.PersistentType, object))
593
700
  ? [
594
701
  {
595
702
  id: getId('copy-link'),
596
703
  type: ACTION_TYPE,
597
704
  data: async () => {
598
- const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;
705
+ const url = `${window.location.origin}/${space.id}/${Obj.getDXN(object).toString()}`;
599
706
  await navigator.clipboard.writeText(url);
600
707
  },
601
708
  properties: {
602
- label: ['copy link label', { ns: SPACE_PLUGIN }],
709
+ label: ['copy link label', { ns: meta.id }],
603
710
  icon: 'ph--link--regular',
604
711
  disposition: 'list-item',
605
712
  testId: 'spacePlugin.copyLink',
@@ -612,10 +719,12 @@ export const constructObjectActions = ({
612
719
  id: getId(LayoutAction.Expose._tag),
613
720
  type: ACTION_TYPE,
614
721
  data: async () => {
615
- await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
722
+ await dispatch(
723
+ createIntent(LayoutAction.Expose, { part: 'navigation', subject: Obj.getDXN(object).toString() }),
724
+ );
616
725
  },
617
726
  properties: {
618
- label: ['expose object label', { ns: SPACE_PLUGIN }],
727
+ label: ['expose object label', { ns: meta.id }],
619
728
  icon: 'ph--eye--regular',
620
729
  disposition: 'heading-list-item',
621
730
  testId: 'spacePlugin.exposeObject',
@@ -626,6 +735,20 @@ export const constructObjectActions = ({
626
735
  return actions;
627
736
  };
628
737
 
738
+ // TODO(wittjosiah): Factor out.
739
+ const downloadBlob = async (blob: Blob, filename: string) => {
740
+ const url = URL.createObjectURL(blob);
741
+ const a = document.createElement('a');
742
+ a.href = url;
743
+ a.download = filename;
744
+
745
+ document.body.appendChild(a);
746
+ a.click();
747
+
748
+ document.body.removeChild(a);
749
+ URL.revokeObjectURL(url);
750
+ };
751
+
629
752
  /**
630
753
  * @deprecated This is a temporary solution.
631
754
  */
@@ -654,10 +777,10 @@ export const getNestedObjects = async (
654
777
  */
655
778
  // TODO(burdon): Remove.
656
779
  export const cloneObject = async (
657
- object: Type.Expando,
780
+ object: Obj.Any,
658
781
  resolve: (typename: string) => Record<string, any>,
659
782
  newSpace: Space,
660
- ): Promise<Type.Expando> => {
783
+ ): Promise<Obj.Any> => {
661
784
  const schema = Obj.getSchema(object);
662
785
  const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
663
786
  const metadata = resolve(typename);