@dxos/app-framework 0.8.3 → 0.8.4-main.1c7ec43d41

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 (761) hide show
  1. package/.storybook/main.mts +9 -0
  2. package/.storybook/preview.mts +8 -0
  3. package/README.md +0 -8
  4. package/dist/lib/browser/capability-5RRH3WIB.mjs +35 -0
  5. package/dist/lib/browser/capability-5RRH3WIB.mjs.map +7 -0
  6. package/dist/lib/browser/capability-LUKGKUQH.mjs +38 -0
  7. package/dist/lib/browser/capability-LUKGKUQH.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-23D4SJUE.mjs +42 -0
  9. package/dist/lib/browser/chunk-23D4SJUE.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-3JWJXGLK.mjs +79 -0
  11. package/dist/lib/browser/chunk-3JWJXGLK.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-45CHLTBV.mjs +34 -0
  13. package/dist/lib/browser/chunk-45CHLTBV.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-66IXTIVK.mjs +48 -0
  15. package/dist/lib/browser/chunk-66IXTIVK.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-CZ4BIAHH.mjs +422 -0
  17. package/dist/lib/browser/chunk-CZ4BIAHH.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-FJ4765WW.mjs +8 -0
  19. package/dist/lib/browser/chunk-FJ4765WW.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
  21. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  23. package/dist/lib/browser/chunk-MX5DKEJH.mjs +584 -0
  24. package/dist/lib/browser/chunk-MX5DKEJH.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-NBXPP7JR.mjs +1174 -0
  26. package/dist/lib/browser/chunk-NBXPP7JR.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-PC4NOADA.mjs +471 -0
  28. package/dist/lib/browser/chunk-PC4NOADA.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-WBHCSOBW.mjs +80 -0
  30. package/dist/lib/browser/chunk-WBHCSOBW.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-Z55LVAGN.mjs +213 -0
  32. package/dist/lib/browser/chunk-Z55LVAGN.mjs.map +7 -0
  33. package/dist/lib/browser/chunk-ZGJAZSNE.mjs +142 -0
  34. package/dist/lib/browser/chunk-ZGJAZSNE.mjs.map +7 -0
  35. package/dist/lib/browser/cli/index.mjs +76 -0
  36. package/dist/lib/browser/cli/index.mjs.map +7 -0
  37. package/dist/lib/browser/common/activation-events.mjs +24 -0
  38. package/dist/lib/browser/common/capabilities.mjs +46 -0
  39. package/dist/lib/browser/core/activation-event.mjs +20 -0
  40. package/dist/lib/browser/core/capability.mjs +30 -0
  41. package/dist/lib/browser/core/capability.mjs.map +7 -0
  42. package/dist/lib/browser/core/plugin-manager.mjs +19 -0
  43. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  44. package/dist/lib/browser/core/plugin.mjs +37 -0
  45. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  46. package/dist/lib/browser/core/url-loader.mjs +24 -0
  47. package/dist/lib/browser/core/url-loader.mjs.map +7 -0
  48. package/dist/lib/browser/index.mjs +108 -156
  49. package/dist/lib/browser/index.mjs.map +4 -4
  50. package/dist/lib/browser/invoker-capability-K4GHUFXF.mjs +44 -0
  51. package/dist/lib/browser/invoker-capability-K4GHUFXF.mjs.map +7 -0
  52. package/dist/lib/browser/meta.json +1 -1
  53. package/dist/lib/browser/testing/index.mjs +237 -52
  54. package/dist/lib/browser/testing/index.mjs.map +4 -4
  55. package/dist/lib/browser/testing/react.mjs +78 -0
  56. package/dist/lib/browser/testing/react.mjs.map +7 -0
  57. package/dist/lib/browser/ui/index.mjs +48 -0
  58. package/dist/lib/browser/ui/index.mjs.map +7 -0
  59. package/dist/lib/node-esm/capability-FCGZVIEG.mjs +39 -0
  60. package/dist/lib/node-esm/capability-FCGZVIEG.mjs.map +7 -0
  61. package/dist/lib/node-esm/capability-JOIQ2MQE.mjs +36 -0
  62. package/dist/lib/node-esm/capability-JOIQ2MQE.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs +10 -0
  64. package/dist/lib/node-esm/chunk-37Z53PXZ.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-42J2ZUQQ.mjs +472 -0
  66. package/dist/lib/node-esm/chunk-42J2ZUQQ.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-6XW6LET6.mjs +35 -0
  68. package/dist/lib/node-esm/chunk-6XW6LET6.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-D347W3KO.mjs +143 -0
  70. package/dist/lib/node-esm/chunk-D347W3KO.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  72. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-HTBJU5FX.mjs +214 -0
  74. package/dist/lib/node-esm/chunk-HTBJU5FX.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-M3HKPRPO.mjs +423 -0
  76. package/dist/lib/node-esm/chunk-M3HKPRPO.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-MUVUQC3G.mjs +1175 -0
  78. package/dist/lib/node-esm/chunk-MUVUQC3G.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs +43 -0
  80. package/dist/lib/node-esm/chunk-SBS2YMPT.mjs.map +7 -0
  81. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs +80 -0
  82. package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs.map +7 -0
  83. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs +81 -0
  84. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs.map +7 -0
  85. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
  86. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
  87. package/dist/lib/node-esm/chunk-WKTLE7MG.mjs +585 -0
  88. package/dist/lib/node-esm/chunk-WKTLE7MG.mjs.map +7 -0
  89. package/dist/lib/node-esm/chunk-XOCUANHO.mjs +49 -0
  90. package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +7 -0
  91. package/dist/lib/node-esm/cli/index.mjs +77 -0
  92. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  93. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  94. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  95. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  96. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  97. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  98. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  99. package/dist/lib/node-esm/core/capability.mjs +31 -0
  100. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  101. package/dist/lib/node-esm/core/plugin-manager.mjs +20 -0
  102. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  103. package/dist/lib/node-esm/core/plugin.mjs +38 -0
  104. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  105. package/dist/lib/node-esm/core/url-loader.mjs +25 -0
  106. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  107. package/dist/lib/node-esm/index.mjs +108 -156
  108. package/dist/lib/node-esm/index.mjs.map +4 -4
  109. package/dist/lib/node-esm/invoker-capability-XEPW5LMJ.mjs +45 -0
  110. package/dist/lib/node-esm/invoker-capability-XEPW5LMJ.mjs.map +7 -0
  111. package/dist/lib/node-esm/meta.json +1 -1
  112. package/dist/lib/node-esm/testing/index.mjs +237 -52
  113. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  114. package/dist/lib/node-esm/testing/react.mjs +79 -0
  115. package/dist/lib/node-esm/testing/react.mjs.map +7 -0
  116. package/dist/lib/node-esm/ui/index.mjs +49 -0
  117. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  118. package/dist/plugin/node-esm/index.mjs +893 -0
  119. package/dist/plugin/node-esm/index.mjs.map +7 -0
  120. package/dist/plugin/node-esm/meta.json +1 -0
  121. package/dist/types/src/cli/cli.d.ts +39 -0
  122. package/dist/types/src/cli/cli.d.ts.map +1 -0
  123. package/dist/types/src/cli/index.d.ts +2 -0
  124. package/dist/types/src/cli/index.d.ts.map +1 -0
  125. package/dist/types/src/common/activation-events.d.ts +27 -0
  126. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  127. package/dist/types/src/common/annotations.d.ts +1 -0
  128. package/dist/types/src/common/annotations.d.ts.map +1 -0
  129. package/dist/types/src/common/capabilities.d.ts +110 -121
  130. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  131. package/dist/types/src/common/index.d.ts +4 -8
  132. package/dist/types/src/common/index.d.ts.map +1 -1
  133. package/dist/types/src/common/operations.d.ts +19 -0
  134. package/dist/types/src/common/operations.d.ts.map +1 -0
  135. package/dist/types/src/common/translations.d.ts +8 -8
  136. package/dist/types/src/common/translations.d.ts.map +1 -1
  137. package/dist/types/src/context.d.ts +5 -0
  138. package/dist/types/src/context.d.ts.map +1 -0
  139. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +11 -11
  140. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  141. package/dist/types/src/core/capability-manager.d.ts +48 -0
  142. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  143. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  144. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  145. package/dist/types/src/core/capability.d.ts +156 -0
  146. package/dist/types/src/core/capability.d.ts.map +1 -0
  147. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
  148. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
  149. package/dist/types/src/core/index.d.ts +11 -4
  150. package/dist/types/src/core/index.d.ts.map +1 -1
  151. package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
  152. package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
  153. package/dist/types/src/core/plugin-manager.d.ts +239 -0
  154. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  155. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  156. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  157. package/dist/types/src/core/plugin-manifest.d.ts +101 -0
  158. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
  159. package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
  160. package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
  161. package/dist/types/src/core/plugin.d.ts +208 -37
  162. package/dist/types/src/core/plugin.d.ts.map +1 -1
  163. package/dist/types/src/core/registry.d.ts +101 -0
  164. package/dist/types/src/core/registry.d.ts.map +1 -0
  165. package/dist/types/src/core/url-loader.d.ts +127 -0
  166. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  167. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  168. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  169. package/dist/types/src/helpers.d.ts.map +1 -1
  170. package/dist/types/src/index.d.ts +3 -4
  171. package/dist/types/src/index.d.ts.map +1 -1
  172. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  173. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  174. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  175. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  176. package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
  177. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  178. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  179. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  180. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  181. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  182. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  183. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  184. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  185. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  186. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  187. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  188. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  189. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  190. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  191. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  192. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  193. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  194. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  195. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  196. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  197. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  198. package/dist/types/src/plugin-operation/testing.d.ts +59 -0
  199. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  200. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  201. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  202. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  203. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  204. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  205. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  206. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  207. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  208. package/dist/types/src/testing/harness.d.ts +67 -0
  209. package/dist/types/src/testing/harness.d.ts.map +1 -0
  210. package/dist/types/src/testing/index.d.ts +2 -0
  211. package/dist/types/src/testing/index.d.ts.map +1 -1
  212. package/dist/types/src/testing/react.d.ts +27 -0
  213. package/dist/types/src/testing/react.d.ts.map +1 -0
  214. package/dist/types/src/testing/react.test.d.ts +2 -0
  215. package/dist/types/src/testing/react.test.d.ts.map +1 -0
  216. package/dist/types/src/testing/service.d.ts +8 -0
  217. package/dist/types/src/testing/service.d.ts.map +1 -0
  218. package/dist/types/src/testing/withPluginManager.d.ts +11 -10
  219. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  220. package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
  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/ui/components/PluginManager/PluginManagerContext.stories.d.ts +13 -0
  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/ui/components/Surface/SurfaceComponent.stories.d.ts +14 -0
  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/ui/hooks/useLoading.d.ts +18 -0
  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 +37 -0
  294. package/package.json +116 -52
  295. package/src/cli/cli.ts +107 -0
  296. package/src/{playground/layout → cli}/index.ts +1 -1
  297. package/src/common/activation-events.ts +44 -0
  298. package/src/{playground/debug/index.ts → common/annotations.ts} +0 -2
  299. package/src/common/capabilities.ts +169 -108
  300. package/src/common/index.ts +4 -8
  301. package/src/common/operations.ts +35 -0
  302. package/src/common/translations.ts +18 -10
  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 +1671 -0
  312. package/src/core/plugin-manager.ts +1335 -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 +369 -43
  316. package/src/core/registry.ts +157 -0
  317. package/src/core/url-loader.test.ts +221 -0
  318. package/src/core/url-loader.ts +388 -0
  319. package/src/helpers.test.ts +1 -1
  320. package/src/index.ts +3 -4
  321. package/src/plugin-operation/OperationPlugin.ts +24 -0
  322. package/src/plugin-operation/history/capability.ts +36 -0
  323. package/src/plugin-operation/history/errors.ts +7 -0
  324. package/src/plugin-operation/history/history-tracker.test.ts +374 -0
  325. package/src/plugin-operation/history/history-tracker.ts +128 -0
  326. package/src/plugin-operation/history/index.ts +9 -0
  327. package/src/plugin-operation/history/types.ts +17 -0
  328. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  329. package/src/plugin-operation/history/undo-registry.test.ts +72 -0
  330. package/src/plugin-operation/history/undo-registry.ts +54 -0
  331. package/src/plugin-operation/index.ts +6 -0
  332. package/src/plugin-operation/invoker-capability.ts +55 -0
  333. package/src/plugin-operation/meta.ts +12 -0
  334. package/src/plugin-operation/testing.ts +155 -0
  335. package/src/plugin-runtime/RuntimePlugin.ts +19 -0
  336. package/src/plugin-runtime/capability.ts +53 -0
  337. package/src/plugin-runtime/index.ts +5 -0
  338. package/src/plugin-runtime/meta.ts +12 -0
  339. package/src/testing/harness.ts +229 -0
  340. package/src/testing/index.ts +2 -0
  341. package/src/testing/react.test.tsx +48 -0
  342. package/src/testing/react.tsx +113 -0
  343. package/src/testing/service.ts +52 -0
  344. package/src/testing/withPluginManager.stories.tsx +15 -12
  345. package/src/testing/withPluginManager.tsx +78 -54
  346. package/src/ui/components/App/App.stories.tsx +92 -0
  347. package/src/ui/components/App/App.tsx +81 -0
  348. package/src/{playground/logger → ui/components/App}/index.ts +1 -1
  349. package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
  350. package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
  351. package/src/ui/components/Placeholder/index.ts +5 -0
  352. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +185 -0
  353. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
  354. package/src/ui/components/PluginManager/index.ts +5 -0
  355. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
  356. package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
  357. package/src/ui/components/Surface/SurfaceInfo.tsx +107 -0
  358. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  359. package/src/ui/components/Surface/context.ts +12 -0
  360. package/src/ui/components/Surface/index.ts +54 -0
  361. package/src/ui/components/Surface/types.test.ts +126 -0
  362. package/src/ui/components/Surface/types.ts +269 -0
  363. package/src/ui/components/index.ts +8 -0
  364. package/src/ui/hooks/index.ts +9 -0
  365. package/src/ui/hooks/useApp.test.tsx +159 -0
  366. package/src/ui/hooks/useApp.tsx +424 -0
  367. package/src/ui/hooks/useCapabilities.ts +67 -0
  368. package/src/ui/hooks/useLoading.tsx +76 -0
  369. package/src/ui/hooks/useSettingsState.ts +26 -0
  370. package/src/ui/hooks/useSurface.ts +13 -0
  371. package/src/ui/index.ts +6 -0
  372. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +270 -0
  373. package/src/vite-plugin/boot-loader/boot-loader.css +320 -0
  374. package/src/vite-plugin/boot-loader/boot-loader.js +325 -0
  375. package/src/vite-plugin/boot-loader/index.ts +5 -0
  376. package/src/vite-plugin/boot-loader/loader.ts +123 -0
  377. package/src/vite-plugin/composer/index.ts +306 -0
  378. package/src/vite-plugin/import-map/index.ts +527 -0
  379. package/src/vite-plugin/index.ts +10 -0
  380. package/src/vite-plugin/manifest.test.ts +46 -0
  381. package/src/vite-plugin/manifest.ts +57 -0
  382. package/src/vite-plugin/packages.ts +187 -0
  383. package/tsconfig.json +27 -22
  384. package/tsconfig.node.json +2 -4
  385. package/typedoc.json +2 -4
  386. package/vitest.config.ts +8 -3
  387. package/.eslintrc.cjs +0 -9
  388. package/README.yml +0 -5
  389. package/dist/lib/browser/app-graph-builder-BI4VVKSW.mjs +0 -137
  390. package/dist/lib/browser/app-graph-builder-BI4VVKSW.mjs.map +0 -7
  391. package/dist/lib/browser/chunk-DIBVO47Z.mjs +0 -406
  392. package/dist/lib/browser/chunk-DIBVO47Z.mjs.map +0 -7
  393. package/dist/lib/browser/chunk-EHM4UI3V.mjs +0 -1518
  394. package/dist/lib/browser/chunk-EHM4UI3V.mjs.map +0 -7
  395. package/dist/lib/browser/chunk-WWEJRWFX.mjs +0 -32
  396. package/dist/lib/browser/chunk-WWEJRWFX.mjs.map +0 -7
  397. package/dist/lib/browser/intent-dispatcher-XVBOMF2Y.mjs +0 -11
  398. package/dist/lib/browser/intent-resolver-3QMBXLIY.mjs +0 -39
  399. package/dist/lib/browser/intent-resolver-3QMBXLIY.mjs.map +0 -7
  400. package/dist/lib/browser/store-5H7XPJGA.mjs +0 -30
  401. package/dist/lib/browser/store-5H7XPJGA.mjs.map +0 -7
  402. package/dist/lib/browser/worker.mjs +0 -79
  403. package/dist/lib/node/app-graph-builder-H7QVE4MJ.cjs +0 -146
  404. package/dist/lib/node/app-graph-builder-H7QVE4MJ.cjs.map +0 -7
  405. package/dist/lib/node/chunk-G774ASXO.cjs +0 -58
  406. package/dist/lib/node/chunk-G774ASXO.cjs.map +0 -7
  407. package/dist/lib/node/chunk-VSOSVDQ3.cjs +0 -1551
  408. package/dist/lib/node/chunk-VSOSVDQ3.cjs.map +0 -7
  409. package/dist/lib/node/chunk-YGAY3H34.cjs +0 -429
  410. package/dist/lib/node/chunk-YGAY3H34.cjs.map +0 -7
  411. package/dist/lib/node/index.cjs +0 -193
  412. package/dist/lib/node/index.cjs.map +0 -7
  413. package/dist/lib/node/intent-dispatcher-C3SVKJ62.cjs +0 -32
  414. package/dist/lib/node/intent-dispatcher-C3SVKJ62.cjs.map +0 -7
  415. package/dist/lib/node/intent-resolver-IOJDYO34.cjs +0 -46
  416. package/dist/lib/node/intent-resolver-IOJDYO34.cjs.map +0 -7
  417. package/dist/lib/node/meta.json +0 -1
  418. package/dist/lib/node/store-ESF5VR57.cjs +0 -45
  419. package/dist/lib/node/store-ESF5VR57.cjs.map +0 -7
  420. package/dist/lib/node/testing/index.cjs +0 -119
  421. package/dist/lib/node/testing/index.cjs.map +0 -7
  422. package/dist/lib/node/worker.cjs +0 -101
  423. package/dist/lib/node/worker.cjs.map +0 -7
  424. package/dist/lib/node-esm/app-graph-builder-NROP6RPQ.mjs +0 -138
  425. package/dist/lib/node-esm/app-graph-builder-NROP6RPQ.mjs.map +0 -7
  426. package/dist/lib/node-esm/chunk-2J6FVECI.mjs +0 -1520
  427. package/dist/lib/node-esm/chunk-2J6FVECI.mjs.map +0 -7
  428. package/dist/lib/node-esm/chunk-FHNZZWP4.mjs +0 -407
  429. package/dist/lib/node-esm/chunk-FHNZZWP4.mjs.map +0 -7
  430. package/dist/lib/node-esm/chunk-I6BVZMAH.mjs +0 -34
  431. package/dist/lib/node-esm/chunk-I6BVZMAH.mjs.map +0 -7
  432. package/dist/lib/node-esm/intent-dispatcher-7JPGLCQ5.mjs +0 -12
  433. package/dist/lib/node-esm/intent-resolver-VY4X5UHN.mjs +0 -40
  434. package/dist/lib/node-esm/intent-resolver-VY4X5UHN.mjs.map +0 -7
  435. package/dist/lib/node-esm/store-UKD2R2KA.mjs +0 -31
  436. package/dist/lib/node-esm/store-UKD2R2KA.mjs.map +0 -7
  437. package/dist/lib/node-esm/worker.mjs +0 -80
  438. package/dist/types/src/App.d.ts +0 -43
  439. package/dist/types/src/App.d.ts.map +0 -1
  440. package/dist/types/src/common/collaboration.d.ts +0 -19
  441. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  442. package/dist/types/src/common/events.d.ts +0 -52
  443. package/dist/types/src/common/events.d.ts.map +0 -1
  444. package/dist/types/src/common/file.d.ts +0 -14
  445. package/dist/types/src/common/file.d.ts.map +0 -1
  446. package/dist/types/src/common/graph.d.ts +0 -21
  447. package/dist/types/src/common/graph.d.ts.map +0 -1
  448. package/dist/types/src/common/layout.d.ts +0 -281
  449. package/dist/types/src/common/layout.d.ts.map +0 -1
  450. package/dist/types/src/common/surface.d.ts +0 -65
  451. package/dist/types/src/common/surface.d.ts.map +0 -1
  452. package/dist/types/src/core/capabilities.d.ts +0 -114
  453. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  454. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  455. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  456. package/dist/types/src/core/events.d.ts.map +0 -1
  457. package/dist/types/src/core/manager.d.ts +0 -122
  458. package/dist/types/src/core/manager.d.ts.map +0 -1
  459. package/dist/types/src/core/manager.test.d.ts +0 -2
  460. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  461. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  462. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  463. package/dist/types/src/playground/debug/index.d.ts +0 -2
  464. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  465. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  466. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  467. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  468. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  469. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  470. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  471. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  472. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  473. package/dist/types/src/playground/generator/index.d.ts +0 -3
  474. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  475. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  476. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  477. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  478. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  479. package/dist/types/src/playground/layout/index.d.ts +0 -2
  480. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  481. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  482. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  483. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  484. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  485. package/dist/types/src/playground/logger/index.d.ts +0 -2
  486. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  487. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  488. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  489. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  490. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  491. package/dist/types/src/playground/playground.stories.d.ts +0 -10
  492. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  493. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  494. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  495. package/dist/types/src/plugin-intent/actions.d.ts +0 -38
  496. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  497. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  498. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  499. package/dist/types/src/plugin-intent/index.d.ts +0 -5
  500. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  501. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  502. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  503. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  504. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  505. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  506. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  507. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  508. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  509. package/dist/types/src/plugin-settings/actions.d.ts +0 -27
  510. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  511. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  512. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  513. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  514. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  515. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  516. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  517. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  518. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  519. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  520. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  521. package/dist/types/src/react/ErrorBoundary.d.ts +0 -31
  522. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  523. package/dist/types/src/react/IntentContext.d.ts +0 -8
  524. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  525. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  526. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  527. package/dist/types/src/react/Surface.d.ts +0 -12
  528. package/dist/types/src/react/Surface.d.ts.map +0 -1
  529. package/dist/types/src/react/Surface.stories.d.ts +0 -16
  530. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  531. package/dist/types/src/react/common.d.ts +0 -13
  532. package/dist/types/src/react/common.d.ts.map +0 -1
  533. package/dist/types/src/react/index.d.ts +0 -7
  534. package/dist/types/src/react/index.d.ts.map +0 -1
  535. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  536. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  537. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  538. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  539. package/dist/types/src/worker.d.ts +0 -4
  540. package/dist/types/src/worker.d.ts.map +0 -1
  541. package/project.json +0 -29
  542. package/src/App.tsx +0 -276
  543. package/src/common/collaboration.ts +0 -21
  544. package/src/common/events.ts +0 -77
  545. package/src/common/file.ts +0 -22
  546. package/src/common/graph.ts +0 -30
  547. package/src/common/layout.ts +0 -278
  548. package/src/common/surface.ts +0 -86
  549. package/src/core/capabilities.test.ts +0 -136
  550. package/src/core/capabilities.ts +0 -254
  551. package/src/core/manager.test.ts +0 -516
  552. package/src/core/manager.ts +0 -519
  553. package/src/playground/debug/Debug.tsx +0 -39
  554. package/src/playground/debug/plugin.ts +0 -17
  555. package/src/playground/generator/Main.tsx +0 -71
  556. package/src/playground/generator/Toolbar.tsx +0 -46
  557. package/src/playground/generator/generator.ts +0 -48
  558. package/src/playground/generator/index.ts +0 -6
  559. package/src/playground/generator/plugin.ts +0 -23
  560. package/src/playground/layout/Layout.tsx +0 -33
  561. package/src/playground/layout/plugin.ts +0 -17
  562. package/src/playground/logger/Toolbar.tsx +0 -29
  563. package/src/playground/logger/plugin.ts +0 -36
  564. package/src/playground/logger/schema.ts +0 -12
  565. package/src/playground/playground.stories.tsx +0 -42
  566. package/src/plugin-intent/IntentPlugin.ts +0 -20
  567. package/src/plugin-intent/actions.ts +0 -33
  568. package/src/plugin-intent/errors.ts +0 -39
  569. package/src/plugin-intent/index.ts +0 -8
  570. package/src/plugin-intent/intent-dispatcher.test.ts +0 -279
  571. package/src/plugin-intent/intent-dispatcher.ts +0 -333
  572. package/src/plugin-intent/intent.ts +0 -154
  573. package/src/plugin-settings/SettingsPlugin.ts +0 -35
  574. package/src/plugin-settings/actions.ts +0 -29
  575. package/src/plugin-settings/app-graph-builder.ts +0 -157
  576. package/src/plugin-settings/index.ts +0 -6
  577. package/src/plugin-settings/intent-resolver.ts +0 -34
  578. package/src/plugin-settings/store.ts +0 -33
  579. package/src/plugin-settings/translations.ts +0 -17
  580. package/src/react/ErrorBoundary.tsx +0 -45
  581. package/src/react/IntentContext.tsx +0 -34
  582. package/src/react/Surface.stories.tsx +0 -96
  583. package/src/react/Surface.tsx +0 -77
  584. package/src/react/common.ts +0 -12
  585. package/src/react/index.ts +0 -10
  586. package/src/react/useCapabilities.ts +0 -30
  587. package/src/react/useIntentResolver.ts +0 -22
  588. package/src/worker.ts +0 -11
  589. package/typedoc/.nojekyll +0 -1
  590. package/typedoc/assets/hierarchy.js +0 -1
  591. package/typedoc/assets/highlight.css +0 -106
  592. package/typedoc/assets/icons.js +0 -18
  593. package/typedoc/assets/icons.svg +0 -1
  594. package/typedoc/assets/main.js +0 -60
  595. package/typedoc/assets/navigation.js +0 -1
  596. package/typedoc/assets/search.js +0 -1
  597. package/typedoc/assets/style.css +0 -1640
  598. package/typedoc/classes/CollaborationActions.InsertContent.html +0 -421
  599. package/typedoc/classes/ErrorBoundary.html +0 -125
  600. package/typedoc/classes/IntentAction.ShowUndo.html +0 -227
  601. package/typedoc/classes/IntentAction.Track.html +0 -266
  602. package/typedoc/classes/LayoutAction.AddToast.html +0 -265
  603. package/typedoc/classes/LayoutAction.Close.html +0 -382
  604. package/typedoc/classes/LayoutAction.Expose.html +0 -265
  605. package/typedoc/classes/LayoutAction.Open.html +0 -1123
  606. package/typedoc/classes/LayoutAction.RevertWorkspace.html +0 -343
  607. package/typedoc/classes/LayoutAction.ScrollIntoView.html +0 -460
  608. package/typedoc/classes/LayoutAction.Set.html +0 -460
  609. package/typedoc/classes/LayoutAction.SetLayoutMode.html +0 -499
  610. package/typedoc/classes/LayoutAction.SwitchWorkspace.html +0 -265
  611. package/typedoc/classes/LayoutAction.UpdateComplementary.html +0 -616
  612. package/typedoc/classes/LayoutAction.UpdateDialog.html +0 -1123
  613. package/typedoc/classes/LayoutAction.UpdateLayout.html +0 -461
  614. package/typedoc/classes/LayoutAction.UpdatePopover.html +0 -1435
  615. package/typedoc/classes/LayoutAction.UpdateSidebar.html +0 -616
  616. package/typedoc/classes/Plugin.html +0 -6
  617. package/typedoc/classes/PluginContext.html +0 -38
  618. package/typedoc/classes/PluginManager.html +0 -43
  619. package/typedoc/classes/PluginModule.html +0 -18
  620. package/typedoc/classes/SettingsAction.Open.html +0 -226
  621. package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +0 -265
  622. package/typedoc/functions/Events.createStateEvent.html +0 -2
  623. package/typedoc/functions/IntentPlugin.html +0 -1
  624. package/typedoc/functions/SettingsPlugin.html +0 -1
  625. package/typedoc/functions/allOf.html +0 -2
  626. package/typedoc/functions/chain.html +0 -3
  627. package/typedoc/functions/contributes.html +0 -2
  628. package/typedoc/functions/createDispatcher.html +0 -3
  629. package/typedoc/functions/createIntent.html +0 -6
  630. package/typedoc/functions/createResolver.html +0 -2
  631. package/typedoc/functions/createSurface.html +0 -2
  632. package/typedoc/functions/defineCapability.html +0 -2
  633. package/typedoc/functions/defineEvent.html +0 -2
  634. package/typedoc/functions/defineModule.html +0 -2
  635. package/typedoc/functions/definePlugin.html +0 -2
  636. package/typedoc/functions/eventKey.html +0 -2
  637. package/typedoc/functions/getEvents.html +0 -2
  638. package/typedoc/functions/isAllOf.html +0 -2
  639. package/typedoc/functions/isOneOf.html +0 -2
  640. package/typedoc/functions/isSurfaceAvailable.html +0 -2
  641. package/typedoc/functions/lazy.html +0 -2
  642. package/typedoc/functions/oneOf.html +0 -2
  643. package/typedoc/functions/useApp.html +0 -6
  644. package/typedoc/functions/useAppGraph.html +0 -1
  645. package/typedoc/functions/useCapabilities.html +0 -3
  646. package/typedoc/functions/useCapability.html +0 -4
  647. package/typedoc/functions/useIntentDispatcher.html +0 -1
  648. package/typedoc/functions/useIntentResolver.html +0 -1
  649. package/typedoc/functions/useLayout.html +0 -1
  650. package/typedoc/functions/usePluginManager.html +0 -2
  651. package/typedoc/hierarchy.html +0 -1
  652. package/typedoc/index.html +0 -16
  653. package/typedoc/interfaces/LayoutAction.Toast.html +0 -10
  654. package/typedoc/media/LICENSE +0 -8
  655. package/typedoc/modules/Capabilities.html +0 -1
  656. package/typedoc/modules/CollaborationActions.html +0 -1
  657. package/typedoc/modules/Events.html +0 -1
  658. package/typedoc/modules/IntentAction.html +0 -1
  659. package/typedoc/modules/LayoutAction.html +0 -2
  660. package/typedoc/modules/SettingsAction.html +0 -1
  661. package/typedoc/modules.html +0 -1
  662. package/typedoc/types/ActivationEvent.html +0 -8
  663. package/typedoc/types/ActivationEvents.html +0 -2
  664. package/typedoc/types/AnyCapability.html +0 -1
  665. package/typedoc/types/AnyIntent.html +0 -1
  666. package/typedoc/types/AnyIntentChain.html +0 -1
  667. package/typedoc/types/AnyIntentEffectResult.html +0 -1
  668. package/typedoc/types/AnyIntentResolver.html +0 -1
  669. package/typedoc/types/AnyIntentResult.html +0 -1
  670. package/typedoc/types/Capabilities.FileUploader.html +0 -1
  671. package/typedoc/types/Capabilities.IntentResolver.html +0 -1
  672. package/typedoc/types/Capabilities.Layout.html +0 -1
  673. package/typedoc/types/Capabilities.Metadata.html +0 -1
  674. package/typedoc/types/Capabilities.ReactContext.html +0 -1
  675. package/typedoc/types/Capabilities.ReactRoot.html +0 -1
  676. package/typedoc/types/Capabilities.ReactSurface.html +0 -1
  677. package/typedoc/types/Capabilities.Settings.html +0 -4
  678. package/typedoc/types/Capability.html +0 -9
  679. package/typedoc/types/CreateAppOptions.html +0 -10
  680. package/typedoc/types/FileInfo.html +0 -1
  681. package/typedoc/types/Intent.html +0 -10
  682. package/typedoc/types/IntentChain.html +0 -6
  683. package/typedoc/types/IntentContext.html +0 -5
  684. package/typedoc/types/IntentData.html +0 -1
  685. package/typedoc/types/IntentDispatcher.html +0 -2
  686. package/typedoc/types/IntentDispatcherResult.html +0 -2
  687. package/typedoc/types/IntentEffectDefinition.html +0 -2
  688. package/typedoc/types/IntentEffectResult.html +0 -15
  689. package/typedoc/types/IntentParams.html +0 -3
  690. package/typedoc/types/IntentResolver.html +0 -2
  691. package/typedoc/types/IntentResultData.html +0 -1
  692. package/typedoc/types/IntentSchema.html +0 -1
  693. package/typedoc/types/IntentUndo.html +0 -2
  694. package/typedoc/types/InterfaceDef.html +0 -4
  695. package/typedoc/types/Label.html +0 -1
  696. package/typedoc/types/NodeSerializer.html +0 -8
  697. package/typedoc/types/PluginManagerOptions.html +0 -6
  698. package/typedoc/types/PluginMeta.html +0 -21
  699. package/typedoc/types/PromiseIntentDispatcher.html +0 -2
  700. package/typedoc/types/PromiseIntentUndo.html +0 -2
  701. package/typedoc/types/Resource.html +0 -1
  702. package/typedoc/types/ResourceKey.html +0 -1
  703. package/typedoc/types/ResourceLanguage.html +0 -1
  704. package/typedoc/types/SerializedNode.html +0 -4
  705. package/typedoc/types/SurfaceComponent.html +0 -2
  706. package/typedoc/types/SurfaceDefinition.html +0 -2
  707. package/typedoc/types/SurfaceProps.html +0 -4
  708. package/typedoc/variables/Capabilities.AnchorSort.html +0 -1
  709. package/typedoc/variables/Capabilities.AppGraph.html +0 -1
  710. package/typedoc/variables/Capabilities.AppGraphBuilder.html +0 -1
  711. package/typedoc/variables/Capabilities.AppGraphSerializer.html +0 -1
  712. package/typedoc/variables/Capabilities.ArtifactDefinition.html +0 -1
  713. package/typedoc/variables/Capabilities.FileUploader.html +0 -1
  714. package/typedoc/variables/Capabilities.IntentDispatcher.html +0 -1
  715. package/typedoc/variables/Capabilities.IntentResolver.html +0 -1
  716. package/typedoc/variables/Capabilities.Layout.html +0 -1
  717. package/typedoc/variables/Capabilities.Metadata.html +0 -1
  718. package/typedoc/variables/Capabilities.Null.html +0 -1
  719. package/typedoc/variables/Capabilities.PluginManager.html +0 -1
  720. package/typedoc/variables/Capabilities.ReactContext.html +0 -1
  721. package/typedoc/variables/Capabilities.ReactRoot.html +0 -1
  722. package/typedoc/variables/Capabilities.ReactSurface.html +0 -1
  723. package/typedoc/variables/Capabilities.RxRegistry.html +0 -1
  724. package/typedoc/variables/Capabilities.Settings.html +0 -1
  725. package/typedoc/variables/Capabilities.SettingsStore.html +0 -1
  726. package/typedoc/variables/Capabilities.Tools.html +0 -1
  727. package/typedoc/variables/Capabilities.Translations.html +0 -1
  728. package/typedoc/variables/Events.AppGraphReady.html +0 -2
  729. package/typedoc/variables/Events.DispatcherReady.html +0 -2
  730. package/typedoc/variables/Events.LayoutReady.html +0 -1
  731. package/typedoc/variables/Events.SettingsReady.html +0 -2
  732. package/typedoc/variables/Events.SetupAppGraph.html +0 -2
  733. package/typedoc/variables/Events.SetupArtifactDefinition.html +0 -2
  734. package/typedoc/variables/Events.SetupIntentResolver.html +0 -2
  735. package/typedoc/variables/Events.SetupMetadata.html +0 -2
  736. package/typedoc/variables/Events.SetupReactSurface.html +0 -2
  737. package/typedoc/variables/Events.SetupSettings.html +0 -2
  738. package/typedoc/variables/Events.SetupTranslations.html +0 -2
  739. package/typedoc/variables/Events.Startup.html +0 -2
  740. package/typedoc/variables/FileInfoSchema.html +0 -1
  741. package/typedoc/variables/INTENT_ACTION.html +0 -1
  742. package/typedoc/variables/INTENT_PLUGIN.html +0 -1
  743. package/typedoc/variables/LAYOUT_ACTION.html +0 -1
  744. package/typedoc/variables/LAYOUT_PLUGIN.html +0 -1
  745. package/typedoc/variables/Label.html +0 -1
  746. package/typedoc/variables/LayoutAction.Toast.html +0 -1
  747. package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +0 -1
  748. package/typedoc/variables/PluginManagerProvider.html +0 -2
  749. package/typedoc/variables/Resource.html +0 -2
  750. package/typedoc/variables/ResourceKey.html +0 -1
  751. package/typedoc/variables/ResourceLanguage.html +0 -1
  752. package/typedoc/variables/SETTINGS_ACTION.html +0 -1
  753. package/typedoc/variables/SETTINGS_ID.html +0 -1
  754. package/typedoc/variables/SETTINGS_KEY.html +0 -1
  755. package/typedoc/variables/SETTINGS_PLUGIN.html +0 -1
  756. package/typedoc/variables/Surface.html +0 -2
  757. package/typedoc/variables/defaultFileTypes.html +0 -1
  758. /package/dist/lib/browser/{intent-dispatcher-XVBOMF2Y.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  759. /package/dist/lib/browser/{worker.mjs.map → common/activation-events.mjs.map} +0 -0
  760. /package/dist/lib/{node-esm/intent-dispatcher-7JPGLCQ5.mjs.map → browser/common/capabilities.mjs.map} +0 -0
  761. /package/dist/lib/{node-esm/worker.mjs.map → browser/core/activation-event.mjs.map} +0 -0
@@ -0,0 +1,35 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ activation_event_exports
4
+ } from "./chunk-XOCUANHO.mjs";
5
+ import {
6
+ __export
7
+ } from "./chunk-HSLMI22Q.mjs";
8
+
9
+ // src/common/activation-events.ts
10
+ var activation_events_exports = {};
11
+ __export(activation_events_exports, {
12
+ ManagedRuntimeReady: () => ManagedRuntimeReady,
13
+ OperationInvokerReady: () => OperationInvokerReady,
14
+ SetupLayer: () => SetupLayer,
15
+ SetupOperationHandler: () => SetupOperationHandler,
16
+ SetupReactSurface: () => SetupReactSurface,
17
+ Startup: () => Startup
18
+ });
19
+ var Startup = activation_event_exports.make("org.dxos.app-framework.event.startup");
20
+ var SetupReactSurface = activation_event_exports.make("org.dxos.app-framework.event.setup-react-surface");
21
+ var SetupOperationHandler = activation_event_exports.make("org.dxos.app-framework.event.setup-operation-handler");
22
+ var SetupLayer = activation_event_exports.make("org.dxos.app-framework.event.setup-layer");
23
+ var OperationInvokerReady = activation_event_exports.make("org.dxos.app-framework.event.operation-invoker-ready");
24
+ var ManagedRuntimeReady = activation_event_exports.make("org.dxos.app-framework.event.managed-runtime-ready");
25
+
26
+ export {
27
+ Startup,
28
+ SetupReactSurface,
29
+ SetupOperationHandler,
30
+ SetupLayer,
31
+ OperationInvokerReady,
32
+ ManagedRuntimeReady,
33
+ activation_events_exports
34
+ };
35
+ //# sourceMappingURL=chunk-6XW6LET6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/common/activation-events.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent as ActivationEvent$ } from '../core';\n\n/**\n * Fired when the app is started.\n */\nexport const Startup = ActivationEvent$.make('org.dxos.app-framework.event.startup');\n\n//\n// Dependent Events\n//\n\n/**\n * Fired to load any newly available surfaces.\n */\nexport const SetupReactSurface = ActivationEvent$.make('org.dxos.app-framework.event.setup-react-surface');\n\n/**\n * Fired before the operation invoker is activated.\n */\nexport const SetupOperationHandler = ActivationEvent$.make('org.dxos.app-framework.event.setup-operation-handler');\n\n/**\n * Fired before the managed runtime is created.\n * Plugins should contribute their Layer capabilities before this event.\n */\nexport const SetupLayer = ActivationEvent$.make('org.dxos.app-framework.event.setup-layer');\n\n//\n// Triggered Events\n//\n\n/**\n * Fired after the operation invoker is ready.\n */\nexport const OperationInvokerReady = ActivationEvent$.make('org.dxos.app-framework.event.operation-invoker-ready');\n\n/**\n * Fired after the managed runtime is ready.\n */\nexport const ManagedRuntimeReady = ActivationEvent$.make('org.dxos.app-framework.event.managed-runtime-ready');\n"],
5
+ "mappings": ";;;;;;;;;AAAA;;;;;;;;;AASO,IAAMA,UAAUC,yBAAiBC,KAAK,sCAAA;AAStC,IAAMC,oBAAoBF,yBAAiBC,KAAK,kDAAA;AAKhD,IAAME,wBAAwBH,yBAAiBC,KAAK,sDAAA;AAMpD,IAAMG,aAAaJ,yBAAiBC,KAAK,0CAAA;AASzC,IAAMI,wBAAwBL,yBAAiBC,KAAK,sDAAA;AAKpD,IAAMK,sBAAsBN,yBAAiBC,KAAK,oDAAA;",
6
+ "names": ["Startup", "ActivationEvent$", "make", "SetupReactSurface", "SetupOperationHandler", "SetupLayer", "OperationInvokerReady", "ManagedRuntimeReady"]
7
+ }
@@ -0,0 +1,143 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ UndoOperation
4
+ } from "./chunk-SBS2YMPT.mjs";
5
+ import {
6
+ __export
7
+ } from "./chunk-HSLMI22Q.mjs";
8
+
9
+ // src/plugin-operation/history/errors.ts
10
+ import { BaseError } from "@dxos/errors";
11
+ var EmptyHistoryError = class extends BaseError.extend("EmptyHistoryError", "Cannot undo: history is empty.") {
12
+ };
13
+
14
+ // src/plugin-operation/history/undo-mapping.ts
15
+ var undo_mapping_exports = {};
16
+ __export(undo_mapping_exports, {
17
+ make: () => make,
18
+ resolveMessage: () => resolveMessage
19
+ });
20
+ var make = (props) => props;
21
+ var resolveMessage = (message, input, output) => {
22
+ if (message === void 0) {
23
+ return void 0;
24
+ }
25
+ if (typeof message === "function") {
26
+ return message(input, output);
27
+ }
28
+ return message;
29
+ };
30
+
31
+ // src/plugin-operation/history/undo-registry.ts
32
+ var undo_registry_exports = {};
33
+ __export(undo_registry_exports, {
34
+ make: () => make2
35
+ });
36
+ var make2 = (getMappings) => {
37
+ const lookup = (operation) => {
38
+ const mappings = getMappings();
39
+ const mapping = mappings.find((m) => m.operation.meta.key === operation.meta.key);
40
+ if (!mapping) {
41
+ return void 0;
42
+ }
43
+ return {
44
+ inverse: mapping.inverse,
45
+ deriveContext: mapping.deriveContext,
46
+ message: mapping.message
47
+ };
48
+ };
49
+ return {
50
+ lookup
51
+ };
52
+ };
53
+
54
+ // src/plugin-operation/history/history-tracker.ts
55
+ var history_tracker_exports = {};
56
+ __export(history_tracker_exports, {
57
+ make: () => make3
58
+ });
59
+ import * as Effect from "effect/Effect";
60
+ import * as Stream from "effect/Stream";
61
+ import { runAndForwardErrors } from "@dxos/effect";
62
+ import { log } from "@dxos/log";
63
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/plugin-operation/history/history-tracker.ts";
64
+ var HISTORY_LIMIT = 100;
65
+ var make3 = (invoker, undoRegistry) => {
66
+ const history = [];
67
+ const handleInvocation = (event) => {
68
+ const mapping = undoRegistry.lookup(event.operation);
69
+ if (!mapping) {
70
+ return;
71
+ }
72
+ const inverseInput = mapping.deriveContext(event.input, event.output);
73
+ if (inverseInput === void 0) {
74
+ log("operation not undoable", {
75
+ key: event.operation.meta.key
76
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 29, S: void 0 });
77
+ return;
78
+ }
79
+ const entry = {
80
+ operation: event.operation,
81
+ input: event.input,
82
+ output: event.output,
83
+ inverse: mapping.inverse,
84
+ inverseInput,
85
+ timestamp: event.timestamp
86
+ };
87
+ history.push(entry);
88
+ log("history entry added", {
89
+ key: event.operation.meta.key,
90
+ historyLength: history.length
91
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 43, S: void 0 });
92
+ if (history.length > HISTORY_LIMIT) {
93
+ history.splice(0, history.length - HISTORY_LIMIT);
94
+ }
95
+ const resolvedMessage = resolveMessage(mapping.message, event.input, event.output);
96
+ Effect.runFork(invoker.invoke(UndoOperation.ShowUndo, {
97
+ message: resolvedMessage
98
+ }));
99
+ };
100
+ Effect.runFork(Stream.fromPubSub(invoker.invocations).pipe(Stream.runForEach((event) => Effect.sync(() => handleInvocation(event)))));
101
+ const undo = () => {
102
+ return Effect.gen(function* () {
103
+ const entry = history.pop();
104
+ if (!entry) {
105
+ return yield* Effect.fail(new EmptyHistoryError());
106
+ }
107
+ log("undoing operation", {
108
+ key: entry.operation.meta.key,
109
+ inverseKey: entry.inverse.meta.key
110
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 65, S: this });
111
+ yield* invoker._invokeCore(entry.inverse, entry.inverseInput);
112
+ log("undo completed", {
113
+ key: entry.operation.meta.key
114
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 71, S: this });
115
+ });
116
+ };
117
+ const undoPromise = async () => {
118
+ return runAndForwardErrors(undo()).then(() => ({})).catch((error) => {
119
+ log.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 78, S: void 0 });
120
+ return {
121
+ error
122
+ };
123
+ });
124
+ };
125
+ const canUndo = () => {
126
+ return history.length > 0;
127
+ };
128
+ return {
129
+ undo,
130
+ undoPromise,
131
+ canUndo
132
+ };
133
+ };
134
+
135
+ export {
136
+ EmptyHistoryError,
137
+ undo_mapping_exports,
138
+ make2 as make,
139
+ undo_registry_exports,
140
+ make3 as make2,
141
+ history_tracker_exports
142
+ };
143
+ //# sourceMappingURL=chunk-D347W3KO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin-operation/history/errors.ts", "../../../src/plugin-operation/history/undo-mapping.ts", "../../../src/plugin-operation/history/undo-registry.ts", "../../../src/plugin-operation/history/history-tracker.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { BaseError } from '@dxos/errors';\n\nexport class EmptyHistoryError extends BaseError.extend('EmptyHistoryError', 'Cannot undo: history is empty.') {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { Operation } from '@dxos/compute';\n\n/**\n * Label type for translatable text (canonical definition in @dxos/app-toolkit).\n */\ntype Label = string | [string, { ns: string; count?: number; defaultValue?: string }];\n\n/**\n * Extract the input type from an OperationDefinition.\n */\nexport type InputOf<T> = T extends Operation.Definition<infer I, any> ? I : never;\n\n/**\n * Extract the output type from an OperationDefinition.\n */\nexport type OutputOf<T> = T extends Operation.Definition<any, infer O> ? O : never;\n\n/**\n * Message provider for undo toast.\n * Can be a static Label or a function that derives the message from input/output.\n */\nexport type MessageProvider<Op extends Operation.Definition<any, any>> =\n | Label\n | ((input: InputOf<Op>, output: OutputOf<Op>) => Label);\n\n/**\n * Undo mapping that links a forward operation to its inverse.\n * Type parameters ensure deriveContext has correctly typed arguments.\n *\n * @template Op - The forward operation definition type.\n * @template Inv - The inverse operation definition type.\n */\nexport interface UndoMapping<\n Op extends Operation.Definition<any, any> = Operation.Definition<any, any>,\n Inv extends Operation.Definition<any, any> = Operation.Definition<any, any>,\n> {\n /** The forward operation. */\n readonly operation: Op;\n\n /** The inverse operation to invoke for undo. */\n readonly inverse: Inv;\n\n /**\n * Derives the input for the inverse operation from the forward operation's input and output.\n * @param input - The input that was passed to the forward operation.\n * @param output - The output that was returned by the forward operation.\n * @returns The input to pass to the inverse operation, or undefined to indicate the operation is not undoable.\n */\n readonly deriveContext: (input: InputOf<Op>, output: OutputOf<Op>) => InputOf<Inv> | undefined;\n\n /**\n * Optional message to show in the undo toast.\n * Can be a static Label or a function that derives the message from input/output.\n */\n readonly message?: MessageProvider<Op>;\n}\n\n/**\n * Props for creating an UndoMapping.\n */\nexport interface UndoMappingProps<\n Op extends Operation.Definition<any, any>,\n Inv extends Operation.Definition<any, any>,\n> {\n /** The forward operation. */\n operation: Op;\n\n /** The inverse operation to invoke for undo. */\n inverse: Inv;\n\n /**\n * Derives the input for the inverse operation from the forward operation's input and output.\n * Return undefined to indicate the operation is not undoable.\n */\n deriveContext: (input: InputOf<Op>, output: OutputOf<Op>) => InputOf<Inv> | undefined;\n\n /**\n * Optional message to show in the undo toast.\n * Can be a static Label or a function that derives the message from input/output.\n */\n message?: MessageProvider<Op>;\n}\n\n/**\n * Creates a type-safe undo mapping.\n *\n * @example\n * ```ts\n * // Static message\n * const mapping = UndoMapping.make({\n * operation: DeleteThread,\n * inverse: RestoreThread,\n * deriveContext: (input, output) => ({\n * thread: output.thread,\n * anchor: output.anchor,\n * }),\n * message: ['thread deleted label', { ns: '@dxos/plugin-thread' }],\n * });\n *\n * // Dynamic message based on input/output\n * const mapping = UndoMapping.make({\n * operation: RemoveObjects,\n * inverse: RestoreObjects,\n * deriveContext: (_input, output) => output,\n * message: (input, _output) =>\n * input.objects.length === 1\n * ? ['object deleted label', { ns: getTypename(input.objects[0]) }]\n * : ['objects deleted label', { ns: '@dxos/plugin-space' }],\n * });\n * ```\n */\nexport const make = <Op extends Operation.Definition<any, any>, Inv extends Operation.Definition<any, any>>(\n props: UndoMappingProps<Op, Inv>,\n): UndoMapping<Op, Inv> => props;\n\n/**\n * Resolves a message provider to a Label.\n */\nexport const resolveMessage = <Op extends Operation.Definition<any, any>>(\n message: MessageProvider<Op> | undefined,\n input: InputOf<Op>,\n output: OutputOf<Op>,\n): Label | undefined => {\n if (message === undefined) {\n return undefined;\n }\n if (typeof message === 'function') {\n return message(input, output);\n }\n return message;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { Operation } from '@dxos/compute';\n\nimport type * as UndoMapping from './undo-mapping';\n\n//\n// Public Interface\n//\n\n/**\n * Lookup result from UndoRegistry.\n */\nexport type UndoMappingResult = {\n inverse: Operation.Definition<any, any>;\n /** Returns undefined to indicate the operation is not undoable. */\n deriveContext: (input: any, output: any) => any | undefined;\n /** Message provider - may be a static Label or a function. */\n message?: UndoMapping.MessageProvider<Operation.Definition<any, any>>;\n};\n\n/**\n * UndoRegistry interface - looks up inverse operations.\n */\nexport interface UndoRegistry {\n lookup: (operation: Operation.Definition<any, any>) => UndoMappingResult | undefined;\n}\n\n//\n// Factory\n//\n\n/**\n * Creates an UndoRegistry that looks up inverse operations.\n */\nexport const make = (getMappings: () => UndoMapping.UndoMapping[]): UndoRegistry => {\n const lookup = (operation: Operation.Definition<any, any>): UndoMappingResult | undefined => {\n const mappings = getMappings();\n const mapping = mappings.find((m) => m.operation.meta.key === operation.meta.key);\n if (!mapping) {\n return undefined;\n }\n\n return {\n inverse: mapping.inverse,\n deriveContext: mapping.deriveContext,\n message: mapping.message,\n };\n };\n\n return { lookup };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Stream from 'effect/Stream';\n\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { OperationInvoker } from '@dxos/operation';\n\nimport { UndoOperation } from '../../common';\nimport { EmptyHistoryError } from './errors';\nimport type { HistoryEntry } from './types';\nimport { resolveMessage } from './undo-mapping';\nimport type { UndoRegistry } from './undo-registry';\n\nconst HISTORY_LIMIT = 100;\n\n//\n// Public Interface\n//\n\n/**\n * HistoryTracker interface - tracks operation history and provides undo.\n */\nexport interface HistoryTracker {\n undo: () => Effect.Effect<void, Error>;\n undoPromise: () => Promise<{ error?: Error }>;\n canUndo: () => boolean;\n}\n\n//\n// Factory\n//\n\n/**\n * Creates a HistoryTracker that subscribes to invocation events and provides undo.\n */\nexport const make = (\n invoker: OperationInvoker.OperationInvokerInternal,\n undoRegistry: UndoRegistry,\n): HistoryTracker => {\n const history: HistoryEntry[] = [];\n\n // Subscribe to invocation stream.\n const handleInvocation = (event: OperationInvoker.InvocationEvent) => {\n const mapping = undoRegistry.lookup(event.operation);\n if (!mapping) {\n // Operation is not undoable, skip.\n return;\n }\n\n const inverseInput = mapping.deriveContext(event.input, event.output);\n if (inverseInput === undefined) {\n // Operation is conditionally not undoable (deriveContext returned undefined).\n log('operation not undoable', { key: event.operation.meta.key });\n return;\n }\n\n const entry: HistoryEntry = {\n operation: event.operation,\n input: event.input,\n output: event.output,\n inverse: mapping.inverse,\n inverseInput,\n timestamp: event.timestamp,\n };\n\n history.push(entry);\n log('history entry added', { key: event.operation.meta.key, historyLength: history.length });\n\n // Trim history if it exceeds limit.\n if (history.length > HISTORY_LIMIT) {\n history.splice(0, history.length - HISTORY_LIMIT);\n }\n\n // Show undo toast (resolve message if it's a function).\n const resolvedMessage = resolveMessage(mapping.message, event.input, event.output);\n Effect.runFork(\n invoker.invoke(UndoOperation.ShowUndo, {\n message: resolvedMessage,\n }),\n );\n };\n\n // Fork a fiber to consume the invocation stream.\n Effect.runFork(\n Stream.fromPubSub(invoker.invocations).pipe(\n Stream.runForEach((event) => Effect.sync(() => handleInvocation(event))),\n ),\n );\n\n const undo = (): Effect.Effect<void, Error> => {\n return Effect.gen(function* () {\n const entry = history.pop();\n if (!entry) {\n return yield* Effect.fail(new EmptyHistoryError());\n }\n\n log('undoing operation', { key: entry.operation.meta.key, inverseKey: entry.inverse.meta.key });\n\n // Use _invokeCore to skip event emission (avoid undo-of-undo loops).\n yield* invoker._invokeCore(entry.inverse, entry.inverseInput);\n\n log('undo completed', { key: entry.operation.meta.key });\n });\n };\n\n const undoPromise = async (): Promise<{ error?: Error }> => {\n return runAndForwardErrors(undo())\n .then(() => ({}))\n .catch((error) => {\n log.catch(error);\n return { error };\n });\n };\n\n const canUndo = (): boolean => {\n return history.length > 0;\n };\n\n return {\n undo,\n undoPromise,\n canUndo,\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["BaseError", "EmptyHistoryError", "extend", "make", "props", "resolveMessage", "message", "input", "output", "undefined", "make", "getMappings", "lookup", "operation", "mappings", "mapping", "find", "m", "meta", "key", "undefined", "inverse", "deriveContext", "message", "make", "Effect", "Stream", "runAndForwardErrors", "log", "HISTORY_LIMIT", "make", "handleInvocation", "log", "input", "event", "output", "inverse", "mapping", "inverseInput", "timestamp", "history", "entry", "key", "operation", "historyLength", "length", "message", "resolvedMessage", "Effect", "fail", "inverseKey", "invoker", "_invokeCore", "meta", "error", "undoPromise", "canUndo"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
7
+
8
+ export {
9
+ __export
10
+ };
11
+ //# sourceMappingURL=chunk-HSLMI22Q.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,214 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ getModuleTag
4
+ } from "./chunk-SDJ4B2LU.mjs";
5
+ import {
6
+ __export
7
+ } from "./chunk-HSLMI22Q.mjs";
8
+
9
+ // src/core/plugin.ts
10
+ var plugin_exports = {};
11
+ __export(plugin_exports, {
12
+ LazyPluginError: () => LazyPluginError,
13
+ PluginModuleTypeId: () => PluginModuleTypeId,
14
+ PluginTypeId: () => PluginTypeId,
15
+ Service: () => Service,
16
+ activate: () => activate,
17
+ addModule: () => addModule,
18
+ define: () => define,
19
+ isLazy: () => isLazy,
20
+ isPlugin: () => isPlugin,
21
+ isPluginModule: () => isPluginModule,
22
+ lazy: () => lazy,
23
+ make: () => make,
24
+ reset: () => reset,
25
+ resolveLazy: () => resolveLazy,
26
+ shutdown: () => shutdown
27
+ });
28
+ import * as Context from "effect/Context";
29
+ import * as Effect from "effect/Effect";
30
+ import * as Option from "effect/Option";
31
+ import * as Pipeable from "effect/Pipeable";
32
+ import { BaseError } from "@dxos/errors";
33
+ import { invariant } from "@dxos/invariant";
34
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/core/plugin.ts";
35
+ var Service = class extends Context.Tag("@dxos/app-framework/PluginManager")() {
36
+ };
37
+ var activate = (event) => Effect.flatMap(Service, (manager) => manager.activate(event));
38
+ var reset = (event) => Effect.flatMap(Service, (manager) => manager.reset(event));
39
+ var shutdown = () => Effect.flatMap(Service, (manager) => manager.shutdown());
40
+ var computeModuleId = (pluginId, moduleName) => {
41
+ return `${pluginId}.module.${moduleName}`;
42
+ };
43
+ var PluginModuleTypeId = /* @__PURE__ */ Symbol.for("@dxos/app-framework/PluginModule");
44
+ var isPluginModule = (value) => {
45
+ return typeof value === "object" && value !== null && PluginModuleTypeId in value;
46
+ };
47
+ var PluginModuleImpl = class {
48
+ [PluginModuleTypeId] = PluginModuleTypeId;
49
+ id;
50
+ activatesOn;
51
+ firesBeforeActivation;
52
+ firesAfterActivation;
53
+ activate;
54
+ constructor(options) {
55
+ this.id = options.id;
56
+ this.activatesOn = options.activatesOn;
57
+ this.firesBeforeActivation = options.firesBeforeActivation;
58
+ this.firesAfterActivation = options.firesAfterActivation;
59
+ this.activate = options.activate;
60
+ }
61
+ };
62
+ var PluginTypeId = /* @__PURE__ */ Symbol.for("@dxos/app-framework/Plugin");
63
+ var isPlugin = (value) => {
64
+ return typeof value === "object" && value !== null && PluginTypeId in value;
65
+ };
66
+ var PluginImpl = class {
67
+ _meta;
68
+ _modules;
69
+ [PluginTypeId] = PluginTypeId;
70
+ constructor(_meta, _modules) {
71
+ this._meta = _meta;
72
+ this._modules = _modules;
73
+ }
74
+ get meta() {
75
+ return this._meta;
76
+ }
77
+ get modules() {
78
+ return this._modules;
79
+ }
80
+ };
81
+ var PluginBuilderImpl = class {
82
+ meta;
83
+ _modules = [];
84
+ constructor(meta) {
85
+ this.meta = meta;
86
+ }
87
+ get modules() {
88
+ return this._modules;
89
+ }
90
+ addModule(moduleOptions) {
91
+ this._modules.push(moduleOptions);
92
+ return this;
93
+ }
94
+ pipe() {
95
+ return Pipeable.pipeArguments(this, arguments);
96
+ }
97
+ };
98
+ var define = (meta) => new PluginBuilderImpl(meta);
99
+ function addModule(moduleOptionsOrBuilder, moduleOptions) {
100
+ if (moduleOptions !== void 0) {
101
+ return moduleOptionsOrBuilder.addModule(moduleOptions);
102
+ }
103
+ const moduleOpts = moduleOptionsOrBuilder;
104
+ return (builder) => builder.addModule(moduleOpts);
105
+ }
106
+ var resolveModule = (meta, module, options) => {
107
+ const moduleOptions = typeof module === "function" ? module(options) : module;
108
+ const id = Option.fromNullable(moduleOptions.id).pipe(Option.match({
109
+ onNone: () => {
110
+ const exportName = getModuleTag(moduleOptions.activate);
111
+ invariant(exportName, `Plugin module missing name. Plugin: ${meta.id}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 131, S: void 0, A: ["exportName", "`Plugin module missing name. Plugin: ${meta.id}`"] });
112
+ return computeModuleId(meta.id, exportName);
113
+ },
114
+ onSome: (id2) => computeModuleId(meta.id, id2)
115
+ }));
116
+ return new PluginModuleImpl({
117
+ ...moduleOptions,
118
+ id
119
+ });
120
+ };
121
+ function make(builder) {
122
+ const meta = builder.meta;
123
+ const factory = (options) => {
124
+ const modules = builder.modules.map((module) => resolveModule(meta, module, options));
125
+ return new PluginImpl(meta, modules);
126
+ };
127
+ return Object.assign(factory, {
128
+ meta
129
+ });
130
+ }
131
+ var LazyTag = /* @__PURE__ */ Symbol.for("@dxos/app-framework/Plugin/Lazy");
132
+ var lazy = (meta, loader) => {
133
+ const factory = (options) => {
134
+ const stub = new PluginImpl(meta, []);
135
+ Object.defineProperty(stub, LazyTag, {
136
+ value: {
137
+ loader,
138
+ options
139
+ },
140
+ enumerable: false
141
+ });
142
+ return stub;
143
+ };
144
+ return Object.assign(factory, {
145
+ meta
146
+ });
147
+ };
148
+ var isLazy = (plugin) => LazyTag in plugin;
149
+ var LazyPluginError = class extends BaseError.extend("LazyPluginError", "Failed to resolve lazy plugin") {
150
+ };
151
+ var resolveLazy = (plugin) => Effect.gen(function* () {
152
+ if (!isLazy(plugin)) {
153
+ return plugin;
154
+ }
155
+ const id = plugin.meta.id;
156
+ const { loader, options } = plugin[LazyTag];
157
+ const mod = yield* Effect.tryPromise({
158
+ try: loader,
159
+ catch: (error) => new LazyPluginError({
160
+ context: {
161
+ id,
162
+ reason: "load-failed"
163
+ },
164
+ cause: error
165
+ })
166
+ });
167
+ if (!mod || typeof mod.default !== "function") {
168
+ return yield* Effect.fail(new LazyPluginError({
169
+ context: {
170
+ id,
171
+ reason: "missing-default"
172
+ }
173
+ }));
174
+ }
175
+ const result = mod.default(options);
176
+ if (!isPlugin(result)) {
177
+ return yield* Effect.fail(new LazyPluginError({
178
+ context: {
179
+ id,
180
+ reason: "invalid-plugin"
181
+ }
182
+ }));
183
+ }
184
+ if (result.meta.id !== id) {
185
+ return yield* Effect.fail(new LazyPluginError({
186
+ context: {
187
+ id,
188
+ reason: "meta-mismatch",
189
+ returnedId: result.meta.id
190
+ }
191
+ }));
192
+ }
193
+ return result;
194
+ });
195
+
196
+ export {
197
+ Service,
198
+ activate,
199
+ reset,
200
+ shutdown,
201
+ PluginModuleTypeId,
202
+ isPluginModule,
203
+ PluginTypeId,
204
+ isPlugin,
205
+ define,
206
+ addModule,
207
+ make,
208
+ lazy,
209
+ isLazy,
210
+ LazyPluginError,
211
+ resolveLazy,
212
+ plugin_exports
213
+ };
214
+ //# sourceMappingURL=chunk-HTBJU5FX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/plugin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Pipeable from 'effect/Pipeable';\n\nimport { BaseError } from '@dxos/errors';\nimport { invariant } from '@dxos/invariant';\n\nimport type * as ActivationEvent from './activation-event';\nimport * as Capability from './capability';\nimport type * as PluginManager from './plugin-manager';\n\n//\n// Plugin Service Layer\n//\n\n/**\n * Effect Context.Tag for accessing PluginManager via the Effect layer system.\n * This allows lifecycle operations to access the plugin manager without having it passed as an argument.\n */\nexport class Service extends Context.Tag('@dxos/app-framework/PluginManager')<Service, PluginManager.PluginManager>() {}\n\n//\n// Lifecycle Functions\n//\n\n/**\n * Activates plugins based on the activation event.\n * Accesses the PluginManager via the Effect layer system.\n * @param event The activation event.\n * @returns Whether the activation was successful.\n */\nexport const activate = (event: ActivationEvent.ActivationEvent): Effect.Effect<boolean, Error, Service> =>\n Effect.flatMap(Service, (manager) => manager.activate(event));\n\n/**\n * Re-activates the modules that were activated by the event.\n * Accesses the PluginManager via the Effect layer system.\n * @param event The activation event.\n * @returns Whether the reset was successful.\n */\nexport const reset = (event: ActivationEvent.ActivationEvent): Effect.Effect<boolean, Error, Service> =>\n Effect.flatMap(Service, (manager) => manager.reset(event));\n\n/**\n * Shuts down the plugin manager, deactivating all active modules and clearing lifecycle state.\n * Accesses the PluginManager via the Effect layer system.\n */\nexport const shutdown = (): Effect.Effect<boolean, Error, Service> =>\n Effect.flatMap(Service, (manager) => manager.shutdown());\n\n/**\n * Computes a module ID from plugin ID and export name.\n */\nconst computeModuleId = (pluginId: string, moduleName: string): string => {\n return `${pluginId}.module.${moduleName}`;\n};\n\n/**\n * Identifier denoting a PluginModule.\n */\nexport const PluginModuleTypeId: unique symbol = Symbol.for('@dxos/app-framework/PluginModule');\nexport type PluginModuleTypeId = typeof PluginModuleTypeId;\n\n/**\n * Type guard to check if a value is a PluginModule.\n */\nexport const isPluginModule = (value: unknown): value is PluginModule => {\n return typeof value === 'object' && value !== null && PluginModuleTypeId in value;\n};\n\n/**\n * A unit of containment of modular functionality that can be provided to an application.\n * Activation of a module is async allowing for code to split and loaded lazily.\n */\nexport interface PluginModule {\n readonly [PluginModuleTypeId]: PluginModuleTypeId;\n /**\n * Unique id of the module.\n */\n id: string;\n\n /**\n * Events for which the module will be activated.\n */\n activatesOn: ActivationEvent.Events;\n\n /**\n * Events that this module fires *before* its own activation runs.\n *\n * When this module is asked to activate (via {@link activatesOn}), the\n * plugin manager first activates every event listed here, ensuring any\n * other modules that contribute to those events have completed before\n * this module's {@link activate} body executes. These events are fired\n * by the framework on this module's behalf — the module does not need\n * to wait for some other code to fire them.\n *\n * The module is marked as needing reset if a module activated by one\n * of these events is later removed.\n *\n * Read as: \"this module fires these events before [its] activation\".\n */\n firesBeforeActivation?: ActivationEvent.ActivationEvent[];\n\n /**\n * Events that this module fires *after* its own activation completes.\n *\n * Once this module's {@link activate} body has finished executing, the\n * plugin manager activates every event listed here, causing any modules\n * listening on those events to run. These events are fired by the\n * framework on this module's behalf as part of this module's lifecycle.\n *\n * Read as: \"this module fires these events after [its] activation\".\n */\n firesAfterActivation?: ActivationEvent.ActivationEvent[];\n\n /**\n * Called when the module is activated.\n * CapabilityManager is accessed via the Effect layer system (Capability.Service).\n * PluginManager is accessed via Plugin.Service.\n * @param props Optional props passed to the module.\n * @returns The capabilities of the module.\n */\n activate: (props?: any) => Effect.Effect<Capability.ModuleReturn, Error, Capability.Service | Service | never>;\n}\n\nexport type PluginModuleOptions = Omit<PluginModule, 'id' | typeof PluginModuleTypeId> & { id?: string };\n\nclass PluginModuleImpl implements PluginModule {\n readonly [PluginModuleTypeId]: PluginModuleTypeId = PluginModuleTypeId;\n readonly id: PluginModule['id'];\n readonly activatesOn: PluginModule['activatesOn'];\n readonly firesBeforeActivation?: PluginModule['firesBeforeActivation'];\n readonly firesAfterActivation?: PluginModule['firesAfterActivation'];\n readonly activate: PluginModule['activate'];\n\n constructor(options: Omit<PluginModule, typeof PluginModuleTypeId>) {\n this.id = options.id;\n this.activatesOn = options.activatesOn;\n this.firesBeforeActivation = options.firesBeforeActivation;\n this.firesAfterActivation = options.firesAfterActivation;\n this.activate = options.activate;\n }\n}\n\nexport type Meta = {\n /**\n * Globally unique ID.\n *\n * Expected to be in the form of a valid URL.\n *\n * @example org.dxos.plugin.example\n */\n id: string;\n\n /**\n * Human-readable name.\n */\n name: string;\n\n /**\n * Short description of plugin functionality.\n */\n description?: string;\n\n /**\n * Name of the author or organization that created the plugin.\n */\n author?: string;\n\n /**\n * URL of home page.\n */\n homePage?: string;\n\n /**\n * URL of source code.\n */\n source?: string;\n\n /**\n * URL of screenshot.\n */\n screenshots?: string[];\n\n /**\n * Tags to help categorize the plugin.\n */\n tags?: string[];\n\n /**\n * A grep-able symbol string which can be resolved to an icon asset by @ch-ui/icons, via @ch-ui/vite-plugin-icons.\n */\n icon?: string;\n\n /**\n * Icon hue (ChromaticPalette).\n */\n iconHue?: string;\n};\n\n/**\n * Identifier denoting a Plugin.\n */\nexport const PluginTypeId: unique symbol = Symbol.for('@dxos/app-framework/Plugin');\nexport type PluginTypeId = typeof PluginTypeId;\n\n/**\n * Type guard to check if a value is a Plugin.\n */\nexport const isPlugin = (value: unknown): value is Plugin => {\n return typeof value === 'object' && value !== null && PluginTypeId in value;\n};\n\n/**\n * A collection of modules that are be enabled/disabled as a unit.\n * Plugins provide things such as components, state, actions, etc. to the application.\n */\n// TODO(burdon): Convert to ECHO schema.\nexport interface Plugin {\n readonly [PluginTypeId]: PluginTypeId;\n readonly meta: Readonly<Meta>;\n readonly modules: ReadonlyArray<PluginModule>;\n}\n\n/**\n * Internal implementation of Plugin.\n * @internal\n */\nclass PluginImpl implements Plugin {\n readonly [PluginTypeId]: PluginTypeId = PluginTypeId;\n\n constructor(\n private readonly _meta: Meta,\n private readonly _modules: PluginModule[],\n ) {}\n\n get meta(): Readonly<Meta> {\n return this._meta;\n }\n\n get modules(): ReadonlyArray<PluginModule> {\n return this._modules;\n }\n}\n\n/**\n * Builder interface for creating plugins incrementally.\n */\nexport interface PluginBuilder<T = void> extends Pipeable.Pipeable {\n readonly meta: Meta;\n readonly modules: ReadonlyArray<PluginModuleOptions | ((options: T) => PluginModuleOptions)>;\n addModule(moduleOptions: PluginModuleOptions | ((options: T) => PluginModuleOptions)): PluginBuilder<T>;\n}\n\n/**\n * Builder implementation for creating plugins incrementally.\n */\nclass PluginBuilderImpl<T = void> implements PluginBuilder<T> {\n readonly meta: Meta;\n private readonly _modules: Array<PluginModuleOptions | ((options: T) => PluginModuleOptions)> = [];\n\n constructor(meta: Meta) {\n this.meta = meta;\n }\n\n get modules(): ReadonlyArray<PluginModuleOptions | ((options: T) => PluginModuleOptions)> {\n return this._modules;\n }\n\n addModule(moduleOptions: PluginModuleOptions | ((options: T) => PluginModuleOptions)): PluginBuilder<T> {\n this._modules.push(moduleOptions);\n return this;\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Creates a new PluginBuilder to start building a plugin.\n */\nexport const define = <T = void>(meta: Meta): PluginBuilder<T> => new PluginBuilderImpl<T>(meta);\n\n/**\n * Adds a module to a plugin builder.\n * Supports both pipeline and direct call styles.\n * Modules can be either PluginModuleOptions or functions that receive options.\n */\nexport function addModule<T>(\n moduleOptions: PluginModuleOptions | ((options: T) => PluginModuleOptions),\n): (builder: PluginBuilder<T>) => PluginBuilder<T>;\nexport function addModule<T>(\n builder: PluginBuilder<T>,\n moduleOptions: PluginModuleOptions | ((options: T) => PluginModuleOptions),\n): PluginBuilder<T>;\nexport function addModule<T>(\n moduleOptionsOrBuilder: PluginModuleOptions | ((options: T) => PluginModuleOptions) | PluginBuilder<T>,\n moduleOptions?: PluginModuleOptions | ((options: T) => PluginModuleOptions),\n): ((builder: PluginBuilder<T>) => PluginBuilder<T>) | PluginBuilder<T> {\n // If second arg is provided, it's the direct call style: addModule(builder, moduleOptions)\n if (moduleOptions !== undefined) {\n return (moduleOptionsOrBuilder as PluginBuilder<T>).addModule(moduleOptions);\n }\n // Otherwise it's pipeline style: addModule(moduleOptions) returns a function\n const moduleOpts = moduleOptionsOrBuilder as PluginModuleOptions | ((options: T) => PluginModuleOptions);\n return (builder: PluginBuilder<T>) => builder.addModule(moduleOpts);\n}\n\nexport type PluginFactory<T = void> = ((options: T) => Plugin) & { meta: Meta };\n\n/**\n * Resolves a module from either PluginModuleOptions or a function that returns PluginModuleOptions.\n */\nconst resolveModule = (\n meta: Meta,\n module: PluginModuleOptions | ((options: any) => PluginModuleOptions),\n options?: any,\n): PluginModuleImpl => {\n const moduleOptions = typeof module === 'function' ? module(options) : module;\n const id = Option.fromNullable(moduleOptions.id).pipe(\n Option.match({\n onNone: () => {\n const exportName = Capability.getModuleTag(moduleOptions.activate);\n invariant(exportName, `Plugin module missing name. Plugin: ${meta.id}`);\n return computeModuleId(meta.id, exportName);\n },\n onSome: (id) => computeModuleId(meta.id, id),\n }),\n );\n return new PluginModuleImpl({ ...moduleOptions, id });\n};\n\n/**\n * Creates a Plugin from a builder.\n * Supports both pipeline and direct call styles.\n * Always returns a factory function (options: T) => Plugin.\n * When T is void, the function takes no arguments: () => Plugin.\n */\nexport function make<T>(builder: PluginBuilder<T>): PluginFactory<T>;\nexport function make<T>(builder: PluginBuilder<T>): PluginFactory<T> {\n const meta = builder.meta;\n\n const factory = (options: T) => {\n const modules = builder.modules.map((module) => resolveModule(meta, module, options));\n return new PluginImpl(meta, modules);\n };\n\n return Object.assign(factory, { meta });\n}\n\n//\n// Lazy plugin loading\n//\n\n/**\n * Symbol used to tag lazy plugin stubs with their loader closure.\n * Hidden from enumeration so plugin manager iteration / serialization paths\n * don't trip over it.\n */\nconst LazyTag: unique symbol = Symbol.for('@dxos/app-framework/Plugin/Lazy');\n\n/**\n * Async loader for a lazy plugin's real implementation.\n * The default export of the loaded module must be a `PluginFactory<T>` —\n * i.e. the same shape `Plugin.make` produces.\n */\nexport type LazyLoader<T = void> = () => Promise<{ default: PluginFactory<T> }>;\n\n/** Internal: payload carried on a lazy stub. */\ntype LazyPayload = { loader: LazyLoader<any>; options: unknown };\n\n/**\n * Defines a lazy plugin whose body is loaded on first enable.\n *\n * The returned factory produces a stub `Plugin` that exposes `meta`\n * synchronously (so callers can read `Plugin.meta.id` for free) but defers\n * loading the real plugin's modules until the manager calls\n * `Plugin.resolveLazy`. This lets the plugin's main entry point ship as a\n * tiny meta-only chunk — the heavy capabilities, schema, React surfaces,\n * etc. live behind the dynamic `import()` and become a separate Rollup\n * chunk that is only fetched when the plugin is enabled.\n *\n * @example\n * ```ts\n * // plugin-markdown/src/index.ts\n * import { Plugin } from '@dxos/app-framework';\n * import { meta } from './meta';\n *\n * export const MarkdownPlugin = Plugin.lazy(meta, () => import('./MarkdownPlugin'));\n *\n * // plugin-markdown/src/MarkdownPlugin.tsx\n * export const MarkdownPlugin = Plugin.define(meta).pipe(...heavy modules..., Plugin.make);\n * export default MarkdownPlugin;\n * ```\n */\nexport const lazy = <T = void>(meta: Meta, loader: LazyLoader<T>): PluginFactory<T> => {\n const factory = (options: T): Plugin => {\n const stub = new PluginImpl(meta, []);\n Object.defineProperty(stub, LazyTag, {\n value: { loader, options } satisfies LazyPayload,\n enumerable: false,\n });\n return stub;\n };\n return Object.assign(factory, { meta });\n};\n\n/**\n * Type guard for lazy plugin stubs produced by {@link lazy}.\n */\nexport const isLazy = (plugin: Plugin): boolean => LazyTag in plugin;\n\n/**\n * Tagged error for failures during lazy plugin resolution. `context.id` is\n * the lazy plugin's `meta.id`; `context.reason` discriminates the failure\n * mode (`'load-failed' | 'missing-default' | 'invalid-plugin' |\n * 'meta-mismatch'`) so callers can route on it.\n */\nexport class LazyPluginError extends BaseError.extend('LazyPluginError', 'Failed to resolve lazy plugin') {}\n\n/**\n * Resolves a lazy plugin stub to its real plugin.\n * Returns the plugin unchanged if it is not lazy. Failures surface as\n * {@link LazyPluginError} with `context.reason` indicating the failure mode\n * and (for loader failures) `cause` set to the original error.\n */\nexport const resolveLazy = (plugin: Plugin): Effect.Effect<Plugin, LazyPluginError> =>\n Effect.gen(function* () {\n if (!isLazy(plugin)) {\n return plugin;\n }\n const id = plugin.meta.id;\n const { loader, options } = (plugin as unknown as { [LazyTag]: LazyPayload })[LazyTag];\n const mod = yield* Effect.tryPromise({\n try: loader,\n catch: (error) => new LazyPluginError({ context: { id, reason: 'load-failed' }, cause: error }),\n });\n if (!mod || typeof mod.default !== 'function') {\n return yield* Effect.fail(new LazyPluginError({ context: { id, reason: 'missing-default' } }));\n }\n const result = mod.default(options);\n if (!isPlugin(result)) {\n return yield* Effect.fail(new LazyPluginError({ context: { id, reason: 'invalid-plugin' } }));\n }\n if (result.meta.id !== id) {\n return yield* Effect.fail(\n new LazyPluginError({ context: { id, reason: 'meta-mismatch', returnedId: result.meta.id } }),\n );\n }\n return result;\n });\n"],
5
+ "mappings": ";;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;AAIA,YAAYA,aAAa;AACzB,YAAYC,YAAY;AACxB,YAAYC,YAAY;AACxB,YAAYC,cAAc;AAE1B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAM1B,IAAE,eAAA;AAUA,IAAA,UAAA,cAAA,YAAA,mCAAA,EAAA,EAAA;AACF;;;;AAiCA,IAAA,kBAAA,CAAA,UAAA,eAAA;AAEA,SAAA,GAAA,QAAA,WAAA,UAAA;;;AAWE,IAAA,iBAAA,CAAA,UAAA;AA2DF,SAAMC,OAAAA,UAAAA,YAAAA,UAAAA,QAAAA,sBAAAA;;IAEKC,yBAAuB;EACvBC,CAAAA,kBAAyC,IAAA;EACzCC;EACAC;EACAC;EAET;;cAEOH,SAAW;AAChB,SAAKC,KAAAA,QAAAA;AACL,SAAKC,cAAAA,QAAoB;AACzB,SAAKC,wBAAmBA,QAAQ;AAClC,SAAA,uBAAA,QAAA;AACF,SAAA,WAAA,QAAA;EA0DA;;;AAWE,IAAA,WAAA,CAAA,UAAA;AAaF,SAAA,OAAA,UAAA,YAAA,UAAA,QAAA,gBAAA;;;EAKW;EAET;eACmBC,IAAAA;cACAC,OAAAA,UAAAA;AAChB,SAAA,QAAA;AAECC,SAAAA,WAAuB;;EAE3B,IAAA,OAAA;AAEIC,WAAAA,KAAuC;;EAE3C,IAAA,UAAA;AACF,WAAA,KAAA;EAWA;;AAKmBF,IAAAA,oBAAAA,MAAkF;EAEnG;aACOC,CAAAA;EACP,YAAA,MAAA;AAEIC,SAAAA,OAAsF;;EAE1F,IAAA,UAAA;AAEAC,WAAUC,KAAAA;;YAER,eAAW;AACb,SAAA,SAAA,KAAA,aAAA;AAEAC,WAAO;;SAEL;AAEJ,WAAA,uBAAA,MAAA,SAAA;EAEA;;AAqBE,IAAA,SAAA,CAAA,SAAA,IAAA,kBAAA,IAAA;AACA,SAAID,UAAkBE,wBAAW,eAAA;AAEjC,MAAA,kBAAA,QAAA;AACA,WAAA,uBAAA,UAAA,aAAA;EACA;AAEF,QAAA,aAAA;AAIA,SAAA,CAAA,YAAA,QAAA,UAAA,UAAA;;AASE,IAAMZ,gBAAYa,CAAAA,MAAAA,QAAaH,YAAgB;QAE3CI,gBAAQ,OAAA,WAAA,aAAA,OAAA,OAAA,IAAA;aACAC,oBAAaC,cAAWC,EAAAA,EAAAA,KAAaP,aAAcN;YACzDc,MAAAA;AACA,YAAA,aAA8B,aAAEH,cAAAA,QAAAA;AAClC,gBAAA,YAAA,uCAAA,KAAA,EAAA,IAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,cAAA,kDAAA,EAAA,CAAA;AACAI,aAASnB,gBAAOoB,KAAgBb,IAAKP,UAAIA;IAC3C;IAEF,QAAWD,CAAAA,QAAAA,gBAAiB,KAAA,IAAAC,GAAA;;SAAoBA,IAAAA,iBAAAA;IAAG,GAAA;IACrD;EASA,CAAA;;AAGE,SAAMqB,KAAWC,SAAAA;QACf,OAAMd,QAAUe;QAChB,UAAWC,CAAAA,YAAWjB;AACxB,UAAA,UAAA,QAAA,QAAA,IAAA,CAAA,WAAA,cAAA,MAAA,QAAA,OAAA,CAAA;AAEA,WAAOkB,IAAOC,WAAOL,MAAS,OAAA;;AAAO,SAAA,OAAA,OAAA,SAAA;IACvC;EAEE,CAAA;AACF;;AA8CI,IAAMM,OAAO,CAAIH,MAAAA,WAAWjB;QAC5BkB,UAAOG,CAAAA,YAAeD;UACpBE,OAAO,IAAA,WAAA,MAAA,CAAA,CAAA;0BAAEC,MAAAA,SAAAA;aAAQR;QAAQ;QACzBS;MACF;MACA,YAAOJ;IACT,CAAA;AACA,WAAOF;;AAA8B,SAAA,OAAA,OAAA,SAAA;IACrC;EAEF,CAAA;;;AAaA,IAAA,kBAAA,cAAA,UAAA,OAAA,mBAAA,+BAAA,EAAA;;IASM,cAAOO,CAAAA,WAAAA,WAAAA,aAAAA;AACT,MAAA,CAAA,OAAA,MAAA,GAAA;AACA,WAAWA;EACX;AACA,QAAMC,KAAAA,OAAM,KAAOC;QACjBC,EAAAA,QAAKL,QAAAA,IAAAA,OAAAA,OAAAA;QACLM,MAAQC,OAAcC,kBAAAA;;sBAA6BtC,IAAAA,gBAAAA;eAAIuC;QAAsB;QAAGC,QAAOH;MAAM;MAC/F,OAAA;IACKJ,CAAAA;;cAC6CQ,OAAS,IAAA,YAAA,YAAA;kBAAEzC,YAAAA,IAAAA,gBAAAA;eAAIuC;QAA0B;QAAE,QAAA;MAC7F;IACA,CAAA,CAAMG;EACN;QACE,SAAO,IAAOR,QAAOS,OAASL;gBAAkBG,MAAS,GAAA;kBAAEzC,YAAAA,IAAAA,gBAAAA;eAAIuC;QAAyB;QAAE,QAAA;MAC5F;IACIG,CAAAA,CAAAA;;aAEsBD,KAAAA,OAAS,IAAA;kBAAEzC,YAAAA,IAAAA,gBAAAA;eAAIuC;QAAyBK;QAA2B,QAAA;QAAE,YAAA,OAAA,KAAA;MAE/F;IACA,CAAA,CAAA;EACC;;;",
6
+ "names": ["Context", "Effect", "Option", "Pipeable", "BaseError", "invariant", "PluginModuleImpl", "id", "activatesOn", "firesBeforeActivation", "firesAfterActivation", "activate", "_meta", "_modules", "meta", "modules", "addModule", "moduleOptions", "pipe", "undefined", "fromNullable", "onNone", "exportName", "Capability", "getModuleTag", "invariant", "onSome", "computeModuleId", "factory", "options", "builder", "PluginImpl", "Object", "assign", "stub", "defineProperty", "value", "loader", "enumerable", "plugin", "mod", "Effect", "try", "catch", "error", "LazyPluginError", "reason", "cause", "context", "result", "fail", "returnedId"]
7
+ }