@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.a4bbb77

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 (263) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionMain-AX7KKXWP.mjs} +4 -4
  2. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +7 -0
  3. package/dist/lib/browser/{ObjectDetailsPanel-YPTDQKMG.mjs → ObjectDetailsPanel-ETI5YBTH.mjs} +10 -8
  4. package/dist/lib/browser/ObjectDetailsPanel-ETI5YBTH.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-V3MP3CDK.mjs → app-graph-builder-W7RVDAUA.mjs} +80 -43
  8. package/dist/lib/browser/app-graph-builder-W7RVDAUA.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-VLHVTDX4.mjs} +14 -14
  10. package/dist/lib/browser/app-graph-serializer-VLHVTDX4.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-2BFVC5K6.mjs} +139 -150
  12. package/dist/lib/browser/chunk-2BFVC5K6.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-E2I747A7.mjs +20 -0
  14. package/dist/lib/browser/chunk-E2I747A7.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-EIXZABXD.mjs +19 -0
  16. package/dist/lib/browser/chunk-EIXZABXD.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-ELJDGQTO.mjs} +3 -3
  18. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs.map → chunk-ELJDGQTO.mjs.map} +3 -3
  19. package/dist/lib/browser/chunk-IRKDREHY.mjs +11 -0
  20. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-SGTQ52SU.mjs → chunk-JCHSUOPF.mjs} +14 -8
  22. package/dist/lib/browser/chunk-JCHSUOPF.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-PN27K4I7.mjs} +93 -41
  24. package/dist/lib/browser/chunk-PN27K4I7.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-ZIZ2JLW6.mjs} +10 -9
  26. package/dist/lib/browser/chunk-ZIZ2JLW6.mjs.map +7 -0
  27. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-PW2BA46S.mjs} +4 -4
  28. package/dist/lib/browser/{identity-created-23XJJV2N.mjs.map → identity-created-PW2BA46S.mjs.map} +3 -3
  29. package/dist/lib/browser/index.mjs +19 -39
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-HA7DPAUE.mjs} +46 -41
  32. package/dist/lib/browser/intent-resolver-HA7DPAUE.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-root-CMWOGJG5.mjs → react-root-YQUJU64P.mjs} +11 -11
  35. package/dist/lib/browser/react-root-YQUJU64P.mjs.map +7 -0
  36. package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-HTXYMRSW.mjs} +50 -40
  37. package/dist/lib/browser/react-surface-HTXYMRSW.mjs.map +7 -0
  38. package/dist/lib/browser/{schema-defs-Z6FC4AHC.mjs → schema-defs-R56ZDBZ7.mjs} +5 -5
  39. package/dist/lib/browser/schema-defs-R56ZDBZ7.mjs.map +7 -0
  40. package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-5XPQMSPO.mjs} +5 -5
  41. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-5XPQMSPO.mjs.map} +1 -1
  42. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YY77ANIF.mjs} +17 -15
  43. package/dist/lib/browser/spaces-ready-YY77ANIF.mjs.map +7 -0
  44. package/dist/lib/browser/{state-QYZAB45H.mjs → state-Y4RVCG4A.mjs} +7 -7
  45. package/dist/lib/browser/state-Y4RVCG4A.mjs.map +7 -0
  46. package/dist/lib/browser/types/index.mjs +2 -2
  47. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionMain-EU57SRYK.mjs} +4 -4
  48. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +7 -0
  49. package/dist/lib/node-esm/{ObjectDetailsPanel-QKZEDSZK.mjs → ObjectDetailsPanel-TQ5GN4QJ.mjs} +10 -8
  50. package/dist/lib/node-esm/ObjectDetailsPanel-TQ5GN4QJ.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-SG4VECBB.mjs → app-graph-builder-5ZJJUMQI.mjs} +80 -43
  54. package/dist/lib/node-esm/app-graph-builder-5ZJJUMQI.mjs.map +7 -0
  55. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-EZJSGJUT.mjs} +14 -14
  56. package/dist/lib/node-esm/app-graph-serializer-EZJSGJUT.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-5XRYHWL7.mjs} +10 -9
  58. package/dist/lib/node-esm/chunk-5XRYHWL7.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-JH6F4C3I.mjs → chunk-6WNZW6KT.mjs} +14 -8
  60. package/dist/lib/node-esm/chunk-6WNZW6KT.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-BLPXWPLB.mjs} +139 -150
  62. package/dist/lib/node-esm/chunk-BLPXWPLB.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-IJVBBVCL.mjs +21 -0
  64. package/dist/lib/node-esm/chunk-IJVBBVCL.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-HWNG4MEU.mjs → chunk-MWNATOXL.mjs} +2 -4
  66. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-Q6AAQLQG.mjs} +3 -3
  68. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs.map → chunk-Q6AAQLQG.mjs.map} +3 -3
  69. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +20 -0
  70. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-XDQXUZMK.mjs} +93 -41
  72. package/dist/lib/node-esm/chunk-XDQXUZMK.mjs.map +7 -0
  73. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-MWTLGQRU.mjs} +4 -4
  74. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs.map → identity-created-MWTLGQRU.mjs.map} +3 -3
  75. package/dist/lib/node-esm/index.mjs +19 -39
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-LQNHMPIX.mjs} +46 -41
  78. package/dist/lib/node-esm/intent-resolver-LQNHMPIX.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-UTLJEIKE.mjs} +11 -11
  81. package/dist/lib/node-esm/react-root-UTLJEIKE.mjs.map +7 -0
  82. package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-LYDYON3U.mjs} +50 -40
  83. package/dist/lib/node-esm/react-surface-LYDYON3U.mjs.map +7 -0
  84. package/dist/lib/node-esm/{schema-defs-WHJM7UZE.mjs → schema-defs-7IMJPIWS.mjs} +5 -5
  85. package/dist/lib/node-esm/schema-defs-7IMJPIWS.mjs.map +7 -0
  86. package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-XBSK5KHH.mjs} +5 -5
  87. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-XBSK5KHH.mjs.map} +1 -1
  88. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-YX4IHT4P.mjs} +17 -15
  89. package/dist/lib/node-esm/spaces-ready-YX4IHT4P.mjs.map +7 -0
  90. package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-HOHAVPUO.mjs} +7 -7
  91. package/dist/lib/node-esm/state-HOHAVPUO.mjs.map +7 -0
  92. package/dist/lib/node-esm/types/index.mjs +2 -2
  93. package/dist/types/src/SpacePlugin.d.ts +1 -1
  94. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  96. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  98. package/dist/types/src/capabilities/capabilities.d.ts +3 -3
  99. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  101. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/index.d.ts +11 -12
  103. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  105. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  107. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  109. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  111. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/settings.d.ts +1 -1
  113. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  114. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/state.d.ts +1 -1
  116. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1584 -4
  120. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -3
  122. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  124. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  126. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  127. package/dist/types/src/components/MembersContainer.d.ts +3 -2
  128. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/MembersContainer.stories.d.ts +1584 -5
  130. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  135. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  136. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
  137. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  138. package/dist/types/src/components/RecordMain.d.ts +7 -0
  139. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  140. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  141. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  142. package/dist/types/src/components/SpacePresence.stories.d.ts +1412 -4
  143. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1417 -4
  146. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  148. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1418 -5
  149. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/ViewEditor.d.ts +1 -1
  151. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  152. package/dist/types/src/components/index.d.ts +8 -2
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/events.d.ts.map +1 -1
  155. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  156. package/dist/types/src/meta.d.ts +0 -1
  157. package/dist/types/src/meta.d.ts.map +1 -1
  158. package/dist/types/src/translations.d.ts +1216 -26
  159. package/dist/types/src/translations.d.ts.map +1 -1
  160. package/dist/types/src/types/types.d.ts +73 -93
  161. package/dist/types/src/types/types.d.ts.map +1 -1
  162. package/dist/types/src/util.d.ts +8 -6
  163. package/dist/types/src/util.d.ts.map +1 -1
  164. package/dist/types/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +63 -62
  166. package/src/SpacePlugin.ts +203 -218
  167. package/src/capabilities/app-graph-builder.ts +100 -53
  168. package/src/capabilities/app-graph-serializer.ts +7 -7
  169. package/src/capabilities/capabilities.ts +11 -10
  170. package/src/capabilities/identity-created.ts +1 -1
  171. package/src/capabilities/index.ts +0 -1
  172. package/src/capabilities/intent-resolver.ts +36 -24
  173. package/src/capabilities/react-root.tsx +4 -3
  174. package/src/capabilities/react-surface.tsx +45 -36
  175. package/src/capabilities/schema-defs.ts +3 -2
  176. package/src/capabilities/spaces-ready.ts +10 -7
  177. package/src/capabilities/state.ts +5 -4
  178. package/src/components/AwaitingObject.tsx +3 -3
  179. package/src/components/CollectionMain.tsx +2 -2
  180. package/src/components/CollectionSection.tsx +2 -2
  181. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -10
  182. package/src/components/CreateDialog/CreateObjectDialog.tsx +21 -11
  183. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  184. package/src/components/CreateDialog/CreateSpaceDialog.tsx +4 -4
  185. package/src/components/JoinDialog.tsx +7 -7
  186. package/src/components/MembersContainer.stories.tsx +36 -10
  187. package/src/components/MembersContainer.tsx +12 -13
  188. package/src/components/MenuFooter.tsx +2 -2
  189. package/src/components/ObjectDetailsPanel.tsx +6 -4
  190. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -2
  191. package/src/components/ObjectSettings/ForeignKeys.tsx +2 -2
  192. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +3 -2
  193. package/src/components/PersistenceStatus.tsx +2 -2
  194. package/src/components/PopoverRenameObject.tsx +9 -15
  195. package/src/components/PopoverRenameSpace.tsx +4 -4
  196. package/src/components/RecordMain.tsx +43 -0
  197. package/src/components/SchemaContainer.tsx +4 -4
  198. package/src/components/SpacePluginSettings.tsx +8 -9
  199. package/src/components/SpacePresence.stories.tsx +23 -22
  200. package/src/components/SpacePresence.tsx +9 -9
  201. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  202. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +17 -17
  203. package/src/components/SyncStatus/InlineSyncStatus.tsx +2 -2
  204. package/src/components/SyncStatus/SyncStatus.stories.tsx +6 -7
  205. package/src/components/SyncStatus/SyncStatus.tsx +4 -3
  206. package/src/components/ViewEditor.tsx +13 -18
  207. package/src/components/index.ts +1 -0
  208. package/src/events.ts +7 -7
  209. package/src/hooks/useActiveSpace.ts +2 -2
  210. package/src/hooks/useInputSurfaceLookup.tsx +1 -1
  211. package/src/meta.ts +1 -3
  212. package/src/translations.ts +8 -7
  213. package/src/types/types.ts +15 -10
  214. package/src/util.tsx +86 -37
  215. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  216. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  217. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  218. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  220. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  221. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  222. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  225. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  229. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  230. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  231. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  232. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  233. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  234. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  235. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  236. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  237. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  238. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  239. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  240. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  241. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  243. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  244. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  245. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  246. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  247. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  248. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  250. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  251. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  252. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  253. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  254. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  255. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  256. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  257. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  258. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  259. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  260. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  261. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  262. package/src/capabilities/schema-tool.test.ts +0 -44
  263. package/src/capabilities/schema-tools.ts +0 -125
@@ -7,9 +7,9 @@ import React, { useCallback, useMemo } from 'react';
7
7
 
8
8
  import {
9
9
  Capabilities,
10
+ Surface,
10
11
  contributes,
11
12
  createSurface,
12
- Surface,
13
13
  useCapabilities,
14
14
  useCapability,
15
15
  useLayout,
@@ -20,14 +20,14 @@ import { SettingsStore } from '@dxos/local-storage';
20
20
  import { ClientCapabilities } from '@dxos/plugin-client';
21
21
  import { useClient } from '@dxos/react-client';
22
22
  import {
23
+ type Space,
24
+ SpaceState,
23
25
  fullyQualifiedId,
24
26
  getSpace,
25
27
  isLiveObject,
26
28
  isSpace,
27
29
  parseId,
28
- SpaceState,
29
30
  useSpace,
30
- type Space,
31
31
  } from '@dxos/react-client/echo';
32
32
  import { Input, useTranslation } from '@dxos/react-ui';
33
33
  import { type InputProps, SelectInput } from '@dxos/react-ui-form';
@@ -35,13 +35,13 @@ import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
35
35
  import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
36
36
  import { type JoinPanelProps } from '@dxos/shell/react';
37
37
 
38
- import { SpaceCapabilities } from './capabilities';
39
38
  import {
40
- CollectionMain,
41
- CollectionSection,
42
39
  CREATE_OBJECT_DIALOG,
43
40
  CREATE_SPACE_DIALOG,
41
+ CollectionMain,
42
+ CollectionSection,
44
43
  CreateObjectDialog,
44
+ type CreateObjectDialogProps,
45
45
  CreateSpaceDialog,
46
46
  InlineSyncStatus,
47
47
  JOIN_DIALOG,
@@ -54,6 +54,7 @@ import {
54
54
  POPOVER_RENAME_SPACE,
55
55
  PopoverRenameObject,
56
56
  PopoverRenameSpace,
57
+ RecordMain,
57
58
  SchemaContainer,
58
59
  SmallPresenceLive,
59
60
  SpacePluginSettings,
@@ -61,21 +62,22 @@ import {
61
62
  SpaceSettingsContainer,
62
63
  SyncStatus,
63
64
  ViewEditor,
64
- type CreateObjectDialogProps,
65
65
  } from '../components';
66
- import { SPACE_PLUGIN } from '../meta';
66
+ import { meta } from '../meta';
67
67
  import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
68
68
 
69
+ import { SpaceCapabilities } from './capabilities';
70
+
69
71
  type ReactSurfaceOptions = {
70
72
  createInvitationUrl: (invitationCode: string) => string;
71
73
  };
72
74
 
73
- const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
75
+ const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
74
76
 
75
77
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
76
78
  contributes(Capabilities.ReactSurface, [
77
79
  createSurface({
78
- id: `${SPACE_PLUGIN}/article`,
80
+ id: `${meta.id}/article`,
79
81
  role: 'article',
80
82
  filter: (data): data is { subject: Space } =>
81
83
  // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
@@ -92,29 +94,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
92
94
  ),
93
95
  }),
94
96
  createSurface({
95
- id: `${SPACE_PLUGIN}/collection-fallback`,
97
+ id: `${meta.id}/record-article`,
98
+ role: 'article',
99
+ position: 'fallback',
100
+ filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
101
+ component: ({ data }) => <RecordMain record={data.subject} />,
102
+ }),
103
+ createSurface({
104
+ id: `${meta.id}/collection-fallback`,
96
105
  role: 'article',
97
106
  position: 'fallback',
98
107
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
99
108
  component: ({ data }) => <CollectionMain collection={data.subject} />,
100
109
  }),
101
110
  createSurface({
102
- id: `${SPACE_PLUGIN}/plugin-settings`,
111
+ id: `${meta.id}/plugin-settings`,
103
112
  role: 'article',
104
113
  filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
105
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
114
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
106
115
  component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
107
116
  }),
108
117
  createSurface({
109
- id: `${SPACE_PLUGIN}/companion/object-settings`,
118
+ id: `${meta.id}/companion/object-settings`,
110
119
  role: 'article',
111
120
  filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
112
121
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
113
122
  }),
114
123
  createSurface({
115
- id: `${SPACE_PLUGIN}/space-settings-properties`,
124
+ id: `${meta.id}/space-settings-properties`,
116
125
  role: 'article',
117
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
126
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
118
127
  component: () => {
119
128
  const layout = useLayout();
120
129
  const { spaceId } = parseId(layout.workspace);
@@ -127,10 +136,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
127
136
  },
128
137
  }),
129
138
  createSurface({
130
- id: `${SPACE_PLUGIN}/space-settings-members`,
139
+ id: `${meta.id}/space-settings-members`,
131
140
  role: 'article',
132
141
  position: 'hoist',
133
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
142
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
134
143
  component: () => {
135
144
  const layout = useLayout();
136
145
  const { spaceId } = parseId(layout.workspace);
@@ -143,9 +152,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
143
152
  },
144
153
  }),
145
154
  createSurface({
146
- id: `${SPACE_PLUGIN}/space-settings-schema`,
155
+ id: `${meta.id}/space-settings-schema`,
147
156
  role: 'article',
148
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
157
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
149
158
  component: () => {
150
159
  const layout = useLayout();
151
160
  const { spaceId } = parseId(layout.workspace);
@@ -158,7 +167,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
158
167
  },
159
168
  }),
160
169
  createSurface({
161
- id: `${SPACE_PLUGIN}/selected-objects`,
170
+ id: `${meta.id}/selected-objects`,
162
171
  role: 'article',
163
172
  filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
164
173
  Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
@@ -189,45 +198,45 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
189
198
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
190
199
  }),
191
200
  createSurface({
192
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
201
+ id: `${meta.id}/create-initial-space-form-[hue]`,
193
202
  role: 'form-input',
194
203
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
195
204
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
196
205
  return !!annotation;
197
206
  },
198
207
  component: ({ data: _, ...inputProps }) => {
199
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
208
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
200
209
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
201
210
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
202
211
  return (
203
212
  <Input.Root>
204
213
  <Input.Label>{label}</Input.Label>
205
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
214
+ <HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
206
215
  </Input.Root>
207
216
  );
208
217
  },
209
218
  }),
210
219
  createSurface({
211
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
220
+ id: `${meta.id}/create-initial-space-form-[icon]`,
212
221
  role: 'form-input',
213
222
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
214
223
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
215
224
  return !!annotation;
216
225
  },
217
226
  component: ({ data: _, ...inputProps }) => {
218
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
227
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
219
228
  const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
220
229
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
221
230
  return (
222
231
  <Input.Root>
223
232
  <Input.Label>{label}</Input.Label>
224
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
233
+ <IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
225
234
  </Input.Root>
226
235
  );
227
236
  },
228
237
  }),
229
238
  createSurface({
230
- id: `${SPACE_PLUGIN}/typename-form-input`,
239
+ id: `${meta.id}/typename-form-input`,
231
240
  role: 'form-input',
232
241
  filter: (
233
242
  data,
@@ -311,7 +320,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
311
320
  },
312
321
  }),
313
322
  createSurface({
314
- id: `${SPACE_PLUGIN}/object-settings`,
323
+ id: `${meta.id}/object-settings`,
315
324
  role: 'object-settings',
316
325
  filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
317
326
  component: ({ data }) => <ViewEditor view={data.subject} />,
@@ -330,13 +339,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
330
339
  component: ({ data }) => <PopoverRenameObject object={data.props} />,
331
340
  }),
332
341
  createSurface({
333
- id: `${SPACE_PLUGIN}/menu-footer`,
342
+ id: `${meta.id}/menu-footer`,
334
343
  role: 'menu-footer',
335
344
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
336
345
  component: ({ data }) => <MenuFooter object={data.subject} />,
337
346
  }),
338
347
  createSurface({
339
- id: `${SPACE_PLUGIN}/navtree-presence`,
348
+ id: `${meta.id}/navtree-presence`,
340
349
  role: 'navtree-item-end',
341
350
  filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
342
351
  typeof data.id === 'string' && Obj.isObject(data.subject),
@@ -348,7 +357,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
348
357
  }),
349
358
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
350
359
  createSurface({
351
- id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
360
+ id: `${meta.id}/navtree-presence-fallback`,
352
361
  role: 'navtree-item-end',
353
362
  position: 'fallback',
354
363
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
@@ -356,13 +365,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
356
365
  }),
357
366
  // TODO(wittjosiah): Broken?
358
367
  createSurface({
359
- id: `${SPACE_PLUGIN}/navtree-sync-status`,
368
+ id: `${meta.id}/navtree-sync-status`,
360
369
  role: 'navtree-item-end',
361
370
  filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
362
371
  component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
363
372
  }),
364
373
  createSurface({
365
- id: `${SPACE_PLUGIN}/navbar-presence`,
374
+ id: `${meta.id}/navbar-presence`,
366
375
  role: 'navbar-end',
367
376
  position: 'hoist',
368
377
  filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
@@ -378,13 +387,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
378
387
  },
379
388
  }),
380
389
  createSurface({
381
- id: `${SPACE_PLUGIN}/collection-section`,
390
+ id: `${meta.id}/collection-section`,
382
391
  role: 'section',
383
392
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
384
393
  component: ({ data }) => <CollectionSection collection={data.subject} />,
385
394
  }),
386
395
  createSurface({
387
- id: `${SPACE_PLUGIN}/status`,
396
+ id: `${meta.id}/status`,
388
397
  role: 'status',
389
398
  component: () => <SyncStatus />,
390
399
  }),
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
- import { SpaceCapabilities } from './capabilities';
9
8
  import { type ObjectForm } from '../types';
10
9
 
10
+ import { SpaceCapabilities } from './capabilities';
11
+
11
12
  export default (context: PluginContext) => {
12
13
  const registry = context.getCapability(Capabilities.RxRegistry);
13
14
  const client = context.getCapability(ClientCapabilities.Client);
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { Option } from 'effect';
6
6
 
7
- import { contributes, createIntent, Capabilities, LayoutAction, type PluginContext } from '@dxos/app-framework';
7
+ import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
8
8
  import { SubscriptionList } from '@dxos/async';
9
9
  import { Filter, Obj, Type } from '@dxos/echo';
10
10
  import { scheduledEffect } from '@dxos/echo-signals/core';
@@ -14,13 +14,14 @@ import { ClientCapabilities } from '@dxos/plugin-client';
14
14
  import { DeckCapabilities } from '@dxos/plugin-deck';
15
15
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
16
16
  import { PublicKey } from '@dxos/react-client';
17
- import { FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
17
+ import { FQ_ID_LENGTH, SpaceState, parseFullyQualifiedId } from '@dxos/react-client/echo';
18
18
  import { ComplexMap, reduceGroupBy } from '@dxos/util';
19
19
 
20
- import { SpaceCapabilities } from './capabilities';
21
20
  import { SpaceAction } from '../types';
22
21
  import { COMPOSER_SPACE_LOCK, SHARED } from '../util';
23
22
 
23
+ import { SpaceCapabilities } from './capabilities';
24
+
24
25
  const ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;
25
26
  const WAIT_FOR_OBJECT_TIMEOUT = 5_000;
26
27
 
@@ -66,12 +67,14 @@ export default async (context: PluginContext) => {
66
67
  return;
67
68
  }
68
69
 
69
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
70
- if (!node && active[0].length === FQ_ID_LENGTH) {
70
+ const id = active[0];
71
+ const node = graph.getNode(id).pipe(Option.getOrNull);
72
+ if (!node && id.length === FQ_ID_LENGTH) {
73
+ void graph.initialize(id);
71
74
  const timeout = setTimeout(async () => {
72
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
75
+ const node = graph.getNode(id).pipe(Option.getOrNull);
73
76
  if (!node) {
74
- await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));
77
+ await dispatch(createIntent(SpaceAction.WaitForObject, { id }));
75
78
  }
76
79
  }, WAIT_FOR_OBJECT_TIMEOUT);
77
80
 
@@ -4,17 +4,18 @@
4
4
 
5
5
  import { effect } from '@preact/signals-core';
6
6
 
7
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
7
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
8
8
  import { PublicKey } from '@dxos/keys';
9
9
  import { LocalStorageStore } from '@dxos/local-storage';
10
10
  import { ComplexMap } from '@dxos/util';
11
11
 
12
- import { SpaceCapabilities } from './capabilities';
13
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
14
13
  import { type PluginState } from '../types';
15
14
 
15
+ import { SpaceCapabilities } from './capabilities';
16
+
16
17
  export default (context: PluginContext) => {
17
- const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {
18
+ const state = new LocalStorageStore<PluginState>(meta.id, {
18
19
  awaiting: undefined,
19
20
  spaceNames: {},
20
21
  viewersByObject: {},
@@ -4,12 +4,12 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent, useIntentDispatcher, useLayout } from '@dxos/app-framework';
8
8
  import { useClient } from '@dxos/react-client';
9
9
  import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
10
10
  import { Button, Icon, Toast, useTranslation } from '@dxos/react-ui';
11
11
 
12
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
13
13
  import { SpaceAction } from '../types';
14
14
 
15
15
  const WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes
@@ -19,7 +19,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
19
19
  const [open, setOpen] = useState(true);
20
20
  const [waiting, setWaiting] = useState(true);
21
21
  const [found, setFound] = useState(false);
22
- const { t } = useTranslation(SPACE_PLUGIN);
22
+ const { t } = useTranslation(meta.id);
23
23
  const { dispatchPromise: dispatch } = useIntentDispatcher();
24
24
  const layout = useLayout();
25
25
 
@@ -8,10 +8,10 @@ import { useTranslation } from '@dxos/react-ui';
8
8
  import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
9
9
  import { type DataType } from '@dxos/schema';
10
10
 
11
- import { SPACE_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
 
13
13
  export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
- const { t } = useTranslation(SPACE_PLUGIN);
14
+ const { t } = useTranslation(meta.id);
15
15
 
16
16
  return (
17
17
  <div
@@ -7,10 +7,10 @@ import React from 'react';
7
7
  import { useTranslation } from '@dxos/react-ui';
8
8
  import { type DataType } from '@dxos/schema';
9
9
 
10
- import { SPACE_PLUGIN } from '../meta';
10
+ import { meta } from '../meta';
11
11
 
12
12
  export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
- const { t } = useTranslation(SPACE_PLUGIN);
13
+ const { t } = useTranslation(meta.id);
14
14
  // TODO(wittjosiah): Better placeholder.
15
15
  return (
16
16
  <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
@@ -2,47 +2,48 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useEffect } from 'react';
9
7
 
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { Filter, Obj, Type } from '@dxos/echo';
11
11
  import { useQuery, useSpace } from '@dxos/react-client/echo';
12
12
  import { withClientProvider } from '@dxos/react-client/testing';
13
13
  import { Dialog } from '@dxos/react-ui';
14
+ import { withTheme } from '@dxos/react-ui/testing';
14
15
  import { DataType } from '@dxos/schema';
15
16
  import { translations as shellTranslations } from '@dxos/shell/react';
16
- import { withLayout, withTheme } from '@dxos/storybook-utils';
17
17
 
18
- import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
19
18
  import { translations } from '../../translations';
20
19
 
21
- const Story = (args: CreateObjectDialogProps) => {
20
+ import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
21
+
22
+ const Story = (props: CreateObjectDialogProps) => {
22
23
  return (
23
24
  <Dialog.Root open>
24
25
  <Dialog.Overlay blockAlign='start'>
25
- <CreateObjectDialog {...args} />
26
+ <CreateObjectDialog {...props} />
26
27
  </Dialog.Overlay>
27
28
  </Dialog.Root>
28
29
  );
29
30
  };
30
31
 
31
32
  // TODO(wittjosiah): Story should be for CreateObjectPanel.
32
- const meta: Meta<typeof CreateObjectDialog> = {
33
+ const meta = {
33
34
  title: 'plugins/plugin-space/CreateObjectDialog',
34
35
  component: CreateObjectDialog,
35
36
  render: Story,
36
37
  decorators: [
38
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
+ withPluginManager({ plugins: [IntentPlugin()] }),
37
40
  withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
38
- withTheme,
39
- withLayout(),
40
41
  ],
41
42
  parameters: {
42
43
  translations: [...translations, ...shellTranslations],
43
44
  },
44
45
  args: {},
45
- };
46
+ } satisfies Meta<typeof CreateObjectDialog>;
46
47
 
47
48
  export default meta;
48
49
 
@@ -17,20 +17,24 @@ import {
17
17
  import { Obj, Query, Type } from '@dxos/echo';
18
18
  import { invariant } from '@dxos/invariant';
19
19
  import { useClient } from '@dxos/react-client';
20
- import { getSpace, isLiveObject, isSpace, type Space, useQuery, useSpaces } from '@dxos/react-client/echo';
20
+ import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
21
21
  import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
22
22
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
23
- import { DataType } from '@dxos/schema';
23
+ import { DataType, typenameFromQuery } from '@dxos/schema';
24
24
  import { isNonNullable } from '@dxos/util';
25
25
 
26
- import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
27
26
  import { SpaceCapabilities } from '../../capabilities';
28
- import { SPACE_PLUGIN } from '../../meta';
27
+ import { meta } from '../../meta';
29
28
  import { SpaceAction } from '../../types';
30
29
 
31
- export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
30
+ import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
31
+
32
+ export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
32
33
 
33
- export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
34
+ export type CreateObjectDialogProps = Pick<
35
+ CreateObjectPanelProps,
36
+ 'target' | 'views' | 'typename' | 'initialFormValues'
37
+ > & {
34
38
  onCreateObject?: (object: Obj.Any) => void;
35
39
  shouldNavigate?: (object: Obj.Any) => boolean;
36
40
  };
@@ -38,13 +42,14 @@ export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 't
38
42
  export const CreateObjectDialog = ({
39
43
  target: initialTarget,
40
44
  typename: initialTypename,
41
- name,
45
+ views,
46
+ initialFormValues,
42
47
  onCreateObject,
43
48
  shouldNavigate: _shouldNavigate,
44
49
  }: CreateObjectDialogProps) => {
45
50
  const closeRef = useRef<HTMLButtonElement | null>(null);
46
51
  const manager = usePluginManager();
47
- const { t } = useTranslation(SPACE_PLUGIN);
52
+ const { t } = useTranslation(meta.id);
48
53
  const client = useClient();
49
54
  const spaces = useSpaces();
50
55
  const { dispatch } = useIntentDispatcher();
@@ -53,7 +58,9 @@ export const CreateObjectDialog = ({
53
58
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
54
59
  const space = isSpace(target) ? target : getSpace(target);
55
60
  const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
56
- const hiddenTypenames = queryCollections.map((collection) => collection.query.typename).filter(isNonNullable);
61
+ const hiddenTypenames = queryCollections
62
+ .map((collection) => typenameFromQuery(collection.query))
63
+ .filter(isNonNullable);
57
64
 
58
65
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
59
66
  (typename) =>
@@ -98,7 +105,9 @@ export const CreateObjectDialog = ({
98
105
  <Dialog.Content classNames={cardDialogContent}>
99
106
  <div role='none' className={cardDialogHeader}>
100
107
  <Dialog.Title>
101
- {t('create object dialog title', { object: t('typename label', { ns: typename, defaultValue: 'Item' }) })}
108
+ {t('create object dialog title', {
109
+ object: t('typename label', { ns: typename, defaultValue: views ? 'View' : 'Item' }),
110
+ })}
102
111
  </Dialog.Title>
103
112
  <Dialog.Close asChild>
104
113
  <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
@@ -111,8 +120,9 @@ export const CreateObjectDialog = ({
111
120
  forms={forms}
112
121
  spaces={spaces}
113
122
  target={target}
123
+ views={views}
114
124
  typename={typename}
115
- name={name}
125
+ initialFormValues={initialFormValues}
116
126
  defaultSpaceId={client.spaces.default.id}
117
127
  resolve={resolve}
118
128
  onTargetChange={setTarget}
@@ -2,20 +2,21 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { Option } from 'effect';
5
6
  import React, { useCallback } from 'react';
6
7
 
7
8
  import { Type } from '@dxos/echo';
8
- import { getTypeAnnotation, type TypeAnnotation } from '@dxos/echo-schema';
9
- import { type SpaceId, type Space } from '@dxos/react-client/echo';
10
- import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
9
+ import { type BaseObject, type TypeAnnotation, ViewAnnotation, getTypeAnnotation } from '@dxos/echo-schema';
10
+ import { type Space, type SpaceId } from '@dxos/react-client/echo';
11
+ import { Icon, toLocalizedString, useDefaultValue, useTranslation } from '@dxos/react-ui';
11
12
  import { Form } from '@dxos/react-ui-form';
12
13
  import { SearchList } from '@dxos/react-ui-searchlist';
13
14
  import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
14
15
  import { type DataType } from '@dxos/schema';
15
- import { isNonNullable, type MaybePromise } from '@dxos/util';
16
+ import { type MaybePromise, isNonNullable } from '@dxos/util';
16
17
 
17
18
  import { useInputSurfaceLookup } from '../../hooks';
18
- import { SPACE_PLUGIN } from '../../meta';
19
+ import { meta } from '../../meta';
19
20
  import { type ObjectForm } from '../../types';
20
21
  import { getSpaceDisplayName } from '../../util';
21
22
 
@@ -24,7 +25,8 @@ export type CreateObjectPanelProps = {
24
25
  spaces: Space[];
25
26
  typename?: string;
26
27
  target?: Space | DataType.Collection;
27
- name?: string;
28
+ views?: boolean;
29
+ initialFormValues?: Partial<BaseObject>;
28
30
  defaultSpaceId?: SpaceId;
29
31
  resolve?: (typename: string) => Record<string, any>;
30
32
  onTargetChange?: (target: Space) => void;
@@ -37,16 +39,25 @@ export const CreateObjectPanel = ({
37
39
  spaces,
38
40
  typename,
39
41
  target,
40
- name: initialName,
42
+ views,
43
+ initialFormValues: _initialFormValues,
41
44
  defaultSpaceId,
42
45
  resolve,
43
46
  onTargetChange,
44
47
  onTypenameChange,
45
48
  onCreateObject,
46
49
  }: CreateObjectPanelProps) => {
47
- const { t } = useTranslation(SPACE_PLUGIN);
50
+ const { t } = useTranslation(meta.id);
51
+ const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
48
52
  const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
49
53
  const options: TypeAnnotation[] = forms
54
+ .filter((form) => {
55
+ if (views == null) {
56
+ return true;
57
+ } else {
58
+ return views === ViewAnnotation.get(form.objectSchema).pipe(Option.getOrElse(() => false));
59
+ }
60
+ })
50
61
  .map((form) => getTypeAnnotation(form.objectSchema))
51
62
  .filter(isNonNullable)
52
63
  .sort((a, b) => {
@@ -88,7 +99,7 @@ export const CreateObjectPanel = ({
88
99
  <div role='none' className={cardDialogOverflow}>
89
100
  <Form
90
101
  autoFocus
91
- values={{ name: initialName }}
102
+ values={initialFormValues}
92
103
  schema={form.formSchema}
93
104
  testId='create-object-form'
94
105
  onSave={handleCreateObject}
@@ -104,7 +115,7 @@ const SelectSpace = ({
104
115
  defaultSpaceId,
105
116
  onChange,
106
117
  }: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
107
- const { t } = useTranslation(SPACE_PLUGIN);
118
+ const { t } = useTranslation(meta.id);
108
119
 
109
120
  return (
110
121
  <SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
@@ -145,7 +156,7 @@ const SelectSchema = ({
145
156
  options: TypeAnnotation[];
146
157
  onChange: (type: string) => void;
147
158
  } & Pick<CreateObjectPanelProps, 'resolve'>) => {
148
- const { t } = useTranslation(SPACE_PLUGIN);
159
+ const { t } = useTranslation(meta.id);
149
160
 
150
161
  return (
151
162
  <SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>