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

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 (275) hide show
  1. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs +31 -0
  2. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +88 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +7 -0
  5. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +68 -0
  6. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-builder-M2RH72VL.mjs → app-graph-builder-VZW75QPJ.mjs} +178 -30
  8. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-F7ISRRBV.mjs → app-graph-serializer-YPHYVZAP.mjs} +13 -13
  10. package/dist/lib/browser/app-graph-serializer-YPHYVZAP.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-TW7O2EPP.mjs → chunk-3UFG6LQQ.mjs} +59 -5
  12. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-YMCZR6EZ.mjs → chunk-CBYL62HG.mjs} +5 -4
  14. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-7Y4M7GXO.mjs → chunk-DYKFFVN6.mjs} +5 -5
  16. package/dist/lib/browser/{chunk-7Y4M7GXO.mjs.map → chunk-DYKFFVN6.mjs.map} +3 -3
  17. package/dist/lib/browser/{chunk-PTKYMZWO.mjs → chunk-FBCGT5YY.mjs} +2 -2
  18. package/dist/lib/browser/{chunk-NFUKCRGE.mjs → chunk-PSIBVBTA.mjs} +419 -353
  19. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-BXNL6SDI.mjs → chunk-Q5EEPP3S.mjs} +4 -3
  21. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-V24VASAJ.mjs → chunk-SMB4DGYO.mjs} +133 -29
  23. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-4ZKSFDXM.mjs → chunk-WAXS2ZVX.mjs} +77 -16
  25. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +7 -0
  26. package/dist/lib/browser/{identity-created-PI7TKANR.mjs → identity-created-T6ZNVE7S.mjs} +5 -5
  27. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +7 -0
  28. package/dist/lib/browser/index.mjs +108 -17
  29. package/dist/lib/browser/index.mjs.map +3 -3
  30. package/dist/lib/browser/{intent-resolver-RWU6ZE4H.mjs → intent-resolver-TS6CCKST.mjs} +172 -22
  31. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-root-QIKHSNT2.mjs → react-root-RQGTZ2ZO.mjs} +8 -8
  34. package/dist/lib/browser/{react-root-QIKHSNT2.mjs.map → react-root-RQGTZ2ZO.mjs.map} +2 -2
  35. package/dist/lib/browser/{react-surface-W56UD53I.mjs → react-surface-V3ARS2BP.mjs} +54 -22
  36. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +7 -0
  37. package/dist/lib/browser/{schema-defs-WREJNMIC.mjs → schema-defs-5LBA43X5.mjs} +4 -4
  38. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +7 -0
  39. package/dist/lib/browser/{schema-tools-ILTVSSS3.mjs → schema-tools-LPL35WOJ.mjs} +13 -13
  40. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +7 -0
  41. package/dist/lib/browser/{settings-K54STC5A.mjs → settings-FLLBP5KI.mjs} +4 -4
  42. package/dist/lib/browser/{spaces-ready-3PDRDHPC.mjs → spaces-ready-FXEP6XEW.mjs} +17 -15
  43. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +7 -0
  44. package/dist/lib/browser/{state-HRZ4VRXU.mjs → state-K3UBPKYP.mjs} +4 -4
  45. package/dist/lib/{node-esm/state-XQNDCN37.mjs.map → browser/state-K3UBPKYP.mjs.map} +2 -2
  46. package/dist/lib/browser/types/index.mjs +2 -2
  47. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +32 -0
  48. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +89 -0
  50. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +7 -0
  51. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +70 -0
  52. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-BCHVZ4OM.mjs → app-graph-builder-XNVQOJLE.mjs} +178 -30
  54. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +7 -0
  55. package/dist/lib/node-esm/{app-graph-serializer-TXRGGNP2.mjs → app-graph-serializer-PKVLWV6V.mjs} +13 -13
  56. package/dist/lib/node-esm/app-graph-serializer-PKVLWV6V.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-BSLREHIX.mjs → chunk-7MZ3J3LI.mjs} +4 -3
  58. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-HO7AIKQS.mjs → chunk-CTQMR7E3.mjs} +133 -29
  60. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-3CP67AYY.mjs → chunk-FJZNSJC4.mjs} +5 -4
  62. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-MSWEFAPD.mjs → chunk-HWNG4MEU.mjs} +2 -2
  64. package/dist/lib/node-esm/{chunk-JBQKU4K5.mjs → chunk-HYIZVPOA.mjs} +77 -16
  65. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-GH2FGJXH.mjs → chunk-KLG4Y4GY.mjs} +5 -5
  67. package/dist/lib/node-esm/{chunk-GH2FGJXH.mjs.map → chunk-KLG4Y4GY.mjs.map} +3 -3
  68. package/dist/lib/node-esm/{chunk-LA6AVVH6.mjs → chunk-KYUHPPRN.mjs} +419 -353
  69. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-D4QMPPS7.mjs → chunk-S7MKRQHY.mjs} +59 -5
  71. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +7 -0
  72. package/dist/lib/node-esm/{identity-created-35CTAQWI.mjs → identity-created-AL7NNCKH.mjs} +5 -5
  73. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +7 -0
  74. package/dist/lib/node-esm/index.mjs +108 -17
  75. package/dist/lib/node-esm/index.mjs.map +3 -3
  76. package/dist/lib/node-esm/{intent-resolver-JO6L2VXC.mjs → intent-resolver-W6P27SCF.mjs} +172 -22
  77. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +7 -0
  78. package/dist/lib/node-esm/meta.json +1 -1
  79. package/dist/lib/node-esm/{react-root-YFGL3B4J.mjs → react-root-N27KETKT.mjs} +8 -8
  80. package/dist/lib/node-esm/{react-root-YFGL3B4J.mjs.map → react-root-N27KETKT.mjs.map} +2 -2
  81. package/dist/lib/node-esm/{react-surface-CVAPDLEZ.mjs → react-surface-TNPAUQCM.mjs} +54 -22
  82. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +7 -0
  83. package/dist/lib/node-esm/{schema-defs-4MEJETVX.mjs → schema-defs-TPWZPDCR.mjs} +4 -4
  84. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +7 -0
  85. package/dist/lib/node-esm/{schema-tools-SRLCRZ3B.mjs → schema-tools-PJE2FKWH.mjs} +13 -13
  86. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +7 -0
  87. package/dist/lib/node-esm/{settings-TD76LTQS.mjs → settings-WKUWY3P6.mjs} +4 -4
  88. package/dist/lib/node-esm/{spaces-ready-FJMGPAVV.mjs → spaces-ready-PQLLIO5W.mjs} +17 -15
  89. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +7 -0
  90. package/dist/lib/node-esm/{state-XQNDCN37.mjs → state-4M5A6OSB.mjs} +4 -4
  91. package/dist/lib/node-esm/state-4M5A6OSB.mjs.map +7 -0
  92. package/dist/lib/node-esm/types/index.mjs +2 -2
  93. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/capabilities.d.ts +9 -3
  97. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  106. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  107. package/dist/types/src/components/CollectionMain.d.ts +1 -0
  108. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  109. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -2
  110. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  111. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1 -1
  112. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +1 -1
  114. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  115. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/MembersContainer.stories.d.ts +1 -1
  117. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  119. package/dist/types/src/components/ObjectDetailsPanel.d.ts +9 -0
  120. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -0
  121. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  123. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -1
  124. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  125. package/dist/types/src/components/RecordMain.d.ts +7 -0
  126. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  127. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  128. package/dist/types/src/components/SpacePresence.stories.d.ts +1 -1
  129. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  131. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1 -1
  132. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  134. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  135. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1 -1
  136. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  138. package/dist/types/src/components/ViewEditor.d.ts +8 -0
  139. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  140. package/dist/types/src/components/index.d.ts +11 -1
  141. package/dist/types/src/components/index.d.ts.map +1 -1
  142. package/dist/types/src/events.d.ts +1 -0
  143. package/dist/types/src/events.d.ts.map +1 -1
  144. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  145. package/dist/types/src/translations.d.ts +212 -410
  146. package/dist/types/src/translations.d.ts.map +1 -1
  147. package/dist/types/src/types/types.d.ts +82 -2
  148. package/dist/types/src/types/types.d.ts.map +1 -1
  149. package/dist/types/src/util.d.ts +31 -5
  150. package/dist/types/src/util.d.ts.map +1 -1
  151. package/dist/types/tsconfig.tsbuildinfo +1 -1
  152. package/package.json +52 -52
  153. package/src/SpacePlugin.ts +91 -8
  154. package/src/capabilities/app-graph-builder.ts +211 -14
  155. package/src/capabilities/app-graph-serializer.ts +6 -6
  156. package/src/capabilities/capabilities.ts +8 -3
  157. package/src/capabilities/identity-created.ts +3 -5
  158. package/src/capabilities/intent-resolver.ts +123 -13
  159. package/src/capabilities/react-root.tsx +2 -1
  160. package/src/capabilities/react-surface.tsx +69 -18
  161. package/src/capabilities/schema-defs.ts +3 -2
  162. package/src/capabilities/schema-tool.test.ts +1 -1
  163. package/src/capabilities/schema-tools.ts +11 -11
  164. package/src/capabilities/spaces-ready.ts +10 -7
  165. package/src/capabilities/state.ts +3 -2
  166. package/src/components/AwaitingObject.tsx +5 -7
  167. package/src/components/CollectionMain.tsx +2 -0
  168. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +5 -4
  169. package/src/components/CreateDialog/CreateObjectDialog.tsx +32 -27
  170. package/src/components/CreateDialog/CreateObjectPanel.tsx +3 -3
  171. package/src/components/CreateDialog/CreateSpaceDialog.tsx +1 -1
  172. package/src/components/JoinDialog.tsx +1 -1
  173. package/src/components/MembersContainer.stories.tsx +6 -5
  174. package/src/components/MembersContainer.tsx +8 -7
  175. package/src/components/MenuFooter.tsx +2 -3
  176. package/src/components/ObjectDetailsPanel.tsx +77 -0
  177. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +2 -1
  178. package/src/components/PersistenceStatus.tsx +5 -6
  179. package/src/components/PopoverRenameObject.tsx +7 -13
  180. package/src/components/PopoverRenameSpace.tsx +1 -1
  181. package/src/components/RecordMain.tsx +43 -0
  182. package/src/components/SchemaContainer.tsx +2 -2
  183. package/src/components/SpacePluginSettings.tsx +2 -2
  184. package/src/components/SpacePresence.stories.tsx +4 -3
  185. package/src/components/SpacePresence.tsx +7 -7
  186. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +3 -2
  187. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +6 -6
  188. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -15
  189. package/src/components/SyncStatus/SyncStatus.tsx +4 -3
  190. package/src/components/SyncStatus/save-tracker.ts +3 -3
  191. package/src/components/SyncStatus/status.ts +4 -4
  192. package/src/components/ViewEditor.tsx +64 -0
  193. package/src/components/index.ts +7 -1
  194. package/src/events.ts +2 -1
  195. package/src/hooks/useActiveSpace.ts +1 -1
  196. package/src/hooks/useInputSurfaceLookup.tsx +1 -1
  197. package/src/translations.ts +75 -11
  198. package/src/types/types.ts +56 -3
  199. package/src/util.tsx +127 -26
  200. package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +0 -7
  201. package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +0 -7
  202. package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +0 -7
  203. package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +0 -7
  204. package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-V24VASAJ.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +0 -7
  208. package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +0 -7
  209. package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +0 -7
  210. package/dist/lib/browser/react-surface-W56UD53I.mjs.map +0 -7
  211. package/dist/lib/browser/schema-defs-WREJNMIC.mjs.map +0 -7
  212. package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +0 -7
  213. package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +0 -7
  214. package/dist/lib/browser/state-HRZ4VRXU.mjs.map +0 -7
  215. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs +0 -364
  216. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +0 -7
  217. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs +0 -89
  218. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +0 -7
  219. package/dist/lib/node/chunk-3X4EA4XL.cjs +0 -37
  220. package/dist/lib/node/chunk-3X4EA4XL.cjs.map +0 -7
  221. package/dist/lib/node/chunk-5WLAXYE3.cjs +0 -125
  222. package/dist/lib/node/chunk-5WLAXYE3.cjs.map +0 -7
  223. package/dist/lib/node/chunk-6P2DB4QQ.cjs +0 -36
  224. package/dist/lib/node/chunk-6P2DB4QQ.cjs.map +0 -7
  225. package/dist/lib/node/chunk-DOC5XEZ4.cjs +0 -184
  226. package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +0 -7
  227. package/dist/lib/node/chunk-NCHF433F.cjs +0 -1921
  228. package/dist/lib/node/chunk-NCHF433F.cjs.map +0 -7
  229. package/dist/lib/node/chunk-NL5Y4EDX.cjs +0 -38
  230. package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +0 -7
  231. package/dist/lib/node/chunk-ULJZPATP.cjs +0 -312
  232. package/dist/lib/node/chunk-ULJZPATP.cjs.map +0 -7
  233. package/dist/lib/node/chunk-XHWVT7LW.cjs +0 -572
  234. package/dist/lib/node/chunk-XHWVT7LW.cjs.map +0 -7
  235. package/dist/lib/node/identity-created-FF4WZ2WY.cjs +0 -42
  236. package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +0 -7
  237. package/dist/lib/node/index.cjs +0 -278
  238. package/dist/lib/node/index.cjs.map +0 -7
  239. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs +0 -609
  240. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +0 -7
  241. package/dist/lib/node/meta.json +0 -1
  242. package/dist/lib/node/react-root-RQUU3A45.cjs +0 -51
  243. package/dist/lib/node/react-root-RQUU3A45.cjs.map +0 -7
  244. package/dist/lib/node/react-surface-AZFJLE72.cjs +0 -351
  245. package/dist/lib/node/react-surface-AZFJLE72.cjs.map +0 -7
  246. package/dist/lib/node/schema-defs-OB2X2HBH.cjs +0 -42
  247. package/dist/lib/node/schema-defs-OB2X2HBH.cjs.map +0 -7
  248. package/dist/lib/node/schema-tools-IYREN4IH.cjs +0 -147
  249. package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +0 -7
  250. package/dist/lib/node/settings-P2EQ7VKQ.cjs +0 -38
  251. package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +0 -7
  252. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs +0 -210
  253. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +0 -7
  254. package/dist/lib/node/state-M35DK75Z.cjs +0 -61
  255. package/dist/lib/node/state-M35DK75Z.cjs.map +0 -7
  256. package/dist/lib/node/types/index.cjs +0 -48
  257. package/dist/lib/node/types/index.cjs.map +0 -7
  258. package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +0 -7
  259. package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +0 -7
  266. package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +0 -7
  267. package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +0 -7
  268. package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +0 -7
  269. package/dist/lib/node-esm/schema-defs-4MEJETVX.mjs.map +0 -7
  270. package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +0 -7
  271. package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +0 -7
  272. /package/dist/lib/browser/{chunk-PTKYMZWO.mjs.map → chunk-FBCGT5YY.mjs.map} +0 -0
  273. /package/dist/lib/browser/{settings-K54STC5A.mjs.map → settings-FLLBP5KI.mjs.map} +0 -0
  274. /package/dist/lib/node-esm/{chunk-MSWEFAPD.mjs.map → chunk-HWNG4MEU.mjs.map} +0 -0
  275. /package/dist/lib/node-esm/{settings-TD76LTQS.mjs.map → settings-WKUWY3P6.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-space",
3
- "version": "0.8.3",
3
+ "version": "0.8.4-main.28f8d3d",
4
4
  "description": "DXOS Surface plugin for DXOS ECHO Spaces",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,11 +10,13 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs",
15
16
  "node": "./dist/lib/node-esm/index.mjs"
16
17
  },
17
18
  "./types": {
19
+ "source": "./src/types/index.ts",
18
20
  "types": "./dist/types/src/types/index.d.ts",
19
21
  "browser": "./dist/lib/browser/types/index.mjs",
20
22
  "node": "./dist/lib/node-esm/types/index.mjs"
@@ -33,78 +35,76 @@
33
35
  "src"
34
36
  ],
35
37
  "dependencies": {
36
- "@automerge/automerge": "3.0.0-beta.4",
38
+ "@automerge/automerge": "3.1.1",
37
39
  "@preact-signals/safe-react": "^0.9.0",
38
40
  "@preact/signals-core": "^1.9.0",
39
- "effect": "3.14.21",
41
+ "effect": "3.17.7",
40
42
  "jszip": "^3.10.1",
41
43
  "localforage": "^1.10.0",
42
44
  "react-drag-drop-files": "^2.3.8",
43
45
  "react-is": "~18.2.0",
44
46
  "react-qr-rounded": "^1.0.0",
45
- "@dxos/ai": "0.8.3",
46
- "@dxos/app-framework": "0.8.3",
47
- "@dxos/client": "0.8.3",
48
- "@dxos/artifact": "0.8.3",
49
- "@dxos/async": "0.8.3",
50
- "@dxos/context": "0.8.3",
51
- "@dxos/display-name": "0.8.3",
52
- "@dxos/echo": "0.8.3",
53
- "@dxos/echo-signals": "0.8.3",
54
- "@dxos/invariant": "0.8.3",
55
- "@dxos/echo-schema": "0.8.3",
56
- "@dxos/effect": "0.8.3",
57
- "@dxos/keys": "0.8.3",
58
- "@dxos/live-object": "0.8.3",
59
- "@dxos/log": "0.8.3",
60
- "@dxos/local-storage": "0.8.3",
61
- "@dxos/migrations": "0.8.3",
62
- "@dxos/plugin-attention": "0.8.3",
63
- "@dxos/plugin-deck": "0.8.3",
64
- "@dxos/plugin-client": "0.8.3",
65
- "@dxos/plugin-graph": "0.8.3",
66
- "@dxos/plugin-observability": "0.8.3",
67
- "@dxos/plugin-status-bar": "0.8.3",
68
- "@dxos/protocols": "0.8.3",
69
- "@dxos/react-ui-editor": "0.8.3",
70
- "@dxos/react-ui-form": "0.8.3",
71
- "@dxos/react-client": "0.8.3",
72
- "@dxos/react-ui-attention": "0.8.3",
73
- "@dxos/react-ui-list": "0.8.3",
74
- "@dxos/react-ui-pickers": "0.8.3",
75
- "@dxos/react-ui-searchlist": "0.8.3",
76
- "@dxos/react-ui-stack": "0.8.3",
77
- "@dxos/react-ui-syntax-highlighter": "0.8.3",
78
- "@dxos/react-ui-tabs": "0.8.3",
79
- "@dxos/react-ui-theme": "0.8.3",
80
- "@dxos/schema": "0.8.3",
81
- "@dxos/shell": "0.8.3",
82
- "@dxos/util": "0.8.3"
47
+ "@dxos/ai": "0.8.4-main.28f8d3d",
48
+ "@dxos/app-framework": "0.8.4-main.28f8d3d",
49
+ "@dxos/async": "0.8.4-main.28f8d3d",
50
+ "@dxos/client": "0.8.4-main.28f8d3d",
51
+ "@dxos/blueprints": "0.8.4-main.28f8d3d",
52
+ "@dxos/display-name": "0.8.4-main.28f8d3d",
53
+ "@dxos/context": "0.8.4-main.28f8d3d",
54
+ "@dxos/echo": "0.8.4-main.28f8d3d",
55
+ "@dxos/echo-schema": "0.8.4-main.28f8d3d",
56
+ "@dxos/echo-signals": "0.8.4-main.28f8d3d",
57
+ "@dxos/effect": "0.8.4-main.28f8d3d",
58
+ "@dxos/invariant": "0.8.4-main.28f8d3d",
59
+ "@dxos/keys": "0.8.4-main.28f8d3d",
60
+ "@dxos/local-storage": "0.8.4-main.28f8d3d",
61
+ "@dxos/live-object": "0.8.4-main.28f8d3d",
62
+ "@dxos/log": "0.8.4-main.28f8d3d",
63
+ "@dxos/migrations": "0.8.4-main.28f8d3d",
64
+ "@dxos/plugin-attention": "0.8.4-main.28f8d3d",
65
+ "@dxos/plugin-client": "0.8.4-main.28f8d3d",
66
+ "@dxos/plugin-graph": "0.8.4-main.28f8d3d",
67
+ "@dxos/plugin-observability": "0.8.4-main.28f8d3d",
68
+ "@dxos/plugin-status-bar": "0.8.4-main.28f8d3d",
69
+ "@dxos/protocols": "0.8.4-main.28f8d3d",
70
+ "@dxos/react-client": "0.8.4-main.28f8d3d",
71
+ "@dxos/plugin-deck": "0.8.4-main.28f8d3d",
72
+ "@dxos/react-ui-editor": "0.8.4-main.28f8d3d",
73
+ "@dxos/react-ui-attention": "0.8.4-main.28f8d3d",
74
+ "@dxos/react-ui-list": "0.8.4-main.28f8d3d",
75
+ "@dxos/react-ui-form": "0.8.4-main.28f8d3d",
76
+ "@dxos/react-ui-pickers": "0.8.4-main.28f8d3d",
77
+ "@dxos/react-ui-searchlist": "0.8.4-main.28f8d3d",
78
+ "@dxos/react-ui-stack": "0.8.4-main.28f8d3d",
79
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.28f8d3d",
80
+ "@dxos/react-ui-tabs": "0.8.4-main.28f8d3d",
81
+ "@dxos/react-ui-theme": "0.8.4-main.28f8d3d",
82
+ "@dxos/shell": "0.8.4-main.28f8d3d",
83
+ "@dxos/util": "0.8.4-main.28f8d3d",
84
+ "@dxos/schema": "0.8.4-main.28f8d3d"
83
85
  },
84
86
  "devDependencies": {
85
87
  "@babel/core": "^7.18.13",
86
- "@effect-rx/rx-react": "^0.34.1",
87
- "@effect/platform": "0.80.12",
88
- "@phosphor-icons/react": "^2.1.5",
88
+ "@effect-rx/rx-react": "0.38.0",
89
+ "@effect/platform": "0.90.2",
89
90
  "@types/react": "~18.2.0",
90
91
  "@types/react-dom": "~18.2.0",
91
92
  "react": "~18.2.0",
92
93
  "react-dom": "~18.2.0",
93
94
  "vite": "5.4.7",
94
- "@dxos/random": "0.8.3",
95
- "@dxos/react-ui": "0.8.3",
96
- "@dxos/react-ui-theme": "0.8.3",
97
- "@dxos/storybook-utils": "0.8.3"
95
+ "@dxos/random": "0.8.4-main.28f8d3d",
96
+ "@dxos/react-ui": "0.8.4-main.28f8d3d",
97
+ "@dxos/react-ui-theme": "0.8.4-main.28f8d3d",
98
+ "@dxos/storybook-utils": "0.8.4-main.28f8d3d"
98
99
  },
99
100
  "peerDependencies": {
100
101
  "@effect-rx/rx-react": "^0.34.1",
101
- "@effect/platform": "0.80.12",
102
- "@phosphor-icons/react": "^2.1.5",
102
+ "@effect/platform": "^0.80.12",
103
103
  "effect": "^3.13.3",
104
104
  "react": "~18.2.0",
105
105
  "react-dom": "~18.2.0",
106
- "@dxos/react-ui-theme": "0.8.3",
107
- "@dxos/react-ui": "0.8.3"
106
+ "@dxos/react-ui": "0.8.4-main.28f8d3d",
107
+ "@dxos/react-ui-theme": "0.8.4-main.28f8d3d"
108
108
  },
109
109
  "publishConfig": {
110
110
  "access": "public"
@@ -16,9 +16,9 @@ import {
16
16
  } from '@dxos/app-framework';
17
17
  import { Ref, Type } from '@dxos/echo';
18
18
  import { AttentionEvents } from '@dxos/plugin-attention';
19
- import { ClientEvents } from '@dxos/plugin-client';
20
- import { DataType } from '@dxos/schema';
21
- import { osTranslations } from '@dxos/shell/react';
19
+ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
20
+ import { DataType, ViewTypeV1, ViewTypeV1ToV2, ViewTypeV2, createDefaultSchema } from '@dxos/schema';
21
+ import { translations as shellTranslations } from '@dxos/shell/react';
22
22
 
23
23
  import {
24
24
  AppGraphBuilder,
@@ -31,13 +31,13 @@ import {
31
31
  SchemaTools,
32
32
  SpaceCapabilities,
33
33
  SpaceSettings,
34
- SpacesReady,
35
34
  SpaceState,
35
+ SpacesReady,
36
36
  } from './capabilities';
37
37
  import { SpaceEvents } from './events';
38
38
  import { meta } from './meta';
39
- import translations from './translations';
40
- import { CollectionAction, defineObjectForm } from './types';
39
+ import { translations } from './translations';
40
+ import { CollectionAction, SpaceAction, defineObjectForm } from './types';
41
41
 
42
42
  export type SpacePluginOptions = {
43
43
  /**
@@ -85,7 +85,7 @@ export const SpacePlugin = ({
85
85
  defineModule({
86
86
  id: `${meta.id}/module/translations`,
87
87
  activatesOn: Events.SetupTranslations,
88
- activate: () => contributes(Capabilities.Translations, [...translations, osTranslations]),
88
+ activate: () => contributes(Capabilities.Translations, [...translations, ...shellTranslations]),
89
89
  }),
90
90
  defineModule({
91
91
  id: `${meta.id}/module/metadata`,
@@ -109,6 +109,42 @@ export const SpacePlugin = ({
109
109
  icon: 'ph--funnel-simple--regular',
110
110
  },
111
111
  }),
112
+ contributes(Capabilities.Metadata, {
113
+ id: Type.getTypename(DataType.StoredSchema),
114
+ metadata: {
115
+ icon: 'ph--database--regular',
116
+ },
117
+ }),
118
+ contributes(Capabilities.Metadata, {
119
+ id: Type.getTypename(DataType.Event),
120
+ metadata: {
121
+ icon: 'ph--calendar-dot--regular',
122
+ },
123
+ }),
124
+ contributes(Capabilities.Metadata, {
125
+ id: Type.getTypename(DataType.Organization),
126
+ metadata: {
127
+ icon: 'ph--building-office--regular',
128
+ },
129
+ }),
130
+ contributes(Capabilities.Metadata, {
131
+ id: Type.getTypename(DataType.Person),
132
+ metadata: {
133
+ icon: 'ph--user--regular',
134
+ },
135
+ }),
136
+ contributes(Capabilities.Metadata, {
137
+ id: Type.getTypename(DataType.Project),
138
+ metadata: {
139
+ icon: 'ph--check-square-offset--regular',
140
+ },
141
+ }),
142
+ contributes(Capabilities.Metadata, {
143
+ id: Type.getTypename(DataType.Task),
144
+ metadata: {
145
+ icon: 'ph--check-circle--regular',
146
+ },
147
+ }),
112
148
  ],
113
149
  }),
114
150
  defineModule({
@@ -131,14 +167,61 @@ export const SpacePlugin = ({
131
167
  getIntent: (props) => createIntent(CollectionAction.CreateQueryCollection, props),
132
168
  }),
133
169
  ),
170
+ contributes(
171
+ SpaceCapabilities.ObjectForm,
172
+ defineObjectForm({
173
+ objectSchema: DataType.StoredSchema,
174
+ formSchema: SpaceAction.StoredSchemaForm,
175
+ getIntent: (props, options) =>
176
+ props.typename
177
+ ? createIntent(SpaceAction.UseStaticSchema, { space: options.space, typename: props.typename })
178
+ : createIntent(SpaceAction.AddSchema, {
179
+ space: options.space,
180
+ name: props.name,
181
+ schema: createDefaultSchema(),
182
+ }),
183
+ }),
184
+ ),
134
185
  ],
135
186
  }),
136
187
  defineModule({
137
- id: `${meta.id}/module/schema`,
188
+ id: `${meta.id}/module/schema-defs`,
138
189
  activatesOn: ClientEvents.ClientReady,
139
190
  activatesBefore: [ClientEvents.SetupSchema],
140
191
  activate: SchemaDefs,
141
192
  }),
193
+ defineModule({
194
+ id: `${meta.id}/module/schema`,
195
+ activatesOn: ClientEvents.SetupSchema,
196
+ activate: () =>
197
+ contributes(ClientCapabilities.Schema, [
198
+ DataType.View,
199
+ ViewTypeV1,
200
+ ViewTypeV2,
201
+ DataType.Event,
202
+ DataType.Organization,
203
+ DataType.Person,
204
+ DataType.Project,
205
+ DataType.Task,
206
+ ]),
207
+ }),
208
+ defineModule({
209
+ id: `${meta.id}/module/migration`,
210
+ activatesOn: ClientEvents.SetupMigration,
211
+ activate: () => contributes(ClientCapabilities.Migration, [ViewTypeV1ToV2]),
212
+ }),
213
+ defineModule({
214
+ id: `${meta.id}/module/whitelist-schema`,
215
+ activatesOn: ClientEvents.SetupSchema,
216
+ activate: () =>
217
+ contributes(ClientCapabilities.SchemaWhiteList, [
218
+ DataType.Event,
219
+ DataType.Organization,
220
+ DataType.Person,
221
+ DataType.Project,
222
+ DataType.Task,
223
+ ]),
224
+ }),
142
225
  defineModule({
143
226
  id: `${meta.id}/module/react-root`,
144
227
  activatesOn: Events.Startup,
@@ -3,32 +3,35 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Array, Option, pipe } from 'effect';
6
+ import { Array, Option, Schema, pipe } from 'effect';
7
7
 
8
- import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
9
- import { getSpace, SpaceState, type Space, isSpace, type QueryResult } from '@dxos/client/echo';
8
+ import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
9
+ import { type QueryResult, type Space, SpaceState, getSpace, isSpace, parseId } from '@dxos/client/echo';
10
10
  import { Filter, Obj, Query, Type } from '@dxos/echo';
11
11
  import { log } from '@dxos/log';
12
12
  import { ClientCapabilities } from '@dxos/plugin-client';
13
- import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
14
- import { createExtension, rxFromObservable, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';
13
+ import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
14
+ import { ROOT_ID, createExtension, rxFromObservable, rxFromSignal } from '@dxos/plugin-graph';
15
15
  import { DataType } from '@dxos/schema';
16
16
  import { isNonNullable } from '@dxos/util';
17
17
 
18
- import { SpaceCapabilities } from './capabilities';
19
18
  import { getActiveSpace } from '../hooks';
20
19
  import { SPACE_PLUGIN } from '../meta';
21
20
  import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
22
21
  import {
22
+ SHARED,
23
+ SPACES,
23
24
  constructObjectActions,
24
25
  constructSpaceActions,
25
26
  constructSpaceNode,
26
27
  createObjectNode,
28
+ createStaticSchemaActions,
29
+ createStaticSchemaNode,
27
30
  rxFromQuery,
28
- SHARED,
29
- SPACES,
30
31
  } from '../util';
31
32
 
33
+ import { SpaceCapabilities } from './capabilities';
34
+
32
35
  export default (context: PluginContext) => {
33
36
  // TODO(wittjosiah): Make reactive.
34
37
  const resolve = (typename: string) =>
@@ -322,8 +325,7 @@ export default (context: PluginContext) => {
322
325
 
323
326
  const collection = get(
324
327
  rxFromSignal(
325
- () =>
326
- space.properties[Type.getTypename(DataType.Collection)]?.target as DataType.Collection | undefined,
328
+ () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
327
329
  ),
328
330
  );
329
331
  if (!collection) {
@@ -479,15 +481,183 @@ export default (context: PluginContext) => {
479
481
  },
480
482
  }),
481
483
 
484
+ // Static schema records.
485
+ createExtension({
486
+ id: `${SPACE_PLUGIN}/static-schemas`,
487
+ connector: (node) => {
488
+ const client = context.getCapability(ClientCapabilities.Client);
489
+ return Rx.make((get) =>
490
+ pipe(
491
+ get(node),
492
+ Option.flatMap((node) =>
493
+ Obj.instanceOf(DataType.QueryCollection, node.data) &&
494
+ node.data.query.typename === DataType.StoredSchema.typename
495
+ ? Option.some(node.data)
496
+ : Option.none(),
497
+ ),
498
+ Option.flatMap((collection) => {
499
+ const space = getSpace(collection);
500
+ return space?.properties.staticRecords ? Option.some(space) : Option.none();
501
+ }),
502
+ Option.map((space) => {
503
+ return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
504
+ .map((typename) =>
505
+ client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
506
+ )
507
+ .filter(isNonNullable)
508
+ .map((schema) => createStaticSchemaNode({ schema, space }));
509
+ }),
510
+ Option.getOrElse(() => []),
511
+ ),
512
+ );
513
+ },
514
+ }),
515
+
516
+ // Create static schema actions.
517
+ createExtension({
518
+ id: `${SPACE_PLUGIN}/static-schema-actions`,
519
+ actions: (node) => {
520
+ let query: QueryResult<DataType.View> | undefined;
521
+ return Rx.make((get) =>
522
+ pipe(
523
+ get(node),
524
+ Option.flatMap((node) => {
525
+ const space = isSpace(node.properties.space) ? node.properties.space : undefined;
526
+ return space && Schema.isSchema(node.data) ? Option.some({ space, schema: node.data }) : Option.none();
527
+ }),
528
+ Option.map(({ space, schema }) => {
529
+ if (!query) {
530
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
531
+ query = space.db.query(Filter.type(DataType.View));
532
+ }
533
+
534
+ const views = get(rxFromQuery(query));
535
+ const filteredViews = get(
536
+ rxFromSignal(() =>
537
+ // TODO(wittjosiah): Remove cast.
538
+ views.filter((view) => view.query.typename === Type.getTypename(schema as Type.Obj.Any)),
539
+ ),
540
+ );
541
+ const deletable = filteredViews.length === 0;
542
+
543
+ // TODO(wittjosiah): Remove cast.
544
+ return createStaticSchemaActions({ schema: schema as Type.Obj.Any, space, deletable });
545
+ }),
546
+ Option.getOrElse(() => []),
547
+ ),
548
+ );
549
+ },
550
+ }),
551
+
552
+ // Create nodes for schema views.
553
+ createExtension({
554
+ id: `${SPACE_PLUGIN}/schema-views`,
555
+ connector: (node) => {
556
+ let query: QueryResult<DataType.View> | undefined;
557
+ return Rx.make((get) =>
558
+ pipe(
559
+ get(node),
560
+ Option.flatMap((node) => {
561
+ const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
562
+ return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
563
+ ? Option.some({ space, schema: node.data })
564
+ : Option.none();
565
+ }),
566
+ Option.map(({ space, schema }) => {
567
+ if (!query) {
568
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
569
+ query = space.db.query(Filter.type(DataType.View));
570
+ }
571
+
572
+ // TODO(wittjosiah): Remove cast.
573
+ const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
574
+ return get(rxFromQuery(query))
575
+ .filter((view) => view.query.typename === typename)
576
+ .map((view) =>
577
+ get(
578
+ rxFromSignal(() =>
579
+ createObjectNode({
580
+ object: view,
581
+ space,
582
+ resolve,
583
+ droppable: false,
584
+ }),
585
+ ),
586
+ ),
587
+ )
588
+ .filter(isNonNullable);
589
+ }),
590
+ Option.getOrElse(() => []),
591
+ ),
592
+ );
593
+ },
594
+ }),
595
+
596
+ // Create record nodes.
597
+ createExtension({
598
+ id: `${SPACE_PLUGIN}/records`,
599
+ resolver: (id) => {
600
+ let query: QueryResult<Type.Expando> | undefined;
601
+ return Rx.make((get) => {
602
+ const client = context.getCapability(ClientCapabilities.Client);
603
+ const { spaceId, objectId } = parseId(id);
604
+ if (!spaceId || !objectId) {
605
+ return null;
606
+ }
607
+
608
+ const space = client.spaces.get(spaceId);
609
+ if (!space) {
610
+ return null;
611
+ }
612
+
613
+ if (!query) {
614
+ query = space.db.query(Filter.ids(objectId));
615
+ }
616
+
617
+ const object = get(rxFromQuery(query)).at(0);
618
+ if (!object) {
619
+ return null;
620
+ }
621
+
622
+ return createObjectNode({ object, space, resolve, disposition: 'hidden' });
623
+ });
624
+ },
625
+ }),
626
+
482
627
  // Create collection actions and action groups.
483
628
  createExtension({
484
629
  id: `${SPACE_PLUGIN}/object-actions`,
485
- actions: (node) =>
486
- Rx.make((get) =>
630
+ actions: (node) => {
631
+ let query: QueryResult<DataType.View> | undefined;
632
+ return Rx.make((get) =>
487
633
  pipe(
488
634
  get(node),
489
- Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),
490
- Option.flatMap((object) => {
635
+ Option.flatMap((node) => {
636
+ const space = getSpace(node.data);
637
+ return space && Obj.isObject(node.data) ? Option.some({ space, object: node.data }) : Option.none();
638
+ }),
639
+ Option.flatMap(({ space, object }) => {
640
+ const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
641
+ if (!query && isSchema) {
642
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
643
+ query = space.db.query(Filter.type(DataType.View));
644
+ }
645
+
646
+ let deletable =
647
+ !isSchema &&
648
+ // Don't allow the Records smart collection to be deleted.
649
+ !(
650
+ Obj.instanceOf(DataType.QueryCollection, object) &&
651
+ object.query.typename === DataType.StoredSchema.typename
652
+ );
653
+ if (isSchema && query) {
654
+ const views = get(rxFromQuery(query));
655
+ const filteredViews = get(
656
+ rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
657
+ );
658
+ deletable = filteredViews.length === 0;
659
+ }
660
+
491
661
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
492
662
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
493
663
  const [state] = get(context.capabilities(SpaceCapabilities.State));
@@ -501,6 +671,7 @@ export default (context: PluginContext) => {
501
671
  graph: appGraph.graph,
502
672
  dispatch: dispatcher.dispatchPromise,
503
673
  objectForms,
674
+ deletable,
504
675
  navigable: get(rxFromSignal(() => state.navigableCollections)),
505
676
  });
506
677
  }
@@ -508,6 +679,32 @@ export default (context: PluginContext) => {
508
679
  Option.map((params) => constructObjectActions(params)),
509
680
  Option.getOrElse(() => []),
510
681
  ),
682
+ );
683
+ },
684
+ }),
685
+
686
+ // View selected objects.
687
+ createExtension({
688
+ id: `${SPACE_PLUGIN}/selected-objects`,
689
+ connector: (node) =>
690
+ Rx.make((get) =>
691
+ pipe(
692
+ get(node),
693
+ Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
694
+ Option.map((node) => [
695
+ {
696
+ id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
697
+ type: PLANK_COMPANION_TYPE,
698
+ data: 'selected-objects',
699
+ properties: {
700
+ label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
701
+ icon: 'ph--tree-view--regular',
702
+ disposition: 'hidden',
703
+ },
704
+ },
705
+ ]),
706
+ Option.getOrElse(() => []),
707
+ ),
511
708
  ),
512
709
  }),
513
710
 
@@ -2,13 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
6
6
  import { isSpace } from '@dxos/client/echo';
7
7
  import { Obj, Type } from '@dxos/echo';
8
8
  import { DataType } from '@dxos/schema';
9
9
 
10
10
  import { SPACE_PLUGIN } from '../meta';
11
- import translations from '../translations';
11
+ import { translations } from '../translations';
12
12
  import { SPACE_TYPE, SpaceAction } from '../types';
13
13
  import { SPACES } from '../util';
14
14
 
@@ -23,8 +23,8 @@ export default (context: PluginContext) =>
23
23
  inputType: SPACES,
24
24
  outputType: DIRECTORY_TYPE,
25
25
  serialize: (node) => ({
26
- name: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],
27
- data: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],
26
+ name: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'] ?? 'Spaces',
27
+ data: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'] ?? 'Spaces',
28
28
  type: DIRECTORY_TYPE,
29
29
  }),
30
30
  deserialize: () => {
@@ -49,8 +49,8 @@ export default (context: PluginContext) =>
49
49
  inputType: COLLECTION_TYPE,
50
50
  outputType: DIRECTORY_TYPE,
51
51
  serialize: (node) => ({
52
- name: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
53
- data: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
52
+ name: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['object name placeholder'],
53
+ data: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['object name placeholder'],
54
54
  type: DIRECTORY_TYPE,
55
55
  }),
56
56
  deserialize: async (data, ancestors) => {
@@ -2,10 +2,12 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { defineCapability, type Label } from '@dxos/app-framework';
5
+ import { type Schema } from 'effect';
6
+
7
+ import { type AnyIntentChain, type Label, defineCapability } from '@dxos/app-framework';
6
8
  import { type Space } from '@dxos/react-client/echo';
7
9
  import { type DataType } from '@dxos/schema';
8
- import { type Position, type DeepReadonly, type MaybePromise } from '@dxos/util';
10
+ import { type DeepReadonly, type Position } from '@dxos/util';
9
11
 
10
12
  import { SPACE_PLUGIN } from '../meta';
11
13
  import { type ObjectForm, type PluginState } from '../types';
@@ -17,8 +19,11 @@ export namespace SpaceCapabilities {
17
19
  export type SettingsSection = { id: string; label: Label; position?: Position };
18
20
  export const SettingsSection = defineCapability<SettingsSection>(`${SPACE_PLUGIN}/capability/settings-section`);
19
21
 
20
- export type OnSpaceCreated = (params: { space: Space; rootCollection: DataType.Collection }) => MaybePromise<void>;
22
+ export type OnSpaceCreated = (params: { space: Space; rootCollection: DataType.Collection }) => AnyIntentChain;
21
23
  export const OnSpaceCreated = defineCapability<OnSpaceCreated>(`${SPACE_PLUGIN}/capability/on-space-created`);
22
24
 
25
+ export type OnSchemaAdded = (params: { space: Space; schema: Schema.Schema.AnyNoContext }) => AnyIntentChain;
26
+ export const OnSchemaAdded = defineCapability<OnSchemaAdded>(`${SPACE_PLUGIN}/capability/on-schema-added`);
27
+
23
28
  export const ObjectForm = defineCapability<ObjectForm<any>>(`${SPACE_PLUGIN}/capability/object-form`);
24
29
  }
@@ -2,8 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext, Capabilities } from '@dxos/app-framework';
6
- import { Obj, Ref, Type } from '@dxos/echo';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
+ import { Obj, Ref } from '@dxos/echo';
7
7
  import { Migrations } from '@dxos/migrations';
8
8
  import { ClientCapabilities } from '@dxos/plugin-client';
9
9
  import { DataType } from '@dxos/schema';
@@ -16,9 +16,7 @@ export default async (context: PluginContext) => {
16
16
  await defaultSpace.waitUntilReady();
17
17
 
18
18
  // Create root collection structure.
19
- defaultSpace.properties[Type.getTypename(DataType.Collection)] = Ref.make(
20
- Obj.make(DataType.Collection, { objects: [] }),
21
- );
19
+ defaultSpace.properties[DataType.Collection.typename] = Ref.make(Obj.make(DataType.Collection, { objects: [] }));
22
20
  if (Migrations.versionProperty) {
23
21
  defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
24
22
  }