@dxos/app-framework 0.8.2-staging.7ac8446 → 0.8.2

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 (331) hide show
  1. package/dist/lib/browser/{app-graph-builder-576BHZC7.mjs → app-graph-builder-DYEAGZPS.mjs} +23 -23
  2. package/dist/lib/browser/app-graph-builder-DYEAGZPS.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-6AVTZPMT.mjs → chunk-5GE2ERNU.mjs} +340 -275
  4. package/dist/lib/browser/chunk-5GE2ERNU.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-SFPT4Z2C.mjs → chunk-WWEJRWFX.mjs} +10 -10
  6. package/dist/lib/browser/chunk-WWEJRWFX.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PPIBZ5N4.mjs → chunk-ZMXJV64L.mjs} +123 -63
  8. package/dist/lib/browser/chunk-ZMXJV64L.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +12 -10
  10. package/dist/lib/browser/index.mjs.map +1 -1
  11. package/dist/lib/browser/{intent-dispatcher-3Q67MHZZ.mjs → intent-dispatcher-ELZN5EM7.mjs} +2 -2
  12. package/dist/lib/browser/{intent-resolver-O763LCLG.mjs → intent-resolver-SGWLINTO.mjs} +3 -3
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/{store-URSN7DZI.mjs → store-YIU6IPZ2.mjs} +7 -6
  15. package/dist/lib/browser/store-YIU6IPZ2.mjs.map +7 -0
  16. package/dist/lib/browser/testing/index.mjs +30 -14
  17. package/dist/lib/browser/testing/index.mjs.map +3 -3
  18. package/dist/lib/browser/worker.mjs +5 -3
  19. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs +146 -0
  20. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs.map +7 -0
  21. package/dist/lib/node/{chunk-JUSEAFDU.cjs → chunk-G774ASXO.cjs} +5 -5
  22. package/dist/lib/node/chunk-G774ASXO.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-YIFTVCOR.cjs → chunk-HIVITTZD.cjs} +319 -255
  24. package/dist/lib/node/chunk-HIVITTZD.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-YNTKVTVX.cjs → chunk-Z2PMVDJ5.cjs} +155 -95
  26. package/dist/lib/node/chunk-Z2PMVDJ5.cjs.map +7 -0
  27. package/dist/lib/node/index.cjs +82 -80
  28. package/dist/lib/node/index.cjs.map +1 -1
  29. package/dist/lib/node/{intent-dispatcher-H334XLFD.cjs → intent-dispatcher-LFXZJTAS.cjs} +8 -8
  30. package/dist/lib/node/{intent-dispatcher-H334XLFD.cjs.map → intent-dispatcher-LFXZJTAS.cjs.map} +2 -2
  31. package/dist/lib/node/{intent-resolver-3F4POWAM.cjs → intent-resolver-EPSFTHL6.cjs} +12 -12
  32. package/dist/lib/node/meta.json +1 -1
  33. package/dist/lib/node/{store-OFDHTDCB.cjs → store-CVVRXUTH.cjs} +10 -9
  34. package/dist/lib/node/store-CVVRXUTH.cjs.map +7 -0
  35. package/dist/lib/node/testing/index.cjs +34 -17
  36. package/dist/lib/node/testing/index.cjs.map +3 -3
  37. package/dist/lib/node/worker.cjs +40 -38
  38. package/dist/lib/node/worker.cjs.map +2 -2
  39. package/dist/lib/node-esm/{app-graph-builder-VYKLSMSZ.mjs → app-graph-builder-LUBDEIT6.mjs} +23 -23
  40. package/dist/lib/node-esm/app-graph-builder-LUBDEIT6.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-R6A7Z4LU.mjs → chunk-6IKYKERU.mjs} +123 -63
  42. package/dist/lib/node-esm/chunk-6IKYKERU.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-PHOUQACM.mjs → chunk-I6BVZMAH.mjs} +10 -10
  44. package/dist/lib/node-esm/chunk-I6BVZMAH.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-AHKIPS2L.mjs → chunk-Z2ZHH4HN.mjs} +340 -275
  46. package/dist/lib/node-esm/chunk-Z2ZHH4HN.mjs.map +7 -0
  47. package/dist/lib/node-esm/index.mjs +12 -10
  48. package/dist/lib/node-esm/index.mjs.map +1 -1
  49. package/dist/lib/node-esm/{intent-dispatcher-YDE2ONZA.mjs → intent-dispatcher-A2JCMWRD.mjs} +2 -2
  50. package/dist/lib/node-esm/{intent-resolver-LAGJ7LXM.mjs → intent-resolver-5C4O43GK.mjs} +3 -3
  51. package/dist/lib/node-esm/meta.json +1 -1
  52. package/dist/lib/node-esm/{store-EYSUVNCS.mjs → store-HRZXZ2D2.mjs} +7 -6
  53. package/dist/lib/node-esm/store-HRZXZ2D2.mjs.map +7 -0
  54. package/dist/lib/node-esm/testing/index.mjs +30 -14
  55. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  56. package/dist/lib/node-esm/worker.mjs +5 -3
  57. package/dist/types/src/App.d.ts +3 -1
  58. package/dist/types/src/App.d.ts.map +1 -1
  59. package/dist/types/src/common/capabilities.d.ts +40 -222
  60. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  61. package/dist/types/src/common/collaboration.d.ts +19 -0
  62. package/dist/types/src/common/collaboration.d.ts.map +1 -0
  63. package/dist/types/src/common/events.d.ts.map +1 -1
  64. package/dist/types/src/common/file.d.ts +7 -7
  65. package/dist/types/src/common/file.d.ts.map +1 -1
  66. package/dist/types/src/common/index.d.ts +1 -0
  67. package/dist/types/src/common/index.d.ts.map +1 -1
  68. package/dist/types/src/common/layout.d.ts +166 -158
  69. package/dist/types/src/common/layout.d.ts.map +1 -1
  70. package/dist/types/src/common/surface.d.ts.map +1 -1
  71. package/dist/types/src/common/translations.d.ts +7 -7
  72. package/dist/types/src/common/translations.d.ts.map +1 -1
  73. package/dist/types/src/core/capabilities.d.ts +33 -15
  74. package/dist/types/src/core/capabilities.d.ts.map +1 -1
  75. package/dist/types/src/core/events.d.ts +4 -1
  76. package/dist/types/src/core/events.d.ts.map +1 -1
  77. package/dist/types/src/core/manager.d.ts +14 -11
  78. package/dist/types/src/core/manager.d.ts.map +1 -1
  79. package/dist/types/src/core/plugin.d.ts +4 -3
  80. package/dist/types/src/core/plugin.d.ts.map +1 -1
  81. package/dist/types/src/helpers.d.ts.map +1 -1
  82. package/dist/types/src/playground/generator/generator.d.ts.map +1 -1
  83. package/dist/types/src/playground/logger/schema.d.ts +6 -6
  84. package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
  85. package/dist/types/src/playground/playground.stories.d.ts.map +1 -1
  86. package/dist/types/src/plugin-intent/actions.d.ts +14 -14
  87. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -1
  88. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +29 -3
  89. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
  90. package/dist/types/src/plugin-intent/intent.d.ts +14 -20
  91. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -1
  92. package/dist/types/src/plugin-settings/actions.d.ts +10 -10
  93. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
  94. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +2 -195
  95. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
  96. package/dist/types/src/plugin-settings/store.d.ts +2 -2
  97. package/dist/types/src/plugin-settings/store.d.ts.map +1 -1
  98. package/dist/types/src/react/ErrorBoundary.d.ts +1 -1
  99. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
  100. package/dist/types/src/react/IntentContext.d.ts.map +1 -1
  101. package/dist/types/src/react/Surface.d.ts +2 -2
  102. package/dist/types/src/react/Surface.d.ts.map +1 -1
  103. package/dist/types/src/react/useCapabilities.d.ts +2 -2
  104. package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
  105. package/dist/types/src/react/useIntentResolver.d.ts.map +1 -1
  106. package/dist/types/src/testing/withPluginManager.d.ts +6 -2
  107. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  108. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  109. package/dist/types/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +32 -21
  111. package/project.json +2 -1
  112. package/src/App.tsx +98 -48
  113. package/src/common/capabilities.ts +18 -7
  114. package/src/common/collaboration.ts +21 -0
  115. package/src/common/file.ts +7 -7
  116. package/src/common/index.ts +1 -0
  117. package/src/common/layout.ts +167 -128
  118. package/src/common/translations.ts +7 -7
  119. package/src/core/capabilities.test.ts +55 -36
  120. package/src/core/capabilities.ts +84 -60
  121. package/src/core/events.ts +4 -1
  122. package/src/core/manager.test.ts +22 -22
  123. package/src/core/manager.ts +34 -26
  124. package/src/core/plugin.ts +4 -3
  125. package/src/playground/generator/generator.ts +4 -4
  126. package/src/playground/logger/schema.ts +5 -5
  127. package/src/playground/playground.stories.tsx +13 -9
  128. package/src/plugin-intent/actions.ts +9 -9
  129. package/src/plugin-intent/intent-dispatcher.test.ts +23 -42
  130. package/src/plugin-intent/intent-dispatcher.ts +25 -13
  131. package/src/plugin-intent/intent.ts +22 -20
  132. package/src/plugin-settings/actions.ts +8 -8
  133. package/src/plugin-settings/app-graph-builder.ts +129 -94
  134. package/src/plugin-settings/store.ts +20 -17
  135. package/src/react/ErrorBoundary.tsx +3 -3
  136. package/src/react/Surface.stories.tsx +1 -1
  137. package/src/react/Surface.tsx +3 -3
  138. package/src/react/useCapabilities.ts +9 -19
  139. package/src/testing/withPluginManager.stories.tsx +0 -1
  140. package/src/testing/withPluginManager.tsx +35 -16
  141. package/tsconfig.json +1 -53
  142. package/typedoc/.nojekyll +1 -0
  143. package/typedoc/assets/hierarchy.js +1 -0
  144. package/typedoc/assets/highlight.css +106 -0
  145. package/typedoc/assets/icons.js +18 -0
  146. package/typedoc/assets/icons.svg +1 -0
  147. package/typedoc/assets/main.js +60 -0
  148. package/typedoc/assets/navigation.js +1 -0
  149. package/typedoc/assets/search.js +1 -0
  150. package/typedoc/assets/style.css +1640 -0
  151. package/typedoc/classes/CollaborationActions.InsertContent.html +421 -0
  152. package/typedoc/classes/ErrorBoundary.html +125 -0
  153. package/typedoc/classes/IntentAction.ShowUndo.html +227 -0
  154. package/typedoc/classes/IntentAction.Track.html +266 -0
  155. package/typedoc/classes/LayoutAction.AddToast.html +265 -0
  156. package/typedoc/classes/LayoutAction.Close.html +382 -0
  157. package/typedoc/classes/LayoutAction.Expose.html +265 -0
  158. package/typedoc/classes/LayoutAction.Open.html +1123 -0
  159. package/typedoc/classes/LayoutAction.RevertWorkspace.html +343 -0
  160. package/typedoc/classes/LayoutAction.ScrollIntoView.html +460 -0
  161. package/typedoc/classes/LayoutAction.Set.html +460 -0
  162. package/typedoc/classes/LayoutAction.SetLayoutMode.html +499 -0
  163. package/typedoc/classes/LayoutAction.SwitchWorkspace.html +265 -0
  164. package/typedoc/classes/LayoutAction.UpdateComplementary.html +616 -0
  165. package/typedoc/classes/LayoutAction.UpdateDialog.html +1123 -0
  166. package/typedoc/classes/LayoutAction.UpdateLayout.html +461 -0
  167. package/typedoc/classes/LayoutAction.UpdatePopover.html +1435 -0
  168. package/typedoc/classes/LayoutAction.UpdateSidebar.html +616 -0
  169. package/typedoc/classes/Plugin.html +6 -0
  170. package/typedoc/classes/PluginContext.html +38 -0
  171. package/typedoc/classes/PluginManager.html +43 -0
  172. package/typedoc/classes/PluginModule.html +18 -0
  173. package/typedoc/classes/SettingsAction.Open.html +226 -0
  174. package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +265 -0
  175. package/typedoc/functions/Events.createStateEvent.html +2 -0
  176. package/typedoc/functions/IntentPlugin.html +1 -0
  177. package/typedoc/functions/SettingsPlugin.html +1 -0
  178. package/typedoc/functions/allOf.html +2 -0
  179. package/typedoc/functions/chain.html +3 -0
  180. package/typedoc/functions/contributes.html +2 -0
  181. package/typedoc/functions/createDispatcher.html +3 -0
  182. package/typedoc/functions/createIntent.html +6 -0
  183. package/typedoc/functions/createResolver.html +2 -0
  184. package/typedoc/functions/createSurface.html +2 -0
  185. package/typedoc/functions/defineCapability.html +2 -0
  186. package/typedoc/functions/defineEvent.html +2 -0
  187. package/typedoc/functions/defineModule.html +2 -0
  188. package/typedoc/functions/definePlugin.html +2 -0
  189. package/typedoc/functions/eventKey.html +2 -0
  190. package/typedoc/functions/getEvents.html +2 -0
  191. package/typedoc/functions/isAllOf.html +2 -0
  192. package/typedoc/functions/isOneOf.html +2 -0
  193. package/typedoc/functions/isSurfaceAvailable.html +2 -0
  194. package/typedoc/functions/lazy.html +2 -0
  195. package/typedoc/functions/oneOf.html +2 -0
  196. package/typedoc/functions/useApp.html +6 -0
  197. package/typedoc/functions/useAppGraph.html +1 -0
  198. package/typedoc/functions/useCapabilities.html +3 -0
  199. package/typedoc/functions/useCapability.html +4 -0
  200. package/typedoc/functions/useIntentDispatcher.html +1 -0
  201. package/typedoc/functions/useIntentResolver.html +1 -0
  202. package/typedoc/functions/useLayout.html +1 -0
  203. package/typedoc/functions/usePluginManager.html +2 -0
  204. package/typedoc/hierarchy.html +1 -0
  205. package/typedoc/index.html +16 -0
  206. package/typedoc/interfaces/LayoutAction.Toast.html +10 -0
  207. package/typedoc/media/LICENSE +8 -0
  208. package/typedoc/modules/Capabilities.html +1 -0
  209. package/typedoc/modules/CollaborationActions.html +1 -0
  210. package/typedoc/modules/Events.html +1 -0
  211. package/typedoc/modules/IntentAction.html +1 -0
  212. package/typedoc/modules/LayoutAction.html +2 -0
  213. package/typedoc/modules/SettingsAction.html +1 -0
  214. package/typedoc/modules.html +1 -0
  215. package/typedoc/types/ActivationEvent.html +8 -0
  216. package/typedoc/types/ActivationEvents.html +2 -0
  217. package/typedoc/types/AnyCapability.html +1 -0
  218. package/typedoc/types/AnyIntent.html +1 -0
  219. package/typedoc/types/AnyIntentChain.html +1 -0
  220. package/typedoc/types/AnyIntentEffectResult.html +1 -0
  221. package/typedoc/types/AnyIntentResolver.html +1 -0
  222. package/typedoc/types/AnyIntentResult.html +1 -0
  223. package/typedoc/types/Capabilities.FileUploader.html +1 -0
  224. package/typedoc/types/Capabilities.IntentResolver.html +1 -0
  225. package/typedoc/types/Capabilities.Layout.html +1 -0
  226. package/typedoc/types/Capabilities.Metadata.html +1 -0
  227. package/typedoc/types/Capabilities.ReactContext.html +1 -0
  228. package/typedoc/types/Capabilities.ReactRoot.html +1 -0
  229. package/typedoc/types/Capabilities.ReactSurface.html +1 -0
  230. package/typedoc/types/Capabilities.Settings.html +4 -0
  231. package/typedoc/types/Capability.html +9 -0
  232. package/typedoc/types/CreateAppOptions.html +10 -0
  233. package/typedoc/types/FileInfo.html +1 -0
  234. package/typedoc/types/Intent.html +10 -0
  235. package/typedoc/types/IntentChain.html +6 -0
  236. package/typedoc/types/IntentContext.html +5 -0
  237. package/typedoc/types/IntentData.html +1 -0
  238. package/typedoc/types/IntentDispatcher.html +2 -0
  239. package/typedoc/types/IntentDispatcherResult.html +2 -0
  240. package/typedoc/types/IntentEffectDefinition.html +2 -0
  241. package/typedoc/types/IntentEffectResult.html +15 -0
  242. package/typedoc/types/IntentParams.html +3 -0
  243. package/typedoc/types/IntentResolver.html +2 -0
  244. package/typedoc/types/IntentResultData.html +1 -0
  245. package/typedoc/types/IntentSchema.html +1 -0
  246. package/typedoc/types/IntentUndo.html +2 -0
  247. package/typedoc/types/InterfaceDef.html +4 -0
  248. package/typedoc/types/Label.html +1 -0
  249. package/typedoc/types/NodeSerializer.html +8 -0
  250. package/typedoc/types/PluginManagerOptions.html +6 -0
  251. package/typedoc/types/PluginMeta.html +21 -0
  252. package/typedoc/types/PromiseIntentDispatcher.html +2 -0
  253. package/typedoc/types/PromiseIntentUndo.html +2 -0
  254. package/typedoc/types/Resource.html +1 -0
  255. package/typedoc/types/ResourceKey.html +1 -0
  256. package/typedoc/types/ResourceLanguage.html +1 -0
  257. package/typedoc/types/SerializedNode.html +4 -0
  258. package/typedoc/types/SurfaceComponent.html +2 -0
  259. package/typedoc/types/SurfaceDefinition.html +2 -0
  260. package/typedoc/types/SurfaceProps.html +4 -0
  261. package/typedoc/variables/Capabilities.AnchorSort.html +1 -0
  262. package/typedoc/variables/Capabilities.AppGraph.html +1 -0
  263. package/typedoc/variables/Capabilities.AppGraphBuilder.html +1 -0
  264. package/typedoc/variables/Capabilities.AppGraphSerializer.html +1 -0
  265. package/typedoc/variables/Capabilities.ArtifactDefinition.html +1 -0
  266. package/typedoc/variables/Capabilities.FileUploader.html +1 -0
  267. package/typedoc/variables/Capabilities.IntentDispatcher.html +1 -0
  268. package/typedoc/variables/Capabilities.IntentResolver.html +1 -0
  269. package/typedoc/variables/Capabilities.Layout.html +1 -0
  270. package/typedoc/variables/Capabilities.Metadata.html +1 -0
  271. package/typedoc/variables/Capabilities.Null.html +1 -0
  272. package/typedoc/variables/Capabilities.PluginManager.html +1 -0
  273. package/typedoc/variables/Capabilities.ReactContext.html +1 -0
  274. package/typedoc/variables/Capabilities.ReactRoot.html +1 -0
  275. package/typedoc/variables/Capabilities.ReactSurface.html +1 -0
  276. package/typedoc/variables/Capabilities.RxRegistry.html +1 -0
  277. package/typedoc/variables/Capabilities.Settings.html +1 -0
  278. package/typedoc/variables/Capabilities.SettingsStore.html +1 -0
  279. package/typedoc/variables/Capabilities.Tools.html +1 -0
  280. package/typedoc/variables/Capabilities.Translations.html +1 -0
  281. package/typedoc/variables/Events.AppGraphReady.html +2 -0
  282. package/typedoc/variables/Events.DispatcherReady.html +2 -0
  283. package/typedoc/variables/Events.LayoutReady.html +1 -0
  284. package/typedoc/variables/Events.SettingsReady.html +2 -0
  285. package/typedoc/variables/Events.SetupAppGraph.html +2 -0
  286. package/typedoc/variables/Events.SetupArtifactDefinition.html +2 -0
  287. package/typedoc/variables/Events.SetupIntentResolver.html +2 -0
  288. package/typedoc/variables/Events.SetupMetadata.html +2 -0
  289. package/typedoc/variables/Events.SetupReactSurface.html +2 -0
  290. package/typedoc/variables/Events.SetupSettings.html +2 -0
  291. package/typedoc/variables/Events.SetupTranslations.html +2 -0
  292. package/typedoc/variables/Events.Startup.html +2 -0
  293. package/typedoc/variables/FileInfoSchema.html +1 -0
  294. package/typedoc/variables/INTENT_ACTION.html +1 -0
  295. package/typedoc/variables/INTENT_PLUGIN.html +1 -0
  296. package/typedoc/variables/LAYOUT_ACTION.html +1 -0
  297. package/typedoc/variables/LAYOUT_PLUGIN.html +1 -0
  298. package/typedoc/variables/Label.html +1 -0
  299. package/typedoc/variables/LayoutAction.Toast.html +1 -0
  300. package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +1 -0
  301. package/typedoc/variables/PluginManagerProvider.html +2 -0
  302. package/typedoc/variables/Resource.html +2 -0
  303. package/typedoc/variables/ResourceKey.html +1 -0
  304. package/typedoc/variables/ResourceLanguage.html +1 -0
  305. package/typedoc/variables/SETTINGS_ACTION.html +1 -0
  306. package/typedoc/variables/SETTINGS_ID.html +1 -0
  307. package/typedoc/variables/SETTINGS_KEY.html +1 -0
  308. package/typedoc/variables/SETTINGS_PLUGIN.html +1 -0
  309. package/typedoc/variables/Surface.html +2 -0
  310. package/typedoc/variables/defaultFileTypes.html +1 -0
  311. package/dist/lib/browser/app-graph-builder-576BHZC7.mjs.map +0 -7
  312. package/dist/lib/browser/chunk-6AVTZPMT.mjs.map +0 -7
  313. package/dist/lib/browser/chunk-PPIBZ5N4.mjs.map +0 -7
  314. package/dist/lib/browser/chunk-SFPT4Z2C.mjs.map +0 -7
  315. package/dist/lib/browser/store-URSN7DZI.mjs.map +0 -7
  316. package/dist/lib/node/app-graph-builder-JZCSKYPY.cjs +0 -146
  317. package/dist/lib/node/app-graph-builder-JZCSKYPY.cjs.map +0 -7
  318. package/dist/lib/node/chunk-JUSEAFDU.cjs.map +0 -7
  319. package/dist/lib/node/chunk-YIFTVCOR.cjs.map +0 -7
  320. package/dist/lib/node/chunk-YNTKVTVX.cjs.map +0 -7
  321. package/dist/lib/node/store-OFDHTDCB.cjs.map +0 -7
  322. package/dist/lib/node-esm/app-graph-builder-VYKLSMSZ.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-AHKIPS2L.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-PHOUQACM.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-R6A7Z4LU.mjs.map +0 -7
  326. package/dist/lib/node-esm/store-EYSUVNCS.mjs.map +0 -7
  327. /package/dist/lib/browser/{intent-dispatcher-3Q67MHZZ.mjs.map → intent-dispatcher-ELZN5EM7.mjs.map} +0 -0
  328. /package/dist/lib/browser/{intent-resolver-O763LCLG.mjs.map → intent-resolver-SGWLINTO.mjs.map} +0 -0
  329. /package/dist/lib/node/{intent-resolver-3F4POWAM.cjs.map → intent-resolver-EPSFTHL6.cjs.map} +0 -0
  330. /package/dist/lib/node-esm/{intent-dispatcher-YDE2ONZA.mjs.map → intent-dispatcher-A2JCMWRD.mjs.map} +0 -0
  331. /package/dist/lib/node-esm/{intent-resolver-LAGJ7LXM.mjs.map → intent-resolver-5C4O43GK.mjs.map} +0 -0
@@ -2,121 +2,156 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { createExtension, type Node } from '@dxos/app-graph';
5
+ import { Rx } from '@effect-rx/rx-react';
6
+ import { Option, pipe } from 'effect';
7
+
8
+ import { createExtension, ROOT_ID } from '@dxos/app-graph';
6
9
  import { type SettingsStore, type SettingsValue } from '@dxos/local-storage';
7
10
  import { isNonNullable } from '@dxos/util';
8
11
 
9
12
  import { SETTINGS_ID, SETTINGS_KEY, SETTINGS_PLUGIN, SettingsAction } from './actions';
10
13
  import { Capabilities } from '../common';
11
- import { contributes, type PluginMeta, type PluginsContext } from '../core';
14
+ import { contributes, type PluginMeta, type PluginContext } from '../core';
12
15
  import { createIntent } from '../plugin-intent';
13
16
 
14
- export default (context: PluginsContext) =>
17
+ export default (context: PluginContext) =>
15
18
  contributes(Capabilities.AppGraphBuilder, [
16
19
  createExtension({
17
20
  id: `${SETTINGS_PLUGIN}/action`,
18
- filter: (node): node is Node<null> => node.id === 'root',
19
- actions: () => [
20
- {
21
- id: SETTINGS_PLUGIN,
22
- data: async () => {
23
- const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
24
- await dispatch(createIntent(SettingsAction.Open));
25
- },
26
- properties: {
27
- label: ['open settings label', { ns: SETTINGS_PLUGIN }],
28
- icon: 'ph--gear--regular',
29
- keyBinding: {
30
- macos: 'meta+,',
31
- windows: 'alt+,',
32
- },
33
- },
34
- },
35
- ],
21
+ actions: (node) =>
22
+ Rx.make((get) =>
23
+ pipe(
24
+ get(node),
25
+ Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
26
+ Option.map(() => [
27
+ {
28
+ id: SETTINGS_PLUGIN,
29
+ data: async () => {
30
+ const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
31
+ await dispatch(createIntent(SettingsAction.Open));
32
+ },
33
+ properties: {
34
+ label: ['open settings label', { ns: SETTINGS_PLUGIN }],
35
+ icon: 'ph--gear--regular',
36
+ disposition: 'menu',
37
+ keyBinding: {
38
+ macos: 'meta+,',
39
+ windows: 'alt+,',
40
+ },
41
+ },
42
+ },
43
+ ]),
44
+ Option.getOrElse(() => []),
45
+ ),
46
+ ),
36
47
  }),
37
48
  createExtension({
38
49
  id: `${SETTINGS_PLUGIN}/core`,
39
- filter: (node): node is Node<null> => node.id === 'root',
40
- connector: () => [
41
- {
42
- id: SETTINGS_ID,
43
- type: SETTINGS_PLUGIN,
44
- properties: {
45
- label: ['app settings label', { ns: SETTINGS_PLUGIN }],
46
- icon: 'ph--gear--regular',
47
- disposition: 'pin-end',
48
- position: 'hoist',
49
- testId: 'treeView.appSettings',
50
- },
51
- },
52
- ],
50
+ connector: (node) =>
51
+ Rx.make((get) =>
52
+ pipe(
53
+ get(node),
54
+ Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
55
+ Option.map(() => [
56
+ {
57
+ id: SETTINGS_ID,
58
+ type: SETTINGS_PLUGIN,
59
+ properties: {
60
+ label: ['app settings label', { ns: SETTINGS_PLUGIN }],
61
+ icon: 'ph--gear--regular',
62
+ disposition: 'pin-end',
63
+ position: 'hoist',
64
+ testId: 'treeView.appSettings',
65
+ },
66
+ },
67
+ ]),
68
+ Option.getOrElse(() => []),
69
+ ),
70
+ ),
53
71
  }),
54
72
  createExtension({
55
73
  id: `${SETTINGS_PLUGIN}/core-plugins`,
56
- filter: (node): node is Node<null> => node.id === SETTINGS_ID,
57
- connector: () => {
58
- const manager = context.requestCapability(Capabilities.PluginManager);
59
- const [settingsStore] = context.requestCapabilities(Capabilities.SettingsStore);
60
- return [
61
- ...manager.plugins
62
- .filter((plugin) => manager.core.includes(plugin.meta.id))
63
- .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {
64
- const settings = settingsStore?.getStore(plugin.meta.id);
65
- if (!settings) {
66
- return null;
67
- }
74
+ connector: (node) =>
75
+ Rx.make((get) =>
76
+ pipe(
77
+ get(node),
78
+ Option.flatMap((node) => (node.id !== SETTINGS_ID ? Option.none() : Option.some(node))),
79
+ Option.map(() => {
80
+ const manager = get(context.capability(Capabilities.PluginManager));
81
+ const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));
82
+ return [
83
+ ...manager.plugins
84
+ .filter((plugin) => manager.core.includes(plugin.meta.id))
85
+ .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {
86
+ const settings = settingsStore?.getStore(plugin.meta.id);
87
+ if (!settings) {
88
+ return null;
89
+ }
68
90
 
69
- return [plugin.meta, settings];
70
- })
71
- .filter(isNonNullable)
72
- .map(([meta, settings]) => ({
73
- id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
74
- type: 'category',
75
- data: settings,
76
- properties: {
77
- label: meta.name ?? meta.id,
78
- icon: meta.icon ?? 'ph--circle--regular',
79
- },
80
- })),
91
+ return [plugin.meta, settings];
92
+ })
93
+ .filter(isNonNullable)
94
+ .map(([meta, settings]) => ({
95
+ id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
96
+ type: 'category',
97
+ data: settings,
98
+ properties: {
99
+ label: meta.name ?? meta.id,
100
+ icon: meta.icon ?? 'ph--circle--regular',
101
+ },
102
+ })),
81
103
 
82
- {
83
- id: `${SETTINGS_KEY}:custom-plugins`,
84
- type: 'collection',
85
- properties: {
86
- label: ['custom plugins label', { ns: SETTINGS_PLUGIN }],
87
- icon: 'ph--squares-four--regular',
88
- role: 'branch',
89
- },
90
- },
91
- ];
92
- },
104
+ {
105
+ id: `${SETTINGS_KEY}:custom-plugins`,
106
+ type: 'category',
107
+ properties: {
108
+ label: ['custom plugins label', { ns: SETTINGS_PLUGIN }],
109
+ icon: 'ph--squares-four--regular',
110
+ role: 'branch',
111
+ disposition: 'collection',
112
+ },
113
+ },
114
+ ];
115
+ }),
116
+ Option.getOrElse(() => []),
117
+ ),
118
+ ),
93
119
  }),
94
120
  createExtension({
95
121
  id: `${SETTINGS_PLUGIN}/custom-plugins`,
96
- filter: (node): node is Node<null> => node.id === `${SETTINGS_KEY}:custom-plugins`,
97
- connector: () => {
98
- const manager = context.requestCapability(Capabilities.PluginManager);
99
- const [settingsStore] = context.requestCapabilities(Capabilities.SettingsStore);
100
- return manager.plugins
101
- .filter((plugin) => !manager.core.includes(plugin.meta.id))
102
- .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {
103
- const settings = settingsStore?.getStore(plugin.meta.id);
104
- if (!settings) {
105
- return null;
106
- }
122
+ connector: (node) =>
123
+ Rx.make((get) =>
124
+ pipe(
125
+ get(node),
126
+ Option.flatMap((node) =>
127
+ node.id !== `${SETTINGS_KEY}:custom-plugins` ? Option.none() : Option.some(node),
128
+ ),
129
+ Option.map(() => {
130
+ const manager = get(context.capability(Capabilities.PluginManager));
131
+ const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));
132
+ return manager.plugins
133
+ .filter((plugin) => !manager.core.includes(plugin.meta.id))
134
+ .map((plugin): [PluginMeta, SettingsStore<SettingsValue>] | null => {
135
+ const settings = settingsStore?.getStore(plugin.meta.id);
136
+ if (!settings) {
137
+ return null;
138
+ }
107
139
 
108
- return [plugin.meta, settings];
109
- })
110
- .filter(isNonNullable)
111
- .map(([meta, settings]) => ({
112
- id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
113
- type: 'category',
114
- data: settings,
115
- properties: {
116
- label: meta.name ?? meta.id,
117
- icon: meta.icon ?? 'ph--circle--regular',
118
- },
119
- }));
120
- },
140
+ return [plugin.meta, settings];
141
+ })
142
+ .filter(isNonNullable)
143
+ .map(([meta, settings]) => ({
144
+ id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
145
+ type: 'category',
146
+ data: settings,
147
+ properties: {
148
+ label: meta.name ?? meta.id,
149
+ icon: meta.icon ?? 'ph--circle--regular',
150
+ },
151
+ }));
152
+ }),
153
+ Option.getOrElse(() => []),
154
+ ),
155
+ ),
121
156
  }),
122
157
  ]);
@@ -2,29 +2,32 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { effect } from '@preact/signals-core';
6
-
7
5
  import { RootSettingsStore } from '@dxos/local-storage';
8
6
 
9
7
  import { Capabilities } from '../common';
10
- import { contributes, type PluginsContext } from '../core';
8
+ import { contributes, type PluginContext } from '../core';
11
9
 
12
- export default (context: PluginsContext) => {
10
+ export default (context: PluginContext) => {
11
+ // TODO(wittjosiah): Replace with rx?
13
12
  const settingsStore = new RootSettingsStore();
14
13
 
15
14
  let previous: Capabilities.Settings[] = [];
16
- const unsubscribe = effect(() => {
17
- const allSettings = context.requestCapabilities(Capabilities.Settings);
18
- const added = allSettings.filter((setting) => !previous.includes(setting));
19
- const removed = previous.filter((setting) => !allSettings.includes(setting));
20
- previous = allSettings;
21
- added.forEach((setting) => {
22
- settingsStore.createStore(setting as any);
23
- });
24
- removed.forEach((setting) => {
25
- settingsStore.removeStore(setting.prefix);
26
- });
27
- });
15
+ const registry = context.getCapability(Capabilities.RxRegistry);
16
+ const cancel = registry.subscribe(
17
+ context.capabilities(Capabilities.Settings),
18
+ (allSettings) => {
19
+ const added = allSettings.filter((setting) => !previous.includes(setting));
20
+ const removed = previous.filter((setting) => !allSettings.includes(setting));
21
+ previous = allSettings;
22
+ added.forEach((setting) => {
23
+ settingsStore.createStore(setting as any);
24
+ });
25
+ removed.forEach((setting) => {
26
+ settingsStore.removeStore(setting.prefix);
27
+ });
28
+ },
29
+ { immediate: true },
30
+ );
28
31
 
29
- return contributes(Capabilities.SettingsStore, settingsStore, () => unsubscribe());
32
+ return contributes(Capabilities.SettingsStore, settingsStore, () => cancel());
30
33
  };
@@ -21,7 +21,7 @@ export class ErrorBoundary extends Component<Props, State> {
21
21
  this.state = { error: undefined };
22
22
  }
23
23
 
24
- static getDerivedStateFromError(error: Error) {
24
+ static getDerivedStateFromError(error: Error): { error: Error } {
25
25
  return { error };
26
26
  }
27
27
 
@@ -31,7 +31,7 @@ export class ErrorBoundary extends Component<Props, State> {
31
31
  }
32
32
  }
33
33
 
34
- override render() {
34
+ override render(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined {
35
35
  if (this.state.error) {
36
36
  return <this.props.fallback data={this.props.data} error={this.state.error} reset={this.resetError} />;
37
37
  }
@@ -39,7 +39,7 @@ export class ErrorBoundary extends Component<Props, State> {
39
39
  return this.props.children;
40
40
  }
41
41
 
42
- private resetError() {
42
+ private resetError(): void {
43
43
  this.setState({ error: undefined });
44
44
  }
45
45
  }
@@ -87,7 +87,7 @@ export default {
87
87
  );
88
88
  },
89
89
  // NOTE: Intentionally not using withPluginManager to try to reduce surface area of the story.
90
- decorators: [withTheme, withLayout({ tooltips: true })],
90
+ decorators: [withTheme, withLayout()],
91
91
  args: {
92
92
  manager: setupPluginManager(),
93
93
  },
@@ -10,7 +10,7 @@ import { byPosition } from '@dxos/util';
10
10
  import { ErrorBoundary } from './ErrorBoundary';
11
11
  import { useCapabilities } from './useCapabilities';
12
12
  import { Capabilities, type SurfaceDefinition, type SurfaceProps } from '../common';
13
- import { type PluginsContext } from '../core';
13
+ import { type PluginContext } from '../core';
14
14
 
15
15
  const DEFAULT_PLACEHOLDER = <Fragment />;
16
16
 
@@ -34,8 +34,8 @@ const findCandidates = (surfaces: SurfaceDefinition[], { role, data }: Pick<Surf
34
34
  /**
35
35
  * @returns `true` if there is a contributed surface which matches the specified role & data, `false` otherwise.
36
36
  */
37
- export const isSurfaceAvailable = (context: PluginsContext, { role, data }: Pick<SurfaceProps, 'role' | 'data'>) => {
38
- const surfaces = context.requestCapabilities(Capabilities.ReactSurface);
37
+ export const isSurfaceAvailable = (context: PluginContext, { role, data }: Pick<SurfaceProps, 'role' | 'data'>) => {
38
+ const surfaces = context.getCapabilities(Capabilities.ReactSurface);
39
39
  const candidates = findCandidates(surfaces.flat(), { role, data });
40
40
  return candidates.length > 0;
41
41
  };
@@ -2,8 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { computed } from '@preact/signals-core';
6
- import { useMemo } from 'react';
5
+ import { useRxValue } from '@effect-rx/rx-react';
6
+
7
+ import { invariant } from '@dxos/invariant';
7
8
 
8
9
  import { usePluginManager } from './PluginManagerProvider';
9
10
  import { type InterfaceDef } from '../core';
@@ -12,17 +13,9 @@ import { type InterfaceDef } from '../core';
12
13
  * Hook to request capabilities from the plugin context.
13
14
  * @returns An array of capabilities.
14
15
  */
15
- export const useCapabilities = <T, U extends T = T>(
16
- interfaceDef: InterfaceDef<T>,
17
- filter?: (capability: T, moduleId: string) => capability is U,
18
- ) => {
16
+ export const useCapabilities = <T>(interfaceDef: InterfaceDef<T>) => {
19
17
  const manager = usePluginManager();
20
- const signal = useMemo(
21
- () => computed(() => manager.context.requestCapabilities(interfaceDef, filter)),
22
- [interfaceDef],
23
- );
24
-
25
- return signal.value;
18
+ return useRxValue(manager.context.capabilities(interfaceDef));
26
19
  };
27
20
 
28
21
  /**
@@ -30,11 +23,8 @@ export const useCapabilities = <T, U extends T = T>(
30
23
  * @returns The capability.
31
24
  * @throws If no capability is found.
32
25
  */
33
- export const useCapability = <T, U extends T = T>(
34
- interfaceDef: InterfaceDef<T>,
35
- filter?: (capability: T, moduleId: string) => capability is U,
36
- ) => {
37
- const manager = usePluginManager();
38
- const signal = useMemo(() => computed(() => manager.context.requestCapability(interfaceDef, filter)), [interfaceDef]);
39
- return signal.value;
26
+ export const useCapability = <T>(interfaceDef: InterfaceDef<T>) => {
27
+ const capabilities = useCapabilities(interfaceDef);
28
+ invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`);
29
+ return capabilities[0];
40
30
  };
@@ -1,6 +1,5 @@
1
1
  //
2
2
  // Copyright 2025 DXOS.org
3
-
4
3
  //
5
4
 
6
5
  import React from 'react';
@@ -3,21 +3,29 @@
3
3
  //
4
4
 
5
5
  import { type Decorator } from '@storybook/react';
6
- import React, { useEffect } from 'react';
6
+ import React, { useEffect, useMemo } from 'react';
7
7
 
8
8
  import { raise } from '@dxos/debug';
9
9
 
10
- import { createApp, type CreateAppOptions } from '../App';
10
+ import { useApp, type CreateAppOptions } from '../App';
11
11
  import { Capabilities, Events } from '../common';
12
12
  import {
13
- type ActivationEvent,
14
- type AnyCapability,
15
13
  contributes,
16
14
  defineModule,
17
15
  definePlugin,
16
+ type ActivationEvent,
17
+ type AnyCapability,
18
18
  PluginManager,
19
+ type PluginContext,
19
20
  } from '../core';
20
21
 
22
+ // TODO(burdon): Factor out (use consistently in plugin framework?)
23
+ export type Provider<C, R> = (context: C) => R;
24
+ export type ProviderOrValue<C, R> = Provider<C, R> | R;
25
+ export const getValue = <C, R>(providerOrValue: ProviderOrValue<C, R>, context: C): R => {
26
+ return typeof providerOrValue === 'function' ? (providerOrValue as Provider<C, R>)(context) : providerOrValue;
27
+ };
28
+
21
29
  /**
22
30
  * @internal
23
31
  */
@@ -26,7 +34,7 @@ export const setupPluginManager = ({
26
34
  plugins = [],
27
35
  core = plugins.map(({ meta }) => meta.id),
28
36
  ...options
29
- }: CreateAppOptions & { capabilities?: AnyCapability[] } = {}) => {
37
+ }: CreateAppOptions & Pick<WithPluginManagerOptions, 'capabilities'> = {}) => {
30
38
  const pluginManager = new PluginManager({
31
39
  pluginLoader: () => raise(new Error('Not implemented')),
32
40
  plugins: [StoryPlugin(), ...plugins],
@@ -35,7 +43,7 @@ export const setupPluginManager = ({
35
43
  });
36
44
 
37
45
  if (capabilities) {
38
- capabilities.forEach((capability) => {
46
+ getValue(capabilities, pluginManager.context).forEach((capability) => {
39
47
  pluginManager.context.contributeCapability({
40
48
  interface: capability.interface,
41
49
  implementation: capability.implementation,
@@ -48,22 +56,19 @@ export const setupPluginManager = ({
48
56
  };
49
57
 
50
58
  export type WithPluginManagerOptions = CreateAppOptions & {
51
- capabilities?: AnyCapability[];
59
+ capabilities?: ProviderOrValue<PluginContext, AnyCapability[]>;
52
60
  fireEvents?: (ActivationEvent | string)[];
53
61
  };
54
62
 
55
63
  /**
56
64
  * Wraps a story with a plugin manager.
65
+ * NOTE: This builds up and tears down the plugin manager on every render.
57
66
  */
58
67
  export const withPluginManager = (options: WithPluginManagerOptions = {}): Decorator => {
59
- const pluginManager = setupPluginManager(options);
60
- const App = createApp({ pluginManager });
61
-
62
- options.fireEvents?.forEach((event) => {
63
- void pluginManager.activate(event);
64
- });
65
-
66
68
  return (Story, context) => {
69
+ const pluginManager = useMemo(() => setupPluginManager(options), [options]);
70
+
71
+ // Set-up root capability.
67
72
  useEffect(() => {
68
73
  const capability = contributes(Capabilities.ReactRoot, {
69
74
  id: context.id,
@@ -75,8 +80,22 @@ export const withPluginManager = (options: WithPluginManagerOptions = {}): Decor
75
80
  module: 'dxos.org/app-framework/withPluginManager',
76
81
  });
77
82
 
78
- return () => pluginManager.context.removeCapability(capability.interface, capability.implementation);
79
- }, []);
83
+ return () => {
84
+ pluginManager.context.removeCapability(capability.interface, capability.implementation);
85
+ };
86
+ }, [pluginManager, context]);
87
+
88
+ // Fire events.
89
+ useEffect(() => {
90
+ const timeout = setTimeout(async () => {
91
+ await Promise.all(options.fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
92
+ });
93
+
94
+ return () => clearTimeout(timeout);
95
+ }, [pluginManager]);
96
+
97
+ // Create app.
98
+ const App = useApp({ pluginManager });
80
99
 
81
100
  return <App />;
82
101
  };
package/tsconfig.json CHANGED
@@ -7,59 +7,7 @@
7
7
  "include": [
8
8
  "src"
9
9
  ],
10
- "references": [
11
- {
12
- "path": "../../common/async"
13
- },
14
- {
15
- "path": "../../common/debug"
16
- },
17
- {
18
- "path": "../../common/invariant"
19
- },
20
- {
21
- "path": "../../common/local-storage"
22
- },
23
- {
24
- "path": "../../common/log"
25
- },
26
- {
27
- "path": "../../common/random"
28
- },
29
- {
30
- "path": "../../common/storybook-utils"
31
- },
32
- {
33
- "path": "../../common/util"
34
- },
35
- {
36
- "path": "../../core/echo/echo-schema"
37
- },
38
- {
39
- "path": "../../core/echo/echo-signals"
40
- },
41
- {
42
- "path": "../../core/echo/live-object"
43
- },
44
- {
45
- "path": "../../experimental/artifact"
46
- },
47
- {
48
- "path": "../../ui/primitives/react-hooks"
49
- },
50
- {
51
- "path": "../../ui/react-ui"
52
- },
53
- {
54
- "path": "../../ui/react-ui-syntax-highlighter"
55
- },
56
- {
57
- "path": "../app-graph"
58
- },
59
- {
60
- "path": "../client-protocol"
61
- }
62
- ],
10
+ "references": [],
63
11
  "ts-node": {
64
12
  "compilerOptions": {
65
13
  "module": "CommonJS"
@@ -0,0 +1 @@
1
+ TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
@@ -0,0 +1 @@
1
+ window.hierarchyData = "eJyrVirKzy8pVrKKjtVRKkpNy0lNLsnMzytWsqqurQUAmx4Kpg=="