@dxos/plugin-space 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (389) 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/ObjectCardStack-TE7AWPMH.mjs +144 -0
  4. package/dist/lib/browser/ObjectCardStack-TE7AWPMH.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectDetails-666IBRHE.mjs +144 -0
  6. package/dist/lib/browser/ObjectDetails-666IBRHE.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-USKWFIDK.mjs +551 -0
  10. package/dist/lib/browser/app-graph-builder-USKWFIDK.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-SXIQ425K.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-SXIQ425K.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-5CSSKOWR.mjs} +42 -16
  14. package/dist/lib/browser/chunk-5CSSKOWR.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-E4BEMEZ3.mjs +399 -0
  18. package/dist/lib/browser/chunk-E4BEMEZ3.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-IJCMB5B5.mjs} +269 -145
  20. package/dist/lib/browser/chunk-IJCMB5B5.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-POFUXISV.mjs} +69 -62
  22. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-V7MJSSBQ.mjs → chunk-XKQCDLXX.mjs} +734 -615
  28. package/dist/lib/browser/chunk-XKQCDLXX.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 +92 -139
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TIXVDYN7.mjs → intent-resolver-QEIM7NQT.mjs} +118 -109
  34. package/dist/lib/browser/intent-resolver-QEIM7NQT.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-T6ZETLD2.mjs +30 -0
  37. package/dist/lib/browser/react-root-T6ZETLD2.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-TPNLWJJH.mjs → react-surface-MLN5BZ2G.mjs} +120 -120
  39. package/dist/lib/browser/react-surface-MLN5BZ2G.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-EGTCHS7U.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-EGTCHS7U.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YS4BBZXW.mjs} +29 -20
  45. package/dist/lib/browser/spaces-ready-YS4BBZXW.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/ObjectCardStack-AAKMAQ6T.mjs +145 -0
  52. package/dist/lib/node-esm/ObjectCardStack-AAKMAQ6T.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.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-QRQ5EQLB.mjs +552 -0
  58. package/dist/lib/node-esm/app-graph-builder-QRQ5EQLB.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-P2X4W7LI.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-P2X4W7LI.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-3D4NGZPW.mjs} +269 -145
  62. package/dist/lib/node-esm/chunk-3D4NGZPW.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-QQQE2ZCX.mjs +400 -0
  70. package/dist/lib/node-esm/chunk-QQQE2ZCX.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-UMZ7G6G4.mjs} +41 -16
  72. package/dist/lib/node-esm/chunk-UMZ7G6G4.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-6X5DLJM5.mjs → chunk-XD532BVR.mjs} +734 -615
  76. package/dist/lib/node-esm/chunk-XD532BVR.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 +92 -139
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-MHGHRGDT.mjs → intent-resolver-ZWCBVABN.mjs} +118 -109
  82. package/dist/lib/node-esm/intent-resolver-ZWCBVABN.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-KW3TGJGY.mjs → react-root-SKB4UJ4K.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-SKB4UJ4K.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-UUIUUD6P.mjs → react-surface-BVZGNSBB.mjs} +120 -120
  87. package/dist/lib/node-esm/react-surface-BVZGNSBB.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-N3F6JCIR.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-N3F6JCIR.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-U2K5P4LB.mjs} +29 -20
  93. package/dist/lib/node-esm/spaces-ready-U2K5P4LB.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/ObjectCardStack/ObjectCardStack.d.ts +8 -0
  145. package/dist/types/src/components/ObjectCardStack/ObjectCardStack.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts +9 -0
  147. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectCardStack/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectCardStack/index.d.ts.map +1 -0
  150. package/dist/types/src/components/{ObjectSettings → ObjectDetails}/BaseObjectSettings.d.ts +2 -2
  151. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +1424 -0
  153. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts +8 -0
  155. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts.map +1 -0
  156. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +8 -0
  157. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -0
  158. package/dist/types/src/components/ObjectDetails/index.d.ts +3 -0
  159. package/dist/types/src/components/ObjectDetails/index.d.ts.map +1 -0
  160. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  161. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  162. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  163. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  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 +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1421 -4
  184. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1422 -5
  187. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  189. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  190. package/dist/types/src/components/index.d.ts +10 -12
  191. package/dist/types/src/components/index.d.ts.map +1 -1
  192. package/dist/types/src/events.d.ts.map +1 -1
  193. package/dist/types/src/helpers/index.d.ts +2 -0
  194. package/dist/types/src/helpers/index.d.ts.map +1 -0
  195. package/dist/types/src/helpers/query.d.ts +7 -0
  196. package/dist/types/src/helpers/query.d.ts.map +1 -0
  197. package/dist/types/src/helpers/query.test.d.ts +2 -0
  198. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  199. package/dist/types/src/hooks/index.d.ts +1 -0
  200. package/dist/types/src/hooks/index.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +2 -8
  203. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts +1 -1
  205. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  207. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  208. package/dist/types/src/index.d.ts +1 -0
  209. package/dist/types/src/index.d.ts.map +1 -1
  210. package/dist/types/src/meta.d.ts +0 -1
  211. package/dist/types/src/meta.d.ts.map +1 -1
  212. package/dist/types/src/translations.d.ts +1261 -67
  213. package/dist/types/src/translations.d.ts.map +1 -1
  214. package/dist/types/src/types/form.d.ts +22 -0
  215. package/dist/types/src/types/form.d.ts.map +1 -0
  216. package/dist/types/src/types/index.d.ts +1 -0
  217. package/dist/types/src/types/index.d.ts.map +1 -1
  218. package/dist/types/src/types/types.d.ts +96 -157
  219. package/dist/types/src/types/types.d.ts.map +1 -1
  220. package/dist/types/src/util.d.ts +25 -36
  221. package/dist/types/src/util.d.ts.map +1 -1
  222. package/dist/types/tsconfig.tsbuildinfo +1 -1
  223. package/package.json +70 -59
  224. package/src/SpacePlugin.ts +182 -222
  225. package/src/capabilities/app-graph-builder.ts +271 -246
  226. package/src/capabilities/app-graph-serializer.ts +12 -12
  227. package/src/capabilities/capabilities.ts +28 -17
  228. package/src/capabilities/identity-created.ts +3 -3
  229. package/src/capabilities/index.ts +1 -2
  230. package/src/capabilities/intent-resolver.ts +92 -81
  231. package/src/capabilities/react-root.tsx +6 -4
  232. package/src/capabilities/react-surface.tsx +127 -155
  233. package/src/capabilities/repair.ts +57 -0
  234. package/src/capabilities/spaces-ready.ts +38 -17
  235. package/src/capabilities/state.ts +5 -4
  236. package/src/components/AwaitingObject.tsx +12 -14
  237. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  238. package/src/components/CollectionSection.tsx +8 -6
  239. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  240. package/src/components/CreateDialog/CreateObjectDialog.tsx +74 -46
  241. package/src/components/CreateDialog/CreateObjectPanel.tsx +65 -43
  242. package/src/components/CreateDialog/CreateSpaceDialog.tsx +45 -22
  243. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  244. package/src/components/JoinDialog/index.ts +5 -0
  245. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  246. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  247. package/src/components/MembersContainer/index.ts +5 -0
  248. package/src/components/MenuFooter.tsx +2 -2
  249. package/src/components/ObjectCardStack/ObjectCardStack.tsx +64 -0
  250. package/src/components/ObjectCardStack/ObjectForm.tsx +90 -0
  251. package/src/components/ObjectCardStack/index.ts +7 -0
  252. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +63 -0
  253. package/src/components/ObjectDetails/BaseObjectSettings.tsx +118 -0
  254. package/src/components/{ObjectSettings → ObjectDetails}/ForeignKeys.tsx +8 -8
  255. package/src/components/ObjectDetails/ObjectDetails.tsx +35 -0
  256. package/src/components/ObjectDetails/index.ts +7 -0
  257. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  258. package/src/components/ObjectRenamePopover/index.ts +5 -0
  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 +190 -155
  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 +56 -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 +152 -0
  279. package/src/hooks/index.ts +1 -0
  280. package/src/hooks/useActiveSpace.ts +3 -2
  281. package/src/hooks/useInputSurfaceLookup.tsx +9 -13
  282. package/src/hooks/usePath.ts +1 -1
  283. package/src/hooks/useTypeOptions.ts +25 -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 +69 -0
  288. package/src/types/index.ts +1 -0
  289. package/src/types/types.ts +51 -52
  290. package/src/util.tsx +269 -147
  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-7CZZJS3S.mjs +0 -479
  295. package/dist/lib/browser/app-graph-builder-7CZZJS3S.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-JS3MMC42.mjs +0 -19
  302. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  305. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  306. package/dist/lib/browser/chunk-V7MJSSBQ.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-TIXVDYN7.mjs.map +0 -7
  311. package/dist/lib/browser/react-root-N2J7TDRX.mjs +0 -29
  312. package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
  313. package/dist/lib/browser/react-surface-TPNLWJJH.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-KGIGWC72.mjs +0 -480
  324. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.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-4AOMYKDE.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  328. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  330. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-6X5DLJM5.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-MHGHRGDT.mjs.map +0 -7
  340. package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
  341. package/dist/lib/node-esm/react-surface-UUIUUD6P.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/ObjectSettings/AdvancedObjectSettings.d.ts +0 -7
  363. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
  364. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
  365. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +0 -8
  366. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
  367. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +0 -8
  368. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
  369. package/dist/types/src/components/ObjectSettings/index.d.ts +0 -2
  370. package/dist/types/src/components/ObjectSettings/index.d.ts.map +0 -1
  371. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  372. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  373. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  374. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  375. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  376. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  377. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  378. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  379. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  380. package/src/capabilities/schema-defs.ts +0 -30
  381. package/src/capabilities/schema-tool.test.ts +0 -44
  382. package/src/capabilities/schema-tools.ts +0 -125
  383. package/src/components/MembersContainer.stories.tsx +0 -30
  384. package/src/components/ObjectDetailsPanel.tsx +0 -77
  385. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +0 -80
  386. package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
  387. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -36
  388. package/src/components/ObjectSettings/index.ts +0 -5
  389. package/src/components/PersistenceStatus.tsx +0 -83
package/src/util.tsx CHANGED
@@ -2,48 +2,51 @@
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 Entity, Filter, Obj, Query, type QueryResult, 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';
29
+ import { createFilename } from '@dxos/util';
27
30
 
28
- import { SPACE_PLUGIN } from './meta';
29
- import { SpaceAction, SPACE_TYPE, type ObjectForm } from './types';
31
+ import { meta } from './meta';
32
+ import { SPACE_TYPE, SpaceAction } from './types';
30
33
 
31
- export const SPACES = `${SPACE_PLUGIN}-spaces`;
32
- export const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';
34
+ export const SPACES = `${meta.id}-spaces`;
35
+ export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
33
36
  // TODO(wittjosiah): Remove.
34
37
  export const SHARED = 'shared-spaces';
35
38
 
36
39
  /**
37
- * Convert a query result to an Rx value of the objects.
40
+ * Convert a query result to an Atom value of the objects.
38
41
  */
39
- export const rxFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Rx.Rx<T[]> => {
40
- return Rx.make((get) => {
42
+ export const atomFromQuery = <T extends Entity.Unknown>(query: QueryResult.QueryResult<T>): Atom.Atom<T[]> => {
43
+ return Atom.make((get) => {
41
44
  const unsubscribe = query.subscribe((result) => {
42
- get.setSelf(result.objects);
45
+ get.setSelf(result.results);
43
46
  });
44
47
 
45
48
  get.addFinalizer(() => unsubscribe());
46
- return query.objects;
49
+ return query.results;
47
50
  });
48
51
  };
49
52
 
@@ -53,12 +56,12 @@ export const getSpaceDisplayName = (
53
56
  { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
54
57
  ): string | [string, { ns: string }] => {
55
58
  return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
56
- ? space.properties.name
59
+ ? space.properties.name!
57
60
  : namesCache[space.id]
58
61
  ? namesCache[space.id]
59
62
  : personal
60
- ? ['personal space label', { ns: SPACE_PLUGIN }]
61
- : ['unnamed space label', { ns: SPACE_PLUGIN }];
63
+ ? ['personal space label', { ns: meta.id }]
64
+ : ['unnamed space label', { ns: meta.id }];
62
65
  };
63
66
 
64
67
  const getCollectionGraphNodePartials = ({
@@ -66,7 +69,7 @@ const getCollectionGraphNodePartials = ({
66
69
  space,
67
70
  resolve,
68
71
  }: {
69
- collection: DataType.Collection;
72
+ collection: Collection.Collection;
70
73
  space: Space;
71
74
  resolve: (typename: string) => Record<string, any>;
72
75
  }) => {
@@ -136,33 +139,23 @@ const getCollectionGraphNodePartials = ({
136
139
  };
137
140
  };
138
141
 
139
- const getQueryCollectionNodePartials = ({
142
+ const getSystemCollectionNodePartials = ({
140
143
  collection,
141
144
  space,
142
145
  resolve,
143
146
  }: {
144
- collection: DataType.QueryCollection;
147
+ collection: Collection.Managed;
145
148
  space: Space;
146
149
  resolve: (typename: string) => Record<string, any>;
147
150
  }) => {
151
+ const metadata = resolve(collection.key);
148
152
  return {
149
- icon: collection.query.typename && resolve(collection.query.typename)?.icon,
153
+ label: ['typename label', { ns: collection.key, count: 2 }],
154
+ icon: metadata.icon,
155
+ iconHue: metadata.iconHue,
150
156
  acceptPersistenceClass: new Set(['echo']),
151
157
  acceptPersistenceKey: new Set([space.id]),
152
158
  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
159
  };
167
160
  };
168
161
 
@@ -173,24 +166,6 @@ const getSchemaGraphNodePartials = () => {
173
166
  };
174
167
  };
175
168
 
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
169
  const checkPendingMigration = (space: Space) => {
195
170
  return (
196
171
  space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
@@ -215,9 +190,9 @@ export const constructSpaceNode = ({
215
190
  }) => {
216
191
  const hasPendingMigration = checkPendingMigration(space);
217
192
  const collection =
218
- space.state.get() === SpaceState.SPACE_READY && space.properties[DataType.Collection.typename]?.target;
193
+ space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
219
194
  const partials =
220
- space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(DataType.Collection, collection)
195
+ space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
221
196
  ? getCollectionGraphNodePartials({ collection, space, resolve })
222
197
  : {};
223
198
 
@@ -235,6 +210,7 @@ export const constructSpaceNode = ({
235
210
  space.state.get() === SpaceState.SPACE_READY && space.properties.icon
236
211
  ? `ph--${space.properties.icon}--regular`
237
212
  : undefined,
213
+ iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
238
214
  disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
239
215
  testId: 'spacePlugin.space',
240
216
  canDrop: (source: TreeData) => {
@@ -245,40 +221,40 @@ export const constructSpaceNode = ({
245
221
  nodes: [
246
222
  {
247
223
  id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
248
- type: `${SPACE_PLUGIN}/settings`,
224
+ type: `${meta.id}/settings`,
249
225
  data: null,
250
226
  properties: {
251
- label: ['settings panel label', { ns: SPACE_PLUGIN }],
227
+ label: ['settings panel label', { ns: meta.id }],
252
228
  icon: 'ph--faders--regular',
253
229
  disposition: 'alternate-tree',
254
230
  },
255
231
  nodes: [
256
232
  {
257
233
  id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
258
- type: `${SPACE_PLUGIN}/properties`,
259
- data: `${SPACE_PLUGIN}/properties`,
234
+ type: `${meta.id}/properties`,
235
+ data: `${meta.id}/properties`,
260
236
  properties: {
261
- label: ['space settings properties label', { ns: SPACE_PLUGIN }],
237
+ label: ['space settings properties label', { ns: meta.id }],
262
238
  icon: 'ph--sliders--regular',
263
239
  position: 'hoist',
264
240
  },
265
241
  },
266
242
  {
267
243
  id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
268
- type: `${SPACE_PLUGIN}/members`,
269
- data: `${SPACE_PLUGIN}/members`,
244
+ type: `${meta.id}/members`,
245
+ data: `${meta.id}/members`,
270
246
  properties: {
271
- label: ['members panel label', { ns: SPACE_PLUGIN }],
247
+ label: ['members panel label', { ns: meta.id }],
272
248
  icon: 'ph--users--regular',
273
249
  position: 'hoist',
274
250
  },
275
251
  },
276
252
  {
277
253
  id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
278
- type: `${SPACE_PLUGIN}/schema`,
279
- data: `${SPACE_PLUGIN}/schema`,
254
+ type: `${meta.id}/schema`,
255
+ data: `${meta.id}/schema`,
280
256
  properties: {
281
- label: ['space settings schema label', { ns: SPACE_PLUGIN }],
257
+ label: ['space settings schema label', { ns: meta.id }],
282
258
  icon: 'ph--shapes--regular',
283
259
  },
284
260
  },
@@ -312,7 +288,7 @@ export const constructSpaceActions = ({
312
288
  await dispatch(createIntent(SpaceAction.Migrate, { space }));
313
289
  },
314
290
  properties: {
315
- label: ['migrate space label', { ns: SPACE_PLUGIN }],
291
+ label: ['migrate space label', { ns: meta.id }],
316
292
  icon: 'ph--database--regular',
317
293
  disposition: 'list-item-primary',
318
294
  disabled: migrating || Migrations.running(space),
@@ -329,7 +305,7 @@ export const constructSpaceActions = ({
329
305
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
330
306
  },
331
307
  properties: {
332
- label: ['create object in space label', { ns: SPACE_PLUGIN }],
308
+ label: ['create object in space label', { ns: meta.id }],
333
309
  icon: 'ph--plus--regular',
334
310
  disposition: 'item',
335
311
  testId: 'spacePlugin.createObject',
@@ -342,7 +318,7 @@ export const constructSpaceActions = ({
342
318
  await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
343
319
  },
344
320
  properties: {
345
- label: ['rename space label', { ns: SPACE_PLUGIN }],
321
+ label: ['rename space label', { ns: meta.id }],
346
322
  icon: 'ph--pencil-simple-line--regular',
347
323
  keyBinding: {
348
324
  macos: 'shift+F6',
@@ -356,15 +332,23 @@ export const constructSpaceActions = ({
356
332
  return actions;
357
333
  };
358
334
 
359
- export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
335
+ export const createStaticSchemaNode = ({
336
+ schema,
337
+ space,
338
+ }: {
339
+ schema: Schema.Schema.AnyNoContext;
340
+ space: Space;
341
+ }): Node => {
360
342
  return {
361
343
  id: `${space.id}/${Type.getTypename(schema)}`,
362
- type: `${SPACE_PLUGIN}/static-schema`,
344
+ type: `${meta.id}/static-schema`,
363
345
  data: schema,
364
346
  properties: {
365
- label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
347
+ label: ['typename label', { ns: Type.getTypename(schema), count: 2, default: Type.getTypename(schema) }],
366
348
  icon: 'ph--database--regular',
349
+ iconHue: 'green',
367
350
  role: 'branch',
351
+ selectable: false,
368
352
  canDrop: () => false,
369
353
  space,
370
354
  },
@@ -374,15 +358,36 @@ export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any
374
358
  export const createStaticSchemaActions = ({
375
359
  schema,
376
360
  space,
361
+ dispatch,
377
362
  deletable,
378
363
  }: {
379
364
  schema: Type.Obj.Any;
380
365
  space: Space;
366
+ dispatch: PromiseIntentDispatcher;
381
367
  deletable: boolean;
382
368
  }) => {
383
369
  const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
384
370
 
385
371
  const actions: NodeArg<ActionData>[] = [
372
+ {
373
+ id: getId(SpaceAction.AddObject._tag),
374
+ type: ACTION_TYPE,
375
+ data: async () => {
376
+ await dispatch(
377
+ createIntent(SpaceAction.OpenCreateObject, {
378
+ target: space,
379
+ views: true,
380
+ initialFormValues: { typename: Type.getTypename(schema) },
381
+ }),
382
+ );
383
+ },
384
+ properties: {
385
+ label: ['add view to schema label', { ns: meta.id }],
386
+ icon: 'ph--plus--regular',
387
+ disposition: 'list-item-primary',
388
+ testId: 'spacePlugin.addViewToSchema',
389
+ },
390
+ },
386
391
  {
387
392
  id: getId(SpaceAction.RenameObject._tag),
388
393
  type: ACTION_TYPE,
@@ -390,7 +395,7 @@ export const createStaticSchemaActions = ({
390
395
  throw new Error('Not implemented');
391
396
  },
392
397
  properties: {
393
- label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
398
+ label: ['rename object label', { ns: Type.getTypename(Type.PersistentType) }],
394
399
  icon: 'ph--pencil-simple-line--regular',
395
400
  disabled: true,
396
401
  disposition: 'list-item',
@@ -409,13 +414,36 @@ export const createStaticSchemaActions = ({
409
414
  }
410
415
  },
411
416
  properties: {
412
- label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
417
+ label: ['delete object label', { ns: Type.getTypename(Type.PersistentType) }],
413
418
  icon: 'ph--trash--regular',
414
419
  disposition: 'list-item',
415
420
  disabled: !deletable,
416
421
  testId: 'spacePlugin.deleteObject',
417
422
  },
418
423
  },
424
+ {
425
+ id: getId(SpaceAction.Snapshot._tag),
426
+ type: ACTION_TYPE,
427
+ data: async () => {
428
+ const result = await dispatch(
429
+ createIntent(SpaceAction.Snapshot, {
430
+ space,
431
+ query: Query.select(Filter.type(schema)).ast,
432
+ }),
433
+ );
434
+ if (result.data?.snapshot) {
435
+ await downloadBlob(
436
+ result.data.snapshot,
437
+ createFilename({ parts: [space.id, Type.getTypename(schema)], ext: '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,69 @@ 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
+ createFilename({ parts: [space.id, object.typename], ext: 'json' }),
612
+ );
613
+ }
614
+ },
615
+ properties: {
616
+ label: ['snapshot by schema label', { ns: meta.id }],
617
+ icon: 'ph--camera--regular',
618
+ disposition: 'list-item',
619
+ },
620
+ },
621
+ ]
622
+ : []),
623
+ ...(createObjectIntent
522
624
  ? [
523
625
  {
524
626
  id: getId(SpaceAction.OpenCreateObject._tag),
525
627
  type: ACTION_TYPE,
526
628
  data: async () => {
527
- if (matchingObjectForm.formSchema) {
629
+ if (inputSchema) {
528
630
  await dispatch(
529
631
  createIntent(SpaceAction.OpenCreateObject, {
530
632
  target: space,
531
- typename: queryCollection?.query.typename,
633
+ typename: managedCollection ? managedCollection.key : undefined,
532
634
  }),
533
635
  );
534
636
  } else {
535
637
  await dispatch(
536
- pipe(
537
- matchingObjectForm.getIntent({}, { space }),
638
+ Function.pipe(
639
+ createObjectIntent({}, { space }),
538
640
  chain(SpaceAction.AddObject, { target: space, hidden: true }),
539
641
  chain(LayoutAction.Open, { part: 'main' }),
540
642
  ),
@@ -542,7 +644,7 @@ export const constructObjectActions = ({
542
644
  }
543
645
  },
544
646
  properties: {
545
- label: ['create object in smart collection label', { ns: SPACE_PLUGIN }],
647
+ label: ['create object in system collection label', { ns: meta.id }],
546
648
  icon: 'ph--plus--regular',
547
649
  disposition: 'list-item-primary',
548
650
  testId: 'spacePlugin.createObject',
@@ -550,56 +652,60 @@ export const constructObjectActions = ({
550
652
  },
551
653
  ]
552
654
  : []),
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
- },
655
+ ...(managedCollection
656
+ ? []
657
+ : [
658
+ {
659
+ id: getId(SpaceAction.RenameObject._tag),
660
+ type: ACTION_TYPE,
661
+ data: async (params?: InvokeParams) => {
662
+ await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
663
+ },
664
+ properties: {
665
+ label: ['rename object label', { ns: typename }],
666
+ icon: 'ph--pencil-simple-line--regular',
667
+ disposition: 'list-item',
668
+ // TODO(wittjosiah): Not working.
669
+ // keyBinding: {
670
+ // macos: 'shift+F6',
671
+ // },
672
+ testId: 'spacePlugin.renameObject',
673
+ },
674
+ },
675
+ {
676
+ id: getId(SpaceAction.RemoveObjects._tag),
677
+ type: ACTION_TYPE,
678
+ data: async () => {
679
+ const collection = graph
680
+ .getConnections(Obj.getDXN(object).toString(), 'inbound')
681
+ .find(({ data }) => Obj.instanceOf(Collection.Collection, data))?.data;
682
+ await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
683
+ },
684
+ properties: {
685
+ label: ['delete object label', { ns: typename }],
686
+ icon: 'ph--trash--regular',
687
+ disposition: 'list-item',
688
+ disabled: !deletable,
689
+ // TODO(wittjosiah): This is a browser shortcut.
690
+ // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
691
+ testId: 'spacePlugin.deleteObject',
692
+ },
693
+ },
694
+ ]),
589
695
  ...(navigable ||
590
- (!Obj.instanceOf(DataType.Collection, object) &&
591
- !Obj.instanceOf(DataType.QueryCollection, object) &&
592
- !Obj.instanceOf(DataType.StoredSchema, object))
696
+ (!Obj.instanceOf(Collection.Collection, object) &&
697
+ !Obj.instanceOf(Collection.Managed, object) &&
698
+ !Obj.instanceOf(Type.PersistentType, object))
593
699
  ? [
594
700
  {
595
701
  id: getId('copy-link'),
596
702
  type: ACTION_TYPE,
597
703
  data: async () => {
598
- const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;
704
+ const url = `${window.location.origin}/${space.id}/${Obj.getDXN(object).toString()}`;
599
705
  await navigator.clipboard.writeText(url);
600
706
  },
601
707
  properties: {
602
- label: ['copy link label', { ns: SPACE_PLUGIN }],
708
+ label: ['copy link label', { ns: meta.id }],
603
709
  icon: 'ph--link--regular',
604
710
  disposition: 'list-item',
605
711
  testId: 'spacePlugin.copyLink',
@@ -612,10 +718,12 @@ export const constructObjectActions = ({
612
718
  id: getId(LayoutAction.Expose._tag),
613
719
  type: ACTION_TYPE,
614
720
  data: async () => {
615
- await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
721
+ await dispatch(
722
+ createIntent(LayoutAction.Expose, { part: 'navigation', subject: Obj.getDXN(object).toString() }),
723
+ );
616
724
  },
617
725
  properties: {
618
- label: ['expose object label', { ns: SPACE_PLUGIN }],
726
+ label: ['expose object label', { ns: meta.id }],
619
727
  icon: 'ph--eye--regular',
620
728
  disposition: 'heading-list-item',
621
729
  testId: 'spacePlugin.exposeObject',
@@ -626,6 +734,20 @@ export const constructObjectActions = ({
626
734
  return actions;
627
735
  };
628
736
 
737
+ // TODO(wittjosiah): Factor out.
738
+ const downloadBlob = async (blob: Blob, filename: string) => {
739
+ const url = URL.createObjectURL(blob);
740
+ const a = document.createElement('a');
741
+ a.href = url;
742
+ a.download = filename;
743
+
744
+ document.body.appendChild(a);
745
+ a.click();
746
+
747
+ document.body.removeChild(a);
748
+ URL.revokeObjectURL(url);
749
+ };
750
+
629
751
  /**
630
752
  * @deprecated This is a temporary solution.
631
753
  */
@@ -654,10 +776,10 @@ export const getNestedObjects = async (
654
776
  */
655
777
  // TODO(burdon): Remove.
656
778
  export const cloneObject = async (
657
- object: Type.Expando,
779
+ object: Obj.Any,
658
780
  resolve: (typename: string) => Record<string, any>,
659
781
  newSpace: Space,
660
- ): Promise<Type.Expando> => {
782
+ ): Promise<Obj.Any> => {
661
783
  const schema = Obj.getSchema(object);
662
784
  const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
663
785
  const metadata = resolve(typename);