@dxos/app-framework 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (315) hide show
  1. package/dist/lib/browser/{app-graph-builder-OHM2Z6YQ.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-DVNSCQJ5.mjs → chunk-5GE2ERNU.mjs} +314 -280
  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-X2YC645Z.mjs → chunk-ZMXJV64L.mjs} +122 -62
  8. package/dist/lib/browser/chunk-ZMXJV64L.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +10 -10
  10. package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs → intent-dispatcher-ELZN5EM7.mjs} +2 -2
  11. package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs → intent-resolver-SGWLINTO.mjs} +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/{store-XMPVLJOQ.mjs → store-YIU6IPZ2.mjs} +7 -6
  14. package/dist/lib/browser/store-YIU6IPZ2.mjs.map +7 -0
  15. package/dist/lib/browser/testing/index.mjs +30 -14
  16. package/dist/lib/browser/testing/index.mjs.map +3 -3
  17. package/dist/lib/browser/worker.mjs +3 -3
  18. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs +146 -0
  19. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-JUSEAFDU.cjs → chunk-G774ASXO.cjs} +5 -5
  21. package/dist/lib/node/chunk-G774ASXO.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-I3CJYEBC.cjs → chunk-HIVITTZD.cjs} +156 -122
  23. package/dist/lib/node/chunk-HIVITTZD.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-5UOVF3OR.cjs → chunk-Z2PMVDJ5.cjs} +155 -95
  25. package/dist/lib/node/chunk-Z2PMVDJ5.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +81 -81
  27. package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs → intent-dispatcher-LFXZJTAS.cjs} +8 -8
  28. package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs.map → intent-dispatcher-LFXZJTAS.cjs.map} +2 -2
  29. package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs → intent-resolver-EPSFTHL6.cjs} +12 -12
  30. package/dist/lib/node/meta.json +1 -1
  31. package/dist/lib/node/{store-N7JLYYDI.cjs → store-CVVRXUTH.cjs} +10 -9
  32. package/dist/lib/node/store-CVVRXUTH.cjs.map +7 -0
  33. package/dist/lib/node/testing/index.cjs +34 -17
  34. package/dist/lib/node/testing/index.cjs.map +3 -3
  35. package/dist/lib/node/worker.cjs +39 -39
  36. package/dist/lib/node/worker.cjs.map +1 -1
  37. package/dist/lib/node-esm/{app-graph-builder-OMH534A4.mjs → app-graph-builder-LUBDEIT6.mjs} +23 -23
  38. package/dist/lib/node-esm/app-graph-builder-LUBDEIT6.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-QHXUTJHE.mjs → chunk-6IKYKERU.mjs} +122 -62
  40. package/dist/lib/node-esm/chunk-6IKYKERU.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-PHOUQACM.mjs → chunk-I6BVZMAH.mjs} +10 -10
  42. package/dist/lib/node-esm/chunk-I6BVZMAH.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-GSDBF2CK.mjs → chunk-Z2ZHH4HN.mjs} +314 -280
  44. package/dist/lib/node-esm/chunk-Z2ZHH4HN.mjs.map +7 -0
  45. package/dist/lib/node-esm/index.mjs +10 -10
  46. package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs → intent-dispatcher-A2JCMWRD.mjs} +2 -2
  47. package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs → intent-resolver-5C4O43GK.mjs} +3 -3
  48. package/dist/lib/node-esm/meta.json +1 -1
  49. package/dist/lib/node-esm/{store-M2BYJL6K.mjs → store-HRZXZ2D2.mjs} +7 -6
  50. package/dist/lib/node-esm/store-HRZXZ2D2.mjs.map +7 -0
  51. package/dist/lib/node-esm/testing/index.mjs +30 -14
  52. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  53. package/dist/lib/node-esm/worker.mjs +3 -3
  54. package/dist/types/src/App.d.ts +3 -1
  55. package/dist/types/src/App.d.ts.map +1 -1
  56. package/dist/types/src/common/capabilities.d.ts +40 -222
  57. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  58. package/dist/types/src/common/collaboration.d.ts +8 -8
  59. package/dist/types/src/common/collaboration.d.ts.map +1 -1
  60. package/dist/types/src/common/events.d.ts.map +1 -1
  61. package/dist/types/src/common/file.d.ts +7 -7
  62. package/dist/types/src/common/file.d.ts.map +1 -1
  63. package/dist/types/src/common/layout.d.ts +165 -163
  64. package/dist/types/src/common/layout.d.ts.map +1 -1
  65. package/dist/types/src/common/surface.d.ts.map +1 -1
  66. package/dist/types/src/common/translations.d.ts +7 -7
  67. package/dist/types/src/common/translations.d.ts.map +1 -1
  68. package/dist/types/src/core/capabilities.d.ts +28 -13
  69. package/dist/types/src/core/capabilities.d.ts.map +1 -1
  70. package/dist/types/src/core/events.d.ts.map +1 -1
  71. package/dist/types/src/core/manager.d.ts +6 -3
  72. package/dist/types/src/core/manager.d.ts.map +1 -1
  73. package/dist/types/src/core/plugin.d.ts +2 -2
  74. package/dist/types/src/core/plugin.d.ts.map +1 -1
  75. package/dist/types/src/helpers.d.ts.map +1 -1
  76. package/dist/types/src/playground/generator/generator.d.ts.map +1 -1
  77. package/dist/types/src/playground/logger/schema.d.ts +6 -6
  78. package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
  79. package/dist/types/src/playground/playground.stories.d.ts.map +1 -1
  80. package/dist/types/src/plugin-intent/actions.d.ts +14 -14
  81. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -1
  82. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +3 -3
  83. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
  84. package/dist/types/src/plugin-intent/intent.d.ts +14 -20
  85. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -1
  86. package/dist/types/src/plugin-settings/actions.d.ts +10 -10
  87. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
  88. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +2 -195
  89. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
  90. package/dist/types/src/plugin-settings/store.d.ts +2 -2
  91. package/dist/types/src/plugin-settings/store.d.ts.map +1 -1
  92. package/dist/types/src/react/ErrorBoundary.d.ts +1 -1
  93. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
  94. package/dist/types/src/react/IntentContext.d.ts.map +1 -1
  95. package/dist/types/src/react/Surface.d.ts +2 -2
  96. package/dist/types/src/react/Surface.d.ts.map +1 -1
  97. package/dist/types/src/react/useCapabilities.d.ts +2 -2
  98. package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
  99. package/dist/types/src/react/useIntentResolver.d.ts.map +1 -1
  100. package/dist/types/src/testing/withPluginManager.d.ts +6 -2
  101. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  102. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  103. package/dist/types/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +28 -21
  105. package/src/App.tsx +97 -47
  106. package/src/common/capabilities.ts +18 -7
  107. package/src/common/collaboration.ts +9 -9
  108. package/src/common/file.ts +7 -7
  109. package/src/common/layout.ts +156 -136
  110. package/src/common/translations.ts +7 -7
  111. package/src/core/capabilities.test.ts +55 -36
  112. package/src/core/capabilities.ts +79 -59
  113. package/src/core/manager.test.ts +19 -19
  114. package/src/core/manager.ts +24 -16
  115. package/src/core/plugin.ts +2 -2
  116. package/src/playground/generator/generator.ts +4 -4
  117. package/src/playground/logger/schema.ts +5 -5
  118. package/src/playground/playground.stories.tsx +13 -9
  119. package/src/plugin-intent/actions.ts +9 -9
  120. package/src/plugin-intent/intent-dispatcher.test.ts +23 -42
  121. package/src/plugin-intent/intent-dispatcher.ts +7 -11
  122. package/src/plugin-intent/intent.ts +22 -20
  123. package/src/plugin-settings/actions.ts +8 -8
  124. package/src/plugin-settings/app-graph-builder.ts +129 -94
  125. package/src/plugin-settings/store.ts +20 -17
  126. package/src/react/ErrorBoundary.tsx +3 -3
  127. package/src/react/Surface.stories.tsx +1 -1
  128. package/src/react/Surface.tsx +3 -3
  129. package/src/react/useCapabilities.ts +9 -19
  130. package/src/testing/withPluginManager.stories.tsx +0 -1
  131. package/src/testing/withPluginManager.tsx +35 -16
  132. package/tsconfig.json +1 -53
  133. package/typedoc/assets/navigation.js +1 -1
  134. package/typedoc/assets/search.js +1 -1
  135. package/typedoc/classes/CollaborationActions.InsertContent.html +280 -280
  136. package/typedoc/classes/ErrorBoundary.html +6 -6
  137. package/typedoc/classes/IntentAction.ShowUndo.html +125 -125
  138. package/typedoc/classes/IntentAction.Track.html +239 -239
  139. package/typedoc/classes/LayoutAction.AddToast.html +163 -163
  140. package/typedoc/classes/LayoutAction.Close.html +352 -352
  141. package/typedoc/classes/LayoutAction.Expose.html +238 -238
  142. package/typedoc/classes/LayoutAction.Open.html +904 -748
  143. package/typedoc/classes/LayoutAction.RevertWorkspace.html +241 -241
  144. package/typedoc/classes/LayoutAction.ScrollIntoView.html +280 -280
  145. package/typedoc/classes/LayoutAction.Set.html +436 -358
  146. package/typedoc/classes/LayoutAction.SetLayoutMode.html +469 -391
  147. package/typedoc/classes/LayoutAction.SwitchWorkspace.html +238 -238
  148. package/typedoc/classes/LayoutAction.UpdateComplementary.html +358 -358
  149. package/typedoc/classes/LayoutAction.UpdateDialog.html +865 -475
  150. package/typedoc/classes/LayoutAction.UpdateLayout.html +281 -281
  151. package/typedoc/classes/LayoutAction.UpdatePopover.html +826 -826
  152. package/typedoc/classes/LayoutAction.UpdateSidebar.html +397 -319
  153. package/typedoc/classes/Plugin.html +3 -3
  154. package/typedoc/classes/PluginContext.html +38 -0
  155. package/typedoc/classes/PluginManager.html +17 -16
  156. package/typedoc/classes/PluginModule.html +9 -9
  157. package/typedoc/classes/SettingsAction.Open.html +199 -199
  158. package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +124 -124
  159. package/typedoc/functions/Events.createStateEvent.html +2 -2
  160. package/typedoc/functions/IntentPlugin.html +1 -1
  161. package/typedoc/functions/SettingsPlugin.html +1 -1
  162. package/typedoc/functions/allOf.html +2 -2
  163. package/typedoc/functions/chain.html +2 -2
  164. package/typedoc/functions/contributes.html +2 -2
  165. package/typedoc/functions/createDispatcher.html +3 -3
  166. package/typedoc/functions/createIntent.html +3 -3
  167. package/typedoc/functions/createResolver.html +2 -2
  168. package/typedoc/functions/createSurface.html +2 -2
  169. package/typedoc/functions/defineCapability.html +2 -2
  170. package/typedoc/functions/defineEvent.html +2 -2
  171. package/typedoc/functions/defineModule.html +2 -2
  172. package/typedoc/functions/definePlugin.html +2 -2
  173. package/typedoc/functions/eventKey.html +2 -2
  174. package/typedoc/functions/getEvents.html +2 -2
  175. package/typedoc/functions/isAllOf.html +2 -2
  176. package/typedoc/functions/isOneOf.html +2 -2
  177. package/typedoc/functions/isSurfaceAvailable.html +2 -2
  178. package/typedoc/functions/lazy.html +2 -2
  179. package/typedoc/functions/oneOf.html +2 -2
  180. package/typedoc/functions/{createApp.html → useApp.html} +2 -2
  181. package/typedoc/functions/useAppGraph.html +1 -1
  182. package/typedoc/functions/useCapabilities.html +3 -3
  183. package/typedoc/functions/useCapability.html +3 -3
  184. package/typedoc/functions/useIntentDispatcher.html +1 -1
  185. package/typedoc/functions/useIntentResolver.html +1 -1
  186. package/typedoc/functions/useLayout.html +1 -1
  187. package/typedoc/functions/usePluginManager.html +2 -2
  188. package/typedoc/hierarchy.html +1 -1
  189. package/typedoc/index.html +2 -2
  190. package/typedoc/interfaces/LayoutAction.Toast.html +2 -2
  191. package/typedoc/modules/Capabilities.html +1 -1
  192. package/typedoc/modules/CollaborationActions.html +1 -1
  193. package/typedoc/modules/Events.html +1 -1
  194. package/typedoc/modules/IntentAction.html +1 -1
  195. package/typedoc/modules/LayoutAction.html +2 -2
  196. package/typedoc/modules/SettingsAction.html +1 -1
  197. package/typedoc/modules.html +1 -1
  198. package/typedoc/types/ActivationEvent.html +3 -3
  199. package/typedoc/types/ActivationEvents.html +2 -2
  200. package/typedoc/types/AnyCapability.html +1 -1
  201. package/typedoc/types/AnyIntent.html +1 -1
  202. package/typedoc/types/AnyIntentChain.html +1 -1
  203. package/typedoc/types/AnyIntentEffectResult.html +1 -1
  204. package/typedoc/types/AnyIntentResolver.html +1 -1
  205. package/typedoc/types/AnyIntentResult.html +1 -1
  206. package/typedoc/types/Capabilities.FileUploader.html +1 -1
  207. package/typedoc/types/Capabilities.IntentResolver.html +1 -1
  208. package/typedoc/types/Capabilities.Layout.html +1 -1
  209. package/typedoc/types/Capabilities.Metadata.html +1 -1
  210. package/typedoc/types/Capabilities.ReactContext.html +1 -1
  211. package/typedoc/types/Capabilities.ReactRoot.html +1 -1
  212. package/typedoc/types/Capabilities.ReactSurface.html +1 -1
  213. package/typedoc/types/Capabilities.Settings.html +2 -2
  214. package/typedoc/types/Capability.html +5 -5
  215. package/typedoc/types/CreateAppOptions.html +3 -2
  216. package/typedoc/types/FileInfo.html +1 -1
  217. package/typedoc/types/Intent.html +6 -10
  218. package/typedoc/types/IntentChain.html +3 -3
  219. package/typedoc/types/IntentContext.html +2 -2
  220. package/typedoc/types/IntentData.html +1 -1
  221. package/typedoc/types/IntentDispatcher.html +2 -2
  222. package/typedoc/types/IntentDispatcherResult.html +2 -2
  223. package/typedoc/types/IntentEffectDefinition.html +2 -2
  224. package/typedoc/types/IntentEffectResult.html +6 -6
  225. package/typedoc/types/IntentParams.html +2 -2
  226. package/typedoc/types/IntentResolver.html +2 -2
  227. package/typedoc/types/IntentResultData.html +1 -1
  228. package/typedoc/types/IntentSchema.html +1 -1
  229. package/typedoc/types/IntentUndo.html +2 -2
  230. package/typedoc/types/InterfaceDef.html +3 -3
  231. package/typedoc/types/Label.html +1 -1
  232. package/typedoc/types/NodeSerializer.html +3 -3
  233. package/typedoc/types/PluginManagerOptions.html +3 -2
  234. package/typedoc/types/PluginMeta.html +9 -9
  235. package/typedoc/types/PromiseIntentDispatcher.html +2 -2
  236. package/typedoc/types/PromiseIntentUndo.html +2 -2
  237. package/typedoc/types/Resource.html +1 -1
  238. package/typedoc/types/ResourceKey.html +1 -1
  239. package/typedoc/types/ResourceLanguage.html +1 -1
  240. package/typedoc/types/SerializedNode.html +2 -2
  241. package/typedoc/types/SurfaceComponent.html +2 -2
  242. package/typedoc/types/SurfaceDefinition.html +2 -2
  243. package/typedoc/types/SurfaceProps.html +2 -2
  244. package/typedoc/variables/Capabilities.AnchorSort.html +1 -0
  245. package/typedoc/variables/Capabilities.AppGraph.html +1 -1
  246. package/typedoc/variables/Capabilities.AppGraphBuilder.html +1 -1
  247. package/typedoc/variables/Capabilities.AppGraphSerializer.html +1 -1
  248. package/typedoc/variables/Capabilities.ArtifactDefinition.html +1 -1
  249. package/typedoc/variables/Capabilities.FileUploader.html +1 -1
  250. package/typedoc/variables/Capabilities.IntentDispatcher.html +1 -1
  251. package/typedoc/variables/Capabilities.IntentResolver.html +1 -1
  252. package/typedoc/variables/Capabilities.Layout.html +1 -1
  253. package/typedoc/variables/Capabilities.Metadata.html +1 -1
  254. package/typedoc/variables/Capabilities.Null.html +1 -1
  255. package/typedoc/variables/Capabilities.PluginManager.html +1 -1
  256. package/typedoc/variables/Capabilities.ReactContext.html +1 -1
  257. package/typedoc/variables/Capabilities.ReactRoot.html +1 -1
  258. package/typedoc/variables/Capabilities.ReactSurface.html +1 -1
  259. package/typedoc/variables/Capabilities.RxRegistry.html +1 -0
  260. package/typedoc/variables/Capabilities.Settings.html +1 -1
  261. package/typedoc/variables/Capabilities.SettingsStore.html +1 -1
  262. package/typedoc/variables/Capabilities.Tools.html +1 -1
  263. package/typedoc/variables/Capabilities.Translations.html +1 -1
  264. package/typedoc/variables/Events.AppGraphReady.html +2 -2
  265. package/typedoc/variables/Events.DispatcherReady.html +2 -2
  266. package/typedoc/variables/Events.LayoutReady.html +1 -1
  267. package/typedoc/variables/Events.SettingsReady.html +2 -2
  268. package/typedoc/variables/Events.SetupAppGraph.html +2 -2
  269. package/typedoc/variables/Events.SetupArtifactDefinition.html +2 -2
  270. package/typedoc/variables/Events.SetupIntentResolver.html +2 -2
  271. package/typedoc/variables/Events.SetupMetadata.html +2 -2
  272. package/typedoc/variables/Events.SetupReactSurface.html +2 -2
  273. package/typedoc/variables/Events.SetupSettings.html +2 -2
  274. package/typedoc/variables/Events.SetupTranslations.html +2 -2
  275. package/typedoc/variables/Events.Startup.html +2 -2
  276. package/typedoc/variables/FileInfoSchema.html +1 -1
  277. package/typedoc/variables/INTENT_ACTION.html +1 -1
  278. package/typedoc/variables/INTENT_PLUGIN.html +1 -1
  279. package/typedoc/variables/LAYOUT_ACTION.html +1 -1
  280. package/typedoc/variables/LAYOUT_PLUGIN.html +1 -1
  281. package/typedoc/variables/Label.html +1 -1
  282. package/typedoc/variables/LayoutAction.Toast.html +1 -1
  283. package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +1 -1
  284. package/typedoc/variables/PluginManagerProvider.html +2 -2
  285. package/typedoc/variables/Resource.html +2 -2
  286. package/typedoc/variables/ResourceKey.html +1 -1
  287. package/typedoc/variables/ResourceLanguage.html +1 -1
  288. package/typedoc/variables/SETTINGS_ACTION.html +1 -1
  289. package/typedoc/variables/SETTINGS_ID.html +1 -1
  290. package/typedoc/variables/SETTINGS_KEY.html +1 -1
  291. package/typedoc/variables/SETTINGS_PLUGIN.html +1 -1
  292. package/typedoc/variables/Surface.html +2 -2
  293. package/typedoc/variables/defaultFileTypes.html +1 -1
  294. package/dist/lib/browser/app-graph-builder-OHM2Z6YQ.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-DVNSCQJ5.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-SFPT4Z2C.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-X2YC645Z.mjs.map +0 -7
  298. package/dist/lib/browser/store-XMPVLJOQ.mjs.map +0 -7
  299. package/dist/lib/node/app-graph-builder-Z45FKS52.cjs +0 -146
  300. package/dist/lib/node/app-graph-builder-Z45FKS52.cjs.map +0 -7
  301. package/dist/lib/node/chunk-5UOVF3OR.cjs.map +0 -7
  302. package/dist/lib/node/chunk-I3CJYEBC.cjs.map +0 -7
  303. package/dist/lib/node/chunk-JUSEAFDU.cjs.map +0 -7
  304. package/dist/lib/node/store-N7JLYYDI.cjs.map +0 -7
  305. package/dist/lib/node-esm/app-graph-builder-OMH534A4.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-GSDBF2CK.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-PHOUQACM.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-QHXUTJHE.mjs.map +0 -7
  309. package/dist/lib/node-esm/store-M2BYJL6K.mjs.map +0 -7
  310. package/typedoc/classes/PluginsContext.html +0 -25
  311. /package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs.map → intent-dispatcher-ELZN5EM7.mjs.map} +0 -0
  312. /package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs.map → intent-resolver-SGWLINTO.mjs.map} +0 -0
  313. /package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs.map → intent-resolver-EPSFTHL6.cjs.map} +0 -0
  314. /package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs.map → intent-dispatcher-A2JCMWRD.mjs.map} +0 -0
  315. /package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs.map → intent-resolver-5C4O43GK.mjs.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema as S, Effect, Fiber, pipe } from 'effect';
5
+ import { Schema, Effect, Fiber, pipe } from 'effect';
6
6
  import { describe, expect, test } from 'vitest';
7
7
 
8
8
  import { chain, createIntent } from './intent';
@@ -134,25 +134,6 @@ describe('Intent dispatcher', () => {
134
134
  await Effect.runPromise(program);
135
135
  });
136
136
 
137
- test('filter resolvers by plugin', async () => {
138
- const otherComputeResolver = createResolver({
139
- intent: Compute,
140
- resolve: async (data) => ({ data: { value: data?.value * 3 } }),
141
- });
142
- const { dispatch } = createDispatcher((module) => (module === 'test' ? [computeResolver] : [otherComputeResolver]));
143
- const program = Effect.gen(function* () {
144
- const a = yield* dispatch(createIntent(Compute, { value: 1 }));
145
-
146
- expect(a.value).toBe(3);
147
-
148
- const b = yield* dispatch(createIntent(Compute, { value: 1 }, { module: 'test' }));
149
-
150
- expect(b.value).toBe(2);
151
- });
152
-
153
- await Effect.runPromise(program);
154
- });
155
-
156
137
  test('filter resolvers by predicate', async () => {
157
138
  const conditionalComputeResolver = createResolver({
158
139
  intent: Compute,
@@ -224,12 +205,12 @@ describe('Intent dispatcher', () => {
224
205
  test.todo('follow up intents');
225
206
  });
226
207
 
227
- class ToString extends S.TaggedClass<ToString>()('ToString', {
228
- input: S.Struct({
229
- value: S.Number,
208
+ class ToString extends Schema.TaggedClass<ToString>()('ToString', {
209
+ input: Schema.Struct({
210
+ value: Schema.Number,
230
211
  }),
231
- output: S.Struct({
232
- string: S.String,
212
+ output: Schema.Struct({
213
+ string: Schema.String,
233
214
  }),
234
215
  }) {}
235
216
 
@@ -238,12 +219,12 @@ const toStringResolver = createResolver({
238
219
  resolve: async (data) => ({ data: { string: data.value.toString() } }),
239
220
  });
240
221
 
241
- class Compute extends S.TaggedClass<Compute>()('Compute', {
242
- input: S.Struct({
243
- value: S.Number,
222
+ class Compute extends Schema.TaggedClass<Compute>()('Compute', {
223
+ input: Schema.Struct({
224
+ value: Schema.Number,
244
225
  }),
245
- output: S.Struct({
246
- value: S.Number,
226
+ output: Schema.Struct({
227
+ value: Schema.Number,
247
228
  }),
248
229
  }) {}
249
230
 
@@ -262,13 +243,13 @@ const computeResolver = createResolver({
262
243
  },
263
244
  });
264
245
 
265
- class Concat extends S.TaggedClass<Concat>()('Concat', {
266
- input: S.Struct({
267
- string: S.String,
268
- plus: S.String,
246
+ class Concat extends Schema.TaggedClass<Concat>()('Concat', {
247
+ input: Schema.Struct({
248
+ string: Schema.String,
249
+ plus: Schema.String,
269
250
  }),
270
- output: S.Struct({
271
- string: S.String,
251
+ output: Schema.Struct({
252
+ string: Schema.String,
272
253
  }),
273
254
  }) {}
274
255
 
@@ -277,9 +258,9 @@ const concatResolver = createResolver({
277
258
  resolve: async (data) => ({ data: { string: data.string + data.plus } }),
278
259
  });
279
260
 
280
- class Add extends S.TaggedClass<Add>()('Add', {
281
- input: S.Tuple(S.Number, S.Number),
282
- output: S.Number,
261
+ class Add extends Schema.TaggedClass<Add>()('Add', {
262
+ input: Schema.Tuple(Schema.Number, Schema.Number),
263
+ output: Schema.Number,
283
264
  }) {}
284
265
 
285
266
  const addResolver = createResolver({
@@ -287,9 +268,9 @@ const addResolver = createResolver({
287
268
  resolve: async (data) => ({ data: data[0] + data[1] }),
288
269
  });
289
270
 
290
- class SideEffect extends S.TaggedClass<SideEffect>()('SideEffect', {
291
- input: S.Void,
292
- output: S.Void,
271
+ class SideEffect extends Schema.TaggedClass<SideEffect>()('SideEffect', {
272
+ input: Schema.Void,
273
+ output: Schema.Void,
293
274
  }) {}
294
275
 
295
276
  const sideEffectResolver = createResolver({
@@ -24,7 +24,7 @@ import {
24
24
  type Label,
25
25
  } from './intent';
26
26
  import { Events, Capabilities } from '../common';
27
- import { contributes, type PluginsContext } from '../core';
27
+ import { contributes, type PluginContext } from '../core';
28
28
 
29
29
  const EXECUTION_LIMIT = 100;
30
30
  const HISTORY_LIMIT = 100;
@@ -184,14 +184,14 @@ export type IntentContext = {
184
184
  * @param params.executionLimit The maximum recursion depth of intent chains.
185
185
  */
186
186
  export const createDispatcher = (
187
- getResolvers: (module?: string) => AnyIntentResolver[],
187
+ getResolvers: () => AnyIntentResolver[],
188
188
  { executionLimit = EXECUTION_LIMIT, historyLimit = HISTORY_LIMIT } = {},
189
189
  ): IntentContext => {
190
190
  const historyRef = Effect.runSync(Ref.make<AnyIntentResult[][]>([]));
191
191
 
192
192
  const handleIntent = (intent: AnyIntent) =>
193
193
  Effect.gen(function* () {
194
- const candidates = getResolvers(intent.module)
194
+ const candidates = getResolvers()
195
195
  .filter((resolver) => resolver.intent._tag === intent.id)
196
196
  .filter((resolver) => !resolver.filter || resolver.filter(intent.data))
197
197
  .toSorted(byPosition);
@@ -302,7 +302,7 @@ export const createDispatcher = (
302
302
  const defaultEffect = () => Effect.fail(new Error('Intent runtime not ready'));
303
303
  const defaultPromise = () => Effect.runPromise(defaultEffect());
304
304
 
305
- export default (context: PluginsContext) => {
305
+ export default (context: PluginContext) => {
306
306
  const state = live<IntentContext>({
307
307
  dispatch: defaultEffect,
308
308
  dispatchPromise: defaultPromise,
@@ -311,15 +311,11 @@ export default (context: PluginsContext) => {
311
311
  });
312
312
 
313
313
  // TODO(wittjosiah): Make getResolver callback async and allow resolvers to be requested on demand.
314
- const { dispatch, dispatchPromise, undo, undoPromise } = createDispatcher((module) =>
315
- context
316
- .requestCapabilities(Capabilities.IntentResolver, (c, moduleId): c is AnyIntentResolver => {
317
- return module ? moduleId === module : true;
318
- })
319
- .flat(),
314
+ const { dispatch, dispatchPromise, undo, undoPromise } = createDispatcher(() =>
315
+ context.getCapabilities(Capabilities.IntentResolver).flat(),
320
316
  );
321
317
 
322
- const manager = context.requestCapability(Capabilities.PluginManager);
318
+ const manager = context.getCapability(Capabilities.PluginManager);
323
319
  state.dispatch = (intentChain, depth) => {
324
320
  return Effect.gen(function* () {
325
321
  yield* manager._activate(Events.SetupIntentResolver);
@@ -2,20 +2,24 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema as S } from 'effect';
5
+ import { Schema } from 'effect';
6
6
 
7
7
  export type IntentParams = {
8
- readonly input: S.Schema.All;
9
- readonly output: S.Schema.All;
8
+ readonly input: Schema.Schema.All;
9
+ readonly output: Schema.Schema.All;
10
10
  };
11
11
 
12
12
  export type IntentData<Fields extends IntentParams> =
13
- S.Schema.Type<S.Struct<Fields>> extends { readonly input: any } ? S.Schema.Type<S.Struct<Fields>>['input'] : any;
13
+ Schema.Schema.Type<Schema.Struct<Fields>> extends { readonly input: any }
14
+ ? Schema.Schema.Type<Schema.Struct<Fields>>['input']
15
+ : any;
14
16
 
15
17
  export type IntentResultData<Fields extends IntentParams> =
16
- S.Schema.Type<S.Struct<Fields>> extends { readonly output: any } ? S.Schema.Type<S.Struct<Fields>>['output'] : any;
18
+ Schema.Schema.Type<Schema.Struct<Fields>> extends { readonly output: any }
19
+ ? Schema.Schema.Type<Schema.Struct<Fields>>['output']
20
+ : any;
17
21
 
18
- export type IntentSchema<Tag extends string, Fields extends IntentParams> = S.TaggedClass<any, Tag, Fields>;
22
+ export type IntentSchema<Tag extends string, Fields extends IntentParams> = Schema.TaggedClass<any, Tag, Fields>;
19
23
 
20
24
  /**
21
25
  * An intent is an abstract description of an operation to be performed.
@@ -34,13 +38,6 @@ export type Intent<Tag extends string, Fields extends IntentParams> = {
34
38
  */
35
39
  data: IntentData<Fields>;
36
40
 
37
- /**
38
- * Module ID.
39
- * If specified, the intent will be sent explicitly to the plugin module.
40
- * Otherwise, the intent will be sent to all plugins, in order and the first to resolve a non-null value will be used.
41
- */
42
- module?: string;
43
-
44
41
  /**
45
42
  * Whether or not the intent is being undone.
46
43
  */
@@ -76,11 +73,11 @@ export type AnyIntentChain = IntentChain<any, any, any, any>;
76
73
  export const createIntent = <Tag extends string, Fields extends IntentParams>(
77
74
  schema: IntentSchema<Tag, Fields>,
78
75
  data: IntentData<Fields> = {},
79
- params: Pick<AnyIntent, 'module' | 'undo'> = {},
76
+ params: Pick<AnyIntent, 'undo'> = {},
80
77
  ): IntentChain<Tag, Tag, Fields, Fields> => {
81
78
  // The output of validateSync breaks proxy objects so this is just used for validation.
82
79
  // TODO(wittjosiah): Is there a better way to make theses types align?
83
- const _ = S.validateSync(schema.fields.input as S.Schema<any, any, unknown>)(data);
80
+ const _ = Schema.validateSync(schema.fields.input as Schema.Schema<any, any, unknown>)(data);
84
81
  const intent = {
85
82
  ...params,
86
83
  _schema: schema,
@@ -112,7 +109,7 @@ export const chain =
112
109
  >(
113
110
  schema: IntentSchema<NextTag, NextFields>,
114
111
  data: Omit<IntentData<NextFields>, keyof IntentResultData<LastFields>> = {},
115
- params: Pick<AnyIntent, 'module' | 'undo'> = {},
112
+ params: Pick<AnyIntent, 'undo'> = {},
116
113
  ) =>
117
114
  (
118
115
  intent: IntentChain<FirstTag, any, FirstFields, LastFields>,
@@ -139,8 +136,13 @@ export const chain =
139
136
 
140
137
  // NOTE: Should maintain compatibility with `i18next` (and @dxos/react-ui).
141
138
  // TODO(wittjosiah): Making this immutable breaks type compatibility.
142
- export const Label = S.Union(
143
- S.String,
144
- S.mutable(S.Tuple(S.String, S.mutable(S.Struct({ ns: S.String, count: S.optional(S.Number) })))),
139
+ export const Label = Schema.Union(
140
+ Schema.String,
141
+ Schema.mutable(
142
+ Schema.Tuple(
143
+ Schema.String,
144
+ Schema.mutable(Schema.Struct({ ns: Schema.String, count: Schema.optional(Schema.Number) })),
145
+ ),
146
+ ),
145
147
  );
146
- export type Label = S.Schema.Type<typeof Label>;
148
+ export type Label = Schema.Schema.Type<typeof Label>;
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema as S } from 'effect';
5
+ import { Schema } from 'effect';
6
6
 
7
7
  export const SETTINGS_PLUGIN = 'dxos.org/plugin/settings';
8
8
  export const SETTINGS_ACTION = `${SETTINGS_PLUGIN}/action`;
@@ -12,18 +12,18 @@ export const SETTINGS_ID = '!dxos:settings';
12
12
  export const SETTINGS_KEY = 'settings';
13
13
 
14
14
  export namespace SettingsAction {
15
- export class Open extends S.TaggedClass<Open>()(`${SETTINGS_ACTION}/open`, {
16
- input: S.Struct({
17
- plugin: S.optional(S.String),
15
+ export class Open extends Schema.TaggedClass<Open>()(`${SETTINGS_ACTION}/open`, {
16
+ input: Schema.Struct({
17
+ plugin: Schema.optional(Schema.String),
18
18
  }),
19
- output: S.Void,
19
+ output: Schema.Void,
20
20
  }) {}
21
21
 
22
- export class OpenPluginRegistry extends S.TaggedClass<OpenPluginRegistry>()(
22
+ export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(
23
23
  `${SETTINGS_ACTION}/open-plugin-registry`,
24
24
  {
25
- input: S.Void,
26
- output: S.Void,
25
+ input: Schema.Void,
26
+ output: Schema.Void,
27
27
  },
28
28
  ) {}
29
29
  }
@@ -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
  };