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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionArticle-WTHWY4YS.mjs} +10 -10
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs +517 -0
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-3A6KBYWT.mjs → app-graph-serializer-G3VFEGTN.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
  14. package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-C6DAPIFF.mjs +20 -0
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-DCY3W36E.mjs → chunk-GJOZILGC.mjs} +210 -142
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-J6YZG77T.mjs → chunk-KCZ527AM.mjs} +641 -500
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-ELJDGQTO.mjs → chunk-P25R3AOK.mjs} +35 -5
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-POFUXISV.mjs} +69 -62
  24. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-NAXTPQXE.mjs} +5 -5
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +88 -131
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-7E3IZIJS.mjs → intent-resolver-RZEWNJ2K.mjs} +105 -100
  34. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs +30 -0
  37. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-GL4CE2F4.mjs → react-surface-VOETEAG3.mjs} +91 -111
  39. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  41. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-B6MMHLPS.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-B6MMHLPS.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-QVABOCO3.mjs → spaces-ready-OHGCWZHQ.mjs} +22 -15
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-2RGW7FQG.mjs → state-C7N6EDDZ.mjs} +7 -7
  47. package/dist/lib/browser/state-C7N6EDDZ.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +10 -4
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs +518 -0
  58. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-M45TH5LR.mjs → app-graph-serializer-2NLWWFUB.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-Q6AAQLQG.mjs → chunk-7EV4SN47.mjs} +34 -5
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-AX3UGL5D.mjs} +69 -62
  64. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-AUQ3SKL2.mjs → chunk-I6FZP42D.mjs} +210 -142
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-ZCEH2VYE.mjs → chunk-JAMGJUFU.mjs} +641 -500
  72. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +21 -0
  74. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  76. package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-AL7NNCKH.mjs → identity-created-OXLKCJE3.mjs} +5 -5
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +88 -131
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-UVO4MKWX.mjs → intent-resolver-4PHJWDXW.mjs} +105 -100
  82. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5EKYI66P.mjs → react-root-O5I5CDJ7.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-IOC6YSVQ.mjs → react-surface-J3XDMU2D.mjs} +91 -111
  87. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  88. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  89. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-MS6GHPFR.mjs → spaces-ready-ZPU24DA2.mjs} +22 -15
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-7VBVBGNS.mjs → state-45TXZQJ6.mjs} +7 -7
  95. package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +10 -4
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/capabilities.d.ts +13 -7
  101. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/index.d.ts +1 -1
  103. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/repair.d.ts +4 -0
  108. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  110. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  111. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  112. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  113. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  114. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  115. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +218 -215
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +16 -9
  120. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  121. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  123. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  124. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  125. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  126. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  127. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  128. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  129. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  130. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  131. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  133. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  134. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  135. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  136. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  137. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  138. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  139. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  140. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  141. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  142. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  143. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  144. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  146. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  148. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  149. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  150. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  151. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  152. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  153. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  154. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +219 -216
  155. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  156. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  157. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  160. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  161. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +220 -217
  162. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  163. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  164. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  165. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  166. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  167. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  168. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  169. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +218 -215
  171. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  172. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +219 -216
  174. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  176. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  177. package/dist/types/src/components/index.d.ts +10 -17
  178. package/dist/types/src/components/index.d.ts.map +1 -1
  179. package/dist/types/src/events.d.ts.map +1 -1
  180. package/dist/types/src/helpers/index.d.ts +2 -0
  181. package/dist/types/src/helpers/index.d.ts.map +1 -0
  182. package/dist/types/src/helpers/query.d.ts +8 -0
  183. package/dist/types/src/helpers/query.d.ts.map +1 -0
  184. package/dist/types/src/helpers/query.test.d.ts +2 -0
  185. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  186. package/dist/types/src/hooks/index.d.ts +1 -0
  187. package/dist/types/src/hooks/index.d.ts.map +1 -1
  188. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  189. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  190. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  191. package/dist/types/src/hooks/usePath.d.ts +1 -1
  192. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  194. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  195. package/dist/types/src/index.d.ts +1 -0
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/meta.d.ts +0 -1
  198. package/dist/types/src/meta.d.ts.map +1 -1
  199. package/dist/types/src/translations.d.ts +1261 -67
  200. package/dist/types/src/translations.d.ts.map +1 -1
  201. package/dist/types/src/types/form.d.ts +24 -0
  202. package/dist/types/src/types/form.d.ts.map +1 -0
  203. package/dist/types/src/types/index.d.ts +1 -0
  204. package/dist/types/src/types/index.d.ts.map +1 -1
  205. package/dist/types/src/types/types.d.ts +82 -142
  206. package/dist/types/src/types/types.d.ts.map +1 -1
  207. package/dist/types/src/util.d.ts +21 -34
  208. package/dist/types/src/util.d.ts.map +1 -1
  209. package/dist/types/tsconfig.tsbuildinfo +1 -1
  210. package/package.json +68 -59
  211. package/src/SpacePlugin.ts +181 -215
  212. package/src/capabilities/app-graph-builder.ts +205 -267
  213. package/src/capabilities/app-graph-serializer.ts +12 -12
  214. package/src/capabilities/capabilities.ts +26 -16
  215. package/src/capabilities/identity-created.ts +2 -2
  216. package/src/capabilities/index.ts +1 -1
  217. package/src/capabilities/intent-resolver.ts +78 -75
  218. package/src/capabilities/react-root.tsx +4 -3
  219. package/src/capabilities/react-surface.tsx +95 -145
  220. package/src/capabilities/repair.ts +57 -0
  221. package/src/capabilities/spaces-ready.ts +15 -6
  222. package/src/capabilities/state.ts +2 -2
  223. package/src/components/AwaitingObject.tsx +12 -14
  224. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  225. package/src/components/CollectionSection.tsx +8 -6
  226. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
  227. package/src/components/CreateDialog/CreateObjectDialog.tsx +63 -43
  228. package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -31
  229. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  230. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  231. package/src/components/JoinDialog/index.ts +5 -0
  232. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
  233. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
  234. package/src/components/MembersContainer/index.ts +5 -0
  235. package/src/components/MenuFooter.tsx +2 -2
  236. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  237. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  238. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  239. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  240. package/src/components/ObjectRenamePopover/index.ts +5 -0
  241. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +6 -7
  242. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  243. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  244. package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
  245. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  246. package/src/components/ObjectSettings/index.ts +3 -1
  247. package/src/components/RecordArticle.stories.tsx +115 -0
  248. package/src/components/RecordArticle.tsx +114 -0
  249. package/src/components/SchemaContainer.tsx +24 -27
  250. package/src/components/SpacePluginSettings.tsx +10 -4
  251. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
  252. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  253. package/src/components/SpacePresence/index.ts +5 -0
  254. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  255. package/src/components/SpaceRenamePopover/index.ts +5 -0
  256. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  257. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +63 -23
  258. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  259. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  260. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  261. package/src/components/ViewEditor.tsx +57 -23
  262. package/src/components/index.ts +7 -8
  263. package/src/events.ts +6 -6
  264. package/src/helpers/index.ts +5 -0
  265. package/src/helpers/query.test.ts +24 -0
  266. package/src/helpers/query.ts +158 -0
  267. package/src/hooks/index.ts +1 -0
  268. package/src/hooks/useActiveSpace.ts +2 -1
  269. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  270. package/src/hooks/usePath.ts +1 -1
  271. package/src/hooks/useTypeOptions.ts +27 -0
  272. package/src/index.ts +1 -0
  273. package/src/meta.ts +6 -3
  274. package/src/translations.ts +68 -58
  275. package/src/types/form.ts +75 -0
  276. package/src/types/index.ts +1 -0
  277. package/src/types/types.ts +44 -50
  278. package/src/util.tsx +216 -143
  279. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  280. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  281. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  282. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  283. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  284. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs +0 -516
  285. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-serializer-3A6KBYWT.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  288. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-DCY3W36E.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  292. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-J6YZG77T.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-RQVV4XVF.mjs +0 -343
  295. package/dist/lib/browser/chunk-RQVV4XVF.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  297. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  299. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  300. package/dist/lib/browser/intent-resolver-7E3IZIJS.mjs.map +0 -7
  301. package/dist/lib/browser/react-root-RWMT2RCK.mjs +0 -29
  302. package/dist/lib/browser/react-root-RWMT2RCK.mjs.map +0 -7
  303. package/dist/lib/browser/react-surface-GL4CE2F4.mjs.map +0 -7
  304. package/dist/lib/browser/schema-defs-YDPFZELA.mjs +0 -26
  305. package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
  306. package/dist/lib/browser/spaces-ready-QVABOCO3.mjs.map +0 -7
  307. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  308. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  309. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  310. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  311. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  312. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  313. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs +0 -517
  314. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-serializer-M45TH5LR.mjs.map +0 -7
  316. package/dist/lib/node-esm/chunk-AUQ3SKL2.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  318. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  320. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-WKQTO37U.mjs +0 -344
  326. package/dist/lib/node-esm/chunk-WKQTO37U.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-ZCEH2VYE.mjs.map +0 -7
  328. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  329. package/dist/lib/node-esm/intent-resolver-UVO4MKWX.mjs.map +0 -7
  330. package/dist/lib/node-esm/react-root-5EKYI66P.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-surface-IOC6YSVQ.mjs.map +0 -7
  332. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs +0 -27
  333. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
  334. package/dist/lib/node-esm/spaces-ready-MS6GHPFR.mjs.map +0 -7
  335. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  336. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  337. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  338. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  339. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  340. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  341. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  342. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  343. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  344. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  345. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  346. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  347. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  348. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  349. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  350. package/dist/types/src/components/RecordMain.d.ts +0 -7
  351. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  352. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  353. package/src/capabilities/schema-defs.ts +0 -31
  354. package/src/components/ObjectDetailsPanel.tsx +0 -77
  355. package/src/components/PersistenceStatus.tsx +0 -83
  356. package/src/components/RecordMain.tsx +0 -43
  357. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
package/src/util.tsx CHANGED
@@ -2,12 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import { pipe } from 'effect';
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';
7
9
 
8
10
  import { LayoutAction, type PromiseIntentDispatcher, chain, createIntent } from '@dxos/app-framework';
9
- import { Obj, Ref, Type } from '@dxos/echo';
10
- import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo-schema';
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 {
@@ -20,24 +22,24 @@ import {
20
22
  type ReadableGraph,
21
23
  isGraphNode,
22
24
  } from '@dxos/plugin-graph';
23
- import { type QueryResult, type Space, SpaceState, fullyQualifiedId, getSpace, 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 { type ObjectForm, SPACE_TYPE, SpaceAction } 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
  },
@@ -398,7 +381,7 @@ export const createStaticSchemaActions = ({
398
381
  );
399
382
  },
400
383
  properties: {
401
- label: ['add view to schema label', { ns: Type.getTypename(DataType.StoredSchema) }],
384
+ label: ['add view to schema label', { ns: meta.id }],
402
385
  icon: 'ph--plus--regular',
403
386
  disposition: 'list-item-primary',
404
387
  testId: 'spacePlugin.addViewToSchema',
@@ -411,7 +394,7 @@ export const createStaticSchemaActions = ({
411
394
  throw new Error('Not implemented');
412
395
  },
413
396
  properties: {
414
- label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
397
+ label: ['rename object label', { ns: Type.getTypename(Type.PersistentType) }],
415
398
  icon: 'ph--pencil-simple-line--regular',
416
399
  disabled: true,
417
400
  disposition: 'list-item',
@@ -430,13 +413,37 @@ export const createStaticSchemaActions = ({
430
413
  }
431
414
  },
432
415
  properties: {
433
- label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
416
+ label: ['delete object label', { ns: Type.getTypename(Type.PersistentType) }],
434
417
  icon: 'ph--trash--regular',
435
418
  disposition: 'list-item',
436
419
  disabled: !deletable,
437
420
  testId: 'spacePlugin.deleteObject',
438
421
  },
439
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
+ },
440
447
  ];
441
448
 
442
449
  return actions;
@@ -448,6 +455,7 @@ export const createObjectNode = ({
448
455
  disposition,
449
456
  droppable = true,
450
457
  navigable = false,
458
+ managedCollectionChild = false,
451
459
  resolve,
452
460
  }: {
453
461
  space: Space;
@@ -455,6 +463,7 @@ export const createObjectNode = ({
455
463
  disposition?: string;
456
464
  droppable?: boolean;
457
465
  navigable?: boolean;
466
+ managedCollectionChild?: boolean;
458
467
  resolve: (typename: string) => Record<string, any>;
459
468
  }) => {
460
469
  const type = Obj.getTypename(object);
@@ -463,15 +472,13 @@ export const createObjectNode = ({
463
472
  }
464
473
 
465
474
  const metadata = resolve(type);
466
- const partials = Obj.instanceOf(DataType.Collection, object)
475
+ const partials = Obj.instanceOf(Collection.Collection, object)
467
476
  ? getCollectionGraphNodePartials({ collection: object, space, resolve })
468
- : Obj.instanceOf(DataType.QueryCollection, object)
469
- ? getQueryCollectionNodePartials({ collection: object, space, resolve })
470
- : Obj.instanceOf(DataType.StoredSchema, object)
477
+ : Obj.instanceOf(Collection.Managed, object)
478
+ ? getSystemCollectionNodePartials({ collection: object, space, resolve })
479
+ : Obj.instanceOf(Type.PersistentType, object)
471
480
  ? getSchemaGraphNodePartials()
472
- : Obj.instanceOf(DataType.View, object)
473
- ? getViewGraphNodePartials({ view: object, resolve })
474
- : metadata.graphProps;
481
+ : metadata.graphProps;
475
482
 
476
483
  // TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
477
484
  // e.g., create new collection with no name and rename it.
@@ -480,18 +487,40 @@ export const createObjectNode = ({
480
487
  // TODO(wittjosiah): Remove metadata labels.
481
488
  metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
482
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
+
483
496
  return {
484
- id: fullyQualifiedId(object),
497
+ id: Obj.getDXN(object).toString(),
485
498
  type,
486
499
  cacheable: ['label', 'icon', 'role'],
487
500
  data: object,
488
501
  properties: {
489
502
  label,
490
503
  icon: metadata.icon ?? 'ph--placeholder--regular',
504
+ iconHue: metadata.iconHue,
491
505
  disposition,
492
506
  testId: 'spacePlugin.object',
493
507
  persistenceClass: 'echo',
494
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
+ },
495
524
  canDrop: (source: TreeData) => {
496
525
  return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
497
526
  },
@@ -504,14 +533,14 @@ export const constructObjectActions = ({
504
533
  object,
505
534
  graph,
506
535
  dispatch,
507
- objectForms,
536
+ resolve,
508
537
  deletable = true,
509
538
  navigable = false,
510
539
  }: {
511
540
  object: Obj.Any;
512
541
  graph: ReadableGraph;
513
542
  dispatch: PromiseIntentDispatcher;
514
- objectForms: ObjectForm<any>[];
543
+ resolve: (typename: string) => Record<string, any>;
515
544
  deletable?: boolean;
516
545
  navigable?: boolean;
517
546
  }) => {
@@ -520,15 +549,15 @@ export const constructObjectActions = ({
520
549
  const typename = Obj.getTypename(object);
521
550
  invariant(typename, 'Object has no typename');
522
551
 
523
- const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;
552
+ const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
524
553
 
525
- const queryCollection = Obj.instanceOf(DataType.QueryCollection, object) ? object : undefined;
526
- const matchingObjectForm = queryCollection
527
- ? objectForms.find((form) => Type.getTypename(form.objectSchema) === queryCollection.query.typename)
528
- : 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;
529
558
 
530
559
  const actions: NodeArg<ActionData>[] = [
531
- ...(Obj.instanceOf(DataType.Collection, object)
560
+ ...(Obj.instanceOf(Collection.Collection, object)
532
561
  ? [
533
562
  {
534
563
  id: getId(SpaceAction.OpenCreateObject._tag),
@@ -537,7 +566,7 @@ export const constructObjectActions = ({
537
566
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
538
567
  },
539
568
  properties: {
540
- label: ['create object in collection label', { ns: SPACE_PLUGIN }],
569
+ label: ['create object in collection label', { ns: meta.id }],
541
570
  icon: 'ph--plus--regular',
542
571
  disposition: 'list-item-primary',
543
572
  testId: 'spacePlugin.createObject',
@@ -545,7 +574,7 @@ export const constructObjectActions = ({
545
574
  },
546
575
  ]
547
576
  : []),
548
- ...(Obj.instanceOf(DataType.StoredSchema, object)
577
+ ...(Obj.instanceOf(Type.PersistentType, object)
549
578
  ? [
550
579
  {
551
580
  id: getId(SpaceAction.AddObject._tag),
@@ -560,31 +589,55 @@ export const constructObjectActions = ({
560
589
  );
561
590
  },
562
591
  properties: {
563
- label: ['add view to schema label', { ns: Type.getTypename(DataType.StoredSchema) }],
592
+ label: ['add view to schema label', { ns: meta.id }],
564
593
  icon: 'ph--plus--regular',
565
594
  disposition: 'list-item-primary',
566
595
  testId: 'spacePlugin.addViewToSchema',
567
596
  },
568
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
+ },
569
622
  ]
570
623
  : []),
571
- ...(matchingObjectForm
624
+ ...(createObjectIntent
572
625
  ? [
573
626
  {
574
627
  id: getId(SpaceAction.OpenCreateObject._tag),
575
628
  type: ACTION_TYPE,
576
629
  data: async () => {
577
- if (matchingObjectForm.formSchema) {
630
+ if (inputSchema) {
578
631
  await dispatch(
579
632
  createIntent(SpaceAction.OpenCreateObject, {
580
633
  target: space,
581
- typename: queryCollection?.query.typename,
634
+ typename: managedCollection ? managedCollection.key : undefined,
582
635
  }),
583
636
  );
584
637
  } else {
585
638
  await dispatch(
586
- pipe(
587
- matchingObjectForm.getIntent({}, { space }),
639
+ Function.pipe(
640
+ createObjectIntent({}, { space }),
588
641
  chain(SpaceAction.AddObject, { target: space, hidden: true }),
589
642
  chain(LayoutAction.Open, { part: 'main' }),
590
643
  ),
@@ -592,7 +645,7 @@ export const constructObjectActions = ({
592
645
  }
593
646
  },
594
647
  properties: {
595
- label: ['create object in smart collection label', { ns: SPACE_PLUGIN }],
648
+ label: ['create object in system collection label', { ns: meta.id }],
596
649
  icon: 'ph--plus--regular',
597
650
  disposition: 'list-item-primary',
598
651
  testId: 'spacePlugin.createObject',
@@ -600,56 +653,60 @@ export const constructObjectActions = ({
600
653
  },
601
654
  ]
602
655
  : []),
603
- {
604
- id: getId(SpaceAction.RenameObject._tag),
605
- type: ACTION_TYPE,
606
- data: async (params?: InvokeParams) => {
607
- await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
608
- },
609
- properties: {
610
- label: ['rename object label', { ns: typename }],
611
- icon: 'ph--pencil-simple-line--regular',
612
- disposition: 'list-item',
613
- // TODO(wittjosiah): Not working.
614
- // keyBinding: {
615
- // macos: 'shift+F6',
616
- // },
617
- testId: 'spacePlugin.renameObject',
618
- },
619
- },
620
- {
621
- id: getId(SpaceAction.RemoveObjects._tag),
622
- type: ACTION_TYPE,
623
- data: async () => {
624
- const collection = graph
625
- .getConnections(fullyQualifiedId(object), 'inbound')
626
- .find(({ data }) => Obj.instanceOf(DataType.Collection, data))?.data;
627
- await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
628
- },
629
- properties: {
630
- label: ['delete object label', { ns: typename }],
631
- icon: 'ph--trash--regular',
632
- disposition: 'list-item',
633
- disabled: !deletable,
634
- // TODO(wittjosiah): This is a browser shortcut.
635
- // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
636
- testId: 'spacePlugin.deleteObject',
637
- },
638
- },
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
+ ]),
639
696
  ...(navigable ||
640
- (!Obj.instanceOf(DataType.Collection, object) &&
641
- !Obj.instanceOf(DataType.QueryCollection, object) &&
642
- !Obj.instanceOf(DataType.StoredSchema, object))
697
+ (!Obj.instanceOf(Collection.Collection, object) &&
698
+ !Obj.instanceOf(Collection.Managed, object) &&
699
+ !Obj.instanceOf(Type.PersistentType, object))
643
700
  ? [
644
701
  {
645
702
  id: getId('copy-link'),
646
703
  type: ACTION_TYPE,
647
704
  data: async () => {
648
- const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;
705
+ const url = `${window.location.origin}/${space.id}/${Obj.getDXN(object).toString()}`;
649
706
  await navigator.clipboard.writeText(url);
650
707
  },
651
708
  properties: {
652
- label: ['copy link label', { ns: SPACE_PLUGIN }],
709
+ label: ['copy link label', { ns: meta.id }],
653
710
  icon: 'ph--link--regular',
654
711
  disposition: 'list-item',
655
712
  testId: 'spacePlugin.copyLink',
@@ -662,10 +719,12 @@ export const constructObjectActions = ({
662
719
  id: getId(LayoutAction.Expose._tag),
663
720
  type: ACTION_TYPE,
664
721
  data: async () => {
665
- 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
+ );
666
725
  },
667
726
  properties: {
668
- label: ['expose object label', { ns: SPACE_PLUGIN }],
727
+ label: ['expose object label', { ns: meta.id }],
669
728
  icon: 'ph--eye--regular',
670
729
  disposition: 'heading-list-item',
671
730
  testId: 'spacePlugin.exposeObject',
@@ -676,6 +735,20 @@ export const constructObjectActions = ({
676
735
  return actions;
677
736
  };
678
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
+
679
752
  /**
680
753
  * @deprecated This is a temporary solution.
681
754
  */
@@ -704,10 +777,10 @@ export const getNestedObjects = async (
704
777
  */
705
778
  // TODO(burdon): Remove.
706
779
  export const cloneObject = async (
707
- object: Type.Expando,
780
+ object: Obj.Any,
708
781
  resolve: (typename: string) => Record<string, any>,
709
782
  newSpace: Space,
710
- ): Promise<Type.Expando> => {
783
+ ): Promise<Obj.Any> => {
711
784
  const schema = Obj.getSchema(object);
712
785
  const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
713
786
  const metadata = resolve(typename);