@dxos/app-framework 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (421) hide show
  1. package/.storybook/main.mts +1 -3
  2. package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-4NSF2SOO.mjs} +16 -11
  3. package/dist/lib/browser/capability-4NSF2SOO.mjs.map +7 -0
  4. package/dist/lib/browser/capability-EB3UKSKA.mjs +35 -0
  5. package/dist/lib/browser/capability-EB3UKSKA.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-27FZETIA.mjs} +324 -181
  7. package/dist/lib/browser/chunk-27FZETIA.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-CV7I2AAB.mjs +80 -0
  9. package/dist/lib/browser/chunk-CV7I2AAB.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-FL2XTEJH.mjs} +3 -4
  11. package/dist/lib/browser/chunk-FL2XTEJH.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-H7OMDDGW.mjs +42 -0
  13. package/dist/lib/browser/chunk-H7OMDDGW.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-HDQXX5DC.mjs +157 -0
  15. package/dist/lib/browser/chunk-HDQXX5DC.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  17. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-KNBRTZVK.mjs +892 -0
  19. package/dist/lib/browser/chunk-KNBRTZVK.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-NO7R7QHA.mjs} +4 -7
  21. package/dist/lib/browser/chunk-NO7R7QHA.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-P2E7VMRF.mjs} +10 -7
  23. package/dist/lib/browser/chunk-P2E7VMRF.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-QSXYHXCE.mjs} +3 -2
  25. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  27. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  28. package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
  29. package/dist/lib/browser/cli/index.mjs +90 -0
  30. package/dist/lib/browser/cli/index.mjs.map +7 -0
  31. package/dist/lib/browser/common/activation-events.mjs +24 -0
  32. package/dist/lib/browser/common/capabilities.mjs +46 -0
  33. package/dist/lib/browser/core/activation-event.mjs +1 -1
  34. package/dist/lib/browser/core/capability.mjs +1 -1
  35. package/dist/lib/browser/core/plugin-manager.mjs +4 -4
  36. package/dist/lib/browser/core/plugin.mjs +6 -4
  37. package/dist/lib/browser/core/url-loader.mjs +12 -0
  38. package/dist/lib/browser/index.mjs +40 -131
  39. package/dist/lib/browser/index.mjs.map +4 -4
  40. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs +43 -0
  41. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/testing/index.mjs +56 -34
  44. package/dist/lib/browser/testing/index.mjs.map +3 -3
  45. package/dist/lib/browser/{react → ui}/index.mjs +19 -21
  46. package/dist/lib/browser/ui/index.mjs.map +7 -0
  47. package/dist/lib/node-esm/{capability-CFLQ2QQU.mjs → capability-CB3MNEI3.mjs} +16 -11
  48. package/dist/lib/node-esm/capability-CB3MNEI3.mjs.map +7 -0
  49. package/dist/lib/node-esm/capability-CMROGK7R.mjs +36 -0
  50. package/dist/lib/node-esm/capability-CMROGK7R.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-37NG7SIN.mjs} +3 -4
  52. package/dist/lib/node-esm/chunk-37NG7SIN.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs +893 -0
  54. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs +81 -0
  56. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs +43 -0
  58. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-CG6UBBZZ.mjs} +10 -7
  60. package/dist/lib/node-esm/chunk-CG6UBBZZ.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  62. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-EXYTXQ47.mjs} +4 -7
  64. package/dist/lib/node-esm/chunk-EXYTXQ47.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
  66. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
  67. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs +158 -0
  68. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  70. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-YH44RHP6.mjs} +324 -181
  72. package/dist/lib/node-esm/chunk-YH44RHP6.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-ZZ7CKK6W.mjs} +3 -2
  74. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
  75. package/dist/lib/node-esm/cli/index.mjs +91 -0
  76. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  77. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  78. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  79. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  80. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  81. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  82. package/dist/lib/node-esm/core/capability.mjs +1 -1
  83. package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
  84. package/dist/lib/node-esm/core/plugin.mjs +6 -4
  85. package/dist/lib/node-esm/core/url-loader.mjs +13 -0
  86. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  87. package/dist/lib/node-esm/index.mjs +40 -131
  88. package/dist/lib/node-esm/index.mjs.map +4 -4
  89. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs +44 -0
  90. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs.map +7 -0
  91. package/dist/lib/node-esm/meta.json +1 -1
  92. package/dist/lib/node-esm/testing/index.mjs +56 -34
  93. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{react → ui}/index.mjs +19 -21
  95. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  96. package/dist/plugin/node-esm/index.mjs +384 -0
  97. package/dist/plugin/node-esm/index.mjs.map +7 -0
  98. package/dist/plugin/node-esm/meta.json +1 -0
  99. package/dist/types/src/{cli.d.ts → cli/cli.d.ts} +2 -2
  100. package/dist/types/src/cli/cli.d.ts.map +1 -0
  101. package/dist/types/src/cli/index.d.ts +2 -0
  102. package/dist/types/src/cli/index.d.ts.map +1 -0
  103. package/dist/types/src/common/activation-events.d.ts +27 -0
  104. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  105. package/dist/types/src/common/capabilities.d.ts +110 -0
  106. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  107. package/dist/types/src/common/index.d.ts +4 -9
  108. package/dist/types/src/common/index.d.ts.map +1 -1
  109. package/dist/types/src/common/operations.d.ts +8 -369
  110. package/dist/types/src/common/operations.d.ts.map +1 -1
  111. package/dist/types/src/common/translations.d.ts +0 -9
  112. package/dist/types/src/common/translations.d.ts.map +1 -1
  113. package/dist/types/src/core/activation-event.d.ts +1 -1
  114. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  115. package/dist/types/src/core/capability.d.ts +7 -7
  116. package/dist/types/src/core/capability.d.ts.map +1 -1
  117. package/dist/types/src/core/index.d.ts +1 -0
  118. package/dist/types/src/core/index.d.ts.map +1 -1
  119. package/dist/types/src/core/plugin-manager.d.ts +9 -2
  120. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  121. package/dist/types/src/core/plugin.d.ts +6 -1
  122. package/dist/types/src/core/plugin.d.ts.map +1 -1
  123. package/dist/types/src/core/url-loader.d.ts +25 -0
  124. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  125. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  126. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  127. package/dist/types/src/index.d.ts +1 -3
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
  130. package/dist/types/src/plugin-operation/history/errors.d.ts +30 -3
  131. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
  132. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
  133. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  134. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  135. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
  136. package/dist/types/src/plugin-operation/testing.d.ts +26 -77
  137. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
  138. package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
  139. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  140. package/dist/types/src/testing/withPluginManager.d.ts +1 -1
  141. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  142. package/dist/types/src/{react → ui/components/App}/App.d.ts +3 -2
  143. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  144. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
  145. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  146. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  147. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  148. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  149. package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
  150. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  151. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  152. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  153. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  154. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  155. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  156. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  157. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  158. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  159. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  160. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  161. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  162. package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
  163. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  164. package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
  165. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  166. package/dist/types/src/ui/components/index.d.ts +4 -0
  167. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  168. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  169. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  170. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +26 -9
  171. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  172. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  173. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  174. package/dist/types/src/{react → ui/hooks}/useCapabilities.d.ts +6 -1
  175. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  176. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  177. package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
  178. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  179. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  180. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  181. package/dist/types/src/ui/index.d.ts +3 -0
  182. package/dist/types/src/ui/index.d.ts.map +1 -0
  183. package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
  184. package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
  185. package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
  186. package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
  187. package/dist/types/src/vite-plugin/index.d.ts +3 -0
  188. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  189. package/dist/types/src/vite-plugin/packages.d.ts +7 -0
  190. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/moon.yml +20 -6
  193. package/package.json +91 -64
  194. package/src/{cli.ts → cli/cli.ts} +10 -10
  195. package/src/{playground/debug → cli}/index.ts +1 -1
  196. package/src/common/activation-events.ts +44 -0
  197. package/src/common/capabilities.ts +172 -0
  198. package/src/common/index.ts +4 -9
  199. package/src/common/operations.ts +6 -382
  200. package/src/common/translations.ts +0 -12
  201. package/src/context.ts +1 -1
  202. package/src/core/activation-event.ts +5 -2
  203. package/src/core/capability-manager.ts +1 -1
  204. package/src/core/capability.ts +11 -10
  205. package/src/core/index.ts +1 -0
  206. package/src/core/plugin-manager.test.ts +313 -44
  207. package/src/core/plugin-manager.ts +344 -157
  208. package/src/core/plugin.ts +10 -2
  209. package/src/core/url-loader.test.ts +79 -0
  210. package/src/core/url-loader.ts +148 -0
  211. package/src/index.ts +1 -3
  212. package/src/plugin-operation/OperationPlugin.ts +5 -5
  213. package/src/plugin-operation/history/capability.ts +5 -5
  214. package/src/plugin-operation/history/errors.ts +2 -6
  215. package/src/plugin-operation/history/history-tracker.test.ts +36 -42
  216. package/src/plugin-operation/history/undo-mapping.ts +6 -3
  217. package/src/plugin-operation/history/undo-registry.test.ts +3 -3
  218. package/src/plugin-operation/invoker-capability.ts +21 -7
  219. package/src/plugin-operation/meta.ts +1 -1
  220. package/src/plugin-operation/testing.ts +25 -45
  221. package/src/plugin-runtime/RuntimePlugin.ts +4 -4
  222. package/src/plugin-runtime/capability.ts +5 -5
  223. package/src/plugin-runtime/meta.ts +1 -1
  224. package/src/testing/service.ts +6 -6
  225. package/src/testing/withPluginManager.stories.tsx +6 -6
  226. package/src/testing/withPluginManager.tsx +46 -19
  227. package/src/ui/components/App/App.stories.tsx +92 -0
  228. package/src/{react → ui/components/App}/App.tsx +9 -11
  229. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  230. package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
  231. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
  232. package/src/ui/components/PluginManager/index.ts +5 -0
  233. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +28 -24
  234. package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +48 -58
  235. package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
  236. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  237. package/src/ui/components/Surface/context.ts +12 -0
  238. package/src/ui/components/Surface/index.ts +35 -0
  239. package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
  240. package/src/ui/components/index.ts +7 -0
  241. package/src/ui/hooks/index.ts +9 -0
  242. package/src/ui/hooks/useApp.test.tsx +159 -0
  243. package/src/{react → ui/hooks}/useApp.tsx +110 -30
  244. package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
  245. package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
  246. package/src/ui/hooks/useSurface.ts +13 -0
  247. package/src/ui/index.ts +6 -0
  248. package/src/vite-plugin/composer-plugin.ts +128 -0
  249. package/src/vite-plugin/import-map-plugin.ts +315 -0
  250. package/src/vite-plugin/index.ts +6 -0
  251. package/src/vite-plugin/packages.ts +29 -0
  252. package/tsconfig.json +4 -28
  253. package/tsconfig.node.json +2 -4
  254. package/typedoc.json +2 -4
  255. package/vitest.config.ts +1 -1
  256. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
  257. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
  258. package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
  259. package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
  260. package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
  264. package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
  266. package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
  268. package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-XYNO72GQ.mjs +0 -746
  272. package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
  273. package/dist/lib/browser/common/index.mjs +0 -38
  274. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +0 -32
  275. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
  276. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
  277. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
  278. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
  279. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
  280. package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
  281. package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
  282. package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +0 -747
  285. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
  288. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
  292. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
  294. package/dist/lib/node-esm/common/index.mjs +0 -39
  295. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +0 -33
  296. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
  297. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
  298. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
  299. package/dist/types/src/cli.d.ts.map +0 -1
  300. package/dist/types/src/common/activation-event.d.ts +0 -66
  301. package/dist/types/src/common/activation-event.d.ts.map +0 -1
  302. package/dist/types/src/common/capability.d.ts +0 -265
  303. package/dist/types/src/common/capability.d.ts.map +0 -1
  304. package/dist/types/src/common/collaboration.d.ts +0 -26
  305. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  306. package/dist/types/src/common/file.d.ts +0 -14
  307. package/dist/types/src/common/file.d.ts.map +0 -1
  308. package/dist/types/src/common/graph.d.ts +0 -21
  309. package/dist/types/src/common/graph.d.ts.map +0 -1
  310. package/dist/types/src/common/plugin.d.ts +0 -201
  311. package/dist/types/src/common/plugin.d.ts.map +0 -1
  312. package/dist/types/src/common/surface.d.ts.map +0 -1
  313. package/dist/types/src/playground/debug/Debug.d.ts +0 -8
  314. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  315. package/dist/types/src/playground/debug/index.d.ts +0 -2
  316. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  317. package/dist/types/src/playground/debug/plugin.d.ts +0 -3
  318. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  319. package/dist/types/src/playground/generator/Main.d.ts +0 -8
  320. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  321. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
  322. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  323. package/dist/types/src/playground/generator/generator.d.ts +0 -19
  324. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  325. package/dist/types/src/playground/generator/index.d.ts +0 -3
  326. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  327. package/dist/types/src/playground/generator/plugin.d.ts +0 -3
  328. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  329. package/dist/types/src/playground/layout/Layout.d.ts +0 -10
  330. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  331. package/dist/types/src/playground/layout/index.d.ts +0 -2
  332. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  333. package/dist/types/src/playground/layout/plugin.d.ts +0 -3
  334. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  335. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
  336. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  337. package/dist/types/src/playground/logger/index.d.ts +0 -2
  338. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  339. package/dist/types/src/playground/logger/plugin.d.ts +0 -3
  340. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  341. package/dist/types/src/playground/logger/schema.d.ts +0 -27
  342. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  343. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  344. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  345. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
  346. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  347. package/dist/types/src/plugin-settings/actions.d.ts +0 -61
  348. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  349. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
  350. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  351. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  352. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  353. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  354. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  355. package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
  356. package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
  357. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  358. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  359. package/dist/types/src/react/App.d.ts.map +0 -1
  360. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  361. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  362. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  363. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  364. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  365. package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
  366. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  367. package/dist/types/src/react/Surface.d.ts +0 -14
  368. package/dist/types/src/react/Surface.d.ts.map +0 -1
  369. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  370. package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
  371. package/dist/types/src/react/common.d.ts.map +0 -1
  372. package/dist/types/src/react/index.d.ts +0 -9
  373. package/dist/types/src/react/index.d.ts.map +0 -1
  374. package/dist/types/src/react/types.d.ts +0 -12
  375. package/dist/types/src/react/types.d.ts.map +0 -1
  376. package/dist/types/src/react/useApp.d.ts.map +0 -1
  377. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  378. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  379. package/dist/types/src/react/useOperationResolver.d.ts +0 -19
  380. package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
  381. package/src/common/activation-event.ts +0 -99
  382. package/src/common/capability.ts +0 -343
  383. package/src/common/collaboration.ts +0 -31
  384. package/src/common/file.ts +0 -22
  385. package/src/common/graph.ts +0 -30
  386. package/src/common/plugin.ts +0 -364
  387. package/src/playground/debug/Debug.tsx +0 -49
  388. package/src/playground/debug/plugin.ts +0 -16
  389. package/src/playground/generator/Main.tsx +0 -80
  390. package/src/playground/generator/Toolbar.tsx +0 -57
  391. package/src/playground/generator/generator.ts +0 -48
  392. package/src/playground/generator/index.ts +0 -6
  393. package/src/playground/generator/plugin.ts +0 -21
  394. package/src/playground/layout/Layout.tsx +0 -37
  395. package/src/playground/layout/plugin.ts +0 -18
  396. package/src/playground/logger/Toolbar.tsx +0 -33
  397. package/src/playground/logger/index.ts +0 -5
  398. package/src/playground/logger/plugin.ts +0 -42
  399. package/src/playground/logger/schema.ts +0 -22
  400. package/src/playground/playground.stories.tsx +0 -54
  401. package/src/plugin-settings/SettingsPlugin.ts +0 -19
  402. package/src/plugin-settings/actions.ts +0 -64
  403. package/src/plugin-settings/app-graph-builder.ts +0 -140
  404. package/src/plugin-settings/index.ts +0 -6
  405. package/src/plugin-settings/meta.ts +0 -10
  406. package/src/plugin-settings/operation-resolver.ts +0 -55
  407. package/src/plugin-settings/translations.ts +0 -19
  408. package/src/react/App.stories.tsx +0 -63
  409. package/src/react/DefaultFallback.tsx +0 -26
  410. package/src/react/ErrorBoundary.tsx +0 -56
  411. package/src/react/index.ts +0 -14
  412. package/src/react/types.ts +0 -27
  413. package/src/react/useOperationResolver.ts +0 -40
  414. /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-RFSO3JRG.mjs.map} +0 -0
  415. /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  416. /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
  417. /package/dist/lib/browser/{common/index.mjs.map → core/url-loader.mjs.map} +0 -0
  418. /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
  419. /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
  420. /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
  421. /package/src/{react → ui/hooks}/useLoading.tsx +0 -0
@@ -9,49 +9,39 @@ import * as Ref from 'effect/Ref';
9
9
  import * as Schema from 'effect/Schema';
10
10
  import * as Stream from 'effect/Stream';
11
11
 
12
- import { Operation, type OperationInvoker, OperationResolver } from '@dxos/operation';
12
+ import { Operation, type OperationInvoker } from '@dxos/operation';
13
13
 
14
14
  //
15
15
  // Test Operations
16
16
  //
17
17
 
18
18
  export const Compute = Operation.make({
19
- schema: {
20
- input: Schema.Struct({ value: Schema.Number }),
21
- output: Schema.Struct({ value: Schema.Number }),
22
- },
19
+ input: Schema.Struct({ value: Schema.Number }),
20
+ output: Schema.Struct({ value: Schema.Number }),
23
21
  meta: { key: 'test.compute' },
24
22
  });
25
23
 
26
24
  export const HalveCompute = Operation.make({
27
- schema: {
28
- input: Schema.Struct({ value: Schema.Number }),
29
- output: Schema.Struct({ value: Schema.Number }),
30
- },
25
+ input: Schema.Struct({ value: Schema.Number }),
26
+ output: Schema.Struct({ value: Schema.Number }),
31
27
  meta: { key: 'test.halve-compute' },
32
28
  });
33
29
 
34
30
  export const ToString = Operation.make({
35
- schema: {
36
- input: Schema.Struct({ value: Schema.Number }),
37
- output: Schema.Struct({ string: Schema.String }),
38
- },
31
+ input: Schema.Struct({ value: Schema.Number }),
32
+ output: Schema.Struct({ string: Schema.String }),
39
33
  meta: { key: 'test.to-string' },
40
34
  });
41
35
 
42
36
  export const Add = Operation.make({
43
- schema: {
44
- input: Schema.Tuple(Schema.Number, Schema.Number),
45
- output: Schema.Number,
46
- },
37
+ input: Schema.Tuple(Schema.Number, Schema.Number),
38
+ output: Schema.Number,
47
39
  meta: { key: 'test.add' },
48
40
  });
49
41
 
50
42
  export const SideEffect = Operation.make({
51
- schema: {
52
- input: Schema.Void,
53
- output: Schema.Void,
54
- },
43
+ input: Schema.Void,
44
+ output: Schema.Void,
55
45
  meta: { key: 'test.side-effect' },
56
46
  });
57
47
 
@@ -59,34 +49,24 @@ export const SideEffect = Operation.make({
59
49
  // Test Handlers
60
50
  //
61
51
 
62
- export const computeHandler = OperationResolver.make({
63
- operation: Compute,
64
- handler: (data) =>
65
- Effect.gen(function* () {
66
- yield* Effect.sleep(data.value * 10);
67
- return { value: data.value * 2 };
68
- }),
69
- });
52
+ export const computeHandler = Operation.withHandler(Compute, (data) =>
53
+ Effect.gen(function* () {
54
+ yield* Effect.sleep(data.value * 10);
55
+ return { value: data.value * 2 };
56
+ }),
57
+ );
70
58
 
71
- export const halveComputeHandler = OperationResolver.make({
72
- operation: HalveCompute,
73
- handler: (data) => Effect.succeed({ value: data.value / 2 }),
74
- });
59
+ export const halveComputeHandler = Operation.withHandler(HalveCompute, (data) =>
60
+ Effect.succeed({ value: data.value / 2 }),
61
+ );
75
62
 
76
- export const toStringHandler = OperationResolver.make({
77
- operation: ToString,
78
- handler: (data) => Effect.succeed({ string: data.value.toString() }),
79
- });
63
+ export const toStringHandler = Operation.withHandler(ToString, (data) =>
64
+ Effect.succeed({ string: data.value.toString() }),
65
+ );
80
66
 
81
- export const addHandler = OperationResolver.make({
82
- operation: Add,
83
- handler: (data) => Effect.succeed(data[0] + data[1]),
84
- });
67
+ export const addHandler = Operation.withHandler(Add, (data) => Effect.succeed(data[0] + data[1]));
85
68
 
86
- export const sideEffectHandler = OperationResolver.make({
87
- operation: SideEffect,
88
- handler: () => Effect.succeed(undefined),
89
- });
69
+ export const sideEffectHandler = Operation.withHandler(SideEffect, () => Effect.succeed(undefined));
90
70
 
91
71
  //
92
72
  // Test Utilities
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Common from '../common';
5
+ import { ActivationEvents } from '../common';
6
6
  import { Capability, Plugin } from '../core';
7
7
 
8
8
  import { meta } from './meta';
@@ -11,9 +11,9 @@ const ManagedRuntimeCapability = Capability.lazy('ManagedRuntime', () => import(
11
11
 
12
12
  export const RuntimePlugin = Plugin.define(meta).pipe(
13
13
  Plugin.addModule({
14
- activatesOn: Common.ActivationEvent.Startup,
15
- activatesBefore: [Common.ActivationEvent.SetupLayer],
16
- activatesAfter: [Common.ActivationEvent.ManagedRuntimeReady],
14
+ activatesOn: ActivationEvents.Startup,
15
+ activatesBefore: [ActivationEvents.SetupLayer],
16
+ activatesAfter: [ActivationEvents.ManagedRuntimeReady],
17
17
  activate: ManagedRuntimeCapability,
18
18
  }),
19
19
  Plugin.make,
@@ -6,7 +6,7 @@ import * as Effect from 'effect/Effect';
6
6
  import * as Layer from 'effect/Layer';
7
7
  import * as ManagedRuntime from 'effect/ManagedRuntime';
8
8
 
9
- import * as Common from '../common';
9
+ import { ActivationEvents, Capabilities } from '../common';
10
10
  import { Capability, Plugin } from '../core';
11
11
 
12
12
  //
@@ -22,10 +22,10 @@ export default Capability.makeModule(
22
22
  const pluginManager = yield* Plugin.Service;
23
23
 
24
24
  // Trigger setup event so plugins can contribute their layers.
25
- yield* Plugin.activate(Common.ActivationEvent.SetupLayer);
25
+ yield* Plugin.activate(ActivationEvents.SetupLayer);
26
26
 
27
27
  // Gather all contributed layers.
28
- const layers = yield* Capability.getAll(Common.Capability.Layer);
28
+ const layers = yield* Capability.getAll(Capabilities.Layer);
29
29
 
30
30
  // Create layers that provide Capability.Service and Plugin.Service.
31
31
  const capabilityServiceLayer = Layer.succeed(Capability.Service, capabilityManager);
@@ -46,8 +46,8 @@ export default Capability.makeModule(
46
46
  );
47
47
 
48
48
  // Create the managed runtime from the composed layer.
49
- const runtime = ManagedRuntime.make(composedLayer) as Common.Capability.ManagedRuntime;
49
+ const runtime = ManagedRuntime.make(composedLayer) as Capabilities.ManagedRuntime;
50
50
 
51
- return Capability.contributes(Common.Capability.ManagedRuntime, runtime);
51
+ return Capability.contributes(Capabilities.ManagedRuntime, runtime);
52
52
  }),
53
53
  );
@@ -5,7 +5,7 @@
5
5
  import { type Plugin } from '../core';
6
6
 
7
7
  export const meta: Plugin.Meta = {
8
- id: 'dxos.org/plugin/runtime',
8
+ id: 'org.dxos.plugin.runtime',
9
9
  name: 'Runtime Plugin',
10
10
  description: 'Provides a managed Effect runtime by composing contributed layers.',
11
11
  };
@@ -7,7 +7,7 @@ import * as Layer from 'effect/Layer';
7
7
 
8
8
  import { invariant } from '@dxos/invariant';
9
9
 
10
- import * as Common from '../common';
10
+ import { ActivationEvents, Capabilities } from '../common';
11
11
  import { Plugin, PluginManager } from '../core';
12
12
 
13
13
  /**
@@ -34,18 +34,18 @@ export const fromPlugins = (plugins: Plugin.Plugin[]) =>
34
34
  });
35
35
 
36
36
  manager.capabilities.contribute({
37
- interface: Common.Capability.PluginManager,
37
+ interface: Capabilities.PluginManager,
38
38
  implementation: manager,
39
- module: 'dxos.org/app-framework/plugin-manager',
39
+ module: 'org.dxos.app-framework.plugin-manager',
40
40
  });
41
41
 
42
42
  manager.capabilities.contribute({
43
- interface: Common.Capability.AtomRegistry,
43
+ interface: Capabilities.AtomRegistry,
44
44
  implementation: manager.registry,
45
- module: 'dxos.org/app-framework/atom-registry',
45
+ module: 'org.dxos.app-framework.atom-registry',
46
46
  });
47
47
 
48
- yield* manager.activate(Common.ActivationEvent.Startup);
48
+ yield* manager.activate(ActivationEvents.Startup);
49
49
 
50
50
  return manager;
51
51
  }),
@@ -7,9 +7,9 @@ import React from 'react';
7
7
 
8
8
  import { withTheme } from '@dxos/react-ui/testing';
9
9
 
10
- import * as Common from '../common';
10
+ import { Capabilities } from '../common';
11
11
  import { Capability } from '../core';
12
- import { Surface } from '../react';
12
+ import { Surface } from '../ui';
13
13
 
14
14
  import { withPluginManager } from './withPluginManager';
15
15
 
@@ -18,7 +18,7 @@ const DefaultStory = () => {
18
18
  return (
19
19
  <div>
20
20
  <div>Hello</div>
21
- <Surface role='main' />
21
+ <Surface.Surface role='main' />
22
22
  </div>
23
23
  );
24
24
  };
@@ -27,12 +27,12 @@ const meta = {
27
27
  title: 'sdk/app-framework/withPluginManager',
28
28
  render: DefaultStory,
29
29
  decorators: [
30
- withTheme,
30
+ withTheme(),
31
31
  withPluginManager({
32
32
  capabilities: [
33
33
  Capability.contributes(
34
- Common.Capability.ReactSurface,
35
- Common.createSurface({
34
+ Capabilities.ReactSurface,
35
+ Surface.create({
36
36
  id: 'test',
37
37
  role: 'main',
38
38
  component: ({ role }) => <span>{JSON.stringify({ role })}</span>,
@@ -4,15 +4,16 @@
4
4
 
5
5
  import { type Decorator, type StoryContext } from '@storybook/react';
6
6
  import * as Effect from 'effect/Effect';
7
- import React, { useEffect, useMemo } from 'react';
7
+ import React, { useEffect, useState } from 'react';
8
8
 
9
9
  import { raise } from '@dxos/debug';
10
+ import { runAndForwardErrors } from '@dxos/effect';
10
11
  import { useAsyncEffect } from '@dxos/react-hooks';
11
12
  import { type MaybeProvider, getProviderValue } from '@dxos/util';
12
13
 
13
- import * as Common from '../common';
14
+ import { ActivationEvents, Capabilities } from '../common';
14
15
  import { type ActivationEvent, Capability, type CapabilityManager, Plugin, PluginManager } from '../core';
15
- import { type UseAppOptions, useApp } from '../react';
16
+ import { type UseAppOptions, useApp } from '../ui';
16
17
 
17
18
  /**
18
19
  * @internal
@@ -43,6 +44,13 @@ export const setupPluginManager = ({
43
44
  return pluginManager;
44
45
  };
45
46
 
47
+ type ManagedPluginManagerState = {
48
+ fireEvents?: (ActivationEvent.ActivationEvent | string)[];
49
+ pluginManager: PluginManager.PluginManager;
50
+ setupEvents?: ActivationEvent.ActivationEvent[];
51
+ storyId: string;
52
+ };
53
+
46
54
  export type WithPluginManagerOptions = UseAppOptions & {
47
55
  /** @deprecated */
48
56
  capabilities?: MaybeProvider<Capability.Any[], CapabilityManager.CapabilityManager>;
@@ -60,40 +68,59 @@ export type WithPluginManagerInitializer<Args = void> =
60
68
  */
61
69
  export const withPluginManager = <Args,>(init: WithPluginManagerInitializer<Args> = {}): Decorator => {
62
70
  return (Story, context) => {
71
+ const storyId = context.id;
63
72
  const options = typeof init === 'function' ? init(context as any) : init;
64
- const pluginManager = useMemo(() => setupPluginManager(options), [init]);
73
+ const [managerState, setManagerState] = useState<ManagedPluginManagerState>();
65
74
 
66
- // Set-up root capability.
75
+ // Storybook replaces the full context object often, so key manager ownership by story id.
67
76
  useEffect(() => {
68
- const capability = Capability.contributes(Common.Capability.ReactRoot, {
69
- id: context.id,
77
+ const pluginManager = setupPluginManager(options);
78
+
79
+ const capability = Capability.contributes(Capabilities.ReactRoot, {
80
+ id: storyId,
70
81
  root: () => <Story />,
71
82
  });
72
83
 
73
84
  pluginManager.capabilities.contribute({
74
85
  ...capability,
75
- module: 'dxos.org/app-framework/withPluginManager',
86
+ module: 'org.dxos.app-framework.with-plugin-manager',
87
+ });
88
+
89
+ setManagerState({
90
+ pluginManager,
91
+ setupEvents: options.setupEvents,
92
+ fireEvents: options.fireEvents,
93
+ storyId,
76
94
  });
77
95
 
78
96
  return () => {
79
97
  pluginManager.capabilities.remove(capability.interface, capability.implementation);
98
+ void runAndForwardErrors(pluginManager.shutdown());
80
99
  };
81
- }, [pluginManager, context]);
100
+ }, [storyId, init]);
82
101
 
83
- // Fire events.
84
- useAsyncEffect(async () => {
85
- await Promise.all(options.fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
86
- }, [pluginManager]);
102
+ // Avoid mounting useApp with a stale manager from the previous story.
103
+ if (!managerState || managerState.storyId !== storyId) {
104
+ return <></>;
105
+ }
87
106
 
88
- // Create app.
89
- const App = useApp({ pluginManager });
90
-
91
- return <App />;
107
+ return <WithPluginManagerApp {...managerState} />;
92
108
  };
93
109
  };
94
110
 
111
+ const WithPluginManagerApp = ({ fireEvents, pluginManager, setupEvents, storyId }: ManagedPluginManagerState) => {
112
+ // Fire deprecated events only after the effect-owned manager for this story exists.
113
+ useAsyncEffect(async () => {
114
+ await Promise.all(fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
115
+ }, [fireEvents, pluginManager, storyId]);
116
+
117
+ const App = useApp({ pluginManager, setupEvents });
118
+
119
+ return <App />;
120
+ };
121
+
95
122
  const storyMeta = {
96
- id: 'dxos.org/app-framework/story',
123
+ id: 'org.dxos.app-framework.story',
97
124
  name: 'Story',
98
125
  };
99
126
 
@@ -102,7 +129,7 @@ const storyMeta = {
102
129
  const StoryPlugin = Plugin.define(storyMeta).pipe(
103
130
  Plugin.addModule({
104
131
  id: 'Story',
105
- activatesOn: Common.ActivationEvent.Startup,
132
+ activatesOn: ActivationEvents.Startup,
106
133
  activate: () => Effect.succeed([]),
107
134
  }),
108
135
  Plugin.make,
@@ -0,0 +1,92 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
7
+ import React, { useEffect } from 'react';
8
+
9
+ import { withTheme } from '@dxos/react-ui/testing';
10
+
11
+ import { ActivationEvents, Capabilities } from '../../../common';
12
+ import { Capability, Plugin } from '../../../core';
13
+ import { useApp } from '../../hooks';
14
+
15
+ // Minimal plugin that contributes a ReactRoot.
16
+ const TestPlugin = Plugin.define<{ error?: boolean }>({
17
+ id: 'org.dxos.plugin.test',
18
+ name: 'Test Plugin',
19
+ }).pipe(
20
+ Plugin.addModule(({ error }) => ({
21
+ id: 'TestMain',
22
+ activatesOn: ActivationEvents.Startup,
23
+ activate: () =>
24
+ Effect.succeed([
25
+ Capability.contributes(Capabilities.ReactRoot, {
26
+ id: 'org.dxos.plugin.test.root',
27
+ root: () => {
28
+ useEffect(() => {
29
+ let t: NodeJS.Timeout;
30
+ if (error) {
31
+ console.log('Ticking...');
32
+ t = setTimeout(() => {
33
+ console.log('Bang!');
34
+ throw new Error('Runtime error');
35
+ }, 3_000);
36
+ }
37
+
38
+ return () => clearTimeout(t);
39
+ }, [error]);
40
+
41
+ return <h1 className='text-lg'>App Started</h1>;
42
+ },
43
+ }),
44
+ ]),
45
+ })),
46
+ Plugin.make,
47
+ );
48
+
49
+ const core = [TestPlugin.meta.id];
50
+
51
+ type DefaultStoryProps = { plugins?: Plugin.Plugin[] };
52
+
53
+ const DefaultStory = ({ plugins }: DefaultStoryProps) => {
54
+ const App = useApp({
55
+ plugins,
56
+ core,
57
+ placeholder: () => {
58
+ return (
59
+ <div role='none' className='text-description'>
60
+ Loading...
61
+ </div>
62
+ );
63
+ },
64
+ });
65
+
66
+ return <App />;
67
+ };
68
+
69
+ const meta = {
70
+ title: 'sdk/app-framework/App',
71
+ render: DefaultStory,
72
+ decorators: [withTheme()],
73
+ parameters: {
74
+ layout: 'centered',
75
+ },
76
+ } satisfies Meta;
77
+
78
+ export default meta;
79
+
80
+ type Story = StoryObj<typeof meta>;
81
+
82
+ export const Default: Story = {
83
+ args: {
84
+ plugins: [TestPlugin({})],
85
+ },
86
+ };
87
+
88
+ export const WithError: Story = {
89
+ args: {
90
+ plugins: [TestPlugin({ error: true })],
91
+ },
92
+ };
@@ -4,21 +4,19 @@
4
4
 
5
5
  import React, { type PropsWithChildren } from 'react';
6
6
 
7
- import * as Common from '../common';
8
- import { topologicalSort } from '../helpers';
9
-
10
- import { type UseAppOptions } from './useApp';
11
- import { useCapabilities } from './useCapabilities';
12
- import { LoadingState, useLoading } from './useLoading';
7
+ import { Capabilities } from '../../../common';
8
+ import { topologicalSort } from '../../../helpers';
9
+ import { LoadingState, type StartupProgress, type UseAppOptions, useCapabilities, useLoading } from '../../hooks';
13
10
 
14
11
  export type AppProps = Pick<UseAppOptions, 'placeholder' | 'debounce'> & {
15
12
  ready: boolean;
16
13
  error: unknown;
14
+ progress?: StartupProgress;
17
15
  };
18
16
 
19
- export const App = ({ placeholder: Placeholder, ready, error, debounce }: AppProps) => {
20
- const reactContexts = useCapabilities(Common.Capability.ReactContext);
21
- const reactRoots = useCapabilities(Common.Capability.ReactRoot);
17
+ export const App = ({ placeholder: Placeholder, ready, error, debounce, progress }: AppProps) => {
18
+ const reactContexts = useCapabilities(Capabilities.ReactContext);
19
+ const reactRoots = useCapabilities(Capabilities.ReactRoot);
22
20
  const stage = useLoading(ready, debounce);
23
21
 
24
22
  if (error) {
@@ -32,7 +30,7 @@ export const App = ({ placeholder: Placeholder, ready, error, debounce }: AppPro
32
30
  return null;
33
31
  }
34
32
 
35
- return <Placeholder stage={stage} />;
33
+ return <Placeholder stage={stage} progress={progress} />;
36
34
  }
37
35
 
38
36
  const ComposedContext = composeContexts(reactContexts);
@@ -45,7 +43,7 @@ export const App = ({ placeholder: Placeholder, ready, error, debounce }: AppPro
45
43
  );
46
44
  };
47
45
 
48
- const composeContexts = (contexts: Common.Capability.ReactContext[]) => {
46
+ const composeContexts = (contexts: Capabilities.ReactContext[]) => {
49
47
  if (contexts.length === 0) {
50
48
  return ({ children }: PropsWithChildren) => <>{children}</>;
51
49
  }
@@ -2,4 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './plugin';
5
+ export * from './App';
@@ -7,14 +7,13 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
7
  import * as Effect from 'effect/Effect';
8
8
  import React, { useEffect, useMemo, useState } from 'react';
9
9
 
10
- import { withTheme } from '@dxos/react-ui/testing';
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
11
  import { useWebComponentContext } from '@dxos/web-context-react';
12
12
 
13
- import * as Common from '../common';
14
- import { PluginManagerContext } from '../context';
15
- import { Capability, Plugin } from '../core';
16
-
17
- import { useApp } from './useApp';
13
+ import { ActivationEvents, Capabilities } from '../../../common';
14
+ import { PluginManagerContext } from '../../../context';
15
+ import { Capability, Plugin } from '../../../core';
16
+ import { useApp } from '../../hooks';
18
17
 
19
18
  // Define the Counter capability
20
19
  const Counter = Capability.make<{ count: number; increment: () => void }>('example/counter');
@@ -79,7 +78,7 @@ const CounterComponent = () => {
79
78
  }, [counter]);
80
79
 
81
80
  if (!manager) {
82
- return <div className='p-4 text-red-500'>Error: Context not found</div>;
81
+ return <div className='p-4 text-error-text'>Error: Context not found</div>;
83
82
  }
84
83
 
85
84
  return (
@@ -105,7 +104,7 @@ const CounterComponent = () => {
105
104
  <CountStatus />
106
105
  </div>
107
106
 
108
- <div className='mt-8 pt-4 border-bs border-neutral-200 dark:border-neutral-700 text-center'>
107
+ <div className='mt-8 pt-4 border-t border-neutral-200 dark:border-neutral-700 text-center'>
109
108
  <p className='text-sm text-neutral-500 dark:text-neutral-400'>
110
109
  This component accesses the <code>PluginManager</code> via <code>useWebComponentContext</code>.
111
110
  </p>
@@ -117,12 +116,12 @@ const CounterComponent = () => {
117
116
 
118
117
  // Plugin that provides the Counter capability and renders the UI
119
118
  const CounterPlugin = Plugin.define({
120
- id: 'dxos.org/plugin/counter',
119
+ id: 'org.dxos.plugin.counter',
121
120
  name: 'Counter Plugin',
122
121
  }).pipe(
123
122
  Plugin.addModule({
124
123
  id: 'CounterMain',
125
- activatesOn: Common.ActivationEvent.Startup,
124
+ activatesOn: ActivationEvents.Startup,
126
125
  activate: () => {
127
126
  const listeners = new Set<() => void>();
128
127
  const counter = {
@@ -142,8 +141,8 @@ const CounterPlugin = Plugin.define({
142
141
  Capability.contributes(Counter, counter),
143
142
 
144
143
  // Contribute the UI
145
- Capability.contributes(Common.Capability.ReactRoot, {
146
- id: 'dxos.org/plugin/counter/root',
144
+ Capability.contributes(Capabilities.ReactRoot, {
145
+ id: 'org.dxos.plugin.counter.root',
147
146
  root: CounterComponent,
148
147
  }),
149
148
  ]);
@@ -153,7 +152,7 @@ const CounterPlugin = Plugin.define({
153
152
  )();
154
153
 
155
154
  const plugins = [CounterPlugin];
156
- const core = ['dxos.org/plugin/counter'];
155
+ const core = ['org.dxos.plugin.counter'];
157
156
  const placeholder = () => (
158
157
  <div className='flex h-screen items-center justify-center p-4 text-lg text-neutral-500'>
159
158
  Initializing Application...
@@ -173,7 +172,7 @@ const DefaultStory = () => {
173
172
  const meta = {
174
173
  title: 'sdk/app-framework/PluginManagerContext',
175
174
  render: DefaultStory,
176
- decorators: [withTheme],
175
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
177
176
  parameters: {
178
177
  layout: 'fullscreen',
179
178
  },
@@ -6,7 +6,7 @@ import { createContext, useContext } from 'react';
6
6
 
7
7
  import { raise } from '@dxos/debug';
8
8
 
9
- import { type PluginManager } from '../core';
9
+ import { type PluginManager } from '../../../core';
10
10
 
11
11
  const PluginManagerContext = createContext<PluginManager.PluginManager | undefined>(undefined);
12
12
 
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './PluginManagerProvider';