@dxos/app-framework 0.8.4-main.84f28bd → 0.8.4-main.ae835ea

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 (378) hide show
  1. package/.storybook/main.mts +11 -0
  2. package/.storybook/preview.mts +8 -0
  3. package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
  4. package/.swc/plugins/{v7_linux_x86_64_13.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429 → linux_x86_64_19.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429.wasmer-v7} +0 -0
  5. package/dist/lib/browser/{app-graph-builder-BGGXLD6T.mjs → app-graph-builder-PSA3RESL.mjs} +31 -30
  6. package/dist/lib/browser/app-graph-builder-PSA3RESL.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-2636QSIK.mjs → chunk-2VZ4RF4A.mjs} +347 -257
  8. package/dist/lib/browser/chunk-2VZ4RF4A.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-DHZB7HG7.mjs → chunk-CPVYIS24.mjs} +172 -134
  10. package/dist/lib/browser/chunk-CPVYIS24.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-ORWHM7CO.mjs → chunk-SCPE4ZO2.mjs} +11 -8
  12. package/dist/lib/browser/chunk-SCPE4ZO2.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +20 -28
  14. package/dist/lib/browser/index.mjs.map +3 -3
  15. package/dist/lib/browser/{intent-dispatcher-TWKB22NI.mjs → intent-dispatcher-BND6IF4U.mjs} +2 -2
  16. package/dist/lib/browser/{intent-resolver-O67UANYP.mjs → intent-resolver-27FJAJDE.mjs} +7 -7
  17. package/dist/lib/browser/intent-resolver-27FJAJDE.mjs.map +7 -0
  18. package/dist/lib/browser/meta.json +1 -1
  19. package/dist/lib/browser/{store-LFKDWHUQ.mjs → store-F545UOIR.mjs} +4 -4
  20. package/dist/lib/browser/{store-LFKDWHUQ.mjs.map → store-F545UOIR.mjs.map} +2 -2
  21. package/dist/lib/browser/testing/index.mjs +17 -21
  22. package/dist/lib/browser/testing/index.mjs.map +3 -3
  23. package/dist/lib/browser/worker.mjs +7 -9
  24. package/dist/lib/node-esm/{app-graph-builder-QHIJUYYW.mjs → app-graph-builder-VJGZ6KH7.mjs} +31 -30
  25. package/dist/lib/node-esm/app-graph-builder-VJGZ6KH7.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-VSKRV3NW.mjs → chunk-3RRWO5TD.mjs} +347 -257
  27. package/dist/lib/node-esm/chunk-3RRWO5TD.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-NJAFK626.mjs → chunk-MN37WUJ2.mjs} +172 -134
  29. package/dist/lib/node-esm/chunk-MN37WUJ2.mjs.map +7 -0
  30. package/dist/lib/node-esm/{chunk-UMZQERLE.mjs → chunk-ZX63QUGE.mjs} +11 -8
  31. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs.map +7 -0
  32. package/dist/lib/node-esm/index.mjs +20 -28
  33. package/dist/lib/node-esm/index.mjs.map +3 -3
  34. package/dist/lib/node-esm/{intent-dispatcher-5PRM3KGH.mjs → intent-dispatcher-254AZ6EE.mjs} +2 -2
  35. package/dist/lib/node-esm/{intent-resolver-K3D4BXQQ.mjs → intent-resolver-NPMOPNFL.mjs} +7 -7
  36. package/dist/lib/node-esm/intent-resolver-NPMOPNFL.mjs.map +7 -0
  37. package/dist/lib/node-esm/meta.json +1 -1
  38. package/dist/lib/node-esm/{store-53XDUBMD.mjs → store-CINC4R4L.mjs} +4 -4
  39. package/dist/lib/node-esm/{store-53XDUBMD.mjs.map → store-CINC4R4L.mjs.map} +2 -2
  40. package/dist/lib/node-esm/testing/index.mjs +17 -21
  41. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  42. package/dist/lib/node-esm/worker.mjs +7 -9
  43. package/dist/types/src/common/capabilities.d.ts +89 -10
  44. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  45. package/dist/types/src/common/collaboration.d.ts +10 -9
  46. package/dist/types/src/common/collaboration.d.ts.map +1 -1
  47. package/dist/types/src/common/events.d.ts.map +1 -1
  48. package/dist/types/src/common/file.d.ts +1 -1
  49. package/dist/types/src/common/file.d.ts.map +1 -1
  50. package/dist/types/src/common/layout.d.ts +1 -3
  51. package/dist/types/src/common/layout.d.ts.map +1 -1
  52. package/dist/types/src/common/surface.d.ts +7 -13
  53. package/dist/types/src/common/surface.d.ts.map +1 -1
  54. package/dist/types/src/common/translations.d.ts +1 -1
  55. package/dist/types/src/common/translations.d.ts.map +1 -1
  56. package/dist/types/src/components/App.d.ts +10 -0
  57. package/dist/types/src/components/App.d.ts.map +1 -0
  58. package/dist/types/src/components/App.stories.d.ts +14 -0
  59. package/dist/types/src/components/App.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/DefaultFallback.d.ts +8 -0
  61. package/dist/types/src/components/DefaultFallback.d.ts.map +1 -0
  62. package/dist/types/src/components/index.d.ts +2 -0
  63. package/dist/types/src/components/index.d.ts.map +1 -0
  64. package/dist/types/src/{App.d.ts → components/useApp.d.ts} +7 -6
  65. package/dist/types/src/components/useApp.d.ts.map +1 -0
  66. package/dist/types/src/components/useLoading.d.ts +19 -0
  67. package/dist/types/src/components/useLoading.d.ts.map +1 -0
  68. package/dist/types/src/core/capabilities.d.ts +7 -4
  69. package/dist/types/src/core/capabilities.d.ts.map +1 -1
  70. package/dist/types/src/core/manager.d.ts +6 -2
  71. package/dist/types/src/core/manager.d.ts.map +1 -1
  72. package/dist/types/src/core/plugin.d.ts +8 -1
  73. package/dist/types/src/core/plugin.d.ts.map +1 -1
  74. package/dist/types/src/index.d.ts +1 -1
  75. package/dist/types/src/index.d.ts.map +1 -1
  76. package/dist/types/src/playground/debug/Debug.d.ts +1 -1
  77. package/dist/types/src/playground/debug/plugin.d.ts +1 -1
  78. package/dist/types/src/playground/debug/plugin.d.ts.map +1 -1
  79. package/dist/types/src/playground/generator/Main.d.ts +1 -1
  80. package/dist/types/src/playground/generator/Toolbar.d.ts +1 -1
  81. package/dist/types/src/playground/generator/Toolbar.d.ts.map +1 -1
  82. package/dist/types/src/playground/generator/generator.d.ts +1 -1
  83. package/dist/types/src/playground/generator/generator.d.ts.map +1 -1
  84. package/dist/types/src/playground/generator/plugin.d.ts +1 -1
  85. package/dist/types/src/playground/generator/plugin.d.ts.map +1 -1
  86. package/dist/types/src/playground/layout/Layout.d.ts +2 -2
  87. package/dist/types/src/playground/layout/plugin.d.ts +1 -1
  88. package/dist/types/src/playground/layout/plugin.d.ts.map +1 -1
  89. package/dist/types/src/playground/logger/Toolbar.d.ts +1 -1
  90. package/dist/types/src/playground/logger/Toolbar.d.ts.map +1 -1
  91. package/dist/types/src/playground/logger/plugin.d.ts +1 -1
  92. package/dist/types/src/playground/logger/plugin.d.ts.map +1 -1
  93. package/dist/types/src/playground/logger/schema.d.ts +1 -1
  94. package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
  95. package/dist/types/src/playground/playground.stories.d.ts +5 -4
  96. package/dist/types/src/playground/playground.stories.d.ts.map +1 -1
  97. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +1 -1
  98. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +1 -1
  99. package/dist/types/src/plugin-intent/actions.d.ts +5 -7
  100. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -1
  101. package/dist/types/src/plugin-intent/errors.d.ts.map +1 -1
  102. package/dist/types/src/plugin-intent/index.d.ts +1 -0
  103. package/dist/types/src/plugin-intent/index.d.ts.map +1 -1
  104. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +7 -7
  105. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
  106. package/dist/types/src/plugin-intent/intent.d.ts +1 -1
  107. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -1
  108. package/dist/types/src/plugin-intent/meta.d.ts +3 -0
  109. package/dist/types/src/plugin-intent/meta.d.ts.map +1 -0
  110. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +1 -1
  111. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +1 -1
  112. package/dist/types/src/plugin-settings/actions.d.ts +5 -7
  113. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
  114. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +1 -1
  115. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
  116. package/dist/types/src/plugin-settings/intent-resolver.d.ts +1 -1
  117. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +1 -1
  118. package/dist/types/src/plugin-settings/meta.d.ts +3 -0
  119. package/dist/types/src/plugin-settings/meta.d.ts.map +1 -0
  120. package/dist/types/src/plugin-settings/store.d.ts +1 -1
  121. package/dist/types/src/plugin-settings/store.d.ts.map +1 -1
  122. package/dist/types/src/plugin-settings/translations.d.ts +2 -1
  123. package/dist/types/src/plugin-settings/translations.d.ts.map +1 -1
  124. package/dist/types/src/react/ErrorBoundary.d.ts +13 -14
  125. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
  126. package/dist/types/src/react/IntentContext.d.ts.map +1 -1
  127. package/dist/types/src/react/Surface.d.ts +2 -2
  128. package/dist/types/src/react/Surface.d.ts.map +1 -1
  129. package/dist/types/src/react/Surface.stories.d.ts +6 -5
  130. package/dist/types/src/react/Surface.stories.d.ts.map +1 -1
  131. package/dist/types/src/react/common.d.ts.map +1 -1
  132. package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
  133. package/dist/types/src/testing/withPluginManager.d.ts +9 -8
  134. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  135. package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
  136. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  137. package/dist/types/tsconfig.tsbuildinfo +1 -1
  138. package/moon.yml +4 -0
  139. package/package.json +34 -29
  140. package/src/common/capabilities.ts +117 -13
  141. package/src/common/collaboration.ts +6 -9
  142. package/src/common/events.ts +3 -1
  143. package/src/common/file.ts +1 -1
  144. package/src/common/layout.ts +3 -4
  145. package/src/common/surface.ts +15 -18
  146. package/src/common/translations.ts +1 -1
  147. package/src/components/App.stories.tsx +33 -0
  148. package/src/components/App.tsx +59 -0
  149. package/src/components/DefaultFallback.tsx +26 -0
  150. package/src/components/index.ts +5 -0
  151. package/src/{App.tsx → components/useApp.tsx} +24 -136
  152. package/src/components/useLoading.tsx +70 -0
  153. package/src/core/capabilities.test.ts +2 -2
  154. package/src/core/capabilities.ts +18 -9
  155. package/src/core/manager.test.ts +22 -21
  156. package/src/core/manager.ts +139 -54
  157. package/src/core/plugin.ts +13 -2
  158. package/src/helpers.test.ts +1 -1
  159. package/src/index.ts +1 -1
  160. package/src/playground/debug/Debug.tsx +1 -1
  161. package/src/playground/debug/plugin.ts +7 -8
  162. package/src/playground/generator/Toolbar.tsx +2 -1
  163. package/src/playground/generator/generator.ts +4 -4
  164. package/src/playground/generator/plugin.ts +12 -13
  165. package/src/playground/layout/plugin.ts +10 -9
  166. package/src/playground/logger/Toolbar.tsx +2 -1
  167. package/src/playground/logger/plugin.ts +30 -25
  168. package/src/playground/logger/schema.ts +1 -1
  169. package/src/playground/playground.stories.tsx +20 -16
  170. package/src/plugin-intent/IntentPlugin.ts +13 -13
  171. package/src/plugin-intent/actions.ts +4 -6
  172. package/src/plugin-intent/errors.ts +2 -1
  173. package/src/plugin-intent/index.ts +1 -0
  174. package/src/plugin-intent/intent-dispatcher.test.ts +10 -3
  175. package/src/plugin-intent/intent-dispatcher.ts +16 -12
  176. package/src/plugin-intent/intent.ts +1 -1
  177. package/src/plugin-intent/meta.ts +10 -0
  178. package/src/plugin-settings/SettingsPlugin.ts +27 -28
  179. package/src/plugin-settings/actions.ts +9 -13
  180. package/src/plugin-settings/app-graph-builder.ts +20 -17
  181. package/src/plugin-settings/intent-resolver.ts +5 -4
  182. package/src/plugin-settings/meta.ts +10 -0
  183. package/src/plugin-settings/store.ts +1 -1
  184. package/src/plugin-settings/translations.ts +3 -3
  185. package/src/react/ErrorBoundary.tsx +26 -15
  186. package/src/react/IntentContext.tsx +3 -2
  187. package/src/react/Surface.stories.tsx +23 -18
  188. package/src/react/Surface.tsx +14 -5
  189. package/src/react/common.ts +2 -1
  190. package/src/react/useCapabilities.ts +2 -1
  191. package/src/testing/withPluginManager.stories.tsx +9 -5
  192. package/src/testing/withPluginManager.tsx +33 -32
  193. package/tsconfig.json +6 -10
  194. package/vitest.config.ts +8 -6
  195. package/.eslintrc.cjs +0 -9
  196. package/.swc/plugins/v7_linux_x86_64_13.0.0/f45bdff002284d9e8f9ef3f0be909de12da36c049cbcf261ac78fc00abb09a2d +0 -0
  197. package/dist/lib/browser/app-graph-builder-BGGXLD6T.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-2636QSIK.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-DHZB7HG7.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-ORWHM7CO.mjs.map +0 -7
  201. package/dist/lib/browser/intent-resolver-O67UANYP.mjs.map +0 -7
  202. package/dist/lib/node-esm/app-graph-builder-QHIJUYYW.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-NJAFK626.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-UMZQERLE.mjs.map +0 -7
  205. package/dist/lib/node-esm/chunk-VSKRV3NW.mjs.map +0 -7
  206. package/dist/lib/node-esm/intent-resolver-K3D4BXQQ.mjs.map +0 -7
  207. package/dist/types/src/App.d.ts.map +0 -1
  208. package/typedoc/.nojekyll +0 -1
  209. package/typedoc/assets/hierarchy.js +0 -1
  210. package/typedoc/assets/highlight.css +0 -106
  211. package/typedoc/assets/icons.js +0 -18
  212. package/typedoc/assets/icons.svg +0 -1
  213. package/typedoc/assets/main.js +0 -60
  214. package/typedoc/assets/navigation.js +0 -1
  215. package/typedoc/assets/search.js +0 -1
  216. package/typedoc/assets/style.css +0 -1640
  217. package/typedoc/classes/CollaborationActions.InsertContent.html +0 -421
  218. package/typedoc/classes/ErrorBoundary.html +0 -125
  219. package/typedoc/classes/IntentAction.ShowUndo.html +0 -227
  220. package/typedoc/classes/IntentAction.Track.html +0 -266
  221. package/typedoc/classes/LayoutAction.AddToast.html +0 -265
  222. package/typedoc/classes/LayoutAction.Close.html +0 -382
  223. package/typedoc/classes/LayoutAction.Expose.html +0 -265
  224. package/typedoc/classes/LayoutAction.Open.html +0 -1123
  225. package/typedoc/classes/LayoutAction.RevertWorkspace.html +0 -343
  226. package/typedoc/classes/LayoutAction.ScrollIntoView.html +0 -460
  227. package/typedoc/classes/LayoutAction.Set.html +0 -460
  228. package/typedoc/classes/LayoutAction.SetLayoutMode.html +0 -499
  229. package/typedoc/classes/LayoutAction.SwitchWorkspace.html +0 -265
  230. package/typedoc/classes/LayoutAction.UpdateComplementary.html +0 -616
  231. package/typedoc/classes/LayoutAction.UpdateDialog.html +0 -1123
  232. package/typedoc/classes/LayoutAction.UpdateLayout.html +0 -461
  233. package/typedoc/classes/LayoutAction.UpdatePopover.html +0 -1435
  234. package/typedoc/classes/LayoutAction.UpdateSidebar.html +0 -616
  235. package/typedoc/classes/Plugin.html +0 -6
  236. package/typedoc/classes/PluginContext.html +0 -38
  237. package/typedoc/classes/PluginManager.html +0 -43
  238. package/typedoc/classes/PluginModule.html +0 -18
  239. package/typedoc/classes/SettingsAction.Open.html +0 -226
  240. package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +0 -265
  241. package/typedoc/functions/Events.createStateEvent.html +0 -2
  242. package/typedoc/functions/IntentPlugin.html +0 -1
  243. package/typedoc/functions/SettingsPlugin.html +0 -1
  244. package/typedoc/functions/allOf.html +0 -2
  245. package/typedoc/functions/chain.html +0 -3
  246. package/typedoc/functions/contributes.html +0 -2
  247. package/typedoc/functions/createDispatcher.html +0 -3
  248. package/typedoc/functions/createIntent.html +0 -6
  249. package/typedoc/functions/createResolver.html +0 -2
  250. package/typedoc/functions/createSurface.html +0 -2
  251. package/typedoc/functions/defineCapability.html +0 -2
  252. package/typedoc/functions/defineEvent.html +0 -2
  253. package/typedoc/functions/defineModule.html +0 -2
  254. package/typedoc/functions/definePlugin.html +0 -2
  255. package/typedoc/functions/eventKey.html +0 -2
  256. package/typedoc/functions/getEvents.html +0 -2
  257. package/typedoc/functions/isAllOf.html +0 -2
  258. package/typedoc/functions/isOneOf.html +0 -2
  259. package/typedoc/functions/isSurfaceAvailable.html +0 -2
  260. package/typedoc/functions/lazy.html +0 -2
  261. package/typedoc/functions/oneOf.html +0 -2
  262. package/typedoc/functions/useApp.html +0 -6
  263. package/typedoc/functions/useAppGraph.html +0 -1
  264. package/typedoc/functions/useCapabilities.html +0 -3
  265. package/typedoc/functions/useCapability.html +0 -4
  266. package/typedoc/functions/useIntentDispatcher.html +0 -1
  267. package/typedoc/functions/useIntentResolver.html +0 -1
  268. package/typedoc/functions/useLayout.html +0 -1
  269. package/typedoc/functions/usePluginManager.html +0 -2
  270. package/typedoc/hierarchy.html +0 -1
  271. package/typedoc/index.html +0 -12
  272. package/typedoc/interfaces/LayoutAction.Toast.html +0 -10
  273. package/typedoc/media/LICENSE +0 -8
  274. package/typedoc/modules/Capabilities.html +0 -1
  275. package/typedoc/modules/CollaborationActions.html +0 -1
  276. package/typedoc/modules/Events.html +0 -1
  277. package/typedoc/modules/IntentAction.html +0 -1
  278. package/typedoc/modules/LayoutAction.html +0 -2
  279. package/typedoc/modules/SettingsAction.html +0 -1
  280. package/typedoc/modules.html +0 -1
  281. package/typedoc/types/ActivationEvent.html +0 -8
  282. package/typedoc/types/ActivationEvents.html +0 -2
  283. package/typedoc/types/AnyCapability.html +0 -1
  284. package/typedoc/types/AnyIntent.html +0 -1
  285. package/typedoc/types/AnyIntentChain.html +0 -1
  286. package/typedoc/types/AnyIntentEffectResult.html +0 -1
  287. package/typedoc/types/AnyIntentResolver.html +0 -1
  288. package/typedoc/types/AnyIntentResult.html +0 -1
  289. package/typedoc/types/Capabilities.FileUploader.html +0 -1
  290. package/typedoc/types/Capabilities.IntentResolver.html +0 -1
  291. package/typedoc/types/Capabilities.Layout.html +0 -1
  292. package/typedoc/types/Capabilities.Metadata.html +0 -1
  293. package/typedoc/types/Capabilities.ReactContext.html +0 -1
  294. package/typedoc/types/Capabilities.ReactRoot.html +0 -1
  295. package/typedoc/types/Capabilities.ReactSurface.html +0 -1
  296. package/typedoc/types/Capabilities.Settings.html +0 -4
  297. package/typedoc/types/Capability.html +0 -9
  298. package/typedoc/types/CreateAppOptions.html +0 -10
  299. package/typedoc/types/FileInfo.html +0 -1
  300. package/typedoc/types/Intent.html +0 -10
  301. package/typedoc/types/IntentChain.html +0 -6
  302. package/typedoc/types/IntentContext.html +0 -5
  303. package/typedoc/types/IntentData.html +0 -1
  304. package/typedoc/types/IntentDispatcher.html +0 -2
  305. package/typedoc/types/IntentDispatcherResult.html +0 -2
  306. package/typedoc/types/IntentEffectDefinition.html +0 -2
  307. package/typedoc/types/IntentEffectResult.html +0 -15
  308. package/typedoc/types/IntentParams.html +0 -3
  309. package/typedoc/types/IntentResolver.html +0 -2
  310. package/typedoc/types/IntentResultData.html +0 -1
  311. package/typedoc/types/IntentSchema.html +0 -1
  312. package/typedoc/types/IntentUndo.html +0 -2
  313. package/typedoc/types/InterfaceDef.html +0 -4
  314. package/typedoc/types/Label.html +0 -1
  315. package/typedoc/types/NodeSerializer.html +0 -8
  316. package/typedoc/types/PluginManagerOptions.html +0 -6
  317. package/typedoc/types/PluginMeta.html +0 -21
  318. package/typedoc/types/PromiseIntentDispatcher.html +0 -2
  319. package/typedoc/types/PromiseIntentUndo.html +0 -2
  320. package/typedoc/types/Resource.html +0 -1
  321. package/typedoc/types/ResourceKey.html +0 -1
  322. package/typedoc/types/ResourceLanguage.html +0 -1
  323. package/typedoc/types/SerializedNode.html +0 -4
  324. package/typedoc/types/SurfaceComponent.html +0 -2
  325. package/typedoc/types/SurfaceDefinition.html +0 -2
  326. package/typedoc/types/SurfaceProps.html +0 -4
  327. package/typedoc/variables/Capabilities.AnchorSort.html +0 -1
  328. package/typedoc/variables/Capabilities.AppGraph.html +0 -1
  329. package/typedoc/variables/Capabilities.AppGraphBuilder.html +0 -1
  330. package/typedoc/variables/Capabilities.AppGraphSerializer.html +0 -1
  331. package/typedoc/variables/Capabilities.ArtifactDefinition.html +0 -1
  332. package/typedoc/variables/Capabilities.FileUploader.html +0 -1
  333. package/typedoc/variables/Capabilities.IntentDispatcher.html +0 -1
  334. package/typedoc/variables/Capabilities.IntentResolver.html +0 -1
  335. package/typedoc/variables/Capabilities.Layout.html +0 -1
  336. package/typedoc/variables/Capabilities.Metadata.html +0 -1
  337. package/typedoc/variables/Capabilities.Null.html +0 -1
  338. package/typedoc/variables/Capabilities.PluginManager.html +0 -1
  339. package/typedoc/variables/Capabilities.ReactContext.html +0 -1
  340. package/typedoc/variables/Capabilities.ReactRoot.html +0 -1
  341. package/typedoc/variables/Capabilities.ReactSurface.html +0 -1
  342. package/typedoc/variables/Capabilities.RxRegistry.html +0 -1
  343. package/typedoc/variables/Capabilities.Settings.html +0 -1
  344. package/typedoc/variables/Capabilities.SettingsStore.html +0 -1
  345. package/typedoc/variables/Capabilities.Tools.html +0 -1
  346. package/typedoc/variables/Capabilities.Translations.html +0 -1
  347. package/typedoc/variables/Events.AppGraphReady.html +0 -2
  348. package/typedoc/variables/Events.DispatcherReady.html +0 -2
  349. package/typedoc/variables/Events.LayoutReady.html +0 -1
  350. package/typedoc/variables/Events.SettingsReady.html +0 -2
  351. package/typedoc/variables/Events.SetupAppGraph.html +0 -2
  352. package/typedoc/variables/Events.SetupArtifactDefinition.html +0 -2
  353. package/typedoc/variables/Events.SetupIntentResolver.html +0 -2
  354. package/typedoc/variables/Events.SetupMetadata.html +0 -2
  355. package/typedoc/variables/Events.SetupReactSurface.html +0 -2
  356. package/typedoc/variables/Events.SetupSettings.html +0 -2
  357. package/typedoc/variables/Events.SetupTranslations.html +0 -2
  358. package/typedoc/variables/Events.Startup.html +0 -2
  359. package/typedoc/variables/FileInfoSchema.html +0 -1
  360. package/typedoc/variables/INTENT_ACTION.html +0 -1
  361. package/typedoc/variables/INTENT_PLUGIN.html +0 -1
  362. package/typedoc/variables/LAYOUT_ACTION.html +0 -1
  363. package/typedoc/variables/LAYOUT_PLUGIN.html +0 -1
  364. package/typedoc/variables/Label.html +0 -1
  365. package/typedoc/variables/LayoutAction.Toast.html +0 -1
  366. package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +0 -1
  367. package/typedoc/variables/PluginManagerProvider.html +0 -2
  368. package/typedoc/variables/Resource.html +0 -2
  369. package/typedoc/variables/ResourceKey.html +0 -1
  370. package/typedoc/variables/ResourceLanguage.html +0 -1
  371. package/typedoc/variables/SETTINGS_ACTION.html +0 -1
  372. package/typedoc/variables/SETTINGS_ID.html +0 -1
  373. package/typedoc/variables/SETTINGS_KEY.html +0 -1
  374. package/typedoc/variables/SETTINGS_PLUGIN.html +0 -1
  375. package/typedoc/variables/Surface.html +0 -2
  376. package/typedoc/variables/defaultFileTypes.html +0 -1
  377. /package/dist/lib/browser/{intent-dispatcher-TWKB22NI.mjs.map → intent-dispatcher-BND6IF4U.mjs.map} +0 -0
  378. /package/dist/lib/node-esm/{intent-dispatcher-5PRM3KGH.mjs.map → intent-dispatcher-254AZ6EE.mjs.map} +0 -0
@@ -2,19 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { INTENT_PLUGIN } from './actions';
6
5
  import { Events } from '../common';
7
6
  import { defineModule, definePlugin, lazy } from '../core';
8
7
 
9
- export const IntentPlugin = () =>
10
- definePlugin({ id: INTENT_PLUGIN, name: 'Intent' }, [
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
- ]);
8
+ import { meta } from './meta';
9
+
10
+ export const IntentPlugin = definePlugin(meta, () => [
11
+ defineModule({
12
+ id: `${meta.id}/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
+ ]);
@@ -2,18 +2,16 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Label } from './intent';
8
-
9
- export const INTENT_PLUGIN = 'dxos.org/plugin/intent';
10
- export const INTENT_ACTION = `${INTENT_PLUGIN}/action`;
8
+ import { meta } from './meta';
11
9
 
12
10
  export namespace IntentAction {
13
11
  /**
14
12
  * Log an intent.
15
13
  */
16
- export class Track extends Schema.TaggedClass<Track>()(`${INTENT_ACTION}/track`, {
14
+ export class Track extends Schema.TaggedClass<Track>()(`${meta.id}/action/track`, {
17
15
  input: Schema.Struct({
18
16
  intents: Schema.Array(Schema.String),
19
17
  error: Schema.optional(Schema.String),
@@ -24,7 +22,7 @@ export namespace IntentAction {
24
22
  /**
25
23
  * Fired after an intent is dispatched if the intent is undoable.
26
24
  */
27
- export class ShowUndo extends Schema.TaggedClass<ShowUndo>()(`${INTENT_ACTION}/show-undo`, {
25
+ export class ShowUndo extends Schema.TaggedClass<ShowUndo>()(`${meta.id}/action/show-undo`, {
28
26
  input: Schema.Struct({
29
27
  message: Label,
30
28
  }),
@@ -24,10 +24,11 @@ export class BaseError extends Error {
24
24
 
25
25
  export class NoResolversError extends BaseError {
26
26
  constructor(action: string) {
27
- super('NO_RESOLVERS', 'No resolvers were found for the action', { action });
27
+ super('NO_RESOLVERS', `No resolvers were found for the action: ${action}`, { action });
28
28
  }
29
29
  }
30
30
 
31
+ // TODO(burdon): Detect loops.
31
32
  export class CycleDetectedError extends BaseError {
32
33
  constructor(context?: Record<string, any>) {
33
34
  super(
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  export * from './actions';
6
+ export * from './errors';
6
7
  export * from './intent';
7
8
  export * from './intent-dispatcher';
8
9
  export * from './IntentPlugin';
@@ -2,7 +2,10 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema, Effect, Fiber, pipe } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Fiber from 'effect/Fiber';
7
+ import * as Function from 'effect/Function';
8
+ import * as Schema from 'effect/Schema';
6
9
  import { describe, expect, test } from 'vitest';
7
10
 
8
11
  import { chain, createIntent } from './intent';
@@ -104,7 +107,11 @@ describe('Intent dispatcher', () => {
104
107
 
105
108
  test('chain intents', async () => {
106
109
  const { dispatch } = createDispatcher(() => [computeResolver, toStringResolver, concatResolver]);
107
- const intent = pipe(createIntent(Compute, { value: 1 }), chain(ToString, {}), chain(Concat, { plus: '!' }));
110
+ const intent = Function.pipe(
111
+ createIntent(Compute, { value: 1 }),
112
+ chain(ToString, {}),
113
+ chain(Concat, { plus: '!' }),
114
+ );
108
115
 
109
116
  expect(intent.first.id).toBe(Compute._tag);
110
117
  expect(intent.last.id).toBe(Concat._tag);
@@ -120,7 +127,7 @@ describe('Intent dispatcher', () => {
120
127
 
121
128
  test('undo chained intent', async () => {
122
129
  const { dispatch, undo } = createDispatcher(() => [computeResolver, toStringResolver, concatResolver]);
123
- const intent = pipe(createIntent(Compute, { value: 1 }), chain(Compute, {}), chain(Compute, {}));
130
+ const intent = Function.pipe(createIntent(Compute, { value: 1 }), chain(Compute, {}), chain(Compute, {}));
124
131
  const program = Effect.gen(function* () {
125
132
  const a = yield* dispatch(intent);
126
133
 
@@ -2,17 +2,22 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Effect, Option, pipe, Ref } from 'effect';
6
- import { type Simplify } from 'effect/Types';
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
8
+ import * as Ref from 'effect/Ref';
9
+ import type * as Types from 'effect/Types';
7
10
 
8
11
  import { live } from '@dxos/live-object';
9
12
  import { log } from '@dxos/log';
10
- import { byPosition, type MaybePromise, type Position, type GuardedType } from '@dxos/util';
13
+ import { type GuardedType, type MaybePromise, type Position, byPosition } from '@dxos/util';
14
+
15
+ import { Capabilities, Events } from '../common';
16
+ import { type PluginContext, contributes } from '../core';
11
17
 
12
18
  import { IntentAction } from './actions';
13
19
  import { CycleDetectedError, NoResolversError } from './errors';
14
20
  import {
15
- createIntent,
16
21
  type AnyIntent,
17
22
  type AnyIntentChain,
18
23
  type Intent,
@@ -22,9 +27,8 @@ import {
22
27
  type IntentResultData,
23
28
  type IntentSchema,
24
29
  type Label,
30
+ createIntent,
25
31
  } from './intent';
26
- import { Events, Capabilities } from '../common';
27
- import { contributes, type PluginContext } from '../core';
28
32
 
29
33
  const EXECUTION_LIMIT = 100;
30
34
  const HISTORY_LIMIT = 100;
@@ -131,7 +135,7 @@ export const createResolver = <Tag extends string, Fields extends IntentParams,
131
135
  */
132
136
  export type PromiseIntentDispatcher = <Fields extends IntentParams>(
133
137
  intent: IntentChain<any, any, any, Fields>,
134
- ) => Promise<Simplify<IntentDispatcherResult<IntentData<Fields>, IntentResultData<Fields>>>>;
138
+ ) => Promise<Types.Simplify<IntentDispatcherResult<IntentData<Fields>, IntentResultData<Fields>>>>;
135
139
 
136
140
  /**
137
141
  * Creates an effect for intents.
@@ -140,7 +144,7 @@ export type IntentDispatcher = <Fields extends IntentParams>(
140
144
  intent: IntentChain<any, any, any, Fields>,
141
145
  depth?: number,
142
146
  ) => Effect.Effect<
143
- Simplify<Required<IntentDispatcherResult<IntentData<Fields>, IntentResultData<Fields>>>['data']>,
147
+ Types.Simplify<Required<IntentDispatcherResult<IntentData<Fields>, IntentResultData<Fields>>>['data']>,
144
148
  Error
145
149
  >;
146
150
 
@@ -196,7 +200,7 @@ export const createDispatcher = (
196
200
  .filter((resolver) => !resolver.filter || resolver.filter(intent.data))
197
201
  .toSorted(byPosition);
198
202
  if (candidates.length === 0) {
199
- yield* Effect.fail(new NoResolversError(intent.id));
203
+ return yield* Effect.fail(new NoResolversError(intent.id));
200
204
  }
201
205
 
202
206
  const effect = candidates[0].resolve(intent.data, intent.undo ?? false);
@@ -207,7 +211,7 @@ export const createDispatcher = (
207
211
  const dispatch: IntentDispatcher = (intentChain, depth = 0) => {
208
212
  return Effect.gen(function* () {
209
213
  if (depth > executionLimit) {
210
- yield* Effect.fail(new CycleDetectedError());
214
+ return yield* Effect.fail(new CycleDetectedError());
211
215
  }
212
216
 
213
217
  const resultsRef = yield* Ref.make<AnyIntentResult[]>([]);
@@ -230,7 +234,7 @@ export const createDispatcher = (
230
234
  // error: result.error.message,
231
235
  // }),
232
236
  // );
233
- yield* Effect.fail(result.error);
237
+ return yield* Effect.fail(result.error);
234
238
  }
235
239
  }
236
240
 
@@ -251,7 +255,7 @@ export const createDispatcher = (
251
255
 
252
256
  if (result.undoable && isUndoable(results)) {
253
257
  // TODO(wittjosiah): Is there a better way to handle showing undo for chains?
254
- yield* pipe(
258
+ yield* Function.pipe(
255
259
  dispatch(createIntent(IntentAction.ShowUndo, { message: result.undoable.message })),
256
260
  Effect.catchSome((err) =>
257
261
  err instanceof NoResolversError ? Option.some(Effect.succeed(undefined)) : Option.none(),
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  export type IntentParams = {
8
8
  readonly input: Schema.Schema.All;
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type PluginMeta } from '@dxos/app-framework';
6
+
7
+ export const meta: PluginMeta = {
8
+ id: 'dxos.org/plugin/intent',
9
+ name: 'Intent',
10
+ };
@@ -2,34 +2,33 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { SETTINGS_PLUGIN } from './actions';
6
- import { translations } from './translations';
7
5
  import { Capabilities, Events } from '../common';
8
6
  import { contributes, defineModule, definePlugin, lazy } from '../core';
9
7
 
10
- // TODO(wittjosiah): Add options to exclude some modules.
11
- export const SettingsPlugin = () =>
12
- definePlugin({ id: SETTINGS_PLUGIN, name: 'Settings' }, [
13
- defineModule({
14
- id: `${SETTINGS_PLUGIN}/module/store`,
15
- activatesOn: Events.Startup,
16
- activatesBefore: [Events.SetupSettings],
17
- activatesAfter: [Events.SettingsReady],
18
- activate: lazy(() => import('./store')),
19
- }),
20
- defineModule({
21
- id: `${SETTINGS_PLUGIN}/module/translations`,
22
- activatesOn: Events.SetupTranslations,
23
- activate: () => contributes(Capabilities.Translations, translations),
24
- }),
25
- defineModule({
26
- id: `${SETTINGS_PLUGIN}/module/intent-resolver`,
27
- activatesOn: Events.SetupIntentResolver,
28
- activate: lazy(() => import('./intent-resolver')),
29
- }),
30
- defineModule({
31
- id: `${SETTINGS_PLUGIN}/module/app-graph-builder`,
32
- activatesOn: Events.SetupAppGraph,
33
- activate: lazy(() => import('./app-graph-builder')),
34
- }),
35
- ]);
8
+ import { meta } from './meta';
9
+ import { translations } from './translations';
10
+
11
+ export const SettingsPlugin = definePlugin(meta, () => [
12
+ defineModule({
13
+ id: `${meta.id}/module/store`,
14
+ activatesOn: Events.Startup,
15
+ activatesBefore: [Events.SetupSettings],
16
+ activatesAfter: [Events.SettingsReady],
17
+ activate: lazy(() => import('./store')),
18
+ }),
19
+ defineModule({
20
+ id: `${meta.id}/module/translations`,
21
+ activatesOn: Events.SetupTranslations,
22
+ activate: () => contributes(Capabilities.Translations, translations),
23
+ }),
24
+ defineModule({
25
+ id: `${meta.id}/module/intent-resolver`,
26
+ activatesOn: Events.SetupIntentResolver,
27
+ activate: lazy(() => import('./intent-resolver')),
28
+ }),
29
+ defineModule({
30
+ id: `${meta.id}/module/app-graph-builder`,
31
+ activatesOn: Events.SetupAppGraph,
32
+ activate: lazy(() => import('./app-graph-builder')),
33
+ }),
34
+ ]);
@@ -2,28 +2,24 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
- export const SETTINGS_PLUGIN = 'dxos.org/plugin/settings';
8
- export const SETTINGS_ACTION = `${SETTINGS_PLUGIN}/action`;
9
- // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.
10
- // Ideally this should be worked into the data model in a generic way.
7
+ import { meta } from './meta';
8
+
9
+ // TODO(burdon): Document.
11
10
  export const SETTINGS_ID = '!dxos:settings';
12
11
  export const SETTINGS_KEY = 'settings';
13
12
 
14
13
  export namespace SettingsAction {
15
- export class Open extends Schema.TaggedClass<Open>()(`${SETTINGS_ACTION}/open`, {
14
+ export class Open extends Schema.TaggedClass<Open>()(`${meta.id}/open`, {
16
15
  input: Schema.Struct({
17
16
  plugin: Schema.optional(Schema.String),
18
17
  }),
19
18
  output: Schema.Void,
20
19
  }) {}
21
20
 
22
- export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(
23
- `${SETTINGS_ACTION}/open-plugin-registry`,
24
- {
25
- input: Schema.Void,
26
- output: Schema.Void,
27
- },
28
- ) {}
21
+ export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(`${meta.id}/open-plugin-registry`, {
22
+ input: Schema.Void,
23
+ output: Schema.Void,
24
+ }) {}
29
25
  }
@@ -3,35 +3,38 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
7
8
 
8
- import { createExtension, ROOT_ID } from '@dxos/app-graph';
9
+ import { ROOT_ID, createExtension } from '@dxos/app-graph';
9
10
  import { type SettingsStore, type SettingsValue } from '@dxos/local-storage';
10
11
  import { isNonNullable } from '@dxos/util';
11
12
 
12
- import { SETTINGS_ID, SETTINGS_KEY, SETTINGS_PLUGIN, SettingsAction } from './actions';
13
13
  import { Capabilities } from '../common';
14
- import { contributes, type PluginMeta, type PluginContext } from '../core';
14
+ import { type PluginContext, type PluginMeta, contributes } from '../core';
15
15
  import { createIntent } from '../plugin-intent';
16
16
 
17
+ import { SETTINGS_ID, SETTINGS_KEY, SettingsAction } from './actions';
18
+ import { meta } from './meta';
19
+
17
20
  export default (context: PluginContext) =>
18
21
  contributes(Capabilities.AppGraphBuilder, [
19
22
  createExtension({
20
- id: `${SETTINGS_PLUGIN}/action`,
23
+ id: `${meta.id}/action`,
21
24
  actions: (node) =>
22
25
  Rx.make((get) =>
23
- pipe(
26
+ Function.pipe(
24
27
  get(node),
25
28
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
26
29
  Option.map(() => [
27
30
  {
28
- id: SETTINGS_PLUGIN,
31
+ id: meta.id,
29
32
  data: async () => {
30
33
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
31
34
  await dispatch(createIntent(SettingsAction.Open));
32
35
  },
33
36
  properties: {
34
- label: ['open settings label', { ns: SETTINGS_PLUGIN }],
37
+ label: ['open settings label', { ns: meta.id }],
35
38
  icon: 'ph--gear--regular',
36
39
  disposition: 'menu',
37
40
  keyBinding: {
@@ -46,18 +49,18 @@ export default (context: PluginContext) =>
46
49
  ),
47
50
  }),
48
51
  createExtension({
49
- id: `${SETTINGS_PLUGIN}/core`,
52
+ id: `${meta.id}/core`,
50
53
  connector: (node) =>
51
54
  Rx.make((get) =>
52
- pipe(
55
+ Function.pipe(
53
56
  get(node),
54
57
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
55
58
  Option.map(() => [
56
59
  {
57
60
  id: SETTINGS_ID,
58
- type: SETTINGS_PLUGIN,
61
+ type: meta.id,
59
62
  properties: {
60
- label: ['app settings label', { ns: SETTINGS_PLUGIN }],
63
+ label: ['app settings label', { ns: meta.id }],
61
64
  icon: 'ph--gear--regular',
62
65
  disposition: 'pin-end',
63
66
  position: 'hoist',
@@ -70,10 +73,10 @@ export default (context: PluginContext) =>
70
73
  ),
71
74
  }),
72
75
  createExtension({
73
- id: `${SETTINGS_PLUGIN}/core-plugins`,
76
+ id: `${meta.id}/core-plugins`,
74
77
  connector: (node) =>
75
78
  Rx.make((get) =>
76
- pipe(
79
+ Function.pipe(
77
80
  get(node),
78
81
  Option.flatMap((node) => (node.id !== SETTINGS_ID ? Option.none() : Option.some(node))),
79
82
  Option.map(() => {
@@ -105,7 +108,7 @@ export default (context: PluginContext) =>
105
108
  id: `${SETTINGS_KEY}:custom-plugins`,
106
109
  type: 'category',
107
110
  properties: {
108
- label: ['custom plugins label', { ns: SETTINGS_PLUGIN }],
111
+ label: ['custom plugins label', { ns: meta.id }],
109
112
  icon: 'ph--squares-four--regular',
110
113
  role: 'branch',
111
114
  disposition: 'collection',
@@ -118,10 +121,10 @@ export default (context: PluginContext) =>
118
121
  ),
119
122
  }),
120
123
  createExtension({
121
- id: `${SETTINGS_PLUGIN}/custom-plugins`,
124
+ id: `${meta.id}/custom-plugins`,
122
125
  connector: (node) =>
123
126
  Rx.make((get) =>
124
- pipe(
127
+ Function.pipe(
125
128
  get(node),
126
129
  Option.flatMap((node) =>
127
130
  node.id !== `${SETTINGS_KEY}:custom-plugins` ? Option.none() : Option.some(node),
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { pipe } from 'effect';
5
+ import * as Function from 'effect/Function';
6
6
 
7
- import { SETTINGS_ID, SETTINGS_KEY, SettingsAction } from './actions';
8
7
  import { Capabilities, LayoutAction } from '../common';
9
8
  import { contributes } from '../core';
10
- import { createResolver, createIntent, chain } from '../plugin-intent';
9
+ import { chain, createIntent, createResolver } from '../plugin-intent';
10
+
11
+ import { SETTINGS_ID, SETTINGS_KEY, SettingsAction } from './actions';
11
12
 
12
13
  export default () =>
13
14
  contributes(
@@ -19,7 +20,7 @@ export default () =>
19
20
  return {
20
21
  intents: [
21
22
  plugin
22
- ? pipe(
23
+ ? Function.pipe(
23
24
  openSettings,
24
25
  chain(LayoutAction.Open, {
25
26
  part: 'main',
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type PluginMeta } from '@dxos/app-framework';
6
+
7
+ export const meta: PluginMeta = {
8
+ id: 'dxos.org/plugin/settings',
9
+ name: 'Settings',
10
+ };
@@ -5,7 +5,7 @@
5
5
  import { RootSettingsStore } from '@dxos/local-storage';
6
6
 
7
7
  import { Capabilities } from '../common';
8
- import { contributes, type PluginContext } from '../core';
8
+ import { type PluginContext, contributes } from '../core';
9
9
 
10
10
  export default (context: PluginContext) => {
11
11
  // TODO(wittjosiah): Replace with rx?
@@ -1,15 +1,15 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- import { SETTINGS_PLUGIN } from './actions';
7
+ import { meta } from './meta';
8
8
 
9
9
  export const translations = [
10
10
  {
11
11
  'en-US': {
12
- [SETTINGS_PLUGIN]: {
12
+ [meta.id]: {
13
13
  'open settings label': 'Open settings',
14
14
  'app settings label': 'Settings',
15
15
  'custom plugins label': 'Plugins',
@@ -2,38 +2,40 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React, { Component, type FC, type PropsWithChildren } from 'react';
5
+ import React, { Component, type FC, type PropsWithChildren, type ReactNode } from 'react';
6
6
 
7
- type Props = PropsWithChildren<{ data?: any; fallback: FC<{ data?: any; error: Error; reset: () => void }> }>;
8
- type State = { error: Error | undefined };
7
+ type State = {
8
+ error: Error | undefined;
9
+ };
10
+
11
+ export type ErrorBoundaryProps = PropsWithChildren<{
12
+ data?: any;
13
+ fallback?: FC<{ data?: any; error: Error }>;
14
+ }>;
9
15
 
10
16
  /**
11
17
  * Surface error boundary.
12
- *
13
18
  * For basic usage prefer providing a fallback component to `Surface`.
14
19
  *
15
- * For more information on error boundaries, see:
16
- * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
20
+ * Ref: https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
17
21
  */
18
- export class ErrorBoundary extends Component<Props, State> {
19
- constructor(props: Props) {
20
- super(props);
21
- this.state = { error: undefined };
22
- }
23
-
22
+ export class ErrorBoundary extends Component<ErrorBoundaryProps, State> {
24
23
  static getDerivedStateFromError(error: Error): { error: Error } {
25
24
  return { error };
26
25
  }
27
26
 
28
- override componentDidUpdate(prevProps: Props): void {
27
+ override state = { error: undefined };
28
+
29
+ override componentDidUpdate(prevProps: ErrorBoundaryProps): void {
29
30
  if (prevProps.data !== this.props.data) {
30
31
  this.resetError();
31
32
  }
32
33
  }
33
34
 
34
- override render(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined {
35
+ override render(): ReactNode {
35
36
  if (this.state.error) {
36
- return <this.props.fallback data={this.props.data} error={this.state.error} reset={this.resetError} />;
37
+ const Fallback = this.props.fallback ?? DefaultFallback;
38
+ return <Fallback data={this.props.data} error={this.state.error} />;
37
39
  }
38
40
 
39
41
  return this.props.children;
@@ -43,3 +45,12 @@ export class ErrorBoundary extends Component<Props, State> {
43
45
  this.setState({ error: undefined });
44
46
  }
45
47
  }
48
+
49
+ const DefaultFallback: NonNullable<ErrorBoundaryProps['fallback']> = ({ data, error }) => {
50
+ return (
51
+ <div className='flex flex-col gap-2 overflow-hidden border border-red-500 rounded-sm'>
52
+ <h1 className='p-2'>ERROR: {error.message}</h1>
53
+ <pre className='p-2 overflow-y-auto text-sm text-subdued'>{JSON.stringify(data, null, 2)}</pre>
54
+ </div>
55
+ );
56
+ };
@@ -2,15 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type Context, createContext, useContext, type Provider, useEffect } from 'react';
5
+ import { type Context, type Provider, createContext, useContext, useEffect } from 'react';
6
6
 
7
7
  import { raise } from '@dxos/debug';
8
8
  import { pick } from '@dxos/util';
9
9
 
10
- import { usePluginManager } from './PluginManagerProvider';
11
10
  import { Capabilities } from '../common';
12
11
  import { type AnyIntentResolver, type IntentContext } from '../plugin-intent';
13
12
 
13
+ import { usePluginManager } from './PluginManagerProvider';
14
+
14
15
  const IntentContext: Context<IntentContext | undefined> = createContext<IntentContext | undefined>(undefined);
15
16
 
16
17
  export const useIntentDispatcher = (): Pick<IntentContext, 'dispatch' | 'dispatchPromise'> => {