@dxos/app-framework 0.8.4-main.72ec0f3 → 0.8.4-main.765dc60934

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 (583) hide show
  1. package/.storybook/main.mts +2 -4
  2. package/.storybook/preview.mts +2 -2
  3. package/LICENSE +102 -5
  4. package/README.md +1 -1
  5. package/dist/lib/browser/capability-HRFPP52W.mjs +35 -0
  6. package/dist/lib/browser/capability-HRFPP52W.mjs.map +7 -0
  7. package/dist/lib/browser/capability-VQ236TY5.mjs +38 -0
  8. package/dist/lib/browser/capability-VQ236TY5.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-23D4SJUE.mjs +42 -0
  10. package/dist/lib/browser/chunk-23D4SJUE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-3JWJXGLK.mjs +79 -0
  12. package/dist/lib/browser/chunk-3JWJXGLK.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-45CHLTBV.mjs +34 -0
  14. package/dist/lib/browser/chunk-45CHLTBV.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-66IXTIVK.mjs +48 -0
  16. package/dist/lib/browser/chunk-66IXTIVK.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-6GZYCP73.mjs +422 -0
  18. package/dist/lib/browser/chunk-6GZYCP73.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-7VZJR2OA.mjs +581 -0
  20. package/dist/lib/browser/chunk-7VZJR2OA.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-FJ4765WW.mjs +8 -0
  22. package/dist/lib/browser/chunk-FJ4765WW.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
  24. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-G6Q2M2M5.mjs +218 -0
  26. package/dist/lib/browser/chunk-G6Q2M2M5.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-J43JDWAV.mjs +1445 -0
  28. package/dist/lib/browser/chunk-J43JDWAV.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  30. package/dist/lib/browser/chunk-WBHCSOBW.mjs +80 -0
  31. package/dist/lib/browser/chunk-WBHCSOBW.mjs.map +7 -0
  32. package/dist/lib/browser/chunk-XLYULXAO.mjs +469 -0
  33. package/dist/lib/browser/chunk-XLYULXAO.mjs.map +7 -0
  34. package/dist/lib/browser/chunk-ZGJAZSNE.mjs +142 -0
  35. package/dist/lib/browser/chunk-ZGJAZSNE.mjs.map +7 -0
  36. package/dist/lib/browser/cli/index.mjs +76 -0
  37. package/dist/lib/browser/cli/index.mjs.map +7 -0
  38. package/dist/lib/browser/common/activation-events.mjs +24 -0
  39. package/dist/lib/browser/common/capabilities.mjs +46 -0
  40. package/dist/lib/browser/core/activation-event.mjs +20 -0
  41. package/dist/lib/browser/core/capability.mjs +30 -0
  42. package/dist/lib/browser/core/capability.mjs.map +7 -0
  43. package/dist/lib/browser/core/plugin-manager.mjs +19 -0
  44. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  45. package/dist/lib/browser/core/plugin.mjs +39 -0
  46. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  47. package/dist/lib/browser/core/url-loader.mjs +24 -0
  48. package/dist/lib/browser/core/url-loader.mjs.map +7 -0
  49. package/dist/lib/browser/index.mjs +109 -121
  50. package/dist/lib/browser/index.mjs.map +4 -4
  51. package/dist/lib/browser/invoker-capability-CEL2L6GX.mjs +44 -0
  52. package/dist/lib/browser/invoker-capability-CEL2L6GX.mjs.map +7 -0
  53. package/dist/lib/browser/meta.json +1 -1
  54. package/dist/lib/browser/testing/index.mjs +229 -40
  55. package/dist/lib/browser/testing/index.mjs.map +4 -4
  56. package/dist/lib/browser/testing/react.mjs +78 -0
  57. package/dist/lib/browser/testing/react.mjs.map +7 -0
  58. package/dist/lib/browser/ui/index.mjs +48 -0
  59. package/dist/lib/browser/ui/index.mjs.map +7 -0
  60. package/dist/lib/node-esm/capability-GS3XJH74.mjs +39 -0
  61. package/dist/lib/node-esm/capability-GS3XJH74.mjs.map +7 -0
  62. package/dist/lib/node-esm/capability-I5P7ACFL.mjs +36 -0
  63. package/dist/lib/node-esm/capability-I5P7ACFL.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs +10 -0
  65. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-4RJL37GN.mjs +423 -0
  67. package/dist/lib/node-esm/chunk-4RJL37GN.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-6XW6LET6.mjs +35 -0
  69. package/dist/lib/node-esm/chunk-6XW6LET6.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-D347W3KO.mjs +143 -0
  71. package/dist/lib/node-esm/chunk-D347W3KO.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-DW45NFLW.mjs +1446 -0
  73. package/dist/lib/node-esm/chunk-DW45NFLW.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-EI4LYXFY.mjs +470 -0
  75. package/dist/lib/node-esm/chunk-EI4LYXFY.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  77. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-KIFOQXD4.mjs +219 -0
  79. package/dist/lib/node-esm/chunk-KIFOQXD4.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs +43 -0
  81. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs +80 -0
  83. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs.map +7 -0
  84. package/dist/lib/node-esm/chunk-V24UWT36.mjs +582 -0
  85. package/dist/lib/node-esm/chunk-V24UWT36.mjs.map +7 -0
  86. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs +81 -0
  87. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
  89. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-XOCUANHO.mjs +49 -0
  91. package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +7 -0
  92. package/dist/lib/node-esm/cli/index.mjs +77 -0
  93. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  94. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  95. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  96. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  97. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  98. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  99. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  100. package/dist/lib/node-esm/core/capability.mjs +31 -0
  101. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  102. package/dist/lib/node-esm/core/plugin-manager.mjs +20 -0
  103. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  104. package/dist/lib/node-esm/core/plugin.mjs +40 -0
  105. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  106. package/dist/lib/node-esm/core/url-loader.mjs +25 -0
  107. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  108. package/dist/lib/node-esm/index.mjs +109 -121
  109. package/dist/lib/node-esm/index.mjs.map +4 -4
  110. package/dist/lib/node-esm/invoker-capability-QKUKN2MF.mjs +45 -0
  111. package/dist/lib/node-esm/invoker-capability-QKUKN2MF.mjs.map +7 -0
  112. package/dist/lib/node-esm/meta.json +1 -1
  113. package/dist/lib/node-esm/testing/index.mjs +229 -40
  114. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  115. package/dist/lib/node-esm/testing/react.mjs +79 -0
  116. package/dist/lib/node-esm/testing/react.mjs.map +7 -0
  117. package/dist/lib/node-esm/ui/index.mjs +49 -0
  118. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  119. package/dist/plugin/node-esm/index.mjs +893 -0
  120. package/dist/plugin/node-esm/index.mjs.map +7 -0
  121. package/dist/plugin/node-esm/meta.json +1 -0
  122. package/dist/types/src/cli/cli.d.ts +39 -0
  123. package/dist/types/src/cli/cli.d.ts.map +1 -0
  124. package/dist/types/src/cli/index.d.ts +2 -0
  125. package/dist/types/src/cli/index.d.ts.map +1 -0
  126. package/dist/types/src/common/activation-events.d.ts +27 -0
  127. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  128. package/dist/types/src/common/annotations.d.ts +1 -0
  129. package/dist/types/src/common/annotations.d.ts.map +1 -0
  130. package/dist/types/src/common/capabilities.d.ts +110 -194
  131. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  132. package/dist/types/src/common/index.d.ts +4 -8
  133. package/dist/types/src/common/index.d.ts.map +1 -1
  134. package/dist/types/src/common/operations.d.ts +19 -0
  135. package/dist/types/src/common/operations.d.ts.map +1 -0
  136. package/dist/types/src/common/translations.d.ts +7 -7
  137. package/dist/types/src/common/translations.d.ts.map +1 -1
  138. package/dist/types/src/context.d.ts +5 -0
  139. package/dist/types/src/context.d.ts.map +1 -0
  140. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +11 -11
  141. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  142. package/dist/types/src/core/capability-manager.d.ts +48 -0
  143. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  144. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  145. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  146. package/dist/types/src/core/capability.d.ts +156 -0
  147. package/dist/types/src/core/capability.d.ts.map +1 -0
  148. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
  149. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
  150. package/dist/types/src/core/index.d.ts +11 -4
  151. package/dist/types/src/core/index.d.ts.map +1 -1
  152. package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
  153. package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
  154. package/dist/types/src/core/plugin-manager.d.ts +298 -0
  155. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  156. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  157. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  158. package/dist/types/src/core/plugin-manifest.d.ts +101 -0
  159. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
  160. package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
  161. package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
  162. package/dist/types/src/core/plugin.d.ts +260 -39
  163. package/dist/types/src/core/plugin.d.ts.map +1 -1
  164. package/dist/types/src/core/registry.d.ts +107 -0
  165. package/dist/types/src/core/registry.d.ts.map +1 -0
  166. package/dist/types/src/core/url-loader.d.ts +127 -0
  167. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  168. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  169. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  170. package/dist/types/src/helpers.d.ts.map +1 -1
  171. package/dist/types/src/index.d.ts +3 -2
  172. package/dist/types/src/index.d.ts.map +1 -1
  173. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  174. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  175. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  176. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  177. package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
  178. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  179. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  180. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  181. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  182. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  183. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  184. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  185. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  186. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  187. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  188. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  189. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  190. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  191. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  192. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  193. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  194. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  195. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  196. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  197. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  198. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  199. package/dist/types/src/plugin-operation/testing.d.ts +59 -0
  200. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  201. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  202. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  203. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  204. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  205. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  206. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  207. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  208. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  209. package/dist/types/src/testing/harness.d.ts +67 -0
  210. package/dist/types/src/testing/harness.d.ts.map +1 -0
  211. package/dist/types/src/testing/index.d.ts +2 -0
  212. package/dist/types/src/testing/index.d.ts.map +1 -1
  213. package/dist/types/src/testing/react.d.ts +27 -0
  214. package/dist/types/src/testing/react.d.ts.map +1 -0
  215. package/dist/types/src/testing/react.test.d.ts +2 -0
  216. package/dist/types/src/testing/react.test.d.ts.map +1 -0
  217. package/dist/types/src/testing/service.d.ts +8 -0
  218. package/dist/types/src/testing/service.d.ts.map +1 -0
  219. package/dist/types/src/testing/withPluginManager.d.ts +4 -4
  220. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  221. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  222. package/dist/types/src/ui/components/App/App.d.ts +9 -0
  223. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  224. package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
  225. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  226. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  227. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  228. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +64 -0
  229. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +1 -0
  230. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +19 -0
  231. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +1 -0
  232. package/dist/types/src/ui/components/Placeholder/index.d.ts +2 -0
  233. package/dist/types/src/ui/components/Placeholder/index.d.ts.map +1 -0
  234. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/PluginManager/PluginManagerContext.stories.d.ts} +2 -3
  235. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  236. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +10 -0
  237. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  238. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  239. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  240. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +24 -0
  241. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  242. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  243. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  244. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts +11 -0
  245. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  246. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  247. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  248. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  249. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  250. package/dist/types/src/ui/components/Surface/index.d.ts +36 -0
  251. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  252. package/dist/types/src/ui/components/Surface/types.d.ts +197 -0
  253. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  254. package/dist/types/src/ui/components/Surface/types.test.d.ts +2 -0
  255. package/dist/types/src/ui/components/Surface/types.test.d.ts.map +1 -0
  256. package/dist/types/src/ui/components/index.d.ts +5 -0
  257. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  258. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  259. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  260. package/dist/types/src/ui/hooks/useApp.d.ts +89 -0
  261. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  262. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  263. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  264. package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
  265. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  266. package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +1 -2
  267. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  268. package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
  269. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  270. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  271. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  272. package/dist/types/src/ui/index.d.ts +3 -0
  273. package/dist/types/src/ui/index.d.ts.map +1 -0
  274. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +34 -0
  275. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -0
  276. package/dist/types/src/vite-plugin/boot-loader/index.d.ts +2 -0
  277. package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
  278. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +51 -0
  279. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -0
  280. package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
  281. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
  282. package/dist/types/src/vite-plugin/import-map/index.d.ts +28 -0
  283. package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -0
  284. package/dist/types/src/vite-plugin/index.d.ts +5 -0
  285. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  286. package/dist/types/src/vite-plugin/manifest.d.ts +41 -0
  287. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -0
  288. package/dist/types/src/vite-plugin/manifest.test.d.ts +2 -0
  289. package/dist/types/src/vite-plugin/manifest.test.d.ts.map +1 -0
  290. package/dist/types/src/vite-plugin/packages.d.ts +13 -0
  291. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  292. package/dist/types/tsconfig.tsbuildinfo +1 -1
  293. package/moon.yml +25 -6
  294. package/package.json +115 -59
  295. package/src/cli/cli.ts +107 -0
  296. package/src/{playground/debug → cli}/index.ts +1 -1
  297. package/src/common/activation-events.ts +44 -0
  298. package/src/{playground/logger/index.ts → common/annotations.ts} +0 -2
  299. package/src/common/capabilities.ts +169 -210
  300. package/src/common/index.ts +4 -8
  301. package/src/common/operations.ts +35 -0
  302. package/src/common/translations.ts +17 -9
  303. package/src/context.ts +9 -0
  304. package/src/core/{events.ts → activation-event.ts} +10 -7
  305. package/src/core/capability-manager.test.ts +151 -0
  306. package/src/core/capability-manager.ts +192 -0
  307. package/src/core/capability.ts +247 -0
  308. package/src/core/edge-registry-plugin-provider.ts +92 -0
  309. package/src/core/index.ts +11 -4
  310. package/src/core/plugin-asset-cache.ts +60 -0
  311. package/src/core/plugin-manager.test.ts +1899 -0
  312. package/src/core/plugin-manager.ts +1685 -0
  313. package/src/core/plugin-manifest.test.ts +75 -0
  314. package/src/core/plugin-manifest.ts +134 -0
  315. package/src/core/plugin.ts +395 -45
  316. package/src/core/registry.ts +163 -0
  317. package/src/core/url-loader.test.ts +221 -0
  318. package/src/core/url-loader.ts +388 -0
  319. package/src/index.ts +3 -2
  320. package/src/plugin-operation/OperationPlugin.ts +24 -0
  321. package/src/plugin-operation/history/capability.ts +36 -0
  322. package/src/plugin-operation/history/errors.ts +7 -0
  323. package/src/plugin-operation/history/history-tracker.test.ts +374 -0
  324. package/src/plugin-operation/history/history-tracker.ts +128 -0
  325. package/src/plugin-operation/history/index.ts +9 -0
  326. package/src/plugin-operation/history/types.ts +17 -0
  327. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  328. package/src/plugin-operation/history/undo-registry.test.ts +72 -0
  329. package/src/plugin-operation/history/undo-registry.ts +54 -0
  330. package/src/plugin-operation/index.ts +6 -0
  331. package/src/plugin-operation/invoker-capability.ts +55 -0
  332. package/src/plugin-operation/meta.ts +12 -0
  333. package/src/plugin-operation/testing.ts +155 -0
  334. package/src/plugin-runtime/RuntimePlugin.ts +19 -0
  335. package/src/plugin-runtime/capability.ts +53 -0
  336. package/src/plugin-runtime/index.ts +5 -0
  337. package/src/plugin-runtime/meta.ts +12 -0
  338. package/src/testing/harness.ts +229 -0
  339. package/src/testing/index.ts +2 -0
  340. package/src/testing/react.test.tsx +48 -0
  341. package/src/testing/react.tsx +113 -0
  342. package/src/testing/service.ts +52 -0
  343. package/src/testing/withPluginManager.stories.tsx +8 -9
  344. package/src/testing/withPluginManager.tsx +61 -38
  345. package/src/ui/components/App/App.stories.tsx +88 -0
  346. package/src/ui/components/App/App.tsx +81 -0
  347. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  348. package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
  349. package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
  350. package/src/ui/components/Placeholder/index.ts +5 -0
  351. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +185 -0
  352. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
  353. package/src/ui/components/PluginManager/index.ts +5 -0
  354. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
  355. package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
  356. package/src/ui/components/Surface/SurfaceInfo.tsx +106 -0
  357. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  358. package/src/ui/components/Surface/context.ts +12 -0
  359. package/src/ui/components/Surface/index.ts +54 -0
  360. package/src/ui/components/Surface/types.test.ts +126 -0
  361. package/src/ui/components/Surface/types.ts +269 -0
  362. package/src/ui/components/index.ts +8 -0
  363. package/src/ui/hooks/index.ts +9 -0
  364. package/src/ui/hooks/useApp.test.tsx +159 -0
  365. package/src/ui/hooks/useApp.tsx +424 -0
  366. package/src/ui/hooks/useCapabilities.ts +67 -0
  367. package/src/{react → ui/hooks}/useLoading.tsx +16 -10
  368. package/src/ui/hooks/useSettingsState.ts +26 -0
  369. package/src/ui/hooks/useSurface.ts +13 -0
  370. package/src/ui/index.ts +6 -0
  371. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +270 -0
  372. package/src/vite-plugin/boot-loader/boot-loader.css +321 -0
  373. package/src/vite-plugin/boot-loader/boot-loader.js +325 -0
  374. package/src/vite-plugin/boot-loader/index.ts +5 -0
  375. package/src/vite-plugin/boot-loader/loader.ts +123 -0
  376. package/src/vite-plugin/composer/index.ts +306 -0
  377. package/src/vite-plugin/import-map/index.ts +527 -0
  378. package/src/vite-plugin/index.ts +10 -0
  379. package/src/vite-plugin/manifest.test.ts +46 -0
  380. package/src/vite-plugin/manifest.ts +57 -0
  381. package/src/vite-plugin/packages.ts +187 -0
  382. package/tsconfig.json +21 -21
  383. package/tsconfig.node.json +2 -4
  384. package/typedoc.json +2 -4
  385. package/vitest.config.ts +1 -1
  386. package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
  387. package/.swc/plugins/linux_x86_64_19.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429.wasmer-v7 +0 -0
  388. package/dist/lib/browser/app-graph-builder-OIEZZC45.mjs +0 -138
  389. package/dist/lib/browser/app-graph-builder-OIEZZC45.mjs.map +0 -7
  390. package/dist/lib/browser/chunk-SCPE4ZO2.mjs +0 -35
  391. package/dist/lib/browser/chunk-SCPE4ZO2.mjs.map +0 -7
  392. package/dist/lib/browser/chunk-VFUKEZIN.mjs +0 -483
  393. package/dist/lib/browser/chunk-VFUKEZIN.mjs.map +0 -7
  394. package/dist/lib/browser/chunk-WPW5VVAX.mjs +0 -1651
  395. package/dist/lib/browser/chunk-WPW5VVAX.mjs.map +0 -7
  396. package/dist/lib/browser/intent-dispatcher-LZ4AE66E.mjs +0 -11
  397. package/dist/lib/browser/intent-resolver-QVCKRX6G.mjs +0 -39
  398. package/dist/lib/browser/intent-resolver-QVCKRX6G.mjs.map +0 -7
  399. package/dist/lib/browser/react/index.mjs +0 -34
  400. package/dist/lib/browser/store-CNPHOYTJ.mjs +0 -30
  401. package/dist/lib/browser/store-CNPHOYTJ.mjs.map +0 -7
  402. package/dist/lib/node-esm/app-graph-builder-EBU4NVWD.mjs +0 -139
  403. package/dist/lib/node-esm/app-graph-builder-EBU4NVWD.mjs.map +0 -7
  404. package/dist/lib/node-esm/chunk-IJOHO66N.mjs +0 -484
  405. package/dist/lib/node-esm/chunk-IJOHO66N.mjs.map +0 -7
  406. package/dist/lib/node-esm/chunk-XJZGUJ3H.mjs +0 -1653
  407. package/dist/lib/node-esm/chunk-XJZGUJ3H.mjs.map +0 -7
  408. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs +0 -37
  409. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs.map +0 -7
  410. package/dist/lib/node-esm/intent-dispatcher-MGOJ3CHD.mjs +0 -12
  411. package/dist/lib/node-esm/intent-resolver-URF3HN3G.mjs +0 -40
  412. package/dist/lib/node-esm/intent-resolver-URF3HN3G.mjs.map +0 -7
  413. package/dist/lib/node-esm/react/index.mjs +0 -35
  414. package/dist/lib/node-esm/store-RK5B4XEL.mjs +0 -31
  415. package/dist/lib/node-esm/store-RK5B4XEL.mjs.map +0 -7
  416. package/dist/types/src/common/collaboration.d.ts +0 -20
  417. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  418. package/dist/types/src/common/events.d.ts +0 -52
  419. package/dist/types/src/common/events.d.ts.map +0 -1
  420. package/dist/types/src/common/file.d.ts +0 -14
  421. package/dist/types/src/common/file.d.ts.map +0 -1
  422. package/dist/types/src/common/graph.d.ts +0 -21
  423. package/dist/types/src/common/graph.d.ts.map +0 -1
  424. package/dist/types/src/common/layout.d.ts +0 -279
  425. package/dist/types/src/common/layout.d.ts.map +0 -1
  426. package/dist/types/src/common/surface.d.ts +0 -68
  427. package/dist/types/src/common/surface.d.ts.map +0 -1
  428. package/dist/types/src/core/capabilities.d.ts +0 -117
  429. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  430. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  431. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  432. package/dist/types/src/core/events.d.ts.map +0 -1
  433. package/dist/types/src/core/manager.d.ts +0 -126
  434. package/dist/types/src/core/manager.d.ts.map +0 -1
  435. package/dist/types/src/core/manager.test.d.ts +0 -2
  436. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  437. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  438. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  439. package/dist/types/src/playground/debug/index.d.ts +0 -2
  440. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  441. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  442. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  443. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  444. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  445. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  446. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  447. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  448. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  449. package/dist/types/src/playground/generator/index.d.ts +0 -3
  450. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  451. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  452. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  453. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  454. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  455. package/dist/types/src/playground/layout/index.d.ts +0 -2
  456. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  457. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  458. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  459. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  460. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  461. package/dist/types/src/playground/logger/index.d.ts +0 -2
  462. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  463. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  464. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  465. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  466. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  467. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  468. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  469. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  470. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  471. package/dist/types/src/plugin-intent/actions.d.ts +0 -36
  472. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  473. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  474. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  475. package/dist/types/src/plugin-intent/index.d.ts +0 -6
  476. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  477. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  478. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  479. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  480. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  481. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  482. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  483. package/dist/types/src/plugin-intent/meta.d.ts +0 -3
  484. package/dist/types/src/plugin-intent/meta.d.ts.map +0 -1
  485. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  486. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  487. package/dist/types/src/plugin-settings/actions.d.ts +0 -25
  488. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  489. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  490. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  491. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  492. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  493. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  494. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  495. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  496. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  497. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  498. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  499. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  500. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  501. package/dist/types/src/react/App.d.ts +0 -10
  502. package/dist/types/src/react/App.d.ts.map +0 -1
  503. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  504. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  505. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  506. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  507. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  508. package/dist/types/src/react/IntentContext.d.ts +0 -8
  509. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  510. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  511. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  512. package/dist/types/src/react/Surface.d.ts +0 -12
  513. package/dist/types/src/react/Surface.d.ts.map +0 -1
  514. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  515. package/dist/types/src/react/common.d.ts +0 -13
  516. package/dist/types/src/react/common.d.ts.map +0 -1
  517. package/dist/types/src/react/index.d.ts +0 -9
  518. package/dist/types/src/react/index.d.ts.map +0 -1
  519. package/dist/types/src/react/types.d.ts +0 -14
  520. package/dist/types/src/react/types.d.ts.map +0 -1
  521. package/dist/types/src/react/useApp.d.ts +0 -44
  522. package/dist/types/src/react/useApp.d.ts.map +0 -1
  523. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  524. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  525. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  526. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  527. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  528. package/src/common/collaboration.ts +0 -18
  529. package/src/common/events.ts +0 -79
  530. package/src/common/file.ts +0 -22
  531. package/src/common/graph.ts +0 -30
  532. package/src/common/layout.ts +0 -277
  533. package/src/common/surface.ts +0 -88
  534. package/src/core/capabilities.test.ts +0 -136
  535. package/src/core/capabilities.ts +0 -263
  536. package/src/core/manager.test.ts +0 -516
  537. package/src/core/manager.ts +0 -604
  538. package/src/playground/debug/Debug.tsx +0 -39
  539. package/src/playground/debug/plugin.ts +0 -16
  540. package/src/playground/generator/Main.tsx +0 -70
  541. package/src/playground/generator/Toolbar.tsx +0 -47
  542. package/src/playground/generator/generator.ts +0 -48
  543. package/src/playground/generator/index.ts +0 -6
  544. package/src/playground/generator/plugin.ts +0 -22
  545. package/src/playground/layout/Layout.tsx +0 -33
  546. package/src/playground/layout/plugin.ts +0 -18
  547. package/src/playground/logger/Toolbar.tsx +0 -30
  548. package/src/playground/logger/plugin.ts +0 -41
  549. package/src/playground/logger/schema.ts +0 -12
  550. package/src/playground/playground.stories.tsx +0 -46
  551. package/src/plugin-intent/IntentPlugin.ts +0 -20
  552. package/src/plugin-intent/actions.ts +0 -31
  553. package/src/plugin-intent/errors.ts +0 -40
  554. package/src/plugin-intent/index.ts +0 -9
  555. package/src/plugin-intent/intent-dispatcher.test.ts +0 -286
  556. package/src/plugin-intent/intent-dispatcher.ts +0 -342
  557. package/src/plugin-intent/intent.ts +0 -154
  558. package/src/plugin-intent/meta.ts +0 -10
  559. package/src/plugin-settings/SettingsPlugin.ts +0 -34
  560. package/src/plugin-settings/actions.ts +0 -25
  561. package/src/plugin-settings/app-graph-builder.ts +0 -160
  562. package/src/plugin-settings/index.ts +0 -6
  563. package/src/plugin-settings/intent-resolver.ts +0 -35
  564. package/src/plugin-settings/meta.ts +0 -10
  565. package/src/plugin-settings/store.ts +0 -33
  566. package/src/plugin-settings/translations.ts +0 -19
  567. package/src/react/App.stories.tsx +0 -33
  568. package/src/react/App.tsx +0 -59
  569. package/src/react/DefaultFallback.tsx +0 -26
  570. package/src/react/ErrorBoundary.tsx +0 -56
  571. package/src/react/IntentContext.tsx +0 -35
  572. package/src/react/Surface.stories.tsx +0 -125
  573. package/src/react/Surface.tsx +0 -109
  574. package/src/react/common.ts +0 -13
  575. package/src/react/index.ts +0 -14
  576. package/src/react/types.ts +0 -37
  577. package/src/react/useApp.tsx +0 -165
  578. package/src/react/useCapabilities.ts +0 -31
  579. package/src/react/useIntentResolver.ts +0 -22
  580. /package/dist/lib/browser/{intent-dispatcher-LZ4AE66E.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  581. /package/dist/lib/browser/{react/index.mjs.map → common/activation-events.mjs.map} +0 -0
  582. /package/dist/lib/{node-esm/intent-dispatcher-MGOJ3CHD.mjs.map → browser/common/capabilities.mjs.map} +0 -0
  583. /package/dist/lib/{node-esm/react/index.mjs.map → browser/core/activation-event.mjs.map} +0 -0
@@ -1,35 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Context, type Provider, createContext, useContext, useEffect } from 'react';
6
-
7
- import { raise } from '@dxos/debug';
8
- import { pick } from '@dxos/util';
9
-
10
- import { Capabilities } from '../common';
11
- import { type AnyIntentResolver, type IntentContext } from '../plugin-intent';
12
-
13
- import { usePluginManager } from './PluginManagerProvider';
14
-
15
- const IntentContext: Context<IntentContext | undefined> = createContext<IntentContext | undefined>(undefined);
16
-
17
- export const useIntentDispatcher = (): Pick<IntentContext, 'dispatch' | 'dispatchPromise'> => {
18
- const context = useContext(IntentContext) ?? raise(new Error('IntentContext not found'));
19
- return pick(context, ['dispatch', 'dispatchPromise']);
20
- };
21
-
22
- export const useIntentResolver = (module: string, resolver: AnyIntentResolver) => {
23
- const manager = usePluginManager();
24
- useEffect(() => {
25
- manager.context.contributeCapability({
26
- module,
27
- interface: Capabilities.IntentResolver,
28
- implementation: resolver,
29
- });
30
-
31
- return () => manager.context.removeCapability(Capabilities.IntentResolver, resolver);
32
- }, [module, resolver]);
33
- };
34
-
35
- export const IntentProvider: Provider<IntentContext | undefined> = IntentContext.Provider;
@@ -1,125 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useCallback, useEffect, useState } from 'react';
7
-
8
- import { faker } from '@dxos/random';
9
- import { List, ListItem, Toolbar } from '@dxos/react-ui';
10
- import { withTheme } from '@dxos/react-ui/testing';
11
- import { getHashStyles, mx } from '@dxos/react-ui-theme';
12
-
13
- import { Capabilities, createSurface } from '../common';
14
- import { withPluginManager } from '../testing';
15
-
16
- import { usePluginManager } from './PluginManagerProvider';
17
- import { Surface, useSurfaces } from './Surface';
18
-
19
- const DefaultStory = () => {
20
- const [selected, setSelected] = useState<string | undefined>();
21
- const manager = usePluginManager();
22
- const surfaces = useSurfaces();
23
-
24
- const handleAdd = useCallback(() => {
25
- const id = `test-${faker.number.int({ min: 0, max: 1_000 })}`;
26
- const styles = getHashStyles(id);
27
-
28
- manager.context.contributeCapability({
29
- module: 'test',
30
- interface: Capabilities.ReactSurface,
31
- implementation: createSurface({
32
- id,
33
- role: 'item',
34
- filter: (data): data is any => (data as any)?.id === id,
35
- component: () => (
36
- <div className={mx('flex justify-center items-center border rounded', styles.surface, styles.border)}>
37
- <span className={mx('dx-tag font-mono text-lg', styles.text)}>{id}</span>
38
- </div>
39
- ),
40
- }),
41
- });
42
-
43
- setSelected(id);
44
- }, [manager]);
45
-
46
- const handleSelect = useCallback(() => {
47
- setSelected(faker.helpers.arrayElement(surfaces)?.id);
48
- }, [surfaces]);
49
-
50
- const handleError = useCallback(() => {
51
- manager.context.contributeCapability({
52
- module: 'error',
53
- interface: Capabilities.ReactSurface,
54
- implementation: createSurface({
55
- id: 'error',
56
- role: 'item',
57
- filter: (data): data is any => (data as any)?.id === 'error',
58
- component: () => {
59
- const [count, setCount] = useState(3);
60
- useEffect(() => {
61
- const interval = setInterval(() => {
62
- setCount((count) => {
63
- if (count <= 1) {
64
- clearInterval(interval);
65
- }
66
-
67
- return count - 1;
68
- });
69
- }, 1_000);
70
- return () => clearInterval(interval);
71
- }, []);
72
-
73
- if (count <= 0) {
74
- throw new Error('BANG!');
75
- }
76
-
77
- return (
78
- <div className='flex justify-center items-center border border-roseFill rounded'>
79
- <span className='font-mono'>Ticking... {count}</span>
80
- </div>
81
- );
82
- },
83
- }),
84
- });
85
-
86
- setSelected('error');
87
- }, [manager]);
88
-
89
- return (
90
- <div className='flex flex-col bs-full overflow-hidden'>
91
- <Toolbar.Root>
92
- <Toolbar.Button onClick={handleAdd}>Add</Toolbar.Button>
93
- <Toolbar.Button onClick={handleSelect}>Pick</Toolbar.Button>
94
- <Toolbar.Button onClick={handleError}>Error</Toolbar.Button>
95
- </Toolbar.Root>
96
- <div className='grid grid-cols-2 bs-full gap-4 overflow-hidden'>
97
- <Surface role='item' data={selected ? { id: selected } : undefined} limit={1} />
98
- <div className='overflow-y-auto bs-full'>
99
- <List>
100
- {surfaces.map((surface) => (
101
- <ListItem.Root key={surface.id} id={surface.id}>
102
- <ListItem.Heading classNames='flex items-center'>{surface.id}</ListItem.Heading>
103
- </ListItem.Root>
104
- ))}
105
- </List>
106
- </div>
107
- </div>
108
- </div>
109
- );
110
- };
111
-
112
- const meta = {
113
- title: 'sdk/app-framework/Surface',
114
- render: DefaultStory,
115
- decorators: [withTheme, withPluginManager({ capabilities: [] })],
116
- parameters: {
117
- layout: 'fullscreen',
118
- },
119
- } satisfies Meta<typeof DefaultStory>;
120
-
121
- export default meta;
122
-
123
- type Story = StoryObj<typeof meta>;
124
-
125
- export const Default: Story = {};
@@ -1,109 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React, {
6
- Fragment,
7
- type NamedExoticComponent,
8
- type RefAttributes,
9
- Suspense,
10
- forwardRef,
11
- memo,
12
- useMemo,
13
- } from 'react';
14
-
15
- import { useDefaultValue } from '@dxos/react-hooks';
16
- import { byPosition } from '@dxos/util';
17
-
18
- import { Capabilities, type SurfaceDefinition, type SurfaceProps } from '../common';
19
- import { type PluginContext } from '../core';
20
-
21
- import { ErrorBoundary } from './ErrorBoundary';
22
- import { useCapabilities } from './useCapabilities';
23
-
24
- const DEFAULT_PLACEHOLDER = <Fragment />;
25
-
26
- /**
27
- * A surface is a named region of the screen that can be populated by plugins.
28
- */
29
- export const Surface: NamedExoticComponent<SurfaceProps & RefAttributes<HTMLElement>> = memo(
30
- forwardRef(
31
- (
32
- { id: _id, role, data: dataParam, limit, fallback = DefaultFallback, placeholder = DEFAULT_PLACEHOLDER, ...rest },
33
- forwardedRef,
34
- ) => {
35
- // TODO(wittjosiah): This will make all surfaces depend on a single signal.
36
- // This isn't ideal because it means that any change to the data will cause all surfaces to re-render.
37
- // This effectively means that plugin modules which contribute surfaces need to all be activated at startup.
38
- // This should be fine for now because it's how it worked prior to capabilities api anyway.
39
- // In the future, it would be nice to be able to bucket the surface contributions by role.
40
- const surfaces = useSurfaces();
41
- const data = useDefaultValue(dataParam, () => ({}));
42
-
43
- // NOTE: Memoizing the candidates makes the surface not re-render based on reactivity within data.
44
- const definitions = findCandidates(surfaces, { role, data });
45
- const candidates = limit ? definitions.slice(0, limit) : definitions;
46
- const nodes = candidates.map(({ id, component: Component }) => (
47
- <Component ref={forwardedRef} key={id} id={id} role={role} data={data} limit={limit} {...rest} />
48
- ));
49
-
50
- // TODO(burdon): Able to inject DOM properties into root (e.g., object.id).
51
- const suspense = <Suspense fallback={placeholder}>{nodes}</Suspense>;
52
-
53
- return (
54
- <ErrorBoundary data={data} fallback={fallback}>
55
- {suspense}
56
- </ErrorBoundary>
57
- );
58
- },
59
- ),
60
- );
61
-
62
- // TODO(burdon): Make user facing, with telemetry.
63
- // TODO(burdon): Change based on dev/prod mode; infer subject type, id.
64
- const DefaultFallback = ({ data, error, dev }: { data: any; error: Error; dev?: boolean }) => {
65
- if (dev) {
66
- return (
67
- <div className='flex flex-col gap-4 p-4 is-full overflow-y-auto'>
68
- <h1 className='flex gap-2 text-sm mbs-2'>{error.message}</h1>
69
- <pre className='overflow-auto text-xs text-description'>{JSON.stringify(data, null, 2)}</pre>
70
- </div>
71
- );
72
- }
73
-
74
- return (
75
- <div className='flex flex-col gap-4 p-4 is-full overflow-y-auto border border-roseFill'>
76
- <h1 className='flex gap-2 text-sm mbs-2 text-rose-500'>{error.message}</h1>
77
- <pre className='overflow-auto text-xs text-description'>{error.stack}</pre>
78
- <pre className='overflow-auto text-xs text-description'>{JSON.stringify(data, null, 2)}</pre>
79
- </div>
80
- );
81
- };
82
-
83
- /**
84
- * @internal
85
- */
86
- export const useSurfaces = () => {
87
- const surfaces = useCapabilities(Capabilities.ReactSurface);
88
- return useMemo(() => surfaces.flat(), [surfaces]);
89
- };
90
-
91
- /**
92
- * @returns `true` if there is a contributed surface which matches the specified role & data, `false` otherwise.
93
- */
94
- export const isSurfaceAvailable = (context: PluginContext, { role, data }: Pick<SurfaceProps, 'role' | 'data'>) => {
95
- const surfaces = context.getCapabilities(Capabilities.ReactSurface);
96
- const candidates = findCandidates(surfaces.flat(), { role, data });
97
- return candidates.length > 0;
98
- };
99
-
100
- const findCandidates = (surfaces: SurfaceDefinition[], { role, data }: Pick<SurfaceProps, 'role' | 'data'>) => {
101
- return Object.values(surfaces)
102
- .filter((definition) =>
103
- Array.isArray(definition.role) ? definition.role.includes(role) : definition.role === role,
104
- )
105
- .filter(({ filter }) => (filter ? filter(data ?? {}) : true))
106
- .toSorted(byPosition);
107
- };
108
-
109
- Surface.displayName = 'Surface';
@@ -1,13 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capabilities } from '../common';
6
-
7
- import { useCapability } from './useCapabilities';
8
-
9
- export const useIntentDispatcher = () => useCapability(Capabilities.IntentDispatcher);
10
-
11
- export const useAppGraph = () => useCapability(Capabilities.AppGraph);
12
-
13
- export const useLayout = () => useCapability(Capabilities.Layout);
@@ -1,14 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './common';
6
- export * from './types';
7
-
8
- export * from './ErrorBoundary';
9
- export * from './PluginManagerProvider';
10
- export * from './Surface';
11
-
12
- export * from './useApp';
13
- export * from './useCapabilities';
14
- export * from './useIntentResolver';
@@ -1,37 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import * as Schema from 'effect/Schema';
6
-
7
- import { type Obj } from '@dxos/echo';
8
-
9
- export const SurfaceCardRole = Schema.Literal(
10
- 'card',
11
- 'card--popover',
12
- 'card--intrinsic',
13
- 'card--extrinsic',
14
- 'card--transclusion',
15
- );
16
-
17
- export type SurfaceCardRole = Schema.Schema.Type<typeof SurfaceCardRole>;
18
-
19
- // TODO(burdon): Define all roles.
20
- export type SurfaceRole =
21
- | 'item'
22
- | 'article'
23
- | 'complementary' // (for companion?)
24
- | 'section'
25
- | SurfaceCardRole;
26
-
27
- /**
28
- * Base type for surface components.
29
- */
30
- // TODO(burdon): Standardize PluginSettings and ObjectProperties.
31
- // TODO(burdon): Include attendableId?
32
- export type SurfaceComponentProps<Subject extends Obj.Any = Obj.Any, Props = {}, Role extends string = string> = {
33
- role?: Role;
34
-
35
- /** The object being displayed. */
36
- subject: Subject;
37
- } & Props;
@@ -1,165 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { RegistryContext } from '@effect-atom/atom-react';
6
- import { effect } from '@preact/signals-core';
7
- import React, { type FC, useCallback, useEffect, useMemo } from 'react';
8
-
9
- import { invariant } from '@dxos/invariant';
10
- import { live } from '@dxos/live-object';
11
- import { useAsyncEffect, useDefaultValue } from '@dxos/react-hooks';
12
-
13
- import { Capabilities, Events } from '../common';
14
- import { type Plugin, PluginManager, type PluginManagerOptions } from '../core';
15
-
16
- import { App } from './App';
17
- import { DefaultFallback } from './DefaultFallback';
18
- import { ErrorBoundary } from './ErrorBoundary';
19
- import { PluginManagerProvider } from './PluginManagerProvider';
20
-
21
- const ENABLED_KEY = 'dxos.org/app-framework/enabled';
22
-
23
- export type UseAppOptions = {
24
- pluginManager?: PluginManager;
25
- pluginLoader?: PluginManagerOptions['pluginLoader'];
26
- plugins?: Plugin[];
27
- core?: string[];
28
- defaults?: string[];
29
- placeholder?: FC<{ stage: number }>;
30
- fallback?: ErrorBoundary['props']['fallback'];
31
- cacheEnabled?: boolean;
32
- safeMode?: boolean;
33
- debounce?: number;
34
- };
35
-
36
- /**
37
- * Expected usage is for this to be the entrypoint of the application.
38
- * Initializes plugins and renders the root components.
39
- *
40
- * @example
41
- * const plugins = [LayoutPlugin(), MyPlugin()];
42
- * const core = [LayoutPluginId];
43
- * const default = [MyPluginId];
44
- * const fallback = <div>Initializing Plugins...</div>;
45
- * const App = useApp({ plugins, core, default, fallback });
46
- * createRoot(document.getElementById('root')!).render(
47
- * <StrictMode>
48
- * <App />
49
- * </StrictMode>,
50
- * );
51
- *
52
- * @param params.pluginLoader A function which loads new plugins.
53
- * @param params.plugins All plugins available to the application.
54
- * @param params.core Core plugins which will always be enabled.
55
- * @param params.defaults Default plugins are enabled by default but can be disabled by the user.
56
- * @param params.placeholder Placeholder component to render during startup.
57
- * @param params.fallback Fallback component to render if an error occurs during startup.
58
- * @param params.cacheEnabled Whether to cache enabled plugins in localStorage.
59
- * @param params.safeMode Whether to enable safe mode, which disables optional plugins.
60
- */
61
- export const useApp = ({
62
- pluginManager,
63
- pluginLoader: pluginLoaderParam,
64
- plugins: pluginsParam,
65
- core: coreParam,
66
- defaults: defaultsParam,
67
- placeholder,
68
- fallback = DefaultFallback,
69
- cacheEnabled = false,
70
- safeMode = false,
71
- debounce = 0,
72
- }: UseAppOptions) => {
73
- const plugins = useDefaultValue(pluginsParam, () => []);
74
- const core = useDefaultValue(coreParam, () => plugins.map(({ meta }) => meta.id));
75
- const defaults = useDefaultValue(defaultsParam, () => []);
76
-
77
- // TODO(wittjosiah): Provide a custom plugin loader which supports loading via url.
78
- const pluginLoader = useMemo(
79
- () =>
80
- pluginLoaderParam ??
81
- ((id: string) => {
82
- const plugin = plugins.find((plugin) => plugin.meta.id === id);
83
- invariant(plugin, `Plugin not found: ${id}`);
84
- return plugin;
85
- }),
86
- [pluginLoaderParam, plugins],
87
- );
88
-
89
- const state = useMemo(() => live({ ready: false, error: null }), []);
90
- const cached: string[] = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? '[]'), []);
91
- const enabled = useMemo(
92
- () => (safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults),
93
- [safeMode, cacheEnabled, cached, defaults],
94
- );
95
- const manager = useMemo(
96
- () => pluginManager ?? new PluginManager({ pluginLoader, plugins, core, enabled }),
97
- [pluginManager, pluginLoader, plugins, core, enabled],
98
- );
99
-
100
- useEffect(() => {
101
- return manager.activation.on(({ event, state: _state, error }) => {
102
- // Once the app is ready the first time, don't show the fallback again.
103
- if (!state.ready && event === Events.Startup.id) {
104
- state.ready = _state === 'activated';
105
- }
106
-
107
- if (error && !state.ready && !state.error) {
108
- state.error = error;
109
- }
110
- });
111
- }, [manager, state]);
112
-
113
- useEffect(() => {
114
- effect(() => {
115
- cacheEnabled && localStorage.setItem(ENABLED_KEY, JSON.stringify(manager.enabled));
116
- });
117
- }, [cacheEnabled, manager]);
118
-
119
- useEffect(() => {
120
- setupDevtools(manager);
121
- }, [manager]);
122
-
123
- useAsyncEffect(async () => {
124
- manager.context.contributeCapability({
125
- interface: Capabilities.PluginManager,
126
- implementation: manager,
127
- module: 'dxos.org/app-framework/plugin-manager',
128
- });
129
-
130
- manager.context.contributeCapability({
131
- interface: Capabilities.AtomRegistry,
132
- implementation: manager.registry,
133
- module: 'dxos.org/app-framework/atom-registry',
134
- });
135
-
136
- await Promise.all([
137
- // TODO(wittjosiah): Factor out such that this could be called per surface role when attempting to render.
138
- manager.activate(Events.SetupReactSurface),
139
- manager.activate(Events.Startup),
140
- ]);
141
-
142
- return () => {
143
- manager.context.removeCapability(Capabilities.PluginManager, manager);
144
- manager.context.removeCapability(Capabilities.AtomRegistry, manager.registry);
145
- };
146
- }, [manager]);
147
-
148
- return useCallback(
149
- () => (
150
- <ErrorBoundary fallback={fallback}>
151
- <PluginManagerProvider value={manager}>
152
- <RegistryContext.Provider value={manager.registry}>
153
- <App placeholder={placeholder} state={state} debounce={debounce} />
154
- </RegistryContext.Provider>
155
- </PluginManagerProvider>
156
- </ErrorBoundary>
157
- ),
158
- [fallback, manager, placeholder, state],
159
- );
160
- };
161
-
162
- const setupDevtools = (manager: PluginManager) => {
163
- (globalThis as any).composer ??= {};
164
- (globalThis as any).composer.manager = manager;
165
- };
@@ -1,31 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { useAtomValue } from '@effect-atom/atom-react';
6
-
7
- import { invariant } from '@dxos/invariant';
8
-
9
- import { type InterfaceDef } from '../core';
10
-
11
- import { usePluginManager } from './PluginManagerProvider';
12
-
13
- /**
14
- * Hook to request capabilities from the plugin context.
15
- * @returns An array of capabilities.
16
- */
17
- export const useCapabilities = <T>(interfaceDef: InterfaceDef<T>) => {
18
- const manager = usePluginManager();
19
- return useAtomValue(manager.context.capabilities(interfaceDef));
20
- };
21
-
22
- /**
23
- * Hook to request a capability from the plugin context.
24
- * @returns The capability.
25
- * @throws If no capability is found.
26
- */
27
- export const useCapability = <T>(interfaceDef: InterfaceDef<T>) => {
28
- const capabilities = useCapabilities(interfaceDef);
29
- invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`);
30
- return capabilities[0];
31
- };
@@ -1,22 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { useEffect } from 'react';
6
-
7
- import { Capabilities } from '../common';
8
- import { type AnyIntentResolver } from '../plugin-intent';
9
- import { usePluginManager } from '../react';
10
-
11
- export const useIntentResolver = (module: string, resolver: AnyIntentResolver) => {
12
- const manager = usePluginManager();
13
- useEffect(() => {
14
- manager.context.contributeCapability({
15
- module,
16
- interface: Capabilities.IntentResolver,
17
- implementation: resolver,
18
- });
19
-
20
- return () => manager.context.removeCapability(Capabilities.IntentResolver, resolver);
21
- }, [module, resolver]);
22
- };