@dxos/plugin-space 0.8.4-main.28f8d3d → 0.8.4-main.2c6827d

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 (366) 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-2BRUBHP6.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-VZW75QPJ.mjs → app-graph-builder-3ZWAUCDM.mjs} +114 -97
  10. package/dist/lib/browser/app-graph-builder-3ZWAUCDM.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-YPHYVZAP.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  14. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-SMB4DGYO.mjs → chunk-KFUMADZF.mjs} +184 -60
  16. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-NLFQFNYA.mjs +167 -0
  18. package/dist/lib/browser/chunk-NLFQFNYA.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-VGKOXAPE.mjs} +27 -13
  20. package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  22. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  24. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-PSIBVBTA.mjs → chunk-YGNDF37J.mjs} +576 -500
  26. package/dist/lib/browser/chunk-YGNDF37J.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-3UFG6LQQ.mjs → chunk-ZQMSGD5J.mjs} +44 -22
  28. package/dist/lib/browser/chunk-ZQMSGD5J.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 +89 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TS6CCKST.mjs → intent-resolver-2RUHLO65.mjs} +104 -86
  34. package/dist/lib/browser/intent-resolver-2RUHLO65.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-47C75OBO.mjs +30 -0
  37. package/dist/lib/browser/react-root-47C75OBO.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-V3ARS2BP.mjs → react-surface-FAMKELOG.mjs} +75 -109
  39. package/dist/lib/browser/react-surface-FAMKELOG.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-5LBA43X5.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
  41. package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-FLLBP5KI.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-FLLBP5KI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-FXEP6XEW.mjs → spaces-ready-QCND4DVY.mjs} +15 -14
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
  46. package/dist/lib/browser/{state-K3UBPKYP.mjs → state-Q7YRE5KG.mjs} +7 -7
  47. package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/{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-6PZQIQG3.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
  57. package/dist/lib/node-esm/{app-graph-builder-XNVQOJLE.mjs → app-graph-builder-WABE3AIY.mjs} +114 -97
  58. package/dist/lib/node-esm/app-graph-builder-WABE3AIY.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-PKVLWV6V.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-S7MKRQHY.mjs → chunk-6VEONPNZ.mjs} +44 -22
  62. package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  64. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  66. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-CTQMR7E3.mjs → chunk-OK2L7N2F.mjs} +184 -60
  68. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-QBRPYAEL.mjs} +27 -13
  70. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-KYUHPPRN.mjs → chunk-SW4ETU2Z.mjs} +576 -500
  72. package/dist/lib/node-esm/chunk-SW4ETU2Z.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-TFC3EU3B.mjs +168 -0
  74. package/dist/lib/node-esm/chunk-TFC3EU3B.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-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 +89 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-W6P27SCF.mjs → intent-resolver-CPGECQZ6.mjs} +104 -86
  82. package/dist/lib/node-esm/intent-resolver-CPGECQZ6.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-N27KETKT.mjs → react-root-OU6IPRCL.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-OU6IPRCL.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-TNPAUQCM.mjs → react-surface-GAE5KB23.mjs} +75 -109
  87. package/dist/lib/node-esm/react-surface-GAE5KB23.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-TPWZPDCR.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
  89. package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-WKUWY3P6.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-WKUWY3P6.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-PQLLIO5W.mjs → spaces-ready-P7CKVXBE.mjs} +15 -14
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-4M5A6OSB.mjs → state-362I5BMK.mjs} +7 -7
  95. package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +2 -2
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +6 -5
  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/index.d.ts +11 -12
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  110. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  116. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/state.d.ts +1 -1
  118. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  119. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  120. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  121. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  122. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +6 -4
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  129. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  131. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  132. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  133. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  134. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  135. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  136. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
  138. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  142. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  143. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  148. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  150. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  152. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  153. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  154. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  156. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  159. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  160. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  161. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  162. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  163. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  165. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  166. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  167. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  168. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  169. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  170. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  172. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  173. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  174. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  175. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  176. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  178. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  179. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  181. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  182. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  184. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  185. package/dist/types/src/components/index.d.ts +10 -14
  186. package/dist/types/src/components/index.d.ts.map +1 -1
  187. package/dist/types/src/events.d.ts.map +1 -1
  188. package/dist/types/src/helpers/index.d.ts +2 -0
  189. package/dist/types/src/helpers/index.d.ts.map +1 -0
  190. package/dist/types/src/helpers/query.d.ts +8 -0
  191. package/dist/types/src/helpers/query.d.ts.map +1 -0
  192. package/dist/types/src/helpers/query.test.d.ts +2 -0
  193. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  194. package/dist/types/src/hooks/index.d.ts +1 -0
  195. package/dist/types/src/hooks/index.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  198. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  199. package/dist/types/src/hooks/usePath.d.ts +1 -1
  200. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  202. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  203. package/dist/types/src/index.d.ts +1 -0
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/meta.d.ts +0 -1
  206. package/dist/types/src/meta.d.ts.map +1 -1
  207. package/dist/types/src/translations.d.ts +1332 -22
  208. package/dist/types/src/translations.d.ts.map +1 -1
  209. package/dist/types/src/types/types.d.ts +92 -97
  210. package/dist/types/src/types/types.d.ts.map +1 -1
  211. package/dist/types/src/util.d.ts +12 -8
  212. package/dist/types/src/util.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +65 -59
  215. package/src/SpacePlugin.ts +228 -218
  216. package/src/capabilities/app-graph-builder.ts +184 -135
  217. package/src/capabilities/app-graph-serializer.ts +12 -12
  218. package/src/capabilities/capabilities.ts +17 -11
  219. package/src/capabilities/identity-created.ts +2 -2
  220. package/src/capabilities/index.ts +0 -1
  221. package/src/capabilities/intent-resolver.ts +90 -63
  222. package/src/capabilities/react-root.tsx +4 -3
  223. package/src/capabilities/react-surface.tsx +69 -145
  224. package/src/capabilities/schema-defs.ts +1 -1
  225. package/src/capabilities/spaces-ready.ts +8 -5
  226. package/src/capabilities/state.ts +2 -2
  227. package/src/components/AwaitingObject.tsx +12 -14
  228. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  229. package/src/components/CollectionSection.tsx +8 -6
  230. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +15 -15
  231. package/src/components/CreateDialog/CreateObjectDialog.tsx +48 -31
  232. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  233. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  234. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  235. package/src/components/JoinDialog/index.ts +5 -0
  236. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  237. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +21 -20
  238. package/src/components/MembersContainer/index.ts +5 -0
  239. package/src/components/MenuFooter.tsx +2 -2
  240. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  241. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  242. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  243. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  244. package/src/components/ObjectRenamePopover/index.ts +5 -0
  245. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  246. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  247. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  248. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  249. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  250. package/src/components/ObjectSettings/index.ts +3 -1
  251. package/src/components/RecordArticle.stories.tsx +115 -0
  252. package/src/components/RecordArticle.tsx +114 -0
  253. package/src/components/SchemaContainer.tsx +23 -26
  254. package/src/components/SpacePluginSettings.tsx +15 -10
  255. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +22 -22
  256. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  257. package/src/components/SpacePresence/index.ts +5 -0
  258. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  259. package/src/components/SpaceRenamePopover/index.ts +5 -0
  260. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +15 -8
  261. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +45 -24
  262. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  263. package/src/components/SyncStatus/SyncStatus.stories.tsx +7 -8
  264. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  265. package/src/components/ViewEditor.tsx +51 -23
  266. package/src/components/index.ts +7 -8
  267. package/src/events.ts +6 -6
  268. package/src/helpers/index.ts +5 -0
  269. package/src/helpers/query.test.ts +24 -0
  270. package/src/helpers/query.ts +158 -0
  271. package/src/hooks/index.ts +1 -0
  272. package/src/hooks/useActiveSpace.ts +3 -2
  273. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  274. package/src/hooks/usePath.ts +1 -1
  275. package/src/hooks/useTypeOptions.ts +59 -0
  276. package/src/index.ts +1 -0
  277. package/src/meta.ts +6 -3
  278. package/src/translations.ts +26 -10
  279. package/src/types/types.ts +42 -23
  280. package/src/util.tsx +183 -62
  281. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  282. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  283. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  284. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  285. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-serializer-YPHYVZAP.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  290. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-DYKFFVN6.mjs +0 -94
  292. package/dist/lib/browser/chunk-DYKFFVN6.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  294. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-Q5EEPP3S.mjs +0 -20
  297. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  300. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  301. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +0 -7
  302. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs +0 -29
  303. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs.map +0 -7
  304. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +0 -7
  305. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +0 -7
  306. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs +0 -124
  307. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +0 -7
  308. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +0 -7
  309. package/dist/lib/browser/state-K3UBPKYP.mjs.map +0 -7
  310. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  311. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  312. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  313. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  314. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-PKVLWV6V.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs +0 -21
  318. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  321. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs +0 -96
  326. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-N27KETKT.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-4M5A6OSB.mjs.map +0 -7
  338. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  340. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  341. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  342. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  343. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  344. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  345. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  347. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  349. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  350. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  351. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  352. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  353. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  355. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  356. package/dist/types/src/components/RecordMain.d.ts +0 -7
  357. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  358. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  359. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  360. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  361. package/src/capabilities/schema-tool.test.ts +0 -44
  362. package/src/capabilities/schema-tools.ts +0 -125
  363. package/src/components/MembersContainer.stories.tsx +0 -31
  364. package/src/components/ObjectDetailsPanel.tsx +0 -77
  365. package/src/components/PersistenceStatus.tsx +0 -83
  366. package/src/components/RecordMain.tsx +0 -43
package/src/util.tsx CHANGED
@@ -2,12 +2,12 @@
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 { Atom } from '@effect-atom/atom-react';
6
+ import * as Function from 'effect/Function';
7
7
 
8
8
  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';
9
+ import { Filter, Obj, Query, Ref, Type } from '@dxos/echo';
10
+ import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo/internal';
11
11
  import { invariant } from '@dxos/invariant';
12
12
  import { Migrations } from '@dxos/migrations';
13
13
  import {
@@ -20,24 +20,24 @@ import {
20
20
  type ReadableGraph,
21
21
  isGraphNode,
22
22
  } from '@dxos/plugin-graph';
23
- import { type QueryResult, type Space, SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
23
+ import { type QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/react-client/echo';
24
24
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
25
25
  import { type TreeData } from '@dxos/react-ui-list';
26
- import { DataType } from '@dxos/schema';
26
+ import { Collection, StoredSchema, View, getTypenameFromQuery } from '@dxos/schema';
27
27
 
28
- import { SPACE_PLUGIN } from './meta';
28
+ import { meta } from './meta';
29
29
  import { type ObjectForm, SPACE_TYPE, SpaceAction } from './types';
30
30
 
31
- export const SPACES = `${SPACE_PLUGIN}-spaces`;
32
- export const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';
31
+ export const SPACES = `${meta.id}-spaces`;
32
+ export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
33
33
  // TODO(wittjosiah): Remove.
34
34
  export const SHARED = 'shared-spaces';
35
35
 
36
36
  /**
37
- * Convert a query result to an Rx value of the objects.
37
+ * Convert a query result to an Atom value of the objects.
38
38
  */
39
- export const rxFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Rx.Rx<T[]> => {
40
- return Rx.make((get) => {
39
+ export const atomFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Atom.Atom<T[]> => {
40
+ return Atom.make((get) => {
41
41
  const unsubscribe = query.subscribe((result) => {
42
42
  get.setSelf(result.objects);
43
43
  });
@@ -57,8 +57,8 @@ export const getSpaceDisplayName = (
57
57
  : namesCache[space.id]
58
58
  ? namesCache[space.id]
59
59
  : personal
60
- ? ['personal space label', { ns: SPACE_PLUGIN }]
61
- : ['unnamed space label', { ns: SPACE_PLUGIN }];
60
+ ? ['personal space label', { ns: meta.id }]
61
+ : ['unnamed space label', { ns: meta.id }];
62
62
  };
63
63
 
64
64
  const getCollectionGraphNodePartials = ({
@@ -66,7 +66,7 @@ const getCollectionGraphNodePartials = ({
66
66
  space,
67
67
  resolve,
68
68
  }: {
69
- collection: DataType.Collection;
69
+ collection: Collection.Collection;
70
70
  space: Space;
71
71
  resolve: (typename: string) => Record<string, any>;
72
72
  }) => {
@@ -141,20 +141,21 @@ const getQueryCollectionNodePartials = ({
141
141
  space,
142
142
  resolve,
143
143
  }: {
144
- collection: DataType.QueryCollection;
144
+ collection: Collection.QueryCollection;
145
145
  space: Space;
146
146
  resolve: (typename: string) => Record<string, any>;
147
147
  }) => {
148
+ const typename = getTypenameFromQuery(collection.query);
149
+ const metadata = typename ? resolve(typename) : {};
148
150
  return {
149
- icon: collection.query.typename && resolve(collection.query.typename)?.icon,
151
+ icon: metadata.icon,
152
+ iconHue: metadata.iconHue,
150
153
  acceptPersistenceClass: new Set(['echo']),
151
154
  acceptPersistenceKey: new Set([space.id]),
152
155
  role: 'branch',
153
156
  canDrop: (source: TreeData) => {
154
157
  return (
155
- isGraphNode(source.item) &&
156
- Obj.isObject(source.item.data) &&
157
- Obj.getTypename(source.item.data) === collection.query.typename
158
+ isGraphNode(source.item) && Obj.isObject(source.item.data) && Obj.getTypename(source.item.data) === typename
158
159
  );
159
160
  },
160
161
  onTransferStart: (child: Node<Obj.Any>, index?: number) => {
@@ -177,7 +178,7 @@ const getViewGraphNodePartials = ({
177
178
  view,
178
179
  resolve,
179
180
  }: {
180
- view: DataType.View;
181
+ view: View.View;
181
182
  resolve: (typename: string) => Record<string, any>;
182
183
  }) => {
183
184
  const presentation = view.presentation.target;
@@ -187,6 +188,7 @@ const getViewGraphNodePartials = ({
187
188
  return {
188
189
  label: view.name || ['object name placeholder', { ns: typename, default: 'New view' }],
189
190
  icon: metadata.icon,
191
+ iconHue: metadata.iconHue,
190
192
  canDrop: () => false,
191
193
  };
192
194
  };
@@ -215,9 +217,9 @@ export const constructSpaceNode = ({
215
217
  }) => {
216
218
  const hasPendingMigration = checkPendingMigration(space);
217
219
  const collection =
218
- space.state.get() === SpaceState.SPACE_READY && space.properties[DataType.Collection.typename]?.target;
220
+ space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
219
221
  const partials =
220
- space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(DataType.Collection, collection)
222
+ space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
221
223
  ? getCollectionGraphNodePartials({ collection, space, resolve })
222
224
  : {};
223
225
 
@@ -235,6 +237,7 @@ export const constructSpaceNode = ({
235
237
  space.state.get() === SpaceState.SPACE_READY && space.properties.icon
236
238
  ? `ph--${space.properties.icon}--regular`
237
239
  : undefined,
240
+ iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
238
241
  disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
239
242
  testId: 'spacePlugin.space',
240
243
  canDrop: (source: TreeData) => {
@@ -245,40 +248,40 @@ export const constructSpaceNode = ({
245
248
  nodes: [
246
249
  {
247
250
  id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
248
- type: `${SPACE_PLUGIN}/settings`,
251
+ type: `${meta.id}/settings`,
249
252
  data: null,
250
253
  properties: {
251
- label: ['settings panel label', { ns: SPACE_PLUGIN }],
254
+ label: ['settings panel label', { ns: meta.id }],
252
255
  icon: 'ph--faders--regular',
253
256
  disposition: 'alternate-tree',
254
257
  },
255
258
  nodes: [
256
259
  {
257
260
  id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
258
- type: `${SPACE_PLUGIN}/properties`,
259
- data: `${SPACE_PLUGIN}/properties`,
261
+ type: `${meta.id}/properties`,
262
+ data: `${meta.id}/properties`,
260
263
  properties: {
261
- label: ['space settings properties label', { ns: SPACE_PLUGIN }],
264
+ label: ['space settings properties label', { ns: meta.id }],
262
265
  icon: 'ph--sliders--regular',
263
266
  position: 'hoist',
264
267
  },
265
268
  },
266
269
  {
267
270
  id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
268
- type: `${SPACE_PLUGIN}/members`,
269
- data: `${SPACE_PLUGIN}/members`,
271
+ type: `${meta.id}/members`,
272
+ data: `${meta.id}/members`,
270
273
  properties: {
271
- label: ['members panel label', { ns: SPACE_PLUGIN }],
274
+ label: ['members panel label', { ns: meta.id }],
272
275
  icon: 'ph--users--regular',
273
276
  position: 'hoist',
274
277
  },
275
278
  },
276
279
  {
277
280
  id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
278
- type: `${SPACE_PLUGIN}/schema`,
279
- data: `${SPACE_PLUGIN}/schema`,
281
+ type: `${meta.id}/schema`,
282
+ data: `${meta.id}/schema`,
280
283
  properties: {
281
- label: ['space settings schema label', { ns: SPACE_PLUGIN }],
284
+ label: ['space settings schema label', { ns: meta.id }],
282
285
  icon: 'ph--shapes--regular',
283
286
  },
284
287
  },
@@ -312,7 +315,7 @@ export const constructSpaceActions = ({
312
315
  await dispatch(createIntent(SpaceAction.Migrate, { space }));
313
316
  },
314
317
  properties: {
315
- label: ['migrate space label', { ns: SPACE_PLUGIN }],
318
+ label: ['migrate space label', { ns: meta.id }],
316
319
  icon: 'ph--database--regular',
317
320
  disposition: 'list-item-primary',
318
321
  disabled: migrating || Migrations.running(space),
@@ -329,7 +332,7 @@ export const constructSpaceActions = ({
329
332
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
330
333
  },
331
334
  properties: {
332
- label: ['create object in space label', { ns: SPACE_PLUGIN }],
335
+ label: ['create object in space label', { ns: meta.id }],
333
336
  icon: 'ph--plus--regular',
334
337
  disposition: 'item',
335
338
  testId: 'spacePlugin.createObject',
@@ -342,7 +345,7 @@ export const constructSpaceActions = ({
342
345
  await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
343
346
  },
344
347
  properties: {
345
- label: ['rename space label', { ns: SPACE_PLUGIN }],
348
+ label: ['rename space label', { ns: meta.id }],
346
349
  icon: 'ph--pencil-simple-line--regular',
347
350
  keyBinding: {
348
351
  macos: 'shift+F6',
@@ -359,12 +362,14 @@ export const constructSpaceActions = ({
359
362
  export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
360
363
  return {
361
364
  id: `${space.id}/${Type.getTypename(schema)}`,
362
- type: `${SPACE_PLUGIN}/static-schema`,
365
+ type: `${meta.id}/static-schema`,
363
366
  data: schema,
364
367
  properties: {
365
368
  label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
366
369
  icon: 'ph--database--regular',
370
+ iconHue: 'green',
367
371
  role: 'branch',
372
+ selectable: false,
368
373
  canDrop: () => false,
369
374
  space,
370
375
  },
@@ -374,15 +379,36 @@ export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any
374
379
  export const createStaticSchemaActions = ({
375
380
  schema,
376
381
  space,
382
+ dispatch,
377
383
  deletable,
378
384
  }: {
379
385
  schema: Type.Obj.Any;
380
386
  space: Space;
387
+ dispatch: PromiseIntentDispatcher;
381
388
  deletable: boolean;
382
389
  }) => {
383
390
  const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
384
391
 
385
392
  const actions: NodeArg<ActionData>[] = [
393
+ {
394
+ id: getId(SpaceAction.AddObject._tag),
395
+ type: ACTION_TYPE,
396
+ data: async () => {
397
+ await dispatch(
398
+ createIntent(SpaceAction.OpenCreateObject, {
399
+ target: space,
400
+ views: true,
401
+ initialFormValues: { typename: Type.getTypename(schema) },
402
+ }),
403
+ );
404
+ },
405
+ properties: {
406
+ label: ['add view to schema label', { ns: Type.getTypename(StoredSchema) }],
407
+ icon: 'ph--plus--regular',
408
+ disposition: 'list-item-primary',
409
+ testId: 'spacePlugin.addViewToSchema',
410
+ },
411
+ },
386
412
  {
387
413
  id: getId(SpaceAction.RenameObject._tag),
388
414
  type: ACTION_TYPE,
@@ -390,7 +416,7 @@ export const createStaticSchemaActions = ({
390
416
  throw new Error('Not implemented');
391
417
  },
392
418
  properties: {
393
- label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
419
+ label: ['rename object label', { ns: Type.getTypename(StoredSchema) }],
394
420
  icon: 'ph--pencil-simple-line--regular',
395
421
  disabled: true,
396
422
  disposition: 'list-item',
@@ -409,13 +435,37 @@ export const createStaticSchemaActions = ({
409
435
  }
410
436
  },
411
437
  properties: {
412
- label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
438
+ label: ['delete object label', { ns: Type.getTypename(StoredSchema) }],
413
439
  icon: 'ph--trash--regular',
414
440
  disposition: 'list-item',
415
441
  disabled: !deletable,
416
442
  testId: 'spacePlugin.deleteObject',
417
443
  },
418
444
  },
445
+ {
446
+ id: getId(SpaceAction.Snapshot._tag),
447
+ type: ACTION_TYPE,
448
+ data: async () => {
449
+ const result = await dispatch(
450
+ createIntent(SpaceAction.Snapshot, {
451
+ space,
452
+ query: Query.select(Filter.type(schema)).ast,
453
+ }),
454
+ );
455
+ if (result.data?.snapshot) {
456
+ await downloadBlob(
457
+ result.data.snapshot,
458
+ // TODO(wittjosiah): Factor out file name construction.
459
+ `${new Date().toISOString()}-${space.id}-${Type.getTypename(schema)}.json`,
460
+ );
461
+ }
462
+ },
463
+ properties: {
464
+ label: ['snapshot by schema label', { ns: meta.id }],
465
+ icon: 'ph--camera--regular',
466
+ disposition: 'list-item',
467
+ },
468
+ },
419
469
  ];
420
470
 
421
471
  return actions;
@@ -442,13 +492,13 @@ export const createObjectNode = ({
442
492
  }
443
493
 
444
494
  const metadata = resolve(type);
445
- const partials = Obj.instanceOf(DataType.Collection, object)
495
+ const partials = Obj.instanceOf(Collection.Collection, object)
446
496
  ? getCollectionGraphNodePartials({ collection: object, space, resolve })
447
- : Obj.instanceOf(DataType.QueryCollection, object)
497
+ : Obj.instanceOf(Collection.QueryCollection, object)
448
498
  ? getQueryCollectionNodePartials({ collection: object, space, resolve })
449
- : Obj.instanceOf(DataType.StoredSchema, object)
499
+ : Obj.instanceOf(StoredSchema, object)
450
500
  ? getSchemaGraphNodePartials()
451
- : Obj.instanceOf(DataType.View, object)
501
+ : Obj.instanceOf(View.View, object)
452
502
  ? getViewGraphNodePartials({ view: object, resolve })
453
503
  : metadata.graphProps;
454
504
 
@@ -459,18 +509,26 @@ export const createObjectNode = ({
459
509
  // TODO(wittjosiah): Remove metadata labels.
460
510
  metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
461
511
 
512
+ const selectable =
513
+ (!Obj.instanceOf(StoredSchema, object) &&
514
+ !Obj.instanceOf(Collection.QueryCollection, object) &&
515
+ !Obj.instanceOf(Collection.Collection, object)) ||
516
+ (navigable && Obj.instanceOf(Collection.Collection, object));
517
+
462
518
  return {
463
- id: fullyQualifiedId(object),
519
+ id: Obj.getDXN(object).toString(),
464
520
  type,
465
521
  cacheable: ['label', 'icon', 'role'],
466
522
  data: object,
467
523
  properties: {
468
524
  label,
469
525
  icon: metadata.icon ?? 'ph--placeholder--regular',
526
+ iconHue: metadata.iconHue,
470
527
  disposition,
471
528
  testId: 'spacePlugin.object',
472
529
  persistenceClass: 'echo',
473
530
  persistenceKey: space?.id,
531
+ selectable,
474
532
  canDrop: (source: TreeData) => {
475
533
  return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
476
534
  },
@@ -499,15 +557,15 @@ export const constructObjectActions = ({
499
557
  const typename = Obj.getTypename(object);
500
558
  invariant(typename, 'Object has no typename');
501
559
 
502
- const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;
560
+ const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
503
561
 
504
- const queryCollection = Obj.instanceOf(DataType.QueryCollection, object) ? object : undefined;
562
+ const queryCollection = Obj.instanceOf(Collection.QueryCollection, object) ? object : undefined;
505
563
  const matchingObjectForm = queryCollection
506
- ? objectForms.find((form) => Type.getTypename(form.objectSchema) === queryCollection.query.typename)
564
+ ? objectForms.find((form) => Type.getTypename(form.objectSchema) === getTypenameFromQuery(queryCollection.query))
507
565
  : undefined;
508
566
 
509
567
  const actions: NodeArg<ActionData>[] = [
510
- ...(Obj.instanceOf(DataType.Collection, object)
568
+ ...(Obj.instanceOf(Collection.Collection, object)
511
569
  ? [
512
570
  {
513
571
  id: getId(SpaceAction.OpenCreateObject._tag),
@@ -516,7 +574,7 @@ export const constructObjectActions = ({
516
574
  await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
517
575
  },
518
576
  properties: {
519
- label: ['create object in collection label', { ns: SPACE_PLUGIN }],
577
+ label: ['create object in collection label', { ns: meta.id }],
520
578
  icon: 'ph--plus--regular',
521
579
  disposition: 'list-item-primary',
522
580
  testId: 'spacePlugin.createObject',
@@ -524,6 +582,53 @@ export const constructObjectActions = ({
524
582
  },
525
583
  ]
526
584
  : []),
585
+ ...(Obj.instanceOf(StoredSchema, object)
586
+ ? [
587
+ {
588
+ id: getId(SpaceAction.AddObject._tag),
589
+ type: ACTION_TYPE,
590
+ data: async () => {
591
+ await dispatch(
592
+ createIntent(SpaceAction.OpenCreateObject, {
593
+ target: space,
594
+ views: true,
595
+ initialFormValues: { typename: object.typename },
596
+ }),
597
+ );
598
+ },
599
+ properties: {
600
+ label: ['add view to schema label', { ns: Type.getTypename(StoredSchema) }],
601
+ icon: 'ph--plus--regular',
602
+ disposition: 'list-item-primary',
603
+ testId: 'spacePlugin.addViewToSchema',
604
+ },
605
+ },
606
+ {
607
+ id: getId(SpaceAction.Snapshot._tag),
608
+ type: ACTION_TYPE,
609
+ data: async () => {
610
+ const result = await dispatch(
611
+ createIntent(SpaceAction.Snapshot, {
612
+ space,
613
+ query: Query.select(Filter.type(Type.toEffectSchema(object.jsonSchema))).ast,
614
+ }),
615
+ );
616
+ if (result.data?.snapshot) {
617
+ await downloadBlob(
618
+ result.data.snapshot,
619
+ // TODO(wittjosiah): Factor out file name construction.
620
+ `${new Date().toISOString()}-${space.id}-${object.typename}.json`,
621
+ );
622
+ }
623
+ },
624
+ properties: {
625
+ label: ['snapshot by schema label', { ns: meta.id }],
626
+ icon: 'ph--camera--regular',
627
+ disposition: 'list-item',
628
+ },
629
+ },
630
+ ]
631
+ : []),
527
632
  ...(matchingObjectForm
528
633
  ? [
529
634
  {
@@ -534,12 +639,12 @@ export const constructObjectActions = ({
534
639
  await dispatch(
535
640
  createIntent(SpaceAction.OpenCreateObject, {
536
641
  target: space,
537
- typename: queryCollection?.query.typename,
642
+ typename: queryCollection ? getTypenameFromQuery(queryCollection.query) : undefined,
538
643
  }),
539
644
  );
540
645
  } else {
541
646
  await dispatch(
542
- pipe(
647
+ Function.pipe(
543
648
  matchingObjectForm.getIntent({}, { space }),
544
649
  chain(SpaceAction.AddObject, { target: space, hidden: true }),
545
650
  chain(LayoutAction.Open, { part: 'main' }),
@@ -548,7 +653,7 @@ export const constructObjectActions = ({
548
653
  }
549
654
  },
550
655
  properties: {
551
- label: ['create object in smart collection label', { ns: SPACE_PLUGIN }],
656
+ label: ['create object in smart collection label', { ns: meta.id }],
552
657
  icon: 'ph--plus--regular',
553
658
  disposition: 'list-item-primary',
554
659
  testId: 'spacePlugin.createObject',
@@ -578,8 +683,8 @@ export const constructObjectActions = ({
578
683
  type: ACTION_TYPE,
579
684
  data: async () => {
580
685
  const collection = graph
581
- .getConnections(fullyQualifiedId(object), 'inbound')
582
- .find(({ data }) => Obj.instanceOf(DataType.Collection, data))?.data;
686
+ .getConnections(Obj.getDXN(object).toString(), 'inbound')
687
+ .find(({ data }) => Obj.instanceOf(Collection.Collection, data))?.data;
583
688
  await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
584
689
  },
585
690
  properties: {
@@ -593,19 +698,19 @@ export const constructObjectActions = ({
593
698
  },
594
699
  },
595
700
  ...(navigable ||
596
- (!Obj.instanceOf(DataType.Collection, object) &&
597
- !Obj.instanceOf(DataType.QueryCollection, object) &&
598
- !Obj.instanceOf(DataType.StoredSchema, object))
701
+ (!Obj.instanceOf(Collection.Collection, object) &&
702
+ !Obj.instanceOf(Collection.QueryCollection, object) &&
703
+ !Obj.instanceOf(StoredSchema, object))
599
704
  ? [
600
705
  {
601
706
  id: getId('copy-link'),
602
707
  type: ACTION_TYPE,
603
708
  data: async () => {
604
- const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;
709
+ const url = `${window.location.origin}/${space.id}/${Obj.getDXN(object).toString()}`;
605
710
  await navigator.clipboard.writeText(url);
606
711
  },
607
712
  properties: {
608
- label: ['copy link label', { ns: SPACE_PLUGIN }],
713
+ label: ['copy link label', { ns: meta.id }],
609
714
  icon: 'ph--link--regular',
610
715
  disposition: 'list-item',
611
716
  testId: 'spacePlugin.copyLink',
@@ -618,10 +723,12 @@ export const constructObjectActions = ({
618
723
  id: getId(LayoutAction.Expose._tag),
619
724
  type: ACTION_TYPE,
620
725
  data: async () => {
621
- await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
726
+ await dispatch(
727
+ createIntent(LayoutAction.Expose, { part: 'navigation', subject: Obj.getDXN(object).toString() }),
728
+ );
622
729
  },
623
730
  properties: {
624
- label: ['expose object label', { ns: SPACE_PLUGIN }],
731
+ label: ['expose object label', { ns: meta.id }],
625
732
  icon: 'ph--eye--regular',
626
733
  disposition: 'heading-list-item',
627
734
  testId: 'spacePlugin.exposeObject',
@@ -632,6 +739,20 @@ export const constructObjectActions = ({
632
739
  return actions;
633
740
  };
634
741
 
742
+ // TODO(wittjosiah): Factor out.
743
+ const downloadBlob = async (blob: Blob, filename: string) => {
744
+ const url = URL.createObjectURL(blob);
745
+ const a = document.createElement('a');
746
+ a.href = url;
747
+ a.download = filename;
748
+
749
+ document.body.appendChild(a);
750
+ a.click();
751
+
752
+ document.body.removeChild(a);
753
+ URL.revokeObjectURL(url);
754
+ };
755
+
635
756
  /**
636
757
  * @deprecated This is a temporary solution.
637
758
  */
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/CollectionMain.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div\n role='none'\n className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}\n data-testid='composer.firstRunMessage'\n >\n <p\n role='alert'\n className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}\n >\n {collection.name ?? t('unnamed collection label')}\n </p>\n </div>\n );\n};\n\nexport default CollectionMain;\n"],
5
- "mappings": ";;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,sBAAsB;AAC/B,SAASC,aAAaC,oBAAoBC,UAAU;AAK7C,IAAMC,iBAAiB,CAAC,EAAEC,WAAU,MAAuC;;;AAChF,UAAM,EAAEC,EAAC,IAAKC,eAAeC,YAAAA;AAE7B,WACE,sBAAA,cAACC,OAAAA;MACCC,MAAK;MACLC,WAAWC,GAAGC,aAAa,4DAAA;MAC3BC,eAAY;OAEZ,sBAAA,cAACC,KAAAA;MACCL,MAAK;MACLC,WAAWC,GAAGI,oBAAoB,+DAAA;OAEjCX,WAAWY,QAAQX,EAAE,0BAAA,CAAA,CAAA;;;;AAI9B;AAEA,IAAA,yBAAeF;",
6
- "names": ["React", "useTranslation", "baseSurface", "descriptionMessage", "mx", "CollectionMain", "collection", "t", "useTranslation", "SPACE_PLUGIN", "div", "role", "className", "mx", "baseSurface", "data-testid", "p", "descriptionMessage", "name"]
7
- }
@@ -1,88 +0,0 @@
1
- import {
2
- SPACE_PLUGIN
3
- } from "./chunk-FBCGT5YY.mjs";
4
-
5
- // src/components/ObjectDetailsPanel.tsx
6
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
7
- import React, { useCallback } from "react";
8
- import { setValue } from "@dxos/echo-schema";
9
- import { invariant } from "@dxos/invariant";
10
- import { useClient } from "@dxos/react-client";
11
- import { Filter, getSpace, useQuery, useSchema } from "@dxos/react-client/echo";
12
- import { Callout, useTranslation } from "@dxos/react-ui";
13
- import { useSelected } from "@dxos/react-ui-attention";
14
- import { Form, useRefQueryLookupHandler } from "@dxos/react-ui-form";
15
- import { isNonNullable } from "@dxos/util";
16
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/ObjectDetailsPanel.tsx";
17
- var ObjectDetailsPanel = ({ objectId, view }) => {
18
- var _effect = _useSignals();
19
- try {
20
- const { t } = useTranslation(SPACE_PLUGIN);
21
- const client = useClient();
22
- const space = getSpace(view);
23
- const schema = useSchema(client, space, view.query?.typename);
24
- const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());
25
- const selectedRows = useSelected(objectId, "multi");
26
- const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
27
- const handleRefQueryLookup = useRefQueryLookupHandler({
28
- space
29
- });
30
- const handleSave = useCallback((values, { changed }) => {
31
- const id = values.id;
32
- invariant(typeof id === "string", void 0, {
33
- F: __dxlog_file,
34
- L: 36,
35
- S: void 0,
36
- A: [
37
- "typeof id === 'string'",
38
- ""
39
- ]
40
- });
41
- const object = queriedObjects.find((obj) => obj.id === id);
42
- invariant(object, void 0, {
43
- F: __dxlog_file,
44
- L: 38,
45
- S: void 0,
46
- A: [
47
- "object",
48
- ""
49
- ]
50
- });
51
- const changedPaths = Object.keys(changed).filter((path) => changed[path]);
52
- for (const path of changedPaths) {
53
- const value = values[path];
54
- setValue(object, path, value);
55
- }
56
- }, [
57
- queriedObjects
58
- ]);
59
- if (selectedObjects.length === 0) {
60
- return /* @__PURE__ */ React.createElement("div", {
61
- role: "none",
62
- className: "plb-cardSpacingBlock pli-cardSpacingInline"
63
- }, /* @__PURE__ */ React.createElement(Callout.Root, {
64
- classNames: "is-full"
65
- }, /* @__PURE__ */ React.createElement(Callout.Title, null, t("row details no selection label"))));
66
- }
67
- return /* @__PURE__ */ React.createElement("div", {
68
- role: "none",
69
- className: "bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto"
70
- }, schema && selectedObjects.map((object) => /* @__PURE__ */ React.createElement("div", {
71
- key: object.id,
72
- className: "border border-separator rounded"
73
- }, /* @__PURE__ */ React.createElement(Form, {
74
- autoSave: true,
75
- schema,
76
- values: object,
77
- onSave: handleSave,
78
- onQueryRefOptions: handleRefQueryLookup
79
- }))));
80
- } finally {
81
- _effect.f();
82
- }
83
- };
84
- var ObjectDetailsPanel_default = ObjectDetailsPanel;
85
- export {
86
- ObjectDetailsPanel_default as default
87
- };
88
- //# sourceMappingURL=ObjectDetailsPanel-SY6FYTYC.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ObjectDetailsPanel.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type JsonPath, setValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { Callout, useTranslation } from '@dxos/react-ui';\nimport { useSelected } from '@dxos/react-ui-attention';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { type DataType } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../meta';\n\ntype RowDetailsPanelProps = { objectId: string; view: DataType.View };\n\nconst ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = getSpace(view);\n const schema = useSchema(client, space, view.query?.typename);\n\n const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());\n const selectedRows = useSelected(objectId, 'multi');\n const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);\n\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const handleSave = useCallback(\n (values: any, { changed }: { changed: Record<JsonPath, boolean> }) => {\n const id = values.id;\n invariant(typeof id === 'string');\n const object = queriedObjects.find((obj) => obj.id === id);\n invariant(object);\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n for (const path of changedPaths) {\n const value = values[path];\n setValue(object, path, value);\n }\n },\n [queriedObjects],\n );\n\n if (selectedObjects.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root classNames='is-full'>\n <Callout.Title>{t('row details no selection label')}</Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div role='none' className='bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto'>\n {schema &&\n selectedObjects.map((object) => (\n <div key={object.id} className='border border-separator rounded'>\n <Form\n autoSave\n schema={schema}\n values={object}\n onSave={handleSave}\n onQueryRefOptions={handleRefQueryLookup}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ObjectDetailsPanel;\n"],
5
- "mappings": ";;;;;;AAIA,OAAOA,SAASC,mBAAmB;AAEnC,SAAwBC,gBAAgB;AACxC,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,QAAQC,UAAUC,UAAUC,iBAAiB;AACtD,SAASC,SAASC,sBAAsB;AACxC,SAASC,mBAAmB;AAC5B,SAASC,MAAMC,gCAAgC;AAE/C,SAASC,qBAAqB;;AAM9B,IAAMC,qBAAqB,CAAC,EAAEC,UAAUC,KAAI,MAAwB;;;AAClE,UAAM,EAAEC,EAAC,IAAKC,eAAeC,YAAAA;AAC7B,UAAMC,SAASC,UAAAA;AACf,UAAMC,QAAQC,SAASP,IAAAA;AACvB,UAAMQ,SAASC,UAAUL,QAAQE,OAAON,KAAKU,OAAOC,QAAAA;AAEpD,UAAMC,iBAAiBC,SAASP,OAAOE,SAASM,OAAOC,KAAKP,MAAAA,IAAUM,OAAOE,QAAO,CAAA;AACpF,UAAMC,eAAeC,YAAYnB,UAAU,OAAA;AAC3C,UAAMoB,kBAAkBF,aAAaG,IAAI,CAACC,OAAOT,eAAeU,KAAK,CAACC,QAAQA,IAAIF,OAAOA,EAAAA,CAAAA,EAAKG,OAAOC,aAAAA;AAErG,UAAMC,uBAAuBC,yBAAyB;MAAErB;IAAM,CAAA;AAE9D,UAAMsB,aAAaC,YACjB,CAACC,QAAa,EAAEC,QAAO,MAA0C;AAC/D,YAAMV,KAAKS,OAAOT;AAClBW,gBAAU,OAAOX,OAAO,UAAA,QAAA;;;;;;;;;AACxB,YAAMY,SAASrB,eAAeU,KAAK,CAACC,QAAQA,IAAIF,OAAOA,EAAAA;AACvDW,gBAAUC,QAAAA,QAAAA;;;;;;;;;AAEV,YAAMC,eAAeC,OAAOC,KAAKL,OAAAA,EAASP,OAAO,CAACa,SAASN,QAAQM,IAAAA,CAAiB;AACpF,iBAAWA,QAAQH,cAAc;AAC/B,cAAMI,QAAQR,OAAOO,IAAAA;AACrBE,iBAASN,QAAQI,MAAMC,KAAAA;MACzB;IACF,GACA;MAAC1B;KAAe;AAGlB,QAAIO,gBAAgBqB,WAAW,GAAG;AAChC,aACE,sBAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SACzB,sBAAA,cAACC,QAAQC,MAAI;QAACC,YAAW;SACvB,sBAAA,cAACF,QAAQG,OAAK,MAAE9C,EAAE,gCAAA,CAAA,CAAA,CAAA;IAI1B;AAEA,WACE,sBAAA,cAACwC,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACxBnC,UACCW,gBAAgBC,IAAI,CAACa,WACnB,sBAAA,cAACQ,OAAAA;MAAIO,KAAKf,OAAOZ;MAAIsB,WAAU;OAC7B,sBAAA,cAACM,MAAAA;MACCC,UAAAA;MACA1C;MACAsB,QAAQG;MACRkB,QAAQvB;MACRwB,mBAAmB1B;;;;;AAMjC;AAEA,IAAA,6BAAe5B;",
6
- "names": ["React", "useCallback", "setValue", "invariant", "useClient", "Filter", "getSpace", "useQuery", "useSchema", "Callout", "useTranslation", "useSelected", "Form", "useRefQueryLookupHandler", "isNonNullable", "ObjectDetailsPanel", "objectId", "view", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "getSpace", "schema", "useSchema", "query", "typename", "queriedObjects", "useQuery", "Filter", "type", "nothing", "selectedRows", "useSelected", "selectedObjects", "map", "id", "find", "obj", "filter", "isNonNullable", "handleRefQueryLookup", "useRefQueryLookupHandler", "handleSave", "useCallback", "values", "changed", "invariant", "object", "changedPaths", "Object", "keys", "path", "value", "setValue", "length", "div", "role", "className", "Callout", "Root", "classNames", "Title", "key", "Form", "autoSave", "onSave", "onQueryRefOptions"]
7
- }