@dxos/plugin-space 0.8.3 → 0.8.4-main.1da679c

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 (294) 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-J7KGPJJK.mjs +90 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.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-FC4D5PF6.mjs} +190 -36
  8. package/dist/lib/browser/app-graph-builder-FC4D5PF6.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-F7ISRRBV.mjs → app-graph-serializer-NI4BCIQO.mjs} +15 -15
  10. package/dist/lib/browser/app-graph-serializer-NI4BCIQO.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-YMCZR6EZ.mjs → chunk-CBYL62HG.mjs} +5 -4
  12. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-7Y4M7GXO.mjs → chunk-ELJDGQTO.mjs} +6 -6
  14. package/dist/lib/browser/{chunk-7Y4M7GXO.mjs.map → chunk-ELJDGQTO.mjs.map} +3 -3
  15. package/dist/lib/browser/{chunk-PTKYMZWO.mjs → chunk-FBCGT5YY.mjs} +2 -2
  16. package/dist/lib/browser/{chunk-NFUKCRGE.mjs → chunk-IIY4XVBZ.mjs} +440 -376
  17. package/dist/lib/browser/chunk-IIY4XVBZ.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-V24VASAJ.mjs → chunk-S33AYKSS.mjs} +189 -34
  19. package/dist/lib/browser/chunk-S33AYKSS.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-BXNL6SDI.mjs → chunk-TUQZO5P4.mjs} +4 -3
  21. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-TW7O2EPP.mjs → chunk-URST7EEN.mjs} +68 -8
  23. package/dist/lib/browser/chunk-URST7EEN.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-4ZKSFDXM.mjs → chunk-WZYRDFW7.mjs} +76 -14
  25. package/dist/lib/browser/chunk-WZYRDFW7.mjs.map +7 -0
  26. package/dist/lib/browser/{identity-created-PI7TKANR.mjs → identity-created-PW2BA46S.mjs} +7 -7
  27. package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +7 -0
  28. package/dist/lib/browser/index.mjs +95 -24
  29. package/dist/lib/browser/index.mjs.map +3 -3
  30. package/dist/lib/browser/{intent-resolver-RWU6ZE4H.mjs → intent-resolver-2RWP2F23.mjs} +183 -28
  31. package/dist/lib/browser/intent-resolver-2RWP2F23.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-root-QIKHSNT2.mjs → react-root-QUDHNVV5.mjs} +10 -10
  34. package/dist/lib/browser/{react-root-QIKHSNT2.mjs.map → react-root-QUDHNVV5.mjs.map} +2 -2
  35. package/dist/lib/browser/{react-surface-W56UD53I.mjs → react-surface-S47ZR44T.mjs} +59 -27
  36. package/dist/lib/browser/react-surface-S47ZR44T.mjs.map +7 -0
  37. package/dist/lib/browser/{schema-defs-WREJNMIC.mjs → schema-defs-ATNBAQEU.mjs} +6 -6
  38. package/dist/lib/browser/schema-defs-ATNBAQEU.mjs.map +7 -0
  39. package/dist/lib/browser/{settings-K54STC5A.mjs → settings-NTC766QW.mjs} +6 -6
  40. package/dist/lib/browser/{settings-K54STC5A.mjs.map → settings-NTC766QW.mjs.map} +1 -1
  41. package/dist/lib/browser/{spaces-ready-3PDRDHPC.mjs → spaces-ready-NX7NRVSB.mjs} +19 -17
  42. package/dist/lib/browser/spaces-ready-NX7NRVSB.mjs.map +7 -0
  43. package/dist/lib/browser/{state-HRZ4VRXU.mjs → state-LAGTPHDQ.mjs} +6 -6
  44. package/dist/lib/browser/state-LAGTPHDQ.mjs.map +7 -0
  45. package/dist/lib/browser/types/index.mjs +2 -2
  46. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +32 -0
  47. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +7 -0
  48. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs +91 -0
  49. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs.map +7 -0
  50. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +70 -0
  51. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +7 -0
  52. package/dist/lib/node-esm/{app-graph-builder-BCHVZ4OM.mjs → app-graph-builder-KREU52XR.mjs} +190 -36
  53. package/dist/lib/node-esm/app-graph-builder-KREU52XR.mjs.map +7 -0
  54. package/dist/lib/node-esm/{app-graph-serializer-TXRGGNP2.mjs → app-graph-serializer-L3IXSQ2I.mjs} +15 -15
  55. package/dist/lib/node-esm/app-graph-serializer-L3IXSQ2I.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-3CP67AYY.mjs → chunk-FJZNSJC4.mjs} +5 -4
  57. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-BSLREHIX.mjs → chunk-HC677WUJ.mjs} +4 -3
  59. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-MSWEFAPD.mjs → chunk-HWNG4MEU.mjs} +2 -2
  61. package/dist/lib/node-esm/{chunk-JBQKU4K5.mjs → chunk-LGNPMOXU.mjs} +76 -14
  62. package/dist/lib/node-esm/chunk-LGNPMOXU.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-GH2FGJXH.mjs → chunk-Q6AAQLQG.mjs} +6 -6
  64. package/dist/lib/node-esm/{chunk-GH2FGJXH.mjs.map → chunk-Q6AAQLQG.mjs.map} +3 -3
  65. package/dist/lib/node-esm/{chunk-LA6AVVH6.mjs → chunk-QUPBTNWJ.mjs} +440 -376
  66. package/dist/lib/node-esm/chunk-QUPBTNWJ.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-D4QMPPS7.mjs → chunk-RXDT5LA5.mjs} +68 -8
  68. package/dist/lib/node-esm/chunk-RXDT5LA5.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-HO7AIKQS.mjs → chunk-TEUN2E4F.mjs} +189 -34
  70. package/dist/lib/node-esm/chunk-TEUN2E4F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{identity-created-35CTAQWI.mjs → identity-created-MWTLGQRU.mjs} +7 -7
  72. package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +7 -0
  73. package/dist/lib/node-esm/index.mjs +95 -24
  74. package/dist/lib/node-esm/index.mjs.map +3 -3
  75. package/dist/lib/node-esm/{intent-resolver-JO6L2VXC.mjs → intent-resolver-ORRPXJMN.mjs} +183 -28
  76. package/dist/lib/node-esm/intent-resolver-ORRPXJMN.mjs.map +7 -0
  77. package/dist/lib/node-esm/meta.json +1 -1
  78. package/dist/lib/node-esm/{react-root-YFGL3B4J.mjs → react-root-2WBNW4VQ.mjs} +10 -10
  79. package/dist/lib/node-esm/{react-root-YFGL3B4J.mjs.map → react-root-2WBNW4VQ.mjs.map} +2 -2
  80. package/dist/lib/node-esm/{react-surface-CVAPDLEZ.mjs → react-surface-MI5G3TD6.mjs} +59 -27
  81. package/dist/lib/node-esm/react-surface-MI5G3TD6.mjs.map +7 -0
  82. package/dist/lib/node-esm/{schema-defs-4MEJETVX.mjs → schema-defs-7LEPK3R6.mjs} +6 -6
  83. package/dist/lib/node-esm/schema-defs-7LEPK3R6.mjs.map +7 -0
  84. package/dist/lib/node-esm/{settings-TD76LTQS.mjs → settings-RWOW2SE5.mjs} +6 -6
  85. package/dist/lib/node-esm/{settings-TD76LTQS.mjs.map → settings-RWOW2SE5.mjs.map} +1 -1
  86. package/dist/lib/node-esm/{spaces-ready-FJMGPAVV.mjs → spaces-ready-KD57IOYI.mjs} +19 -17
  87. package/dist/lib/node-esm/spaces-ready-KD57IOYI.mjs.map +7 -0
  88. package/dist/lib/node-esm/{state-XQNDCN37.mjs → state-JKO4JKA2.mjs} +6 -6
  89. package/dist/lib/node-esm/state-JKO4JKA2.mjs.map +7 -0
  90. package/dist/lib/node-esm/types/index.mjs +2 -2
  91. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-serializer.d.ts +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 +1 -1
  99. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/index.d.ts +11 -12
  101. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  103. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  105. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  109. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/settings.d.ts +1 -1
  111. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  112. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/state.d.ts +1 -1
  114. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  115. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  116. package/dist/types/src/components/CollectionMain.d.ts +1 -0
  117. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +4 -3
  119. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  120. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1584 -3
  121. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -3
  123. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  124. package/dist/types/src/components/MembersContainer.d.ts +3 -2
  125. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  126. package/dist/types/src/components/MembersContainer.stories.d.ts +1584 -4
  127. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  129. package/dist/types/src/components/ObjectDetailsPanel.d.ts +9 -0
  130. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -0
  131. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  132. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  133. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  134. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -1
  135. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  136. package/dist/types/src/components/RecordMain.d.ts +7 -0
  137. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  138. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  139. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  140. package/dist/types/src/components/SpacePresence.stories.d.ts +1411 -2
  141. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  143. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1417 -3
  144. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  146. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  147. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1418 -4
  148. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  150. package/dist/types/src/components/ViewEditor.d.ts +8 -0
  151. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  152. package/dist/types/src/components/index.d.ts +14 -1
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/events.d.ts +1 -0
  155. package/dist/types/src/events.d.ts.map +1 -1
  156. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  157. package/dist/types/src/translations.d.ts +1402 -410
  158. package/dist/types/src/translations.d.ts.map +1 -1
  159. package/dist/types/src/types/types.d.ts +82 -22
  160. package/dist/types/src/types/types.d.ts.map +1 -1
  161. package/dist/types/src/util.d.ts +32 -5
  162. package/dist/types/src/util.d.ts.map +1 -1
  163. package/dist/types/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +54 -53
  165. package/src/SpacePlugin.ts +81 -16
  166. package/src/capabilities/app-graph-builder.ts +232 -22
  167. package/src/capabilities/app-graph-serializer.ts +6 -6
  168. package/src/capabilities/capabilities.ts +9 -3
  169. package/src/capabilities/identity-created.ts +3 -5
  170. package/src/capabilities/index.ts +0 -1
  171. package/src/capabilities/intent-resolver.ts +136 -15
  172. package/src/capabilities/react-root.tsx +2 -1
  173. package/src/capabilities/react-surface.tsx +73 -22
  174. package/src/capabilities/schema-defs.ts +3 -2
  175. package/src/capabilities/spaces-ready.ts +10 -7
  176. package/src/capabilities/state.ts +3 -2
  177. package/src/components/AwaitingObject.tsx +5 -7
  178. package/src/components/CollectionMain.tsx +2 -0
  179. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +9 -8
  180. package/src/components/CreateDialog/CreateObjectDialog.tsx +47 -33
  181. package/src/components/CreateDialog/CreateObjectPanel.tsx +18 -7
  182. package/src/components/CreateDialog/CreateSpaceDialog.tsx +1 -1
  183. package/src/components/JoinDialog.tsx +1 -1
  184. package/src/components/MembersContainer.stories.tsx +35 -10
  185. package/src/components/MembersContainer.tsx +13 -13
  186. package/src/components/MenuFooter.tsx +2 -3
  187. package/src/components/ObjectDetailsPanel.tsx +79 -0
  188. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +2 -1
  189. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +3 -2
  190. package/src/components/PersistenceStatus.tsx +5 -6
  191. package/src/components/PopoverRenameObject.tsx +7 -13
  192. package/src/components/PopoverRenameSpace.tsx +1 -1
  193. package/src/components/RecordMain.tsx +43 -0
  194. package/src/components/SchemaContainer.tsx +2 -2
  195. package/src/components/SpacePluginSettings.tsx +6 -7
  196. package/src/components/SpacePresence.stories.tsx +8 -5
  197. package/src/components/SpacePresence.tsx +7 -7
  198. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -6
  199. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +8 -8
  200. package/src/components/SyncStatus/SyncStatus.stories.tsx +12 -18
  201. package/src/components/SyncStatus/SyncStatus.tsx +4 -3
  202. package/src/components/SyncStatus/save-tracker.ts +3 -3
  203. package/src/components/SyncStatus/status.ts +4 -4
  204. package/src/components/ViewEditor.tsx +59 -0
  205. package/src/components/index.ts +7 -1
  206. package/src/events.ts +2 -1
  207. package/src/hooks/useActiveSpace.ts +2 -2
  208. package/src/hooks/useInputSurfaceLookup.tsx +1 -1
  209. package/src/translations.ts +74 -9
  210. package/src/types/types.ts +66 -9
  211. package/src/util.tsx +177 -33
  212. package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +0 -7
  213. package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +0 -7
  214. package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +0 -7
  215. package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-V24VASAJ.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +0 -7
  220. package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +0 -7
  221. package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +0 -7
  222. package/dist/lib/browser/react-surface-W56UD53I.mjs.map +0 -7
  223. package/dist/lib/browser/schema-defs-WREJNMIC.mjs.map +0 -7
  224. package/dist/lib/browser/schema-tools-ILTVSSS3.mjs +0 -124
  225. package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +0 -7
  226. package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +0 -7
  227. package/dist/lib/browser/state-HRZ4VRXU.mjs.map +0 -7
  228. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs +0 -364
  229. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +0 -7
  230. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs +0 -89
  231. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +0 -7
  232. package/dist/lib/node/chunk-3X4EA4XL.cjs +0 -37
  233. package/dist/lib/node/chunk-3X4EA4XL.cjs.map +0 -7
  234. package/dist/lib/node/chunk-5WLAXYE3.cjs +0 -125
  235. package/dist/lib/node/chunk-5WLAXYE3.cjs.map +0 -7
  236. package/dist/lib/node/chunk-6P2DB4QQ.cjs +0 -36
  237. package/dist/lib/node/chunk-6P2DB4QQ.cjs.map +0 -7
  238. package/dist/lib/node/chunk-DOC5XEZ4.cjs +0 -184
  239. package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +0 -7
  240. package/dist/lib/node/chunk-NCHF433F.cjs +0 -1921
  241. package/dist/lib/node/chunk-NCHF433F.cjs.map +0 -7
  242. package/dist/lib/node/chunk-NL5Y4EDX.cjs +0 -38
  243. package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +0 -7
  244. package/dist/lib/node/chunk-ULJZPATP.cjs +0 -312
  245. package/dist/lib/node/chunk-ULJZPATP.cjs.map +0 -7
  246. package/dist/lib/node/chunk-XHWVT7LW.cjs +0 -572
  247. package/dist/lib/node/chunk-XHWVT7LW.cjs.map +0 -7
  248. package/dist/lib/node/identity-created-FF4WZ2WY.cjs +0 -42
  249. package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +0 -7
  250. package/dist/lib/node/index.cjs +0 -278
  251. package/dist/lib/node/index.cjs.map +0 -7
  252. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs +0 -609
  253. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +0 -7
  254. package/dist/lib/node/meta.json +0 -1
  255. package/dist/lib/node/react-root-RQUU3A45.cjs +0 -51
  256. package/dist/lib/node/react-root-RQUU3A45.cjs.map +0 -7
  257. package/dist/lib/node/react-surface-AZFJLE72.cjs +0 -351
  258. package/dist/lib/node/react-surface-AZFJLE72.cjs.map +0 -7
  259. package/dist/lib/node/schema-defs-OB2X2HBH.cjs +0 -42
  260. package/dist/lib/node/schema-defs-OB2X2HBH.cjs.map +0 -7
  261. package/dist/lib/node/schema-tools-IYREN4IH.cjs +0 -147
  262. package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +0 -7
  263. package/dist/lib/node/settings-P2EQ7VKQ.cjs +0 -38
  264. package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +0 -7
  265. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs +0 -210
  266. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +0 -7
  267. package/dist/lib/node/state-M35DK75Z.cjs +0 -61
  268. package/dist/lib/node/state-M35DK75Z.cjs.map +0 -7
  269. package/dist/lib/node/types/index.cjs +0 -48
  270. package/dist/lib/node/types/index.cjs.map +0 -7
  271. package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +0 -7
  272. package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +0 -7
  279. package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +0 -7
  280. package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +0 -7
  281. package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +0 -7
  282. package/dist/lib/node-esm/schema-defs-4MEJETVX.mjs.map +0 -7
  283. package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs +0 -126
  284. package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +0 -7
  285. package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +0 -7
  286. package/dist/lib/node-esm/state-XQNDCN37.mjs.map +0 -7
  287. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  288. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  290. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  291. package/src/capabilities/schema-tool.test.ts +0 -44
  292. package/src/capabilities/schema-tools.ts +0 -125
  293. /package/dist/lib/browser/{chunk-PTKYMZWO.mjs.map → chunk-FBCGT5YY.mjs.map} +0 -0
  294. /package/dist/lib/node-esm/{chunk-MSWEFAPD.mjs.map → chunk-HWNG4MEU.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.1da679c",
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,77 @@
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.1da679c",
48
+ "@dxos/async": "0.8.4-main.1da679c",
49
+ "@dxos/app-framework": "0.8.4-main.1da679c",
50
+ "@dxos/blueprints": "0.8.4-main.1da679c",
51
+ "@dxos/display-name": "0.8.4-main.1da679c",
52
+ "@dxos/client": "0.8.4-main.1da679c",
53
+ "@dxos/echo": "0.8.4-main.1da679c",
54
+ "@dxos/context": "0.8.4-main.1da679c",
55
+ "@dxos/echo-schema": "0.8.4-main.1da679c",
56
+ "@dxos/echo-signals": "0.8.4-main.1da679c",
57
+ "@dxos/effect": "0.8.4-main.1da679c",
58
+ "@dxos/keys": "0.8.4-main.1da679c",
59
+ "@dxos/live-object": "0.8.4-main.1da679c",
60
+ "@dxos/invariant": "0.8.4-main.1da679c",
61
+ "@dxos/log": "0.8.4-main.1da679c",
62
+ "@dxos/local-storage": "0.8.4-main.1da679c",
63
+ "@dxos/migrations": "0.8.4-main.1da679c",
64
+ "@dxos/plugin-attention": "0.8.4-main.1da679c",
65
+ "@dxos/plugin-client": "0.8.4-main.1da679c",
66
+ "@dxos/plugin-graph": "0.8.4-main.1da679c",
67
+ "@dxos/protocols": "0.8.4-main.1da679c",
68
+ "@dxos/plugin-observability": "0.8.4-main.1da679c",
69
+ "@dxos/plugin-status-bar": "0.8.4-main.1da679c",
70
+ "@dxos/react-client": "0.8.4-main.1da679c",
71
+ "@dxos/react-ui-attention": "0.8.4-main.1da679c",
72
+ "@dxos/react-ui-components": "0.8.4-main.1da679c",
73
+ "@dxos/react-ui-editor": "0.8.4-main.1da679c",
74
+ "@dxos/react-ui-list": "0.8.4-main.1da679c",
75
+ "@dxos/react-ui-pickers": "0.8.4-main.1da679c",
76
+ "@dxos/react-ui-form": "0.8.4-main.1da679c",
77
+ "@dxos/react-ui-searchlist": "0.8.4-main.1da679c",
78
+ "@dxos/plugin-deck": "0.8.4-main.1da679c",
79
+ "@dxos/react-ui-stack": "0.8.4-main.1da679c",
80
+ "@dxos/react-ui-tabs": "0.8.4-main.1da679c",
81
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.1da679c",
82
+ "@dxos/react-ui-theme": "0.8.4-main.1da679c",
83
+ "@dxos/schema": "0.8.4-main.1da679c",
84
+ "@dxos/util": "0.8.4-main.1da679c",
85
+ "@dxos/shell": "0.8.4-main.1da679c"
83
86
  },
84
87
  "devDependencies": {
85
88
  "@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",
89
+ "@effect-rx/rx-react": "0.38.0",
90
+ "@effect/platform": "0.90.2",
89
91
  "@types/react": "~18.2.0",
90
92
  "@types/react-dom": "~18.2.0",
91
93
  "react": "~18.2.0",
92
94
  "react-dom": "~18.2.0",
93
- "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
+ "vite": "7.1.1",
96
+ "@dxos/random": "0.8.4-main.1da679c",
97
+ "@dxos/react-ui": "0.8.4-main.1da679c",
98
+ "@dxos/react-ui-theme": "0.8.4-main.1da679c",
99
+ "@dxos/storybook-utils": "0.8.4-main.1da679c"
98
100
  },
99
101
  "peerDependencies": {
100
102
  "@effect-rx/rx-react": "^0.34.1",
101
- "@effect/platform": "0.80.12",
102
- "@phosphor-icons/react": "^2.1.5",
103
+ "@effect/platform": "^0.80.12",
103
104
  "effect": "^3.13.3",
104
105
  "react": "~18.2.0",
105
106
  "react-dom": "~18.2.0",
106
- "@dxos/react-ui-theme": "0.8.3",
107
- "@dxos/react-ui": "0.8.3"
107
+ "@dxos/react-ui": "0.8.4-main.1da679c",
108
+ "@dxos/react-ui-theme": "0.8.4-main.1da679c"
108
109
  },
109
110
  "publishConfig": {
110
111
  "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, createDefaultSchema, typenameFromQuery } from '@dxos/schema';
21
+ import { translations as shellTranslations } from '@dxos/shell/react';
22
22
 
23
23
  import {
24
24
  AppGraphBuilder,
@@ -28,16 +28,15 @@ import {
28
28
  ReactRoot,
29
29
  ReactSurface,
30
30
  SchemaDefs,
31
- SchemaTools,
32
31
  SpaceCapabilities,
33
32
  SpaceSettings,
34
- SpacesReady,
35
33
  SpaceState,
34
+ SpacesReady,
36
35
  } from './capabilities';
37
36
  import { SpaceEvents } from './events';
38
37
  import { meta } from './meta';
39
- import translations from './translations';
40
- import { CollectionAction, defineObjectForm } from './types';
38
+ import { translations } from './translations';
39
+ import { CollectionAction, SpaceAction, defineObjectForm } from './types';
41
40
 
42
41
  export type SpacePluginOptions = {
43
42
  /**
@@ -85,7 +84,7 @@ export const SpacePlugin = ({
85
84
  defineModule({
86
85
  id: `${meta.id}/module/translations`,
87
86
  activatesOn: Events.SetupTranslations,
88
- activate: () => contributes(Capabilities.Translations, [...translations, osTranslations]),
87
+ activate: () => contributes(Capabilities.Translations, [...translations, ...shellTranslations]),
89
88
  }),
90
89
  defineModule({
91
90
  id: `${meta.id}/module/metadata`,
@@ -104,11 +103,41 @@ export const SpacePlugin = ({
104
103
  metadata: {
105
104
  label: (object: DataType.QueryCollection) => [
106
105
  'typename label',
107
- { ns: object.query.typename, count: 2, defaultValue: 'New smart collection' },
106
+ { ns: typenameFromQuery(object.query), count: 2, defaultValue: 'New smart collection' },
108
107
  ],
109
108
  icon: 'ph--funnel-simple--regular',
110
109
  },
111
110
  }),
111
+ contributes(Capabilities.Metadata, {
112
+ id: Type.getTypename(DataType.StoredSchema),
113
+ metadata: {
114
+ icon: 'ph--database--regular',
115
+ },
116
+ }),
117
+ contributes(Capabilities.Metadata, {
118
+ id: Type.getTypename(DataType.Event),
119
+ metadata: {
120
+ icon: 'ph--calendar-dot--regular',
121
+ },
122
+ }),
123
+ contributes(Capabilities.Metadata, {
124
+ id: Type.getTypename(DataType.Organization),
125
+ metadata: {
126
+ icon: 'ph--building-office--regular',
127
+ },
128
+ }),
129
+ contributes(Capabilities.Metadata, {
130
+ id: Type.getTypename(DataType.Person),
131
+ metadata: {
132
+ icon: 'ph--user--regular',
133
+ },
134
+ }),
135
+ contributes(Capabilities.Metadata, {
136
+ id: Type.getTypename(DataType.Task),
137
+ metadata: {
138
+ icon: 'ph--check-circle--regular',
139
+ },
140
+ }),
112
141
  ],
113
142
  }),
114
143
  defineModule({
@@ -126,19 +155,60 @@ export const SpacePlugin = ({
126
155
  contributes(
127
156
  SpaceCapabilities.ObjectForm,
128
157
  defineObjectForm({
129
- objectSchema: DataType.QueryCollection,
158
+ // TODO(wittjosiah): Remove cast.
159
+ objectSchema: DataType.QueryCollection as any,
130
160
  formSchema: CollectionAction.QueryCollectionForm,
131
161
  getIntent: (props) => createIntent(CollectionAction.CreateQueryCollection, props),
132
162
  }),
133
163
  ),
164
+ contributes(
165
+ SpaceCapabilities.ObjectForm,
166
+ defineObjectForm({
167
+ objectSchema: DataType.StoredSchema,
168
+ formSchema: SpaceAction.StoredSchemaForm,
169
+ getIntent: (props, options) =>
170
+ props.typename
171
+ ? createIntent(SpaceAction.UseStaticSchema, { space: options.space, typename: props.typename })
172
+ : createIntent(SpaceAction.AddSchema, {
173
+ space: options.space,
174
+ name: props.name,
175
+ schema: createDefaultSchema(),
176
+ }),
177
+ }),
178
+ ),
134
179
  ],
135
180
  }),
136
181
  defineModule({
137
- id: `${meta.id}/module/schema`,
182
+ id: `${meta.id}/module/schema-defs`,
138
183
  activatesOn: ClientEvents.ClientReady,
139
184
  activatesBefore: [ClientEvents.SetupSchema],
140
185
  activate: SchemaDefs,
141
186
  }),
187
+ defineModule({
188
+ id: `${meta.id}/module/schema`,
189
+ activatesOn: ClientEvents.SetupSchema,
190
+ activate: () =>
191
+ contributes(ClientCapabilities.Schema, [
192
+ DataType.View,
193
+ DataType.Event,
194
+ DataType.Organization,
195
+ DataType.Person,
196
+ DataType.Project,
197
+ DataType.Task,
198
+ ]),
199
+ }),
200
+ defineModule({
201
+ id: `${meta.id}/module/whitelist-schema`,
202
+ activatesOn: ClientEvents.SetupSchema,
203
+ activate: () =>
204
+ contributes(ClientCapabilities.SchemaWhiteList, [
205
+ DataType.Event,
206
+ DataType.Organization,
207
+ DataType.Person,
208
+ DataType.Project,
209
+ DataType.Task,
210
+ ]),
211
+ }),
142
212
  defineModule({
143
213
  id: `${meta.id}/module/react-root`,
144
214
  activatesOn: Events.Startup,
@@ -185,10 +255,5 @@ export const SpacePlugin = ({
185
255
  ),
186
256
  activate: SpacesReady,
187
257
  }),
188
- defineModule({
189
- id: `${meta.id}/module/tools`,
190
- activatesOn: Events.SetupArtifactDefinition,
191
- activate: SchemaTools,
192
- }),
193
258
  ]);
194
259
  };
@@ -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';
15
- import { DataType } from '@dxos/schema';
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
+ import { DataType, typenameFromQuery } 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) {
@@ -438,9 +440,8 @@ export default (context: PluginContext) => {
438
440
  ),
439
441
  Option.flatMap((collection) => {
440
442
  const space = getSpace(collection);
441
- return collection.query.typename && space
442
- ? Option.some({ typename: collection.query.typename, space })
443
- : Option.none();
443
+ const typename = typenameFromQuery(collection.query);
444
+ return typename && space ? Option.some({ typename, space }) : Option.none();
444
445
  }),
445
446
  Option.map(({ typename, space }) => {
446
447
  const state = context.getCapability(SpaceCapabilities.State);
@@ -457,16 +458,142 @@ export default (context: PluginContext) => {
457
458
  ),
458
459
  );
459
460
  }
461
+ return (
462
+ get(rxFromQuery(query))
463
+ // TODO(wittjosiah): This should be the default sort order.
464
+ .toSorted((a, b) => a.id.localeCompare(b.id))
465
+ .map((object) =>
466
+ get(
467
+ rxFromSignal(() =>
468
+ createObjectNode({
469
+ object,
470
+ space,
471
+ resolve,
472
+ droppable: false, // Cannot rearrange query collections.
473
+ navigable: state.navigableCollections,
474
+ }),
475
+ ),
476
+ ),
477
+ )
478
+ .filter(isNonNullable)
479
+ );
480
+ }),
481
+ Option.getOrElse(() => []),
482
+ ),
483
+ );
484
+ },
485
+ }),
486
+
487
+ // Static schema records.
488
+ createExtension({
489
+ id: `${SPACE_PLUGIN}/static-schemas`,
490
+ connector: (node) => {
491
+ const client = context.getCapability(ClientCapabilities.Client);
492
+ return Rx.make((get) =>
493
+ pipe(
494
+ get(node),
495
+ Option.flatMap((node) =>
496
+ Obj.instanceOf(DataType.QueryCollection, node.data) &&
497
+ typenameFromQuery(node.data.query) === DataType.StoredSchema.typename
498
+ ? Option.some(node.data)
499
+ : Option.none(),
500
+ ),
501
+ Option.flatMap((collection) => {
502
+ const space = getSpace(collection);
503
+ return space?.properties.staticRecords ? Option.some(space) : Option.none();
504
+ }),
505
+ Option.map((space) => {
506
+ return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
507
+ .map((typename) =>
508
+ client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
509
+ )
510
+ .filter(isNonNullable)
511
+ .map((schema) => createStaticSchemaNode({ schema, space }));
512
+ }),
513
+ Option.getOrElse(() => []),
514
+ ),
515
+ );
516
+ },
517
+ }),
518
+
519
+ // Create static schema actions.
520
+ createExtension({
521
+ id: `${SPACE_PLUGIN}/static-schema-actions`,
522
+ actions: (node) => {
523
+ let query: QueryResult<DataType.View> | undefined;
524
+ return Rx.make((get) =>
525
+ pipe(
526
+ get(node),
527
+ Option.flatMap((node) => {
528
+ const space = isSpace(node.properties.space) ? node.properties.space : undefined;
529
+ return space && Schema.isSchema(node.data) ? Option.some({ space, schema: node.data }) : Option.none();
530
+ }),
531
+ Option.map(({ space, schema }) => {
532
+ if (!query) {
533
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
534
+ query = space.db.query(Filter.type(DataType.View));
535
+ }
536
+
537
+ const views = get(rxFromQuery(query));
538
+ const filteredViews = get(
539
+ rxFromSignal(() =>
540
+ // TODO(wittjosiah): Remove cast.
541
+ views.filter((view) => typenameFromQuery(view.query) === Type.getTypename(schema as Type.Obj.Any)),
542
+ ),
543
+ );
544
+ const deletable = filteredViews.length === 0;
545
+
546
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
547
+ if (!dispatcher) {
548
+ return [];
549
+ }
550
+
551
+ // TODO(wittjosiah): Remove cast.
552
+ return createStaticSchemaActions({
553
+ schema: schema as Type.Obj.Any,
554
+ space,
555
+ dispatch: dispatcher.dispatchPromise,
556
+ deletable,
557
+ });
558
+ }),
559
+ Option.getOrElse(() => []),
560
+ ),
561
+ );
562
+ },
563
+ }),
564
+
565
+ // Create nodes for schema views.
566
+ createExtension({
567
+ id: `${SPACE_PLUGIN}/schema-views`,
568
+ connector: (node) => {
569
+ let query: QueryResult<DataType.View> | undefined;
570
+ return Rx.make((get) =>
571
+ pipe(
572
+ get(node),
573
+ Option.flatMap((node) => {
574
+ const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
575
+ return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
576
+ ? Option.some({ space, schema: node.data })
577
+ : Option.none();
578
+ }),
579
+ Option.map(({ space, schema }) => {
580
+ if (!query) {
581
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
582
+ query = space.db.query(Filter.type(DataType.View));
583
+ }
584
+
585
+ // TODO(wittjosiah): Remove cast.
586
+ const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
460
587
  return get(rxFromQuery(query))
461
- .map((object) =>
588
+ .filter((view) => typenameFromQuery(view.query) === typename)
589
+ .map((view) =>
462
590
  get(
463
591
  rxFromSignal(() =>
464
592
  createObjectNode({
465
- object,
593
+ object: view,
466
594
  space,
467
595
  resolve,
468
- droppable: false, // Cannot rearrange query collections.
469
- navigable: state.navigableCollections,
596
+ droppable: false,
470
597
  }),
471
598
  ),
472
599
  ),
@@ -479,15 +606,71 @@ export default (context: PluginContext) => {
479
606
  },
480
607
  }),
481
608
 
609
+ // Create record nodes.
610
+ createExtension({
611
+ id: `${SPACE_PLUGIN}/records`,
612
+ resolver: (id) => {
613
+ let query: QueryResult<Type.Expando> | undefined;
614
+ return Rx.make((get) => {
615
+ const client = context.getCapability(ClientCapabilities.Client);
616
+ const { spaceId, objectId } = parseId(id);
617
+ if (!spaceId || !objectId) {
618
+ return null;
619
+ }
620
+
621
+ const space = client.spaces.get(spaceId);
622
+ if (!space) {
623
+ return null;
624
+ }
625
+
626
+ if (!query) {
627
+ query = space.db.query(Filter.ids(objectId));
628
+ }
629
+
630
+ const object = get(rxFromQuery(query)).at(0);
631
+ if (!object) {
632
+ return null;
633
+ }
634
+
635
+ return createObjectNode({ object, space, resolve, disposition: 'hidden' });
636
+ });
637
+ },
638
+ }),
639
+
482
640
  // Create collection actions and action groups.
483
641
  createExtension({
484
642
  id: `${SPACE_PLUGIN}/object-actions`,
485
- actions: (node) =>
486
- Rx.make((get) =>
643
+ actions: (node) => {
644
+ let query: QueryResult<DataType.View> | undefined;
645
+ return Rx.make((get) =>
487
646
  pipe(
488
647
  get(node),
489
- Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),
490
- Option.flatMap((object) => {
648
+ Option.flatMap((node) => {
649
+ const space = getSpace(node.data);
650
+ return space && Obj.isObject(node.data) ? Option.some({ space, object: node.data }) : Option.none();
651
+ }),
652
+ Option.flatMap(({ space, object }) => {
653
+ const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
654
+ if (!query && isSchema) {
655
+ // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
656
+ query = space.db.query(Filter.type(DataType.View));
657
+ }
658
+
659
+ let deletable =
660
+ !isSchema &&
661
+ // Don't allow the Records smart collection to be deleted.
662
+ !(
663
+ Obj.instanceOf(DataType.QueryCollection, object) &&
664
+ typenameFromQuery(object.query) === DataType.StoredSchema.typename
665
+ );
666
+ if (isSchema && query) {
667
+ const views = get(rxFromQuery(query));
668
+ const filteredViews = get(
669
+ rxFromSignal(() => views.filter((view) => typenameFromQuery(view.query) === object.typename)),
670
+ );
671
+ deletable = filteredViews.length === 0;
672
+ }
673
+
491
674
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
492
675
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
493
676
  const [state] = get(context.capabilities(SpaceCapabilities.State));
@@ -501,6 +684,7 @@ export default (context: PluginContext) => {
501
684
  graph: appGraph.graph,
502
685
  dispatch: dispatcher.dispatchPromise,
503
686
  objectForms,
687
+ deletable,
504
688
  navigable: get(rxFromSignal(() => state.navigableCollections)),
505
689
  });
506
690
  }
@@ -508,6 +692,32 @@ export default (context: PluginContext) => {
508
692
  Option.map((params) => constructObjectActions(params)),
509
693
  Option.getOrElse(() => []),
510
694
  ),
695
+ );
696
+ },
697
+ }),
698
+
699
+ // View selected objects.
700
+ createExtension({
701
+ id: `${SPACE_PLUGIN}/selected-objects`,
702
+ connector: (node) =>
703
+ Rx.make((get) =>
704
+ pipe(
705
+ get(node),
706
+ Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
707
+ Option.map((node) => [
708
+ {
709
+ id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
710
+ type: PLANK_COMPANION_TYPE,
711
+ data: 'selected-objects',
712
+ properties: {
713
+ label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
714
+ icon: 'ph--tree-view--regular',
715
+ disposition: 'hidden',
716
+ },
717
+ },
718
+ ]),
719
+ Option.getOrElse(() => []),
720
+ ),
511
721
  ),
512
722
  }),
513
723
 
@@ -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) => {