@dxos/app-framework 0.7.4 → 0.7.5-labs.071a3e2

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 (389) hide show
  1. package/dist/lib/browser/app-graph-builder-MOLT4EHG.mjs +137 -0
  2. package/dist/lib/browser/app-graph-builder-MOLT4EHG.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-G3HBVVT5.mjs +1403 -0
  4. package/dist/lib/browser/chunk-G3HBVVT5.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-LDJ3T4V3.mjs +32 -0
  6. package/dist/lib/browser/chunk-LDJ3T4V3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-TGOF2WQZ.mjs +285 -0
  8. package/dist/lib/browser/chunk-TGOF2WQZ.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +135 -543
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/intent-dispatcher-LJKNIGAM.mjs +11 -0
  12. package/dist/lib/browser/intent-resolver-Z724VAMC.mjs +38 -0
  13. package/dist/lib/browser/intent-resolver-Z724VAMC.mjs.map +7 -0
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/store-NWCY7LAP.mjs +19 -0
  16. package/dist/lib/browser/store-NWCY7LAP.mjs.map +7 -0
  17. package/dist/lib/browser/testing/index.mjs +74 -0
  18. package/dist/lib/browser/testing/index.mjs.map +7 -0
  19. package/dist/lib/browser/worker.mjs +77 -0
  20. package/dist/lib/node/app-graph-builder-G7SRXDFD.cjs +146 -0
  21. package/dist/lib/node/app-graph-builder-G7SRXDFD.cjs.map +7 -0
  22. package/dist/lib/node/chunk-55KIQ6YK.cjs +1437 -0
  23. package/dist/lib/node/chunk-55KIQ6YK.cjs.map +7 -0
  24. package/dist/lib/node/chunk-5GABBW2Q.cjs +308 -0
  25. package/dist/lib/node/chunk-5GABBW2Q.cjs.map +7 -0
  26. package/dist/lib/node/chunk-QLVQ6PND.cjs +58 -0
  27. package/dist/lib/node/chunk-QLVQ6PND.cjs.map +7 -0
  28. package/dist/lib/node/index.cjs +136 -558
  29. package/dist/lib/node/index.cjs.map +4 -4
  30. package/dist/lib/node/{plugin-settings-OZ6IKAE5.cjs → intent-dispatcher-CGUK3BCJ.cjs} +10 -10
  31. package/dist/lib/node/intent-dispatcher-CGUK3BCJ.cjs.map +7 -0
  32. package/dist/lib/node/intent-resolver-7GNKPRWT.cjs +45 -0
  33. package/dist/lib/node/intent-resolver-7GNKPRWT.cjs.map +7 -0
  34. package/dist/lib/node/meta.json +1 -1
  35. package/dist/lib/node/store-WMJSEQPC.cjs +34 -0
  36. package/dist/lib/node/store-WMJSEQPC.cjs.map +7 -0
  37. package/dist/lib/node/testing/index.cjs +98 -0
  38. package/dist/lib/node/testing/index.cjs.map +7 -0
  39. package/dist/lib/node/worker.cjs +99 -0
  40. package/dist/lib/node/worker.cjs.map +7 -0
  41. package/dist/lib/node-esm/app-graph-builder-MKLYH3NE.mjs +138 -0
  42. package/dist/lib/node-esm/app-graph-builder-MKLYH3NE.mjs.map +7 -0
  43. package/dist/lib/node-esm/chunk-47FG42II.mjs +286 -0
  44. package/dist/lib/node-esm/chunk-47FG42II.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-CNJYZNSL.mjs +34 -0
  46. package/dist/lib/node-esm/chunk-CNJYZNSL.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-ZTB4TA6Q.mjs +1405 -0
  48. package/dist/lib/node-esm/chunk-ZTB4TA6Q.mjs.map +7 -0
  49. package/dist/lib/node-esm/index.mjs +135 -543
  50. package/dist/lib/node-esm/index.mjs.map +4 -4
  51. package/dist/lib/node-esm/intent-dispatcher-RZAWA4XD.mjs +12 -0
  52. package/dist/lib/node-esm/intent-resolver-UIU37CKJ.mjs +39 -0
  53. package/dist/lib/node-esm/intent-resolver-UIU37CKJ.mjs.map +7 -0
  54. package/dist/lib/node-esm/meta.json +1 -1
  55. package/dist/lib/node-esm/store-YUWINFBN.mjs +20 -0
  56. package/dist/lib/node-esm/store-YUWINFBN.mjs.map +7 -0
  57. package/dist/lib/node-esm/testing/index.mjs +75 -0
  58. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  59. package/dist/lib/node-esm/worker.mjs +78 -0
  60. package/dist/types/src/App.d.ts +22 -13
  61. package/dist/types/src/App.d.ts.map +1 -1
  62. package/dist/types/src/common/capabilities.d.ts +296 -0
  63. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  64. package/dist/types/src/common/events.d.ts +48 -0
  65. package/dist/types/src/common/events.d.ts.map +1 -0
  66. package/dist/types/src/common/file.d.ts +14 -0
  67. package/dist/types/src/common/file.d.ts.map +1 -0
  68. package/dist/types/src/common/graph.d.ts +21 -0
  69. package/dist/types/src/common/graph.d.ts.map +1 -0
  70. package/dist/types/src/common/index.d.ts +8 -0
  71. package/dist/types/src/common/index.d.ts.map +1 -0
  72. package/dist/types/src/common/layout.d.ts +248 -0
  73. package/dist/types/src/common/layout.d.ts.map +1 -0
  74. package/dist/types/src/common/surface.d.ts +68 -0
  75. package/dist/types/src/common/surface.d.ts.map +1 -0
  76. package/dist/types/src/common/translations.d.ts +11 -0
  77. package/dist/types/src/common/translations.d.ts.map +1 -0
  78. package/dist/types/src/core/capabilities.d.ts +94 -0
  79. package/dist/types/src/core/capabilities.d.ts.map +1 -0
  80. package/dist/types/src/core/capabilities.test.d.ts +2 -0
  81. package/dist/types/src/core/capabilities.test.d.ts.map +1 -0
  82. package/dist/types/src/core/events.d.ts +58 -0
  83. package/dist/types/src/core/events.d.ts.map +1 -0
  84. package/dist/types/src/core/index.d.ts +5 -0
  85. package/dist/types/src/core/index.d.ts.map +1 -0
  86. package/dist/types/src/core/manager.d.ts +119 -0
  87. package/dist/types/src/core/manager.d.ts.map +1 -0
  88. package/dist/types/src/core/manager.test.d.ts +2 -0
  89. package/dist/types/src/core/manager.test.d.ts.map +1 -0
  90. package/dist/types/src/core/plugin.d.ts +97 -0
  91. package/dist/types/src/core/plugin.d.ts.map +1 -0
  92. package/dist/types/src/helpers.d.ts +10 -0
  93. package/dist/types/src/helpers.d.ts.map +1 -0
  94. package/dist/types/src/helpers.test.d.ts +2 -0
  95. package/dist/types/src/helpers.test.d.ts.map +1 -0
  96. package/dist/types/src/index.d.ts +5 -1
  97. package/dist/types/src/index.d.ts.map +1 -1
  98. package/dist/types/src/playground/debug/Debug.d.ts +6 -0
  99. package/dist/types/src/playground/debug/Debug.d.ts.map +1 -0
  100. package/dist/types/src/playground/debug/index.d.ts +2 -0
  101. package/dist/types/src/playground/debug/index.d.ts.map +1 -0
  102. package/dist/types/src/playground/debug/plugin.d.ts +2 -0
  103. package/dist/types/src/playground/debug/plugin.d.ts.map +1 -0
  104. package/dist/types/src/playground/generator/Main.d.ts +6 -0
  105. package/dist/types/src/playground/generator/Main.d.ts.map +1 -0
  106. package/dist/types/src/playground/generator/Toolbar.d.ts +6 -0
  107. package/dist/types/src/playground/generator/Toolbar.d.ts.map +1 -0
  108. package/dist/types/src/playground/generator/generator.d.ts +7 -0
  109. package/dist/types/src/playground/generator/generator.d.ts.map +1 -0
  110. package/dist/types/src/playground/generator/index.d.ts +3 -0
  111. package/dist/types/src/playground/generator/index.d.ts.map +1 -0
  112. package/dist/types/src/playground/generator/plugin.d.ts +2 -0
  113. package/dist/types/src/playground/generator/plugin.d.ts.map +1 -0
  114. package/dist/types/src/playground/layout/Layout.d.ts +8 -0
  115. package/dist/types/src/playground/layout/Layout.d.ts.map +1 -0
  116. package/dist/types/src/playground/layout/index.d.ts +2 -0
  117. package/dist/types/src/playground/layout/index.d.ts.map +1 -0
  118. package/dist/types/src/playground/layout/plugin.d.ts +2 -0
  119. package/dist/types/src/playground/layout/plugin.d.ts.map +1 -0
  120. package/dist/types/src/playground/logger/Toolbar.d.ts +6 -0
  121. package/dist/types/src/playground/logger/Toolbar.d.ts.map +1 -0
  122. package/dist/types/src/playground/logger/index.d.ts +2 -0
  123. package/dist/types/src/playground/logger/index.d.ts.map +1 -0
  124. package/dist/types/src/playground/logger/plugin.d.ts +2 -0
  125. package/dist/types/src/playground/logger/plugin.d.ts.map +1 -0
  126. package/dist/types/src/playground/logger/schema.d.ts +13 -0
  127. package/dist/types/src/playground/logger/schema.d.ts.map +1 -0
  128. package/dist/types/src/playground/playground.stories.d.ts +10 -0
  129. package/dist/types/src/playground/playground.stories.d.ts.map +1 -0
  130. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +2 -0
  131. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +1 -0
  132. package/dist/types/src/plugin-intent/actions.d.ts +23 -0
  133. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -0
  134. package/dist/types/src/plugin-intent/errors.d.ts +16 -0
  135. package/dist/types/src/plugin-intent/errors.d.ts.map +1 -0
  136. package/dist/types/src/plugin-intent/index.d.ts +5 -0
  137. package/dist/types/src/plugin-intent/index.d.ts.map +1 -0
  138. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +113 -0
  139. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -0
  140. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +2 -0
  141. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +1 -0
  142. package/dist/types/src/plugin-intent/intent.d.ts +68 -0
  143. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -0
  144. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +2 -0
  145. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +1 -0
  146. package/dist/types/src/plugin-settings/actions.d.ts +27 -0
  147. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -0
  148. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +197 -0
  149. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -0
  150. package/dist/types/src/plugin-settings/index.d.ts +3 -0
  151. package/dist/types/src/plugin-settings/index.d.ts.map +1 -0
  152. package/dist/types/src/plugin-settings/intent-resolver.d.ts +4 -0
  153. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +1 -0
  154. package/dist/types/src/plugin-settings/store.d.ts +5 -0
  155. package/dist/types/src/plugin-settings/store.d.ts.map +1 -0
  156. package/dist/types/src/plugin-settings/translations.d.ts +11 -0
  157. package/dist/types/src/plugin-settings/translations.d.ts.map +1 -0
  158. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -0
  159. package/dist/types/src/react/IntentContext.d.ts +8 -0
  160. package/dist/types/src/react/IntentContext.d.ts.map +1 -0
  161. package/dist/types/src/react/PluginManagerProvider.d.ts +10 -0
  162. package/dist/types/src/react/PluginManagerProvider.d.ts.map +1 -0
  163. package/dist/types/src/react/Surface.d.ts +12 -0
  164. package/dist/types/src/react/Surface.d.ts.map +1 -0
  165. package/dist/types/src/react/Surface.stories.d.ts +16 -0
  166. package/dist/types/src/react/Surface.stories.d.ts.map +1 -0
  167. package/dist/types/src/react/common.d.ts +12 -0
  168. package/dist/types/src/react/common.d.ts.map +1 -0
  169. package/dist/types/src/react/index.d.ts +7 -0
  170. package/dist/types/src/react/index.d.ts.map +1 -0
  171. package/dist/types/src/react/useCapabilities.d.ts +13 -0
  172. package/dist/types/src/react/useCapabilities.d.ts.map +1 -0
  173. package/dist/types/src/react/useIntentResolver.d.ts +3 -0
  174. package/dist/types/src/react/useIntentResolver.d.ts.map +1 -0
  175. package/dist/types/src/testing/index.d.ts +2 -0
  176. package/dist/types/src/testing/index.d.ts.map +1 -0
  177. package/dist/types/src/testing/withPluginManager.d.ts +10 -0
  178. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -0
  179. package/dist/types/src/testing/withPluginManager.stories.d.ts +5 -0
  180. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -0
  181. package/dist/types/src/worker.d.ts +4 -0
  182. package/dist/types/src/worker.d.ts.map +1 -0
  183. package/dist/types/tsconfig.tsbuildinfo +1 -0
  184. package/package.json +39 -17
  185. package/project.json +4 -3
  186. package/src/App.tsx +139 -34
  187. package/src/common/capabilities.ts +97 -0
  188. package/src/common/events.ts +72 -0
  189. package/src/common/file.ts +22 -0
  190. package/src/common/graph.ts +30 -0
  191. package/src/{plugins/common → common}/index.ts +3 -2
  192. package/src/common/layout.ts +225 -0
  193. package/src/common/surface.ts +81 -0
  194. package/src/common/translations.ts +17 -0
  195. package/src/core/capabilities.test.ts +116 -0
  196. package/src/core/capabilities.ts +222 -0
  197. package/src/core/events.ts +58 -0
  198. package/src/core/index.ts +8 -0
  199. package/src/core/manager.test.ts +516 -0
  200. package/src/core/manager.ts +511 -0
  201. package/src/core/plugin.ts +131 -0
  202. package/src/helpers.test.ts +97 -0
  203. package/src/helpers.ts +45 -0
  204. package/src/index.ts +6 -3
  205. package/src/playground/debug/Debug.tsx +39 -0
  206. package/src/playground/debug/index.ts +5 -0
  207. package/src/playground/debug/plugin.ts +17 -0
  208. package/src/playground/generator/Main.tsx +71 -0
  209. package/src/playground/generator/Toolbar.tsx +46 -0
  210. package/src/playground/generator/generator.ts +48 -0
  211. package/src/playground/generator/index.ts +6 -0
  212. package/src/playground/generator/plugin.ts +23 -0
  213. package/src/playground/layout/Layout.tsx +33 -0
  214. package/src/playground/layout/index.ts +5 -0
  215. package/src/playground/layout/plugin.ts +17 -0
  216. package/src/playground/logger/Toolbar.tsx +29 -0
  217. package/src/playground/logger/index.ts +5 -0
  218. package/src/playground/logger/plugin.ts +36 -0
  219. package/src/playground/logger/schema.ts +12 -0
  220. package/src/playground/playground.stories.tsx +34 -0
  221. package/src/plugin-intent/IntentPlugin.tsx +20 -0
  222. package/src/plugin-intent/actions.ts +22 -0
  223. package/src/plugin-intent/errors.ts +39 -0
  224. package/src/plugin-intent/index.ts +8 -0
  225. package/src/plugin-intent/intent-dispatcher.test.ts +299 -0
  226. package/src/plugin-intent/intent-dispatcher.ts +304 -0
  227. package/src/plugin-intent/intent.ts +146 -0
  228. package/src/plugin-settings/SettingsPlugin.ts +35 -0
  229. package/src/plugin-settings/actions.ts +27 -0
  230. package/src/plugin-settings/app-graph-builder.ts +122 -0
  231. package/src/plugin-settings/index.ts +6 -0
  232. package/src/plugin-settings/intent-resolver.ts +28 -0
  233. package/src/plugin-settings/store.ts +20 -0
  234. package/src/plugin-settings/translations.ts +17 -0
  235. package/src/react/IntentContext.tsx +34 -0
  236. package/src/react/PluginManagerProvider.ts +22 -0
  237. package/src/react/Surface.stories.tsx +96 -0
  238. package/src/react/Surface.tsx +75 -0
  239. package/src/react/common.ts +12 -0
  240. package/src/react/index.ts +10 -0
  241. package/src/react/useCapabilities.ts +40 -0
  242. package/src/react/useIntentResolver.ts +22 -0
  243. package/src/testing/index.ts +5 -0
  244. package/src/testing/withPluginManager.stories.tsx +47 -0
  245. package/src/testing/withPluginManager.tsx +75 -0
  246. package/src/worker.ts +11 -0
  247. package/tsconfig.json +54 -2
  248. package/dist/lib/browser/chunk-3E7RY3CE.mjs +0 -72
  249. package/dist/lib/browser/chunk-3E7RY3CE.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-653Y45CL.mjs +0 -41
  251. package/dist/lib/browser/chunk-653Y45CL.mjs.map +0 -7
  252. package/dist/lib/browser/chunk-FRXJ25VI.mjs +0 -214
  253. package/dist/lib/browser/chunk-FRXJ25VI.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-YXM35XRE.mjs +0 -213
  255. package/dist/lib/browser/chunk-YXM35XRE.mjs.map +0 -7
  256. package/dist/lib/browser/plugin-intent-LU4KL2RO.mjs +0 -22
  257. package/dist/lib/browser/plugin-settings-OM3G2QFY.mjs +0 -11
  258. package/dist/lib/browser/plugin-surface-LECZMKSQ.mjs +0 -24
  259. package/dist/lib/node/chunk-JZ2JVKRY.cjs +0 -58
  260. package/dist/lib/node/chunk-JZ2JVKRY.cjs.map +0 -7
  261. package/dist/lib/node/chunk-QBM42OQ6.cjs +0 -97
  262. package/dist/lib/node/chunk-QBM42OQ6.cjs.map +0 -7
  263. package/dist/lib/node/chunk-QSVP5HOW.cjs +0 -238
  264. package/dist/lib/node/chunk-QSVP5HOW.cjs.map +0 -7
  265. package/dist/lib/node/chunk-SOVLKUWI.cjs +0 -236
  266. package/dist/lib/node/chunk-SOVLKUWI.cjs.map +0 -7
  267. package/dist/lib/node/plugin-intent-FVFR2LKB.cjs +0 -43
  268. package/dist/lib/node/plugin-intent-FVFR2LKB.cjs.map +0 -7
  269. package/dist/lib/node/plugin-settings-OZ6IKAE5.cjs.map +0 -7
  270. package/dist/lib/node/plugin-surface-YWDRXQTD.cjs +0 -45
  271. package/dist/lib/node/plugin-surface-YWDRXQTD.cjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-2R4GVK7O.mjs +0 -215
  273. package/dist/lib/node-esm/chunk-2R4GVK7O.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-EYCTSFEJ.mjs +0 -74
  275. package/dist/lib/node-esm/chunk-EYCTSFEJ.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-YFMFQBB4.mjs +0 -214
  277. package/dist/lib/node-esm/chunk-YFMFQBB4.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-YNU7FTGJ.mjs +0 -43
  279. package/dist/lib/node-esm/chunk-YNU7FTGJ.mjs.map +0 -7
  280. package/dist/lib/node-esm/plugin-intent-V7ER24Y6.mjs +0 -23
  281. package/dist/lib/node-esm/plugin-settings-37UVWF2V.mjs +0 -12
  282. package/dist/lib/node-esm/plugin-settings-37UVWF2V.mjs.map +0 -7
  283. package/dist/lib/node-esm/plugin-surface-TEU42XQN.mjs +0 -25
  284. package/dist/lib/node-esm/plugin-surface-TEU42XQN.mjs.map +0 -7
  285. package/dist/types/src/plugins/common/file.d.ts +0 -22
  286. package/dist/types/src/plugins/common/file.d.ts.map +0 -1
  287. package/dist/types/src/plugins/common/graph.d.ts +0 -51
  288. package/dist/types/src/plugins/common/graph.d.ts.map +0 -1
  289. package/dist/types/src/plugins/common/index.d.ts +0 -7
  290. package/dist/types/src/plugins/common/index.d.ts.map +0 -1
  291. package/dist/types/src/plugins/common/layout.d.ts +0 -202
  292. package/dist/types/src/plugins/common/layout.d.ts.map +0 -1
  293. package/dist/types/src/plugins/common/metadata.d.ts +0 -16
  294. package/dist/types/src/plugins/common/metadata.d.ts.map +0 -1
  295. package/dist/types/src/plugins/common/navigation.d.ts +0 -196
  296. package/dist/types/src/plugins/common/navigation.d.ts.map +0 -1
  297. package/dist/types/src/plugins/common/translations.d.ts +0 -22
  298. package/dist/types/src/plugins/common/translations.d.ts.map +0 -1
  299. package/dist/types/src/plugins/helpers.d.ts +0 -41
  300. package/dist/types/src/plugins/helpers.d.ts.map +0 -1
  301. package/dist/types/src/plugins/index.d.ts +0 -7
  302. package/dist/types/src/plugins/index.d.ts.map +0 -1
  303. package/dist/types/src/plugins/plugin-host/HostPlugin.d.ts +0 -21
  304. package/dist/types/src/plugins/plugin-host/HostPlugin.d.ts.map +0 -1
  305. package/dist/types/src/plugins/plugin-host/PluginContainer.d.ts +0 -14
  306. package/dist/types/src/plugins/plugin-host/PluginContainer.d.ts.map +0 -1
  307. package/dist/types/src/plugins/plugin-host/PluginContext.d.ts +0 -47
  308. package/dist/types/src/plugins/plugin-host/PluginContext.d.ts.map +0 -1
  309. package/dist/types/src/plugins/plugin-host/index.d.ts +0 -4
  310. package/dist/types/src/plugins/plugin-host/index.d.ts.map +0 -1
  311. package/dist/types/src/plugins/plugin-host/plugin.d.ts +0 -98
  312. package/dist/types/src/plugins/plugin-host/plugin.d.ts.map +0 -1
  313. package/dist/types/src/plugins/plugin-host/plugin.test.d.ts +0 -35
  314. package/dist/types/src/plugins/plugin-host/plugin.test.d.ts.map +0 -1
  315. package/dist/types/src/plugins/plugin-intent/IntentContext.d.ts +0 -21
  316. package/dist/types/src/plugins/plugin-intent/IntentContext.d.ts.map +0 -1
  317. package/dist/types/src/plugins/plugin-intent/IntentPlugin.d.ts +0 -8
  318. package/dist/types/src/plugins/plugin-intent/IntentPlugin.d.ts.map +0 -1
  319. package/dist/types/src/plugins/plugin-intent/helpers.d.ts +0 -6
  320. package/dist/types/src/plugins/plugin-intent/helpers.d.ts.map +0 -1
  321. package/dist/types/src/plugins/plugin-intent/index.d.ts +0 -6
  322. package/dist/types/src/plugins/plugin-intent/index.d.ts.map +0 -1
  323. package/dist/types/src/plugins/plugin-intent/intent.d.ts +0 -81
  324. package/dist/types/src/plugins/plugin-intent/intent.d.ts.map +0 -1
  325. package/dist/types/src/plugins/plugin-intent/meta.d.ts +0 -5
  326. package/dist/types/src/plugins/plugin-intent/meta.d.ts.map +0 -1
  327. package/dist/types/src/plugins/plugin-intent/provides.d.ts +0 -20
  328. package/dist/types/src/plugins/plugin-intent/provides.d.ts.map +0 -1
  329. package/dist/types/src/plugins/plugin-settings/SettingsPlugin.d.ts +0 -4
  330. package/dist/types/src/plugins/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  331. package/dist/types/src/plugins/plugin-settings/index.d.ts +0 -4
  332. package/dist/types/src/plugins/plugin-settings/index.d.ts.map +0 -1
  333. package/dist/types/src/plugins/plugin-settings/meta.d.ts +0 -5
  334. package/dist/types/src/plugins/plugin-settings/meta.d.ts.map +0 -1
  335. package/dist/types/src/plugins/plugin-settings/provides.d.ts +0 -13
  336. package/dist/types/src/plugins/plugin-settings/provides.d.ts.map +0 -1
  337. package/dist/types/src/plugins/plugin-surface/ErrorBoundary.d.ts.map +0 -1
  338. package/dist/types/src/plugins/plugin-surface/Surface.d.ts +0 -62
  339. package/dist/types/src/plugins/plugin-surface/Surface.d.ts.map +0 -1
  340. package/dist/types/src/plugins/plugin-surface/SurfacePlugin.d.ts +0 -7
  341. package/dist/types/src/plugins/plugin-surface/SurfacePlugin.d.ts.map +0 -1
  342. package/dist/types/src/plugins/plugin-surface/SurfaceRootContext.d.ts +0 -39
  343. package/dist/types/src/plugins/plugin-surface/SurfaceRootContext.d.ts.map +0 -1
  344. package/dist/types/src/plugins/plugin-surface/helpers.d.ts +0 -21
  345. package/dist/types/src/plugins/plugin-surface/helpers.d.ts.map +0 -1
  346. package/dist/types/src/plugins/plugin-surface/index.d.ts +0 -8
  347. package/dist/types/src/plugins/plugin-surface/index.d.ts.map +0 -1
  348. package/dist/types/src/plugins/plugin-surface/meta.d.ts +0 -5
  349. package/dist/types/src/plugins/plugin-surface/meta.d.ts.map +0 -1
  350. package/dist/types/src/plugins/plugin-surface/provides.d.ts +0 -16
  351. package/dist/types/src/plugins/plugin-surface/provides.d.ts.map +0 -1
  352. package/src/plugins/common/file.ts +0 -36
  353. package/src/plugins/common/graph.ts +0 -70
  354. package/src/plugins/common/layout.ts +0 -155
  355. package/src/plugins/common/metadata.ts +0 -29
  356. package/src/plugins/common/navigation.ts +0 -185
  357. package/src/plugins/common/translations.ts +0 -36
  358. package/src/plugins/helpers.ts +0 -92
  359. package/src/plugins/index.ts +0 -11
  360. package/src/plugins/plugin-host/HostPlugin.tsx +0 -96
  361. package/src/plugins/plugin-host/PluginContainer.tsx +0 -120
  362. package/src/plugins/plugin-host/PluginContext.tsx +0 -79
  363. package/src/plugins/plugin-host/index.ts +0 -8
  364. package/src/plugins/plugin-host/plugin.test.ts +0 -158
  365. package/src/plugins/plugin-host/plugin.ts +0 -126
  366. package/src/plugins/plugin-intent/IntentContext.tsx +0 -49
  367. package/src/plugins/plugin-intent/IntentPlugin.tsx +0 -151
  368. package/src/plugins/plugin-intent/helpers.ts +0 -11
  369. package/src/plugins/plugin-intent/index.ts +0 -12
  370. package/src/plugins/plugin-intent/intent.ts +0 -101
  371. package/src/plugins/plugin-intent/meta.ts +0 -9
  372. package/src/plugins/plugin-intent/provides.ts +0 -38
  373. package/src/plugins/plugin-settings/SettingsPlugin.tsx +0 -22
  374. package/src/plugins/plugin-settings/index.ts +0 -9
  375. package/src/plugins/plugin-settings/meta.ts +0 -9
  376. package/src/plugins/plugin-settings/provides.ts +0 -29
  377. package/src/plugins/plugin-surface/Surface.tsx +0 -195
  378. package/src/plugins/plugin-surface/SurfacePlugin.tsx +0 -33
  379. package/src/plugins/plugin-surface/SurfaceRootContext.tsx +0 -60
  380. package/src/plugins/plugin-surface/helpers.ts +0 -22
  381. package/src/plugins/plugin-surface/index.ts +0 -14
  382. package/src/plugins/plugin-surface/meta.ts +0 -9
  383. package/src/plugins/plugin-surface/provides.ts +0 -26
  384. /package/dist/lib/browser/{plugin-intent-LU4KL2RO.mjs.map → intent-dispatcher-LJKNIGAM.mjs.map} +0 -0
  385. /package/dist/lib/browser/{plugin-settings-OM3G2QFY.mjs.map → worker.mjs.map} +0 -0
  386. /package/dist/lib/{browser/plugin-surface-LECZMKSQ.mjs.map → node-esm/intent-dispatcher-RZAWA4XD.mjs.map} +0 -0
  387. /package/dist/lib/node-esm/{plugin-intent-V7ER24Y6.mjs.map → worker.mjs.map} +0 -0
  388. /package/dist/types/src/{plugins/plugin-surface → react}/ErrorBoundary.d.ts +0 -0
  389. /package/src/{plugins/plugin-surface → react}/ErrorBoundary.tsx +0 -0
@@ -0,0 +1,97 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, it, expect } from 'vitest';
6
+
7
+ import { topologicalSort } from './helpers';
8
+
9
+ describe('topologicalSort', () => {
10
+ it('should handle empty array', () => {
11
+ const result = topologicalSort([]);
12
+ expect(result).toEqual([]);
13
+ });
14
+
15
+ it('should handle single node with no dependencies', () => {
16
+ const nodes = [{ id: 'A', dependsOn: [], data: 1 }];
17
+ const result = topologicalSort(nodes);
18
+ expect(result).toEqual(nodes);
19
+ });
20
+
21
+ it('should sort simple linear dependencies', () => {
22
+ const nodes = [
23
+ { id: 'A', dependsOn: ['B'], data: 1 },
24
+ { id: 'B', dependsOn: ['C'], data: 2 },
25
+ { id: 'C', data: 3 },
26
+ ];
27
+ const result = topologicalSort(nodes);
28
+
29
+ expect(result.map((n) => n.id)).toEqual(['C', 'B', 'A']);
30
+ });
31
+
32
+ it('should handle multiple dependencies', () => {
33
+ const nodes = [
34
+ { id: 'A', dependsOn: ['B', 'C'], data: 1 },
35
+ { id: 'B', dependsOn: ['D'], data: 2 },
36
+ { id: 'C', dependsOn: ['D'], data: 3 },
37
+ { id: 'D', data: 4 },
38
+ ];
39
+ const result = topologicalSort(nodes);
40
+
41
+ const resultIds = result.map((n) => n.id);
42
+ expect(resultIds[0]).toBe('D'); // D must be first.
43
+ expect(resultIds[3]).toBe('A'); // A must be last.
44
+ // B and C can be in either order.
45
+ expect(resultIds.slice(1, 3)).toContain('B');
46
+ expect(resultIds.slice(1, 3)).toContain('C');
47
+ });
48
+
49
+ it('should throw on circular dependencies', () => {
50
+ const nodes = [
51
+ { id: 'A', dependsOn: ['B'], data: 1 },
52
+ { id: 'B', dependsOn: ['A'], data: 2 },
53
+ ];
54
+
55
+ expect(() => topologicalSort(nodes)).toThrow(/Circular dependency detected/);
56
+ });
57
+
58
+ it('should throw on missing dependencies', () => {
59
+ const nodes = [
60
+ { id: 'A', dependsOn: ['B'], data: 1 },
61
+ { id: 'B', dependsOn: ['C'], data: 2 },
62
+ // C is missing.
63
+ ];
64
+
65
+ expect(() => topologicalSort(nodes)).toThrow(/Node C not found/);
66
+ });
67
+
68
+ it('should maintain data integrity', () => {
69
+ const nodes = [
70
+ { id: 'A', dependsOn: ['B'], data: { value: 1 } },
71
+ { id: 'B', data: { value: 2 } },
72
+ ];
73
+ const result = topologicalSort(nodes);
74
+
75
+ expect(result[0].data).toEqual({ value: 2 });
76
+ expect(result[1].data).toEqual({ value: 1 });
77
+ });
78
+
79
+ it('should handle complex dependency graph', () => {
80
+ const nodes = [
81
+ { id: 'A', dependsOn: ['B', 'C'], data: 1 },
82
+ { id: 'B', dependsOn: ['D'], data: 2 },
83
+ { id: 'C', dependsOn: ['D', 'E'], data: 3 },
84
+ { id: 'D', dependsOn: ['F'], data: 4 },
85
+ { id: 'E', dependsOn: ['F'], data: 5 },
86
+ { id: 'F', data: 6 },
87
+ ];
88
+ const result = topologicalSort(nodes);
89
+ const resultIds = result.map((n) => n.id);
90
+
91
+ // Verify order constraints.
92
+ expect(resultIds[0]).toBe('F'); // F must be first.
93
+ expect(resultIds[resultIds.length - 1]).toBe('A'); // A must be last.
94
+ expect(resultIds.indexOf('D')).toBeLessThan(resultIds.indexOf('B'));
95
+ expect(resultIds.indexOf('E')).toBeLessThan(resultIds.indexOf('C'));
96
+ });
97
+ });
package/src/helpers.ts ADDED
@@ -0,0 +1,45 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ type DependencyNode = {
6
+ id: string;
7
+ dependsOn?: string[];
8
+ };
9
+
10
+ /**
11
+ * Topologically sorts a list of nodes based on their dependencies.
12
+ */
13
+ // TODO(wittjosiah): Factor out?
14
+ export const topologicalSort = <T extends DependencyNode>(nodes: T[]): T[] => {
15
+ const getDependencies = (nodeId: string, seen = new Set<string>(), path = new Set<string>()): string[] => {
16
+ if (path.has(nodeId)) {
17
+ throw new Error(`Circular dependency detected involving ${nodeId}`);
18
+ }
19
+ if (seen.has(nodeId)) {
20
+ return [];
21
+ }
22
+
23
+ const node = nodes.find((n) => n.id === nodeId);
24
+ if (!node) {
25
+ throw new Error(`Node ${nodeId} not found but is listed as a dependency`);
26
+ }
27
+
28
+ const newPath = new Set([...path, nodeId]);
29
+ const newSeen = new Set([...seen, nodeId]);
30
+
31
+ const dependsOn = node.dependsOn ?? [];
32
+ return [...dependsOn.flatMap((depId) => getDependencies(depId, newSeen, newPath)), nodeId];
33
+ };
34
+
35
+ // Get all unique dependencies.
36
+ const allDependencies = nodes
37
+ .map((node) => node.id)
38
+ .flatMap((id) => getDependencies(id))
39
+ .filter((id, index, self) => self.indexOf(id) === index);
40
+
41
+ // Map back to original nodes
42
+ return allDependencies
43
+ .map((id) => nodes.find((node) => node.id === id))
44
+ .filter((node): node is T => node !== undefined);
45
+ };
package/src/index.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './plugins';
6
-
7
5
  export * from './App';
6
+ export * from './common';
7
+ export * from './core';
8
+ export * from './plugin-intent';
9
+ export * from './plugin-settings';
10
+ export * from './react';
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
8
+
9
+ import { Capabilities, createSurface } from '../../common';
10
+ import { contributes } from '../../core';
11
+ import { usePluginManager } from '../../react';
12
+
13
+ export const Debug = () => {
14
+ const manager = usePluginManager();
15
+
16
+ const object = {
17
+ core: manager.core,
18
+ enabled: manager.enabled,
19
+ active: manager.active,
20
+ pendingReset: manager.pendingReset,
21
+ eventsFired: manager.eventsFired,
22
+ };
23
+
24
+ return (
25
+ <SyntaxHighlighter language='json' classNames='flex w-full text-xs opacity-75 rounded'>
26
+ {JSON.stringify(object, undefined, 2)}
27
+ </SyntaxHighlighter>
28
+ );
29
+ };
30
+
31
+ export default () =>
32
+ contributes(
33
+ Capabilities.ReactSurface,
34
+ createSurface({
35
+ id: 'dxos.org/test/debug/main',
36
+ role: 'secondary',
37
+ component: Debug,
38
+ }),
39
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './plugin';
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Events } from '../../common';
6
+ import { defineModule, definePlugin, lazy } from '../../core';
7
+
8
+ const Debug = lazy(() => import('./Debug'));
9
+
10
+ export const DebugPlugin = () =>
11
+ definePlugin({ id: 'dxos.org/test/debug' }, [
12
+ defineModule({
13
+ id: 'dxos.org/test/debug/main',
14
+ activatesOn: Events.Startup,
15
+ activate: Debug,
16
+ }),
17
+ ]);
@@ -0,0 +1,71 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback } from 'react';
6
+
7
+ import { IconButton, List, ListItem } from '@dxos/react-ui';
8
+
9
+ import { Capabilities } from '../../common';
10
+ import { contributes } from '../../core';
11
+ import { usePluginManager } from '../../react';
12
+
13
+ const Item = ({
14
+ id,
15
+ disabled,
16
+ onRemove,
17
+ }: {
18
+ id: string;
19
+ disabled: boolean;
20
+ onRemove: (id: string) => Promise<void>;
21
+ }) => {
22
+ const handleRemove = useCallback(() => onRemove(id), [onRemove]);
23
+
24
+ return (
25
+ <ListItem.Root key={id} id={id}>
26
+ <ListItem.Heading classNames='grow pbs-2'>{id}</ListItem.Heading>
27
+ <ListItem.Endcap>
28
+ <IconButton
29
+ iconOnly
30
+ variant='ghost'
31
+ icon='ph--x--regular'
32
+ label='Remove'
33
+ size={5}
34
+ disabled={disabled}
35
+ onClick={handleRemove}
36
+ />
37
+ </ListItem.Endcap>
38
+ </ListItem.Root>
39
+ );
40
+ };
41
+
42
+ export const Main = () => {
43
+ const manager = usePluginManager();
44
+
45
+ const handleRemove = useCallback(
46
+ async (id: string) => {
47
+ await manager.remove(id);
48
+ },
49
+ [manager],
50
+ );
51
+
52
+ return (
53
+ <List itemSizes='one'>
54
+ {manager.plugins.map((plugin) => (
55
+ <Item
56
+ key={plugin.meta.id}
57
+ id={plugin.meta.id}
58
+ disabled={manager.core.includes(plugin.meta.id)}
59
+ onRemove={handleRemove}
60
+ />
61
+ ))}
62
+ </List>
63
+ );
64
+ };
65
+
66
+ export default () =>
67
+ contributes(Capabilities.ReactSurface, {
68
+ id: 'dxos.org/test/generator/main',
69
+ role: 'primary',
70
+ component: Main,
71
+ });
@@ -0,0 +1,46 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback } from 'react';
6
+
7
+ import { Button } from '@dxos/react-ui';
8
+
9
+ import { createGeneratorIntent, createPluginId, Number } from './generator';
10
+ import { Capabilities } from '../../common';
11
+ import { contributes } from '../../core';
12
+ import { createIntent } from '../../plugin-intent';
13
+ import { useCapabilities, useIntentDispatcher, usePluginManager } from '../../react';
14
+
15
+ export const Toolbar = () => {
16
+ const manager = usePluginManager();
17
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
18
+
19
+ const handleAdd = useCallback(async () => {
20
+ const id = createPluginId(Math.random().toString(16).substring(2, 8));
21
+ await manager.add(id);
22
+ }, [manager]);
23
+
24
+ const count = useCapabilities(Number).reduce((acc, curr) => acc + curr, 0);
25
+
26
+ const generatorPlugins = manager.plugins.filter((plugin) => plugin.meta.id.startsWith('dxos.org/test/generator/'));
27
+
28
+ return (
29
+ <>
30
+ <Button onClick={handleAdd}>Add</Button>
31
+ <div className='flex items-center'>Count: {count}</div>
32
+ {generatorPlugins.map((plugin) => (
33
+ <Button key={plugin.meta.id} onClick={() => dispatch(createIntent(createGeneratorIntent(plugin.meta.id)))}>
34
+ {plugin.meta.id.replace('dxos.org/test/generator/', '')}
35
+ </Button>
36
+ ))}
37
+ </>
38
+ );
39
+ };
40
+
41
+ export default () =>
42
+ contributes(Capabilities.ReactSurface, {
43
+ id: 'dxos.org/test/generator/toolbar',
44
+ role: 'toolbar',
45
+ component: Toolbar,
46
+ });
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Schema as S } from '@effect/schema';
6
+
7
+ import { Capabilities, Events } from '../../common';
8
+ import { contributes, defineEvent, defineCapability, defineModule, definePlugin } from '../../core';
9
+ import { createResolver, type IntentSchema } from '../../plugin-intent';
10
+
11
+ export const Number = defineCapability<number>('dxos.org/test/generator/number');
12
+
13
+ export const CountEvent = defineEvent('dxos.org/test/generator/count');
14
+
15
+ export const createPluginId = (id: string) => `dxos.org/test/generator/${id}`;
16
+
17
+ export const createGeneratorIntent = (id: string) => {
18
+ class Alert extends S.TaggedClass<Alert>()(`${createPluginId(id)}/action/alert`, {
19
+ input: S.Void,
20
+ output: S.Void,
21
+ }) {}
22
+
23
+ return Alert as unknown as IntentSchema<any, any>;
24
+ };
25
+
26
+ export const createNumberPlugin = (id: string) => {
27
+ const number = Math.floor(Math.random() * 100);
28
+
29
+ return definePlugin({ id }, [
30
+ defineModule({
31
+ id: `${id}/main`,
32
+ activatesOn: CountEvent,
33
+ activate: () => contributes(Number, number),
34
+ }),
35
+ defineModule({
36
+ id: `${id}/intent-resolver`,
37
+ activatesOn: Events.SetupIntents,
38
+ activate: () =>
39
+ contributes(
40
+ Capabilities.IntentResolver,
41
+ createResolver({
42
+ intent: createGeneratorIntent(id),
43
+ resolve: () => window.alert(JSON.stringify({ number })),
44
+ }),
45
+ ),
46
+ }),
47
+ ]);
48
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './plugin';
6
+ export * from './generator';
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Events } from '../../common';
6
+ import { defineModule, definePlugin, lazy } from '../../core';
7
+
8
+ const Main = lazy(() => import('./Main'));
9
+ const Toolbar = lazy(() => import('./Toolbar'));
10
+
11
+ export const GeneratorPlugin = () =>
12
+ definePlugin({ id: 'dxos.org/test/generator' }, [
13
+ defineModule({
14
+ id: 'dxos.org/test/generator/main',
15
+ activatesOn: Events.Startup,
16
+ activate: Main,
17
+ }),
18
+ defineModule({
19
+ id: 'dxos.org/test/generator/toolbar',
20
+ activatesOn: Events.Startup,
21
+ activate: Toolbar,
22
+ }),
23
+ ]);
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Capabilities } from '../../common';
8
+ import { contributes } from '../../core';
9
+ import { Surface } from '../../react';
10
+
11
+ export const Layout = () => {
12
+ return (
13
+ <div className='flex flex-col gap-2'>
14
+ <div className='flex gap-2'>
15
+ <Surface role='toolbar' />
16
+ </div>
17
+ <div className='flex gap-2'>
18
+ <div className='flex-1'>
19
+ <Surface role='primary' limit={1} />
20
+ </div>
21
+ <div className='flex-1'>
22
+ <Surface role='secondary' limit={1} />
23
+ </div>
24
+ </div>
25
+ </div>
26
+ );
27
+ };
28
+
29
+ export default () =>
30
+ contributes(Capabilities.ReactRoot, {
31
+ id: 'dxos.org/test/layout/root',
32
+ root: Layout,
33
+ });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './plugin';
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Events } from '../../common';
6
+ import { definePlugin, lazy, defineModule } from '../../core';
7
+
8
+ const Layout = lazy(() => import('./Layout'));
9
+
10
+ export const LayoutPlugin = () =>
11
+ definePlugin({ id: 'dxos.org/test/layout' }, [
12
+ defineModule({
13
+ id: 'dxos.org/test/layout/root',
14
+ activatesOn: Events.Startup,
15
+ activate: Layout,
16
+ }),
17
+ ]);
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback } from 'react';
6
+
7
+ import { Button } from '@dxos/react-ui';
8
+
9
+ import { Log } from './schema';
10
+ import { Capabilities, createSurface } from '../../common';
11
+ import { contributes } from '../../core';
12
+ import { createIntent } from '../../plugin-intent';
13
+ import { useIntentDispatcher } from '../../react';
14
+
15
+ export const Logger = () => {
16
+ const { dispatchPromise } = useIntentDispatcher();
17
+ const handleClick = useCallback(() => dispatchPromise(createIntent(Log, { message: 'Hello, world!' })), []);
18
+ return <Button onClick={handleClick}>Log</Button>;
19
+ };
20
+
21
+ export default () =>
22
+ contributes(
23
+ Capabilities.ReactSurface,
24
+ createSurface({
25
+ id: 'dxos.org/test/logger/action',
26
+ role: 'toolbar',
27
+ component: Logger,
28
+ }),
29
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './plugin';
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { log } from '@dxos/log';
6
+
7
+ import { Log } from './schema';
8
+ import { Capabilities, Events } from '../../common';
9
+ import { contributes, defineModule, lazy, definePlugin } from '../../core';
10
+ import { createResolver } from '../../plugin-intent';
11
+
12
+ const Toolbar = lazy(() => import('./Toolbar'));
13
+
14
+ export const LoggerPlugin = () =>
15
+ definePlugin({ id: 'dxos.org/test/logger' }, [
16
+ defineModule({
17
+ id: 'dxos.org/test/logger/intents',
18
+ activatesOn: Events.SetupIntents,
19
+ activate: () => [
20
+ contributes(
21
+ Capabilities.IntentResolver,
22
+ createResolver({
23
+ intent: Log,
24
+ resolve: ({ message }) => {
25
+ log.info(message);
26
+ },
27
+ }),
28
+ ),
29
+ ],
30
+ }),
31
+ defineModule({
32
+ id: 'dxos.org/test/logger/surfaces',
33
+ activatesOn: Events.Startup,
34
+ activate: Toolbar,
35
+ }),
36
+ ]);
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Schema as S } from '@effect/schema';
6
+
7
+ export class Log extends S.TaggedClass<Log>()('dxos.org/test/logger/log', {
8
+ input: S.Struct({
9
+ message: S.String,
10
+ }),
11
+ output: S.Void,
12
+ }) {}
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import React from 'react';
8
+
9
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
10
+
11
+ import { DebugPlugin } from './debug';
12
+ import { createNumberPlugin, GeneratorPlugin } from './generator';
13
+ import { LayoutPlugin } from './layout';
14
+ import { LoggerPlugin } from './logger';
15
+ import { createApp } from '../App';
16
+ import { IntentPlugin } from '../plugin-intent';
17
+
18
+ const plugins = [IntentPlugin(), LayoutPlugin(), DebugPlugin(), LoggerPlugin(), GeneratorPlugin()];
19
+
20
+ const Story = createApp({
21
+ pluginLoader: (id) => createNumberPlugin(id),
22
+ plugins,
23
+ core: plugins.map((plugin) => plugin.meta.id),
24
+ // Having a non-empty placeholder makes it clear if it's taking a while to load.
25
+ placeholder: <div>Loading...</div>,
26
+ });
27
+
28
+ export const Playground = {};
29
+
30
+ export default {
31
+ title: 'sdk/app-framework/playground',
32
+ render: Story,
33
+ decorators: [withTheme, withLayout({ tooltips: true })],
34
+ };
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { INTENT_PLUGIN } from './actions';
6
+ import { Events } from '../common';
7
+ import { defineModule, definePlugin, lazy } from '../core';
8
+
9
+ export const IntentPlugin = () =>
10
+ definePlugin({ id: INTENT_PLUGIN }, [
11
+ defineModule({
12
+ id: `${INTENT_PLUGIN}/module/dispatcher`,
13
+ // TODO(wittjosiah): This will mean that startup needs to be reset when intents are added or removed.
14
+ // This is fine for now because it's how it worked prior to capabilities api anyways.
15
+ // In the future, the intent dispatcher should be able to be reset without resetting the entire app.
16
+ activatesOn: Events.Startup,
17
+ activatesAfter: [Events.DispatcherReady],
18
+ activate: lazy(() => import('./intent-dispatcher')),
19
+ }),
20
+ ]);
@@ -0,0 +1,22 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Schema as S } from '@effect/schema';
6
+
7
+ import { Label } from './intent';
8
+
9
+ export const INTENT_PLUGIN = 'dxos.org/plugin/intent';
10
+ export const INTENT_ACTION = `${INTENT_PLUGIN}/action`;
11
+
12
+ export namespace IntentAction {
13
+ /**
14
+ * Fired after an intent is dispatched if the intent is undoable.
15
+ */
16
+ export class ShowUndo extends S.TaggedClass<ShowUndo>()(`${INTENT_ACTION}/show-undo`, {
17
+ input: S.Struct({
18
+ message: Label,
19
+ }),
20
+ output: S.Void,
21
+ }) {}
22
+ }