@dxos/app-framework 0.8.4-main.3a94e84 → 0.8.4-main.3eb6e50203

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 (471) 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/dist/lib/browser/capability-7LE5X2NH.mjs +37 -0
  5. package/dist/lib/browser/capability-7LE5X2NH.mjs.map +7 -0
  6. package/dist/lib/browser/capability-DU35RXMD.mjs +34 -0
  7. package/dist/lib/browser/capability-DU35RXMD.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-4DQMLMGU.mjs +44 -0
  9. package/dist/lib/browser/chunk-4DQMLMGU.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-EIFGKQSA.mjs +170 -0
  11. package/dist/lib/browser/chunk-EIFGKQSA.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-FHQTHCX7.mjs +8 -0
  13. package/dist/lib/browser/chunk-FHQTHCX7.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-IGRQWMWW.mjs +80 -0
  15. package/dist/lib/browser/chunk-IGRQWMWW.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/lib/browser/chunk-KWP6PKIU.mjs +145 -0
  18. package/dist/lib/browser/chunk-KWP6PKIU.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-NPUEVX42.mjs +34 -0
  20. package/dist/lib/browser/chunk-NPUEVX42.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-PKQT6C53.mjs +47 -0
  22. package/dist/lib/browser/chunk-PKQT6C53.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-WGWEEBUV.mjs +807 -0
  24. package/dist/lib/browser/chunk-WGWEEBUV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-YAFEA4GV.mjs +1 -0
  26. package/dist/lib/browser/chunk-YZQ6NFG4.mjs +781 -0
  27. package/dist/lib/browser/chunk-YZQ6NFG4.mjs.map +7 -0
  28. package/dist/lib/browser/chunk-ZQO3UZ4R.mjs +77 -0
  29. package/dist/lib/browser/chunk-ZQO3UZ4R.mjs.map +7 -0
  30. package/dist/lib/browser/cli/index.mjs +89 -0
  31. package/dist/lib/browser/cli/index.mjs.map +7 -0
  32. package/dist/lib/browser/common/activation-events.mjs +23 -0
  33. package/dist/lib/browser/common/capabilities.mjs +45 -0
  34. package/dist/lib/browser/core/activation-event.mjs +20 -0
  35. package/dist/lib/browser/core/activation-event.mjs.map +7 -0
  36. package/dist/lib/browser/core/capability.mjs +28 -0
  37. package/dist/lib/browser/core/capability.mjs.map +7 -0
  38. package/dist/lib/browser/core/plugin-manager.mjs +15 -0
  39. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  40. package/dist/lib/browser/core/plugin.mjs +27 -0
  41. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  42. package/dist/lib/browser/index.mjs +87 -156
  43. package/dist/lib/browser/index.mjs.map +4 -4
  44. package/dist/lib/browser/invoker-capability-7QW56NOM.mjs +36 -0
  45. package/dist/lib/browser/invoker-capability-7QW56NOM.mjs.map +7 -0
  46. package/dist/lib/browser/meta.json +1 -1
  47. package/dist/lib/browser/testing/index.mjs +83 -37
  48. package/dist/lib/browser/testing/index.mjs.map +4 -4
  49. package/dist/lib/browser/ui/index.mjs +49 -0
  50. package/dist/lib/browser/ui/index.mjs.map +7 -0
  51. package/dist/lib/node-esm/capability-OSVYGK4X.mjs +38 -0
  52. package/dist/lib/node-esm/capability-OSVYGK4X.mjs.map +7 -0
  53. package/dist/lib/node-esm/capability-SR2EIZFP.mjs +35 -0
  54. package/dist/lib/node-esm/capability-SR2EIZFP.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-64IMLAS2.mjs +78 -0
  56. package/dist/lib/node-esm/chunk-64IMLAS2.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs +48 -0
  58. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-DHSHRYIB.mjs +171 -0
  60. package/dist/lib/node-esm/chunk-DHSHRYIB.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-DZ2XLAGI.mjs +146 -0
  62. package/dist/lib/node-esm/chunk-DZ2XLAGI.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  64. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-J2PHTRHC.mjs +45 -0
  66. package/dist/lib/node-esm/chunk-J2PHTRHC.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-JAZVHID3.mjs +35 -0
  68. package/dist/lib/node-esm/chunk-JAZVHID3.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-OQYHRZYF.mjs +81 -0
  70. package/dist/lib/node-esm/chunk-OQYHRZYF.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-UEWJDI2L.mjs +10 -0
  72. package/dist/lib/node-esm/chunk-UEWJDI2L.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-VV4YHPQQ.mjs +782 -0
  74. package/dist/lib/node-esm/chunk-VV4YHPQQ.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-XHAKT6UD.mjs +808 -0
  76. package/dist/lib/node-esm/chunk-XHAKT6UD.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-Z4TJPSMP.mjs +2 -0
  78. package/dist/lib/node-esm/chunk-Z4TJPSMP.mjs.map +7 -0
  79. package/dist/lib/node-esm/cli/index.mjs +90 -0
  80. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  81. package/dist/lib/node-esm/common/activation-events.mjs +24 -0
  82. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  83. package/dist/lib/node-esm/common/capabilities.mjs +46 -0
  84. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  85. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  86. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  87. package/dist/lib/node-esm/core/capability.mjs +29 -0
  88. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  89. package/dist/lib/node-esm/core/plugin-manager.mjs +16 -0
  90. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  91. package/dist/lib/node-esm/core/plugin.mjs +28 -0
  92. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  93. package/dist/lib/node-esm/index.mjs +87 -156
  94. package/dist/lib/node-esm/index.mjs.map +4 -4
  95. package/dist/lib/node-esm/invoker-capability-CK4AMF2R.mjs +37 -0
  96. package/dist/lib/node-esm/invoker-capability-CK4AMF2R.mjs.map +7 -0
  97. package/dist/lib/node-esm/meta.json +1 -1
  98. package/dist/lib/node-esm/testing/index.mjs +83 -37
  99. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  100. package/dist/lib/node-esm/ui/index.mjs +50 -0
  101. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  102. package/dist/types/src/cli/cli.d.ts +39 -0
  103. package/dist/types/src/cli/cli.d.ts.map +1 -0
  104. package/dist/types/src/cli/index.d.ts +2 -0
  105. package/dist/types/src/cli/index.d.ts.map +1 -0
  106. package/dist/types/src/common/activation-events.d.ts +27 -0
  107. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  108. package/dist/types/src/common/capabilities.d.ts +114 -123
  109. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  110. package/dist/types/src/common/index.d.ts +4 -8
  111. package/dist/types/src/common/index.d.ts.map +1 -1
  112. package/dist/types/src/common/operations.d.ts +33 -0
  113. package/dist/types/src/common/operations.d.ts.map +1 -0
  114. package/dist/types/src/common/translations.d.ts +8 -8
  115. package/dist/types/src/common/translations.d.ts.map +1 -1
  116. package/dist/types/src/context.d.ts +5 -0
  117. package/dist/types/src/context.d.ts.map +1 -0
  118. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +6 -6
  119. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  120. package/dist/types/src/core/capability-manager.d.ts +43 -0
  121. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  122. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  123. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  124. package/dist/types/src/core/capability.d.ts +150 -0
  125. package/dist/types/src/core/capability.d.ts.map +1 -0
  126. package/dist/types/src/core/index.d.ts +5 -4
  127. package/dist/types/src/core/index.d.ts.map +1 -1
  128. package/dist/types/src/core/plugin-manager.d.ts +66 -0
  129. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  130. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  131. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  132. package/dist/types/src/core/plugin.d.ts +97 -32
  133. package/dist/types/src/core/plugin.d.ts.map +1 -1
  134. package/dist/types/src/index.d.ts +3 -4
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  137. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  138. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  139. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  140. package/dist/types/src/plugin-operation/history/errors.d.ts +5 -0
  141. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  142. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  143. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  144. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  145. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  146. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  147. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  148. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  149. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  150. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  151. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  152. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  153. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  154. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  155. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  156. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  157. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  158. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  159. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  160. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  161. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  162. package/dist/types/src/plugin-operation/testing.d.ts +109 -0
  163. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  164. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  165. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  166. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  167. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  168. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  169. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  170. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  171. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  172. package/dist/types/src/testing/index.d.ts +1 -0
  173. package/dist/types/src/testing/index.d.ts.map +1 -1
  174. package/dist/types/src/testing/service.d.ts +8 -0
  175. package/dist/types/src/testing/service.d.ts.map +1 -0
  176. package/dist/types/src/testing/withPluginManager.d.ts +11 -10
  177. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  178. package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
  179. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  180. package/dist/types/src/ui/components/App.d.ts +8 -0
  181. package/dist/types/src/ui/components/App.d.ts.map +1 -0
  182. package/dist/types/src/ui/components/App.stories.d.ts +14 -0
  183. package/dist/types/src/ui/components/App.stories.d.ts.map +1 -0
  184. package/dist/types/src/ui/components/DefaultFallback.d.ts +8 -0
  185. package/dist/types/src/ui/components/DefaultFallback.d.ts.map +1 -0
  186. package/dist/types/src/ui/components/ErrorBoundary.d.ts +30 -0
  187. package/dist/types/src/ui/components/ErrorBoundary.d.ts.map +1 -0
  188. package/dist/types/src/ui/components/PluginManagerContext.stories.d.ts +13 -0
  189. package/dist/types/src/ui/components/PluginManagerContext.stories.d.ts.map +1 -0
  190. package/dist/types/src/ui/components/PluginManagerProvider.d.ts +10 -0
  191. package/dist/types/src/ui/components/PluginManagerProvider.d.ts.map +1 -0
  192. package/dist/types/src/ui/components/index.d.ts +5 -0
  193. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  194. package/dist/types/src/ui/components/surface/SurfaceComponent.d.ts +12 -0
  195. package/dist/types/src/ui/components/surface/SurfaceComponent.d.ts.map +1 -0
  196. package/dist/types/src/ui/components/surface/SurfaceComponent.stories.d.ts +14 -0
  197. package/dist/types/src/ui/components/surface/SurfaceComponent.stories.d.ts.map +1 -0
  198. package/dist/types/src/ui/components/surface/SurfaceInfo.d.ts +11 -0
  199. package/dist/types/src/ui/components/surface/SurfaceInfo.d.ts.map +1 -0
  200. package/dist/types/src/ui/components/surface/context.d.ts +5 -0
  201. package/dist/types/src/ui/components/surface/context.d.ts.map +1 -0
  202. package/dist/types/src/ui/components/surface/index.d.ts +5 -0
  203. package/dist/types/src/ui/components/surface/index.d.ts.map +1 -0
  204. package/dist/types/src/ui/components/surface/types.d.ts +94 -0
  205. package/dist/types/src/ui/components/surface/types.d.ts.map +1 -0
  206. package/dist/types/src/ui/hooks/index.d.ts +7 -0
  207. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  208. package/dist/types/src/{App.d.ts → ui/hooks/useApp.d.ts} +16 -9
  209. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  210. package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
  211. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  212. package/dist/types/src/ui/hooks/useLoading.d.ts +18 -0
  213. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  214. package/dist/types/src/ui/hooks/useOperationResolver.d.ts +19 -0
  215. package/dist/types/src/ui/hooks/useOperationResolver.d.ts.map +1 -0
  216. package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
  217. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  218. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  219. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  220. package/dist/types/src/ui/index.d.ts +4 -0
  221. package/dist/types/src/ui/index.d.ts.map +1 -0
  222. package/dist/types/tsconfig.tsbuildinfo +1 -1
  223. package/moon.yml +14 -3
  224. package/package.json +112 -44
  225. package/src/cli/cli.ts +107 -0
  226. package/src/{playground/layout → cli}/index.ts +1 -1
  227. package/src/common/activation-events.ts +44 -0
  228. package/src/common/capabilities.ts +174 -114
  229. package/src/common/index.ts +4 -8
  230. package/src/common/operations.ts +38 -0
  231. package/src/common/translations.ts +18 -10
  232. package/src/context.ts +9 -0
  233. package/src/core/{events.ts → activation-event.ts} +5 -5
  234. package/src/core/capability-manager.test.ts +151 -0
  235. package/src/core/capability-manager.ts +171 -0
  236. package/src/core/capability.ts +236 -0
  237. package/src/core/index.ts +5 -4
  238. package/src/core/plugin-manager.test.ts +845 -0
  239. package/src/core/plugin-manager.ts +696 -0
  240. package/src/core/plugin.ts +229 -36
  241. package/src/helpers.test.ts +1 -1
  242. package/src/index.ts +3 -4
  243. package/src/plugin-operation/OperationPlugin.ts +25 -0
  244. package/src/plugin-operation/history/capability.ts +37 -0
  245. package/src/plugin-operation/history/errors.ts +11 -0
  246. package/src/plugin-operation/history/history-tracker.test.ts +380 -0
  247. package/src/plugin-operation/history/history-tracker.ts +129 -0
  248. package/src/plugin-operation/history/index.ts +9 -0
  249. package/src/plugin-operation/history/types.ts +17 -0
  250. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  251. package/src/plugin-operation/history/undo-registry.test.ts +73 -0
  252. package/src/plugin-operation/history/undo-registry.ts +54 -0
  253. package/src/plugin-operation/index.ts +6 -0
  254. package/src/plugin-operation/invoker-capability.ts +40 -0
  255. package/src/plugin-operation/meta.ts +11 -0
  256. package/src/plugin-operation/testing.ts +174 -0
  257. package/src/plugin-runtime/RuntimePlugin.ts +20 -0
  258. package/src/plugin-runtime/capability.ts +53 -0
  259. package/src/{playground/logger → plugin-runtime}/index.ts +1 -1
  260. package/src/plugin-runtime/meta.ts +11 -0
  261. package/src/testing/index.ts +1 -0
  262. package/src/testing/service.ts +52 -0
  263. package/src/testing/withPluginManager.stories.tsx +15 -11
  264. package/src/testing/withPluginManager.tsx +43 -44
  265. package/src/ui/components/App.stories.tsx +62 -0
  266. package/src/ui/components/App.tsx +57 -0
  267. package/src/ui/components/DefaultFallback.tsx +26 -0
  268. package/src/ui/components/ErrorBoundary.tsx +56 -0
  269. package/src/ui/components/PluginManagerContext.stories.tsx +183 -0
  270. package/src/{react → ui/components}/PluginManagerProvider.ts +3 -3
  271. package/src/ui/components/index.ts +8 -0
  272. package/src/ui/components/surface/SurfaceComponent.stories.tsx +142 -0
  273. package/src/ui/components/surface/SurfaceComponent.tsx +262 -0
  274. package/src/ui/components/surface/SurfaceInfo.tsx +107 -0
  275. package/src/ui/components/surface/context.ts +12 -0
  276. package/src/ui/components/surface/index.ts +8 -0
  277. package/src/ui/components/surface/types.ts +119 -0
  278. package/src/ui/hooks/index.ts +10 -0
  279. package/src/ui/hooks/useApp.tsx +215 -0
  280. package/src/ui/hooks/useCapabilities.ts +67 -0
  281. package/src/ui/hooks/useLoading.tsx +68 -0
  282. package/src/ui/hooks/useOperationResolver.ts +40 -0
  283. package/src/ui/hooks/useSettingsState.ts +26 -0
  284. package/src/ui/hooks/useSurface.ts +13 -0
  285. package/src/ui/index.ts +7 -0
  286. package/tsconfig.json +12 -31
  287. package/vitest.config.ts +8 -6
  288. package/.swc/plugins/v7_linux_x86_64_13.0.0/f45bdff002284d9e8f9ef3f0be909de12da36c049cbcf261ac78fc00abb09a2d +0 -0
  289. package/.swc/plugins/v7_linux_x86_64_13.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429 +0 -0
  290. package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs +0 -137
  291. package/dist/lib/browser/app-graph-builder-LYF7EKNN.mjs.map +0 -7
  292. package/dist/lib/browser/chunk-FMN65HSW.mjs +0 -1519
  293. package/dist/lib/browser/chunk-FMN65HSW.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-FO2PH7M3.mjs +0 -415
  295. package/dist/lib/browser/chunk-FO2PH7M3.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-ORWHM7CO.mjs +0 -32
  297. package/dist/lib/browser/chunk-ORWHM7CO.mjs.map +0 -7
  298. package/dist/lib/browser/intent-dispatcher-LSYQZSEB.mjs +0 -11
  299. package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs +0 -39
  300. package/dist/lib/browser/intent-resolver-ZTNOSO3A.mjs.map +0 -7
  301. package/dist/lib/browser/store-KML2R4IE.mjs +0 -30
  302. package/dist/lib/browser/store-KML2R4IE.mjs.map +0 -7
  303. package/dist/lib/browser/worker.mjs +0 -79
  304. package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs +0 -138
  305. package/dist/lib/node-esm/app-graph-builder-SAOWGJDK.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-73HGSHKE.mjs +0 -416
  307. package/dist/lib/node-esm/chunk-73HGSHKE.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-UMZQERLE.mjs +0 -34
  309. package/dist/lib/node-esm/chunk-UMZQERLE.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs +0 -1521
  311. package/dist/lib/node-esm/chunk-ZEZ4FVEU.mjs.map +0 -7
  312. package/dist/lib/node-esm/intent-dispatcher-6CYNGPSW.mjs +0 -12
  313. package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs +0 -40
  314. package/dist/lib/node-esm/intent-resolver-W7Z7WFFM.mjs.map +0 -7
  315. package/dist/lib/node-esm/store-QEXGXLWZ.mjs +0 -31
  316. package/dist/lib/node-esm/store-QEXGXLWZ.mjs.map +0 -7
  317. package/dist/lib/node-esm/worker.mjs +0 -80
  318. package/dist/types/src/App.d.ts.map +0 -1
  319. package/dist/types/src/common/collaboration.d.ts +0 -19
  320. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  321. package/dist/types/src/common/events.d.ts +0 -52
  322. package/dist/types/src/common/events.d.ts.map +0 -1
  323. package/dist/types/src/common/file.d.ts +0 -14
  324. package/dist/types/src/common/file.d.ts.map +0 -1
  325. package/dist/types/src/common/graph.d.ts +0 -21
  326. package/dist/types/src/common/graph.d.ts.map +0 -1
  327. package/dist/types/src/common/layout.d.ts +0 -281
  328. package/dist/types/src/common/layout.d.ts.map +0 -1
  329. package/dist/types/src/common/surface.d.ts +0 -65
  330. package/dist/types/src/common/surface.d.ts.map +0 -1
  331. package/dist/types/src/core/capabilities.d.ts +0 -114
  332. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  333. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  334. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  335. package/dist/types/src/core/events.d.ts.map +0 -1
  336. package/dist/types/src/core/manager.d.ts +0 -122
  337. package/dist/types/src/core/manager.d.ts.map +0 -1
  338. package/dist/types/src/core/manager.test.d.ts +0 -2
  339. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  340. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  341. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  342. package/dist/types/src/playground/debug/index.d.ts +0 -2
  343. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  344. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  345. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  346. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  347. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  348. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  349. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  350. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  351. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  352. package/dist/types/src/playground/generator/index.d.ts +0 -3
  353. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  354. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  355. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  356. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  357. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  358. package/dist/types/src/playground/layout/index.d.ts +0 -2
  359. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  360. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  361. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  362. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  363. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  364. package/dist/types/src/playground/logger/index.d.ts +0 -2
  365. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  366. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  367. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  368. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  369. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  370. package/dist/types/src/playground/playground.stories.d.ts +0 -10
  371. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  372. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  373. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  374. package/dist/types/src/plugin-intent/actions.d.ts +0 -38
  375. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  376. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  377. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  378. package/dist/types/src/plugin-intent/index.d.ts +0 -5
  379. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  380. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  381. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  382. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  383. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  384. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  385. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  386. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  387. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  388. package/dist/types/src/plugin-settings/actions.d.ts +0 -27
  389. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  390. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  391. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  392. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  393. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  394. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  395. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  396. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  397. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  398. package/dist/types/src/plugin-settings/translations.d.ts +0 -10
  399. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  400. package/dist/types/src/react/ErrorBoundary.d.ts +0 -31
  401. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  402. package/dist/types/src/react/IntentContext.d.ts +0 -8
  403. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  404. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  405. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  406. package/dist/types/src/react/Surface.d.ts +0 -12
  407. package/dist/types/src/react/Surface.d.ts.map +0 -1
  408. package/dist/types/src/react/Surface.stories.d.ts +0 -16
  409. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  410. package/dist/types/src/react/common.d.ts +0 -13
  411. package/dist/types/src/react/common.d.ts.map +0 -1
  412. package/dist/types/src/react/index.d.ts +0 -7
  413. package/dist/types/src/react/index.d.ts.map +0 -1
  414. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  415. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  416. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  417. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  418. package/dist/types/src/worker.d.ts +0 -4
  419. package/dist/types/src/worker.d.ts.map +0 -1
  420. package/src/App.tsx +0 -276
  421. package/src/common/collaboration.ts +0 -21
  422. package/src/common/events.ts +0 -77
  423. package/src/common/file.ts +0 -22
  424. package/src/common/graph.ts +0 -30
  425. package/src/common/layout.ts +0 -278
  426. package/src/common/surface.ts +0 -86
  427. package/src/core/capabilities.test.ts +0 -136
  428. package/src/core/capabilities.ts +0 -254
  429. package/src/core/manager.test.ts +0 -515
  430. package/src/core/manager.ts +0 -519
  431. package/src/playground/debug/Debug.tsx +0 -39
  432. package/src/playground/debug/index.ts +0 -5
  433. package/src/playground/debug/plugin.ts +0 -17
  434. package/src/playground/generator/Main.tsx +0 -71
  435. package/src/playground/generator/Toolbar.tsx +0 -46
  436. package/src/playground/generator/generator.ts +0 -48
  437. package/src/playground/generator/index.ts +0 -6
  438. package/src/playground/generator/plugin.ts +0 -23
  439. package/src/playground/layout/Layout.tsx +0 -33
  440. package/src/playground/layout/plugin.ts +0 -17
  441. package/src/playground/logger/Toolbar.tsx +0 -29
  442. package/src/playground/logger/plugin.ts +0 -36
  443. package/src/playground/logger/schema.ts +0 -12
  444. package/src/playground/playground.stories.tsx +0 -42
  445. package/src/plugin-intent/IntentPlugin.ts +0 -20
  446. package/src/plugin-intent/actions.ts +0 -33
  447. package/src/plugin-intent/errors.ts +0 -39
  448. package/src/plugin-intent/index.ts +0 -8
  449. package/src/plugin-intent/intent-dispatcher.test.ts +0 -279
  450. package/src/plugin-intent/intent-dispatcher.ts +0 -333
  451. package/src/plugin-intent/intent.ts +0 -154
  452. package/src/plugin-settings/SettingsPlugin.ts +0 -35
  453. package/src/plugin-settings/actions.ts +0 -29
  454. package/src/plugin-settings/app-graph-builder.ts +0 -157
  455. package/src/plugin-settings/index.ts +0 -6
  456. package/src/plugin-settings/intent-resolver.ts +0 -34
  457. package/src/plugin-settings/store.ts +0 -33
  458. package/src/plugin-settings/translations.ts +0 -19
  459. package/src/react/ErrorBoundary.tsx +0 -45
  460. package/src/react/IntentContext.tsx +0 -34
  461. package/src/react/Surface.stories.tsx +0 -96
  462. package/src/react/Surface.tsx +0 -77
  463. package/src/react/common.ts +0 -12
  464. package/src/react/index.ts +0 -10
  465. package/src/react/useCapabilities.ts +0 -30
  466. package/src/react/useIntentResolver.ts +0 -22
  467. package/src/worker.ts +0 -11
  468. /package/dist/lib/browser/{intent-dispatcher-LSYQZSEB.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  469. /package/dist/lib/browser/{worker.mjs.map → chunk-YAFEA4GV.mjs.map} +0 -0
  470. /package/dist/lib/{node-esm/intent-dispatcher-6CYNGPSW.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  471. /package/dist/lib/{node-esm/worker.mjs.map → browser/common/capabilities.mjs.map} +0 -0
@@ -0,0 +1,215 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { RegistryContext } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Fiber from 'effect/Fiber';
8
+ import * as PubSub from 'effect/PubSub';
9
+ import * as Queue from 'effect/Queue';
10
+ import React, { type FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
+
12
+ import { runAndForwardErrors } from '@dxos/effect';
13
+ import { invariant } from '@dxos/invariant';
14
+ import { log } from '@dxos/log';
15
+ import { useAsyncEffect, useDefaultValue } from '@dxos/react-hooks';
16
+ import { ContextProtocolProvider } from '@dxos/web-context-react';
17
+
18
+ import { ActivationEvents, Capabilities } from '../../common';
19
+ import { PluginManagerContext } from '../../context';
20
+ import { type ActivationEvent, type Plugin, PluginManager } from '../../core';
21
+ import { App } from '../components/App';
22
+ import { DefaultFallback } from '../components/DefaultFallback';
23
+ import { ErrorBoundary } from '../components/ErrorBoundary';
24
+ import { PluginManagerProvider } from '../components/PluginManagerProvider';
25
+
26
+ const ENABLED_KEY = 'dxos.org/app-framework/enabled';
27
+
28
+ export type UseAppOptions = {
29
+ pluginManager?: PluginManager.PluginManager;
30
+ pluginLoader?: PluginManager.ManagerOptions['pluginLoader'];
31
+ plugins?: Plugin.Plugin[];
32
+ core?: string[];
33
+ defaults?: string[];
34
+ /**
35
+ * Additional activation events to fire before startup.
36
+ * These are fired alongside SetupReactSurface before the Startup event.
37
+ */
38
+ setupEvents?: ActivationEvent.ActivationEvent[];
39
+ placeholder?: FC<{ stage: number }>;
40
+ fallback?: ErrorBoundary['props']['fallback'];
41
+ cacheEnabled?: boolean;
42
+ safeMode?: boolean;
43
+ debounce?: number;
44
+ timeout?: number;
45
+ };
46
+
47
+ /**
48
+ * Expected usage is for this to be the entrypoint of the application.
49
+ * Initializes plugins and renders the root components.
50
+ *
51
+ * @example
52
+ * const plugins = [LayoutPlugin(), MyPlugin()];
53
+ * const core = [LayoutPluginId];
54
+ * const default = [MyPluginId];
55
+ * const fallback = <div>Initializing Plugins...</div>;
56
+ * const App = useApp({ plugins, core, default, fallback });
57
+ * createRoot(document.getElementById('root')!).render(
58
+ * <StrictMode>
59
+ * <App />
60
+ * </StrictMode>,
61
+ * );
62
+ *
63
+ * @param params.pluginLoader A function which loads new plugins.
64
+ * @param params.plugins All plugins available to the application.
65
+ * @param params.core Core plugins which will always be enabled.
66
+ * @param params.defaults Default plugins are enabled by default but can be disabled by the user.
67
+ * @param params.placeholder Placeholder component to render during startup.
68
+ * @param params.fallback Fallback component to render if an error occurs during startup.
69
+ * @param params.cacheEnabled Whether to cache enabled plugins in localStorage.
70
+ * @param params.safeMode Whether to enable safe mode, which disables optional plugins.
71
+ */
72
+ export const useApp = ({
73
+ pluginManager,
74
+ pluginLoader: pluginLoaderProp,
75
+ plugins: pluginsProp,
76
+ core: coreProp,
77
+ defaults: defaultsProp,
78
+ setupEvents: setupEventsProp,
79
+ placeholder,
80
+ fallback = DefaultFallback,
81
+ cacheEnabled = false,
82
+ safeMode = false,
83
+ debounce = 0,
84
+ timeout = 30_000,
85
+ }: UseAppOptions) => {
86
+ const plugins = useDefaultValue(pluginsProp, () => []);
87
+ const core = useDefaultValue(coreProp, () => plugins.map(({ meta }) => meta.id));
88
+ const defaults = useDefaultValue(defaultsProp, () => []);
89
+ const setupEvents = useDefaultValue(setupEventsProp, () => []);
90
+
91
+ // TODO(wittjosiah): Provide a custom plugin loader which supports loading via url.
92
+ const pluginLoader = useMemo(
93
+ () =>
94
+ pluginLoaderProp ??
95
+ ((id: string) =>
96
+ Effect.sync(() => {
97
+ const plugin = plugins.find((plugin) => plugin.meta.id === id);
98
+ invariant(plugin, `Plugin not found: ${id}`);
99
+ return plugin;
100
+ })),
101
+ [pluginLoaderProp, plugins],
102
+ );
103
+
104
+ const readyRef = useRef(false);
105
+ const [ready, setReady] = useState(false);
106
+ const errorRef = useRef<unknown>(null);
107
+ const [error, setError] = useState<unknown>(null);
108
+ // TODO(wittjosiah): Migrate to Atom.kvs for isomorphic storage.
109
+ const cached: string[] = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? '[]'), []);
110
+ const enabled = useMemo(
111
+ () => (safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults),
112
+ [safeMode, cacheEnabled, cached, defaults],
113
+ );
114
+ const manager = useMemo(
115
+ () => pluginManager ?? PluginManager.make({ pluginLoader, plugins, core, enabled }),
116
+ [pluginManager, pluginLoader, plugins, core, enabled],
117
+ );
118
+
119
+ useEffect(() => {
120
+ if (!cacheEnabled) {
121
+ return;
122
+ }
123
+ return manager.registry.subscribe(manager.enabled, (value) => {
124
+ localStorage.setItem(ENABLED_KEY, JSON.stringify(value));
125
+ });
126
+ }, [cacheEnabled, manager]);
127
+
128
+ useEffect(() => {
129
+ setupDevtools(manager);
130
+ }, [manager]);
131
+
132
+ useAsyncEffect(async () => {
133
+ manager.capabilities.contribute({
134
+ interface: Capabilities.PluginManager,
135
+ implementation: manager,
136
+ module: 'dxos.org/app-framework/plugin-manager',
137
+ });
138
+
139
+ manager.capabilities.contribute({
140
+ interface: Capabilities.AtomRegistry,
141
+ implementation: manager.registry,
142
+ module: 'dxos.org/app-framework/atom-registry',
143
+ });
144
+
145
+ const fiber = Effect.gen(function* () {
146
+ const queue = yield* PubSub.subscribe(manager.activation);
147
+ const listener = yield* Effect.forkDaemon(
148
+ Queue.take(queue).pipe(
149
+ Effect.tap(({ event, state, error: error$ }) =>
150
+ Effect.sync(() => {
151
+ if (event === ActivationEvents.Startup.id && state === 'activated') {
152
+ clearTimeout(timeoutId);
153
+ setReady(true);
154
+ readyRef.current = true;
155
+ }
156
+ if (error$ && !readyRef.current) {
157
+ setError(error$);
158
+ errorRef.current = error$;
159
+ }
160
+ }),
161
+ ),
162
+ Effect.forever,
163
+ ),
164
+ );
165
+
166
+ yield* Effect.all([
167
+ ...setupEvents.map((event) => manager.activate(event)),
168
+ manager.activate(ActivationEvents.SetupReactSurface),
169
+ manager.activate(ActivationEvents.Startup),
170
+ ]);
171
+
172
+ return yield* Fiber.join(listener);
173
+ }).pipe(Effect.scoped, Effect.runFork);
174
+
175
+ // Set up a timeout for startup.
176
+ const timeoutId = setTimeout(() => {
177
+ if (!readyRef.current && !errorRef.current) {
178
+ log.warn('startup timeout diagnostic', {
179
+ eventsFired: manager.getEventsFired(),
180
+ activeModules: manager.getActive(),
181
+ pendingReset: manager.getPendingReset(),
182
+ });
183
+ void runAndForwardErrors(Fiber.interrupt(fiber));
184
+ setError(new Error(`Startup timed out after ${timeout}ms`));
185
+ }
186
+ }, timeout);
187
+
188
+ return () => {
189
+ clearTimeout(timeoutId);
190
+ void runAndForwardErrors(Fiber.interrupt(fiber));
191
+ manager.capabilities.remove(Capabilities.PluginManager, manager);
192
+ manager.capabilities.remove(Capabilities.AtomRegistry, manager.registry);
193
+ };
194
+ }, [manager]);
195
+
196
+ return useCallback(
197
+ () => (
198
+ <ErrorBoundary fallback={fallback}>
199
+ <PluginManagerProvider value={manager}>
200
+ <ContextProtocolProvider value={manager} context={PluginManagerContext}>
201
+ <RegistryContext.Provider value={manager.registry}>
202
+ <App placeholder={placeholder} ready={ready} error={error} debounce={debounce} />
203
+ </RegistryContext.Provider>
204
+ </ContextProtocolProvider>
205
+ </PluginManagerProvider>
206
+ </ErrorBoundary>
207
+ ),
208
+ [fallback, manager, placeholder, ready, error],
209
+ );
210
+ };
211
+
212
+ const setupDevtools = (manager: PluginManager.PluginManager) => {
213
+ (globalThis as any).composer ??= {};
214
+ (globalThis as any).composer.manager = manager;
215
+ };
@@ -0,0 +1,67 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Atom, useAtomValue } from '@effect-atom/atom-react';
6
+ import { useCallback } from 'react';
7
+
8
+ import { invariant } from '@dxos/invariant';
9
+
10
+ import { Capabilities } from '../../common';
11
+ import { type Capability } from '../../core';
12
+ import { usePluginManager } from '../components/PluginManagerProvider';
13
+
14
+ /**
15
+ * Hook to request capabilities from the plugin context.
16
+ * @returns An array of capabilities.
17
+ */
18
+ export const useCapabilities = <T>(interfaceDef: Capability.InterfaceDef<T>) => {
19
+ const manager = usePluginManager();
20
+ return useAtomValue(manager.capabilities.atom(interfaceDef));
21
+ };
22
+
23
+ /**
24
+ * Hook to request a capability from the plugin context.
25
+ * @returns The capability.
26
+ * @throws If no capability is found.
27
+ */
28
+ export const useCapability = <T>(interfaceDef: Capability.InterfaceDef<T>) => {
29
+ const capabilities = useCapabilities(interfaceDef);
30
+ invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`);
31
+ return capabilities[0];
32
+ };
33
+
34
+ /**
35
+ * Hook to get the current value of an atom capability.
36
+ * Automatically subscribes to changes.
37
+ * @example const settings = useAtomCapability(ThreadCapabilities.Settings);
38
+ */
39
+ export const useAtomCapability = <T>(atomCapability: Capability.InterfaceDef<Atom.Atom<T>>): T => {
40
+ const atom = useCapability(atomCapability);
41
+ return useAtomValue(atom);
42
+ };
43
+
44
+ /**
45
+ * Hook to get value and updater for an atom capability.
46
+ * Returns [currentValue, updateFn] similar to useState.
47
+ * @example const [settings, updateSettings] = useAtomCapabilityState(ThreadCapabilities.Settings);
48
+ */
49
+ export const useAtomCapabilityState = <T>(
50
+ atomCapability: Capability.InterfaceDef<Atom.Writable<T>>,
51
+ ): [T, (fn: (current: T) => T) => void] => {
52
+ const registry = useCapability(Capabilities.AtomRegistry);
53
+ const atom = useCapability(atomCapability);
54
+ const value = useAtomValue(atom);
55
+ const update = useCallback(
56
+ (fn: (current: T) => T) => {
57
+ registry.set(atom, fn(registry.get(atom)));
58
+ },
59
+ [registry, atom],
60
+ );
61
+ return [value, update];
62
+ };
63
+
64
+ /**
65
+ * Hook to get the operation invoker capability.
66
+ */
67
+ export const useOperationInvoker = (): Capabilities.OperationInvoker => useCapability(Capabilities.OperationInvoker);
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useEffect, useState } from 'react';
6
+
7
+ export enum LoadingState {
8
+ Loading = 0,
9
+ FadeIn = 1,
10
+ FadeOut = 2,
11
+ Done = 3,
12
+ }
13
+
14
+ /**
15
+ * To avoid "flashing" the placeholder, we wait a period of time before starting the loading animation.
16
+ * If loading completes during this time the placehoder is not shown, otherwise is it displayed for a minimum period of time.
17
+ *
18
+ * States:
19
+ * 0: Loading - Wait for a period of time before starting the loading animation.
20
+ * 1: Fade-in - Display a loading animation.
21
+ * 2: Fade-out - Fade out the loading animation.
22
+ * 3: Done - Remove the placeholder.
23
+ */
24
+ export const useLoading = (ready: boolean, debounce = 0) => {
25
+ const [stage, setStage] = useState<LoadingState>(LoadingState.Loading);
26
+ useEffect(() => {
27
+ if (!debounce) {
28
+ return;
29
+ }
30
+
31
+ const i = setInterval(() => {
32
+ setStage((stage) => {
33
+ switch (stage) {
34
+ case LoadingState.Loading: {
35
+ if (!ready) {
36
+ return LoadingState.FadeIn;
37
+ } else {
38
+ clearInterval(i);
39
+ return LoadingState.Done;
40
+ }
41
+ }
42
+
43
+ case LoadingState.FadeIn: {
44
+ if (ready) {
45
+ return LoadingState.FadeOut;
46
+ }
47
+ break;
48
+ }
49
+
50
+ case LoadingState.FadeOut: {
51
+ clearInterval(i);
52
+ return LoadingState.Done;
53
+ }
54
+ }
55
+
56
+ return stage;
57
+ });
58
+ }, debounce);
59
+
60
+ return () => clearInterval(i);
61
+ }, [debounce]);
62
+
63
+ if (!debounce) {
64
+ return ready ? LoadingState.Done : LoadingState.Loading;
65
+ }
66
+
67
+ return stage;
68
+ };
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useEffect, useMemo } from 'react';
6
+
7
+ import { Capabilities } from '../../common';
8
+ import { usePluginManager } from '../components/PluginManagerProvider';
9
+
10
+ /**
11
+ * Hook to dynamically register an operation resolver (handler) within a React component.
12
+ * The resolver is added when the component mounts and removed when it unmounts.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const scrollHandler = useMemo(() => OperationResolver.make({
17
+ * operation: LayoutOperation.ScrollIntoView,
18
+ * handler: (input) => Effect.sync(() => {
19
+ * // Handle scroll
20
+ * }),
21
+ * }), [deps]);
22
+ *
23
+ * useOperationResolver(meta.id, scrollHandler);
24
+ * ```
25
+ */
26
+ export const useOperationResolver = (module: string, resolver: Capabilities.OperationResolver) => {
27
+ const manager = usePluginManager();
28
+ // Wrap single resolver in array as the capability expects an array.
29
+ const resolverArray = useMemo(() => [resolver], [resolver]);
30
+
31
+ useEffect(() => {
32
+ manager.capabilities.contribute({
33
+ module,
34
+ interface: Capabilities.OperationResolver,
35
+ implementation: resolverArray,
36
+ });
37
+
38
+ return () => manager.capabilities.remove(Capabilities.OperationResolver, resolverArray);
39
+ }, [module, resolverArray]);
40
+ };
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Atom, RegistryContext, useAtomValue } from '@effect-atom/atom-react';
6
+ import { useCallback, useContext } from 'react';
7
+
8
+ /**
9
+ * Hook to read and update a settings atom.
10
+ * Returns the current value and an update function.
11
+ */
12
+ export const useSettingsState = <T>(
13
+ atom: Atom.Writable<T>,
14
+ ): { settings: T; updateSettings: (fn: (current: T) => T) => void } => {
15
+ const registry = useContext(RegistryContext);
16
+ const settings = useAtomValue(atom);
17
+
18
+ const updateSettings = useCallback(
19
+ (fn: (current: T) => T) => {
20
+ registry.set(atom, fn(registry.get(atom)));
21
+ },
22
+ [registry, atom],
23
+ );
24
+
25
+ return { settings, updateSettings };
26
+ };
@@ -0,0 +1,13 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useContext } from 'react';
6
+
7
+ import { raise } from '@dxos/debug';
8
+
9
+ import { SurfaceContext } from '../components/surface/context';
10
+
11
+ export const useSurface = (): SurfaceContext => {
12
+ return useContext(SurfaceContext) ?? raise(new Error('Missing SurfaceContext'));
13
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export * from './components';
6
+ export * from './hooks';
7
+ export * as Surface from './components/surface';
package/tsconfig.json CHANGED
@@ -15,13 +15,10 @@
15
15
  "path": "../../common/debug"
16
16
  },
17
17
  {
18
- "path": "../../common/invariant"
19
- },
20
- {
21
- "path": "../../common/keys"
18
+ "path": "../../common/effect"
22
19
  },
23
20
  {
24
- "path": "../../common/local-storage"
21
+ "path": "../../common/invariant"
25
22
  },
26
23
  {
27
24
  "path": "../../common/log"
@@ -33,50 +30,34 @@
33
30
  "path": "../../common/storybook-utils"
34
31
  },
35
32
  {
36
- "path": "../../common/util"
33
+ "path": "../../common/test-utils"
37
34
  },
38
35
  {
39
- "path": "../../core/ai"
36
+ "path": "../../common/util"
40
37
  },
41
38
  {
42
- "path": "../../core/blueprints"
39
+ "path": "../../common/web-context"
43
40
  },
44
41
  {
45
- "path": "../../core/echo/echo-schema"
42
+ "path": "../../common/web-context-react"
46
43
  },
47
44
  {
48
- "path": "../../core/echo/echo-signals"
45
+ "path": "../../core/echo/echo"
49
46
  },
50
47
  {
51
- "path": "../../core/echo/live-object"
48
+ "path": "../../core/echo/echo-db"
52
49
  },
53
50
  {
54
- "path": "../../core/functions"
51
+ "path": "../../core/operation"
55
52
  },
56
53
  {
57
- "path": "../../ui/primitives/react-hooks"
54
+ "path": "../../ui/react-primitives/react-hooks"
58
55
  },
59
56
  {
60
57
  "path": "../../ui/react-ui"
61
58
  },
62
59
  {
63
- "path": "../../ui/react-ui-syntax-highlighter"
64
- },
65
- {
66
- "path": "../app-graph"
67
- },
68
- {
69
- "path": "../client-protocol"
70
- },
71
- {
72
- "path": "../schema"
60
+ "path": "../../ui/ui-theme"
73
61
  }
74
- ],
75
- "ts-node": {
76
- "compilerOptions": {
77
- "module": "CommonJS"
78
- },
79
- "files": true,
80
- "transpileOnly": true
81
- }
62
+ ]
82
63
  }
package/vitest.config.ts CHANGED
@@ -2,11 +2,13 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { defineConfig, mergeConfig } from 'vitest/config';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
6
7
 
7
- import { baseConfig } from '../../../vitest.base.config';
8
+ import { createConfig } from '../../../vitest.base.config';
8
9
 
9
- export default mergeConfig(
10
- baseConfig({ cwd: __dirname }),
11
- defineConfig({}),
12
- );
10
+ export default createConfig({
11
+ dirname: typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url)),
12
+ node: true,
13
+ storybook: true,
14
+ });
@@ -1,137 +0,0 @@
1
- import {
2
- SETTINGS_ID,
3
- SETTINGS_KEY,
4
- SETTINGS_PLUGIN,
5
- SettingsAction
6
- } from "./chunk-ORWHM7CO.mjs";
7
- import {
8
- Capabilities,
9
- contributes,
10
- createIntent
11
- } from "./chunk-FMN65HSW.mjs";
12
-
13
- // src/plugin-settings/app-graph-builder.ts
14
- import { Rx } from "@effect-rx/rx-react";
15
- import { Option, pipe } from "effect";
16
- import { createExtension, ROOT_ID } from "@dxos/app-graph";
17
- import { isNonNullable } from "@dxos/util";
18
- var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
19
- createExtension({
20
- id: `${SETTINGS_PLUGIN}/action`,
21
- actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => [
22
- {
23
- id: SETTINGS_PLUGIN,
24
- data: async () => {
25
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
26
- await dispatch(createIntent(SettingsAction.Open));
27
- },
28
- properties: {
29
- label: [
30
- "open settings label",
31
- {
32
- ns: SETTINGS_PLUGIN
33
- }
34
- ],
35
- icon: "ph--gear--regular",
36
- disposition: "menu",
37
- keyBinding: {
38
- macos: "meta+,",
39
- windows: "alt+,"
40
- }
41
- }
42
- }
43
- ]), Option.getOrElse(() => [])))
44
- }),
45
- createExtension({
46
- id: `${SETTINGS_PLUGIN}/core`,
47
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => [
48
- {
49
- id: SETTINGS_ID,
50
- type: SETTINGS_PLUGIN,
51
- properties: {
52
- label: [
53
- "app settings label",
54
- {
55
- ns: SETTINGS_PLUGIN
56
- }
57
- ],
58
- icon: "ph--gear--regular",
59
- disposition: "pin-end",
60
- position: "hoist",
61
- testId: "treeView.appSettings"
62
- }
63
- }
64
- ]), Option.getOrElse(() => [])))
65
- }),
66
- createExtension({
67
- id: `${SETTINGS_PLUGIN}/core-plugins`,
68
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id !== SETTINGS_ID ? Option.none() : Option.some(node2)), Option.map(() => {
69
- const manager = get(context.capability(Capabilities.PluginManager));
70
- const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));
71
- return [
72
- ...manager.plugins.filter((plugin) => manager.core.includes(plugin.meta.id)).map((plugin) => {
73
- const settings = settingsStore?.getStore(plugin.meta.id);
74
- if (!settings) {
75
- return null;
76
- }
77
- return [
78
- plugin.meta,
79
- settings
80
- ];
81
- }).filter(isNonNullable).map(([meta, settings]) => ({
82
- id: `${SETTINGS_KEY}:${meta.id.replaceAll("/", ":")}`,
83
- type: "category",
84
- data: settings,
85
- properties: {
86
- label: meta.name ?? meta.id,
87
- icon: meta.icon ?? "ph--circle--regular"
88
- }
89
- })),
90
- {
91
- id: `${SETTINGS_KEY}:custom-plugins`,
92
- type: "category",
93
- properties: {
94
- label: [
95
- "custom plugins label",
96
- {
97
- ns: SETTINGS_PLUGIN
98
- }
99
- ],
100
- icon: "ph--squares-four--regular",
101
- role: "branch",
102
- disposition: "collection"
103
- }
104
- }
105
- ];
106
- }), Option.getOrElse(() => [])))
107
- }),
108
- createExtension({
109
- id: `${SETTINGS_PLUGIN}/custom-plugins`,
110
- connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id !== `${SETTINGS_KEY}:custom-plugins` ? Option.none() : Option.some(node2)), Option.map(() => {
111
- const manager = get(context.capability(Capabilities.PluginManager));
112
- const [settingsStore] = get(context.capabilities(Capabilities.SettingsStore));
113
- return manager.plugins.filter((plugin) => !manager.core.includes(plugin.meta.id)).map((plugin) => {
114
- const settings = settingsStore?.getStore(plugin.meta.id);
115
- if (!settings) {
116
- return null;
117
- }
118
- return [
119
- plugin.meta,
120
- settings
121
- ];
122
- }).filter(isNonNullable).map(([meta, settings]) => ({
123
- id: `${SETTINGS_KEY}:${meta.id.replaceAll("/", ":")}`,
124
- type: "category",
125
- data: settings,
126
- properties: {
127
- label: meta.name ?? meta.id,
128
- icon: meta.icon ?? "ph--circle--regular"
129
- }
130
- }));
131
- }), Option.getOrElse(() => [])))
132
- })
133
- ]);
134
- export {
135
- app_graph_builder_default as default
136
- };
137
- //# sourceMappingURL=app-graph-builder-LYF7EKNN.mjs.map