@dxos/app-framework 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

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 (368) hide show
  1. package/.storybook/main.mts +1 -3
  2. package/dist/lib/browser/capability-5OFLR7J4.mjs +34 -0
  3. package/dist/lib/browser/capability-5OFLR7J4.mjs.map +7 -0
  4. package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-ZHQDZRP5.mjs} +15 -11
  5. package/dist/lib/browser/capability-ZHQDZRP5.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-272IPLHQ.mjs} +1 -1
  7. package/dist/lib/browser/{chunk-PKQT6C53.mjs.map → chunk-272IPLHQ.mjs.map} +1 -1
  8. package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-3VXJONTI.mjs} +304 -178
  9. package/dist/lib/browser/chunk-3VXJONTI.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-XYNO72GQ.mjs → chunk-7AL6SKIV.mjs} +459 -477
  11. package/dist/lib/browser/chunk-7AL6SKIV.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-GH3M2LIW.mjs} +10 -7
  13. package/dist/lib/browser/chunk-GH3M2LIW.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-JGWCBVKJ.mjs} +2 -2
  15. package/dist/lib/browser/chunk-JGWCBVKJ.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-M5IC326L.mjs +34 -0
  17. package/dist/lib/browser/chunk-M5IC326L.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  19. package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
  20. package/dist/lib/browser/chunk-TIEBZMTF.mjs +44 -0
  21. package/dist/lib/browser/chunk-TIEBZMTF.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-WEBSGU5L.mjs +80 -0
  23. package/dist/lib/browser/chunk-WEBSGU5L.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-YAFEA4GV.mjs +1 -0
  25. package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-YNFPIQGB.mjs} +2 -3
  26. package/dist/lib/browser/{chunk-6Y7PZV72.mjs.map → chunk-YNFPIQGB.mjs.map} +3 -3
  27. package/dist/lib/browser/cli/index.mjs +89 -0
  28. package/dist/lib/browser/cli/index.mjs.map +7 -0
  29. package/dist/lib/browser/common/activation-events.mjs +23 -0
  30. package/dist/lib/browser/common/capabilities.mjs +45 -0
  31. package/dist/lib/browser/core/activation-event.mjs +1 -1
  32. package/dist/lib/browser/core/capability.mjs +1 -1
  33. package/dist/lib/browser/core/plugin-manager.mjs +4 -4
  34. package/dist/lib/browser/core/plugin.mjs +6 -4
  35. package/dist/lib/browser/index.mjs +37 -132
  36. package/dist/lib/browser/index.mjs.map +4 -4
  37. package/dist/lib/browser/{invoker-capability-SZRSTHEH.mjs → invoker-capability-YTTQ2OBB.mjs} +16 -12
  38. package/dist/lib/browser/invoker-capability-YTTQ2OBB.mjs.map +7 -0
  39. package/dist/lib/browser/meta.json +1 -1
  40. package/dist/lib/browser/testing/index.mjs +55 -34
  41. package/dist/lib/browser/testing/index.mjs.map +3 -3
  42. package/dist/lib/browser/{react → ui}/index.mjs +18 -19
  43. package/dist/lib/node-esm/capability-CRHZKL6T.mjs +35 -0
  44. package/dist/lib/node-esm/capability-CRHZKL6T.mjs.map +7 -0
  45. package/dist/lib/node-esm/{capability-CFLQ2QQU.mjs → capability-W5C5464H.mjs} +15 -11
  46. package/dist/lib/node-esm/capability-W5C5464H.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-3D66SZHP.mjs} +2 -2
  48. package/dist/lib/node-esm/chunk-3D66SZHP.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-6REV5DE7.mjs} +1 -1
  50. package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs.map → chunk-6REV5DE7.mjs.map} +1 -1
  51. package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-CMDON4NG.mjs} +304 -178
  52. package/dist/lib/node-esm/chunk-CMDON4NG.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
  54. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
  55. package/dist/lib/node-esm/{chunk-6WXBT3EC.mjs → chunk-I7FZT4A7.mjs} +459 -477
  56. package/dist/lib/node-esm/chunk-I7FZT4A7.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-LHCJGNXK.mjs} +10 -7
  58. package/dist/lib/node-esm/chunk-LHCJGNXK.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-NHXBSAQR.mjs +35 -0
  60. package/dist/lib/node-esm/chunk-NHXBSAQR.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-SB5ODNPX.mjs} +2 -3
  62. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs.map → chunk-SB5ODNPX.mjs.map} +3 -3
  63. package/dist/lib/node-esm/chunk-SCDGIGGU.mjs +45 -0
  64. package/dist/lib/node-esm/chunk-SCDGIGGU.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-SQICGJBW.mjs +81 -0
  66. package/dist/lib/node-esm/chunk-SQICGJBW.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-Z4TJPSMP.mjs +2 -0
  68. package/dist/lib/node-esm/chunk-Z4TJPSMP.mjs.map +7 -0
  69. package/dist/lib/node-esm/cli/index.mjs +90 -0
  70. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  71. package/dist/lib/node-esm/common/activation-events.mjs +24 -0
  72. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  73. package/dist/lib/node-esm/common/capabilities.mjs +46 -0
  74. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  75. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  76. package/dist/lib/node-esm/core/capability.mjs +1 -1
  77. package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
  78. package/dist/lib/node-esm/core/plugin.mjs +6 -4
  79. package/dist/lib/node-esm/index.mjs +37 -132
  80. package/dist/lib/node-esm/index.mjs.map +4 -4
  81. package/dist/lib/node-esm/{invoker-capability-PNMA5JOS.mjs → invoker-capability-BU26474T.mjs} +16 -12
  82. package/dist/lib/node-esm/invoker-capability-BU26474T.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/testing/index.mjs +55 -34
  85. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  86. package/dist/lib/node-esm/{react → ui}/index.mjs +18 -19
  87. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  88. package/dist/types/src/{cli.d.ts → cli/cli.d.ts} +2 -2
  89. package/dist/types/src/cli/cli.d.ts.map +1 -0
  90. package/dist/types/src/cli/index.d.ts +2 -0
  91. package/dist/types/src/cli/index.d.ts.map +1 -0
  92. package/dist/types/src/common/activation-events.d.ts +27 -0
  93. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  94. package/dist/types/src/common/capabilities.d.ts +115 -0
  95. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  96. package/dist/types/src/common/index.d.ts +4 -9
  97. package/dist/types/src/common/index.d.ts.map +1 -1
  98. package/dist/types/src/common/operations.d.ts +1 -348
  99. package/dist/types/src/common/operations.d.ts.map +1 -1
  100. package/dist/types/src/common/translations.d.ts +0 -9
  101. package/dist/types/src/common/translations.d.ts.map +1 -1
  102. package/dist/types/src/core/activation-event.d.ts +1 -1
  103. package/dist/types/src/core/capability.d.ts +7 -7
  104. package/dist/types/src/core/capability.d.ts.map +1 -1
  105. package/dist/types/src/core/plugin-manager.d.ts +6 -0
  106. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  107. package/dist/types/src/core/plugin.d.ts +6 -1
  108. package/dist/types/src/core/plugin.d.ts.map +1 -1
  109. package/dist/types/src/index.d.ts +1 -3
  110. package/dist/types/src/index.d.ts.map +1 -1
  111. package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
  112. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
  113. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  114. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  115. package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
  116. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  117. package/dist/types/src/testing/withPluginManager.d.ts +1 -1
  118. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  119. package/dist/types/src/{react → ui/components/App}/App.d.ts +1 -1
  120. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  121. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
  122. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  123. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  124. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  125. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  126. package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
  127. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  128. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  129. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  130. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  131. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  132. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  133. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  134. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  135. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  136. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  137. package/dist/types/src/ui/components/Surface/index.d.ts +20 -0
  138. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  139. package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
  140. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  141. package/dist/types/src/ui/components/index.d.ts +4 -0
  142. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  143. package/dist/types/src/ui/hooks/index.d.ts +7 -0
  144. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  145. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +14 -9
  146. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  147. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  148. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  149. package/dist/types/src/{react → ui/hooks}/useCapabilities.d.ts +6 -1
  150. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  151. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  152. package/dist/types/src/{react → ui/hooks}/useOperationResolver.d.ts +2 -2
  153. package/dist/types/src/ui/hooks/useOperationResolver.d.ts.map +1 -0
  154. package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
  155. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  156. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  157. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  158. package/dist/types/src/ui/index.d.ts +3 -0
  159. package/dist/types/src/ui/index.d.ts.map +1 -0
  160. package/dist/types/tsconfig.tsbuildinfo +1 -1
  161. package/moon.yml +6 -6
  162. package/package.json +72 -64
  163. package/src/{cli.ts → cli/cli.ts} +10 -10
  164. package/src/{playground/debug → cli}/index.ts +1 -1
  165. package/src/common/activation-events.ts +44 -0
  166. package/src/common/capabilities.ts +178 -0
  167. package/src/common/index.ts +4 -9
  168. package/src/common/operations.ts +2 -376
  169. package/src/common/translations.ts +0 -12
  170. package/src/context.ts +1 -1
  171. package/src/core/activation-event.ts +1 -1
  172. package/src/core/capability.ts +9 -9
  173. package/src/core/plugin-manager.test.ts +292 -44
  174. package/src/core/plugin-manager.ts +326 -154
  175. package/src/core/plugin.ts +10 -2
  176. package/src/index.ts +1 -3
  177. package/src/plugin-operation/OperationPlugin.ts +5 -5
  178. package/src/plugin-operation/history/capability.ts +5 -5
  179. package/src/plugin-operation/history/undo-mapping.ts +6 -3
  180. package/src/plugin-operation/invoker-capability.ts +5 -5
  181. package/src/plugin-operation/meta.ts +1 -1
  182. package/src/plugin-runtime/RuntimePlugin.ts +4 -4
  183. package/src/plugin-runtime/capability.ts +5 -5
  184. package/src/plugin-runtime/meta.ts +1 -1
  185. package/src/testing/service.ts +6 -6
  186. package/src/testing/withPluginManager.stories.tsx +6 -6
  187. package/src/testing/withPluginManager.tsx +46 -19
  188. package/src/ui/components/App/App.stories.tsx +92 -0
  189. package/src/{react → ui/components/App}/App.tsx +6 -9
  190. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  191. package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
  192. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
  193. package/src/ui/components/PluginManager/index.ts +5 -0
  194. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +18 -16
  195. package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +36 -56
  196. package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
  197. package/src/ui/components/Surface/context.ts +12 -0
  198. package/src/ui/components/Surface/index.ts +20 -0
  199. package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
  200. package/src/ui/components/index.ts +7 -0
  201. package/src/ui/hooks/index.ts +10 -0
  202. package/src/ui/hooks/useApp.test.tsx +159 -0
  203. package/src/{react → ui/hooks}/useApp.tsx +39 -29
  204. package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
  205. package/src/{react → ui/hooks}/useOperationResolver.ts +5 -5
  206. package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
  207. package/src/ui/hooks/useSurface.ts +13 -0
  208. package/src/ui/index.ts +6 -0
  209. package/tsconfig.json +2 -29
  210. package/tsconfig.node.json +1 -3
  211. package/typedoc.json +2 -4
  212. package/vitest.config.ts +1 -1
  213. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
  214. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
  215. package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
  216. package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
  217. package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
  220. package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
  221. package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
  222. package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
  223. package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
  224. package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
  227. package/dist/lib/browser/common/index.mjs +0 -38
  228. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
  229. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
  230. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
  231. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
  232. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
  233. package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
  234. package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
  235. package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
  236. package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
  237. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
  239. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
  240. package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
  241. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
  242. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
  243. package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
  244. package/dist/lib/node-esm/common/index.mjs +0 -39
  245. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
  246. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
  247. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
  248. package/dist/types/src/cli.d.ts.map +0 -1
  249. package/dist/types/src/common/activation-event.d.ts +0 -66
  250. package/dist/types/src/common/activation-event.d.ts.map +0 -1
  251. package/dist/types/src/common/capability.d.ts +0 -265
  252. package/dist/types/src/common/capability.d.ts.map +0 -1
  253. package/dist/types/src/common/collaboration.d.ts +0 -26
  254. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  255. package/dist/types/src/common/file.d.ts +0 -14
  256. package/dist/types/src/common/file.d.ts.map +0 -1
  257. package/dist/types/src/common/graph.d.ts +0 -21
  258. package/dist/types/src/common/graph.d.ts.map +0 -1
  259. package/dist/types/src/common/plugin.d.ts +0 -201
  260. package/dist/types/src/common/plugin.d.ts.map +0 -1
  261. package/dist/types/src/common/surface.d.ts.map +0 -1
  262. package/dist/types/src/playground/debug/Debug.d.ts +0 -8
  263. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  264. package/dist/types/src/playground/debug/index.d.ts +0 -2
  265. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  266. package/dist/types/src/playground/debug/plugin.d.ts +0 -3
  267. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  268. package/dist/types/src/playground/generator/Main.d.ts +0 -8
  269. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  270. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
  271. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  272. package/dist/types/src/playground/generator/generator.d.ts +0 -19
  273. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  274. package/dist/types/src/playground/generator/index.d.ts +0 -3
  275. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  276. package/dist/types/src/playground/generator/plugin.d.ts +0 -3
  277. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  278. package/dist/types/src/playground/layout/Layout.d.ts +0 -10
  279. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  280. package/dist/types/src/playground/layout/index.d.ts +0 -2
  281. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  282. package/dist/types/src/playground/layout/plugin.d.ts +0 -3
  283. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  284. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
  285. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  286. package/dist/types/src/playground/logger/index.d.ts +0 -2
  287. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  288. package/dist/types/src/playground/logger/plugin.d.ts +0 -3
  289. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  290. package/dist/types/src/playground/logger/schema.d.ts +0 -27
  291. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  292. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  293. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  294. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
  295. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  296. package/dist/types/src/plugin-settings/actions.d.ts +0 -61
  297. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  298. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
  299. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  300. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  301. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  302. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  303. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  304. package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
  305. package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
  306. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  307. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  308. package/dist/types/src/react/App.d.ts.map +0 -1
  309. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  310. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  311. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  312. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  313. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  314. package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
  315. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  316. package/dist/types/src/react/Surface.d.ts +0 -14
  317. package/dist/types/src/react/Surface.d.ts.map +0 -1
  318. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  319. package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
  320. package/dist/types/src/react/common.d.ts.map +0 -1
  321. package/dist/types/src/react/index.d.ts +0 -9
  322. package/dist/types/src/react/index.d.ts.map +0 -1
  323. package/dist/types/src/react/types.d.ts +0 -12
  324. package/dist/types/src/react/types.d.ts.map +0 -1
  325. package/dist/types/src/react/useApp.d.ts.map +0 -1
  326. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  327. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  328. package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
  329. package/src/common/activation-event.ts +0 -99
  330. package/src/common/capability.ts +0 -343
  331. package/src/common/collaboration.ts +0 -31
  332. package/src/common/file.ts +0 -22
  333. package/src/common/graph.ts +0 -30
  334. package/src/common/plugin.ts +0 -364
  335. package/src/playground/debug/Debug.tsx +0 -49
  336. package/src/playground/debug/plugin.ts +0 -16
  337. package/src/playground/generator/Main.tsx +0 -80
  338. package/src/playground/generator/Toolbar.tsx +0 -57
  339. package/src/playground/generator/generator.ts +0 -48
  340. package/src/playground/generator/index.ts +0 -6
  341. package/src/playground/generator/plugin.ts +0 -21
  342. package/src/playground/layout/Layout.tsx +0 -37
  343. package/src/playground/layout/plugin.ts +0 -18
  344. package/src/playground/logger/Toolbar.tsx +0 -33
  345. package/src/playground/logger/index.ts +0 -5
  346. package/src/playground/logger/plugin.ts +0 -42
  347. package/src/playground/logger/schema.ts +0 -22
  348. package/src/playground/playground.stories.tsx +0 -54
  349. package/src/plugin-settings/SettingsPlugin.ts +0 -19
  350. package/src/plugin-settings/actions.ts +0 -64
  351. package/src/plugin-settings/app-graph-builder.ts +0 -140
  352. package/src/plugin-settings/index.ts +0 -6
  353. package/src/plugin-settings/meta.ts +0 -10
  354. package/src/plugin-settings/operation-resolver.ts +0 -55
  355. package/src/plugin-settings/translations.ts +0 -19
  356. package/src/react/App.stories.tsx +0 -63
  357. package/src/react/DefaultFallback.tsx +0 -26
  358. package/src/react/ErrorBoundary.tsx +0 -56
  359. package/src/react/index.ts +0 -14
  360. package/src/react/types.ts +0 -27
  361. /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-YAFEA4GV.mjs.map} +0 -0
  362. /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  363. /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
  364. /package/dist/lib/browser/{common → ui}/index.mjs.map +0 -0
  365. /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
  366. /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
  367. /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
  368. /package/src/{react → ui/hooks}/useLoading.tsx +0 -0
@@ -1,42 +1,249 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  PluginManagerContext
4
- } from "./chunk-UEWJDI2L.mjs";
4
+ } from "./chunk-FKE4Z3D6.mjs";
5
5
  import {
6
- ActivationEvent,
7
- Capability
8
- } from "./chunk-GQEBIGKD.mjs";
6
+ capabilities_exports
7
+ } from "./chunk-SQICGJBW.mjs";
8
+ import {
9
+ activation_events_exports
10
+ } from "./chunk-NHXBSAQR.mjs";
9
11
  import {
10
12
  plugin_manager_exports
11
- } from "./chunk-XYQTBFPA.mjs";
13
+ } from "./chunk-CMDON4NG.mjs";
12
14
 
13
- // src/react/common.ts
14
- import { RegistryContext, useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
15
- import { useCallback as useCallback2, useContext as useContext2 } from "react";
15
+ // src/ui/components/App/App.tsx
16
+ import React2 from "react";
16
17
 
17
- // src/react/useCapabilities.ts
18
- import { useAtomValue } from "@effect-atom/atom-react";
19
- import { useCallback } from "react";
20
- import { invariant } from "@dxos/invariant";
18
+ // src/helpers.ts
19
+ var topologicalSort = (nodes) => {
20
+ const getDependencies = (nodeId, seen = /* @__PURE__ */ new Set(), path = /* @__PURE__ */ new Set()) => {
21
+ if (path.has(nodeId)) {
22
+ throw new Error(`Circular dependency detected involving ${nodeId}`);
23
+ }
24
+ if (seen.has(nodeId)) {
25
+ return [];
26
+ }
27
+ const node = nodes.find((n) => n.id === nodeId);
28
+ if (!node) {
29
+ throw new Error(`Node ${nodeId} not found but is listed as a dependency`);
30
+ }
31
+ const newPath = /* @__PURE__ */ new Set([
32
+ ...path,
33
+ nodeId
34
+ ]);
35
+ const newSeen = /* @__PURE__ */ new Set([
36
+ ...seen,
37
+ nodeId
38
+ ]);
39
+ const dependsOn = node.dependsOn ?? [];
40
+ return [
41
+ ...dependsOn.flatMap((depId) => getDependencies(depId, newSeen, newPath)),
42
+ nodeId
43
+ ];
44
+ };
45
+ const allDependencies = nodes.map((node) => node.id).flatMap((id) => getDependencies(id)).filter((id, index, self) => self.indexOf(id) === index);
46
+ return allDependencies.map((id) => nodes.find((node) => node.id === id)).filter((node) => node !== void 0);
47
+ };
21
48
 
22
- // src/react/PluginManagerProvider.ts
23
- import { createContext, useContext } from "react";
24
- import { raise } from "@dxos/debug";
25
- var PluginManagerContext2 = createContext(void 0);
26
- var usePluginManager = () => useContext(PluginManagerContext2) ?? raise(new Error("Missing PluginManagerContext"));
27
- var PluginManagerProvider = PluginManagerContext2.Provider;
49
+ // src/ui/hooks/useApp.tsx
50
+ import { RegistryContext } from "@effect-atom/atom-react";
51
+ import * as Effect from "effect/Effect";
52
+ import * as Fiber from "effect/Fiber";
53
+ import * as PubSub from "effect/PubSub";
54
+ import * as Queue from "effect/Queue";
55
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
56
+ import { runAndForwardErrors } from "@dxos/effect";
57
+ import { invariant } from "@dxos/invariant";
58
+ import { log } from "@dxos/log";
59
+ import { ErrorBoundary, ErrorFallback } from "@dxos/react-error-boundary";
60
+ import { useAsyncEffect, useDefaultValue } from "@dxos/react-hooks";
61
+ import { ContextProtocolProvider } from "@dxos/web-context-react";
62
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/hooks/useApp.tsx";
63
+ var ENABLED_KEY = "org.dxos.app-framework.enabled";
64
+ var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, plugins: pluginsProp, core: coreProp, defaults: defaultsProp, setupEvents: setupEventsProp, placeholder, fallback = ErrorFallback, cacheEnabled = false, safeMode = false, debounce = 0, timeout = 3e4 }) => {
65
+ const plugins = useDefaultValue(pluginsProp, () => []);
66
+ const core = useDefaultValue(coreProp, () => plugins.map(({ meta }) => meta.id));
67
+ const defaults = useDefaultValue(defaultsProp, () => []);
68
+ const setupEvents = useDefaultValue(setupEventsProp, () => []);
69
+ const pluginLoader = useMemo(() => pluginLoaderProp ?? ((id) => Effect.sync(() => {
70
+ const plugin = plugins.find((plugin2) => plugin2.meta.id === id);
71
+ invariant(plugin, `Plugin not found: ${id}`, {
72
+ F: __dxlog_file,
73
+ L: 96,
74
+ S: void 0,
75
+ A: [
76
+ "plugin",
77
+ "`Plugin not found: ${id}`"
78
+ ]
79
+ });
80
+ return plugin;
81
+ })), [
82
+ pluginLoaderProp,
83
+ plugins
84
+ ]);
85
+ const readyRef = useRef(false);
86
+ const [ready, setReady] = useState(false);
87
+ const errorRef = useRef(null);
88
+ const [error, setError] = useState(null);
89
+ const cached = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? "[]"), []);
90
+ const enabled = useMemo(() => safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults, [
91
+ safeMode,
92
+ cacheEnabled,
93
+ cached,
94
+ defaults
95
+ ]);
96
+ const isExternalManager = !!pluginManager;
97
+ const manager = useMemo(() => {
98
+ const mgr = pluginManager ?? plugin_manager_exports.make({
99
+ pluginLoader,
100
+ plugins,
101
+ core,
102
+ enabled
103
+ });
104
+ log("useApp: useMemo created/reused manager", {
105
+ provided: !!pluginManager
106
+ }, {
107
+ F: __dxlog_file,
108
+ L: 115,
109
+ S: void 0,
110
+ C: (f, a) => f(...a)
111
+ });
112
+ return mgr;
113
+ }, [
114
+ pluginManager,
115
+ pluginLoader,
116
+ plugins,
117
+ core,
118
+ enabled
119
+ ]);
120
+ useEffect(() => {
121
+ if (!cacheEnabled) {
122
+ return;
123
+ }
124
+ return manager.registry.subscribe(manager.enabled, (value) => {
125
+ localStorage.setItem(ENABLED_KEY, JSON.stringify(value));
126
+ });
127
+ }, [
128
+ cacheEnabled,
129
+ manager
130
+ ]);
131
+ useEffect(() => {
132
+ setupDevtools(manager);
133
+ }, [
134
+ manager
135
+ ]);
136
+ useAsyncEffect(async () => {
137
+ log("useApp: effect mount", void 0, {
138
+ F: __dxlog_file,
139
+ L: 133,
140
+ S: void 0,
141
+ C: (f, a) => f(...a)
142
+ });
143
+ manager.capabilities.contribute({
144
+ interface: capabilities_exports.PluginManager,
145
+ implementation: manager,
146
+ module: "org.dxos.app-framework.plugin-manager"
147
+ });
148
+ manager.capabilities.contribute({
149
+ interface: capabilities_exports.AtomRegistry,
150
+ implementation: manager.registry,
151
+ module: "org.dxos.app-framework.atom-registry"
152
+ });
153
+ const fiber = Effect.gen(function* () {
154
+ const queue = yield* PubSub.subscribe(manager.activation);
155
+ const listener = yield* Effect.forkDaemon(Queue.take(queue).pipe(Effect.tap(({ event, state, error: error$ }) => Effect.sync(() => {
156
+ if (event === activation_events_exports.Startup.id && state === "activated") {
157
+ clearTimeout(timeoutId);
158
+ setReady(true);
159
+ readyRef.current = true;
160
+ }
161
+ if (error$ && !readyRef.current) {
162
+ setError(error$);
163
+ errorRef.current = error$;
164
+ }
165
+ })), Effect.forever));
166
+ yield* Effect.all([
167
+ ...setupEvents.map((event) => manager.activate(event)),
168
+ manager.activate(activation_events_exports.SetupReactSurface),
169
+ manager.activate(activation_events_exports.Startup)
170
+ ]);
171
+ return yield* Fiber.join(listener);
172
+ }).pipe(Effect.scoped, Effect.runFork);
173
+ const timeoutId = setTimeout(() => {
174
+ if (!readyRef.current && !errorRef.current) {
175
+ log.warn("startup timeout diagnostic", {
176
+ eventsFired: manager.getEventsFired(),
177
+ activeModules: manager.getActive(),
178
+ pendingReset: manager.getPendingReset()
179
+ }, {
180
+ F: __dxlog_file,
181
+ L: 180,
182
+ S: void 0,
183
+ C: (f, a) => f(...a)
184
+ });
185
+ void runAndForwardErrors(Fiber.interrupt(fiber));
186
+ setError(new Error(`Startup timed out after ${timeout}ms`));
187
+ }
188
+ }, timeout);
189
+ return () => {
190
+ log("useApp: effect cleanup", void 0, {
191
+ F: __dxlog_file,
192
+ L: 191,
193
+ S: void 0,
194
+ C: (f, a) => f(...a)
195
+ });
196
+ clearTimeout(timeoutId);
197
+ void runAndForwardErrors(Fiber.interrupt(fiber));
198
+ if (!isExternalManager) {
199
+ void runAndForwardErrors(manager.shutdown());
200
+ }
201
+ };
202
+ }, [
203
+ manager
204
+ ]);
205
+ return useCallback(() => /* @__PURE__ */ React.createElement(ErrorBoundary, {
206
+ name: "app",
207
+ FallbackComponent: fallback
208
+ }, /* @__PURE__ */ React.createElement(PluginManagerProvider, {
209
+ value: manager
210
+ }, /* @__PURE__ */ React.createElement(ContextProtocolProvider, {
211
+ value: manager,
212
+ context: PluginManagerContext
213
+ }, /* @__PURE__ */ React.createElement(RegistryContext.Provider, {
214
+ value: manager.registry
215
+ }, /* @__PURE__ */ React.createElement(App, {
216
+ placeholder,
217
+ ready,
218
+ error,
219
+ debounce
220
+ }))))), [
221
+ fallback,
222
+ manager,
223
+ placeholder,
224
+ ready,
225
+ error
226
+ ]);
227
+ };
228
+ var setupDevtools = (manager) => {
229
+ globalThis.composer ??= {};
230
+ globalThis.composer.manager = manager;
231
+ };
28
232
 
29
- // src/react/useCapabilities.ts
30
- var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/react/useCapabilities.ts";
233
+ // src/ui/hooks/useCapabilities.ts
234
+ import { useAtomValue } from "@effect-atom/atom-react";
235
+ import { useCallback as useCallback2 } from "react";
236
+ import { invariant as invariant2 } from "@dxos/invariant";
237
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/hooks/useCapabilities.ts";
31
238
  var useCapabilities = (interfaceDef) => {
32
239
  const manager = usePluginManager();
33
240
  return useAtomValue(manager.capabilities.atom(interfaceDef));
34
241
  };
35
242
  var useCapability = (interfaceDef) => {
36
243
  const capabilities = useCapabilities(interfaceDef);
37
- invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`, {
38
- F: __dxlog_file,
39
- L: 31,
244
+ invariant2(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`, {
245
+ F: __dxlog_file2,
246
+ L: 30,
40
247
  S: void 0,
41
248
  A: [
42
249
  "capabilities.length > 0",
@@ -50,10 +257,10 @@ var useAtomCapability = (atomCapability) => {
50
257
  return useAtomValue(atom);
51
258
  };
52
259
  var useAtomCapabilityState = (atomCapability) => {
53
- const registry = useCapability(Capability.AtomRegistry);
260
+ const registry = useCapability(capabilities_exports.AtomRegistry);
54
261
  const atom = useCapability(atomCapability);
55
262
  const value = useAtomValue(atom);
56
- const update = useCallback((fn) => {
263
+ const update = useCallback2((fn) => {
57
264
  registry.set(atom, fn(registry.get(atom)));
58
265
  }, [
59
266
  registry,
@@ -64,15 +271,87 @@ var useAtomCapabilityState = (atomCapability) => {
64
271
  update
65
272
  ];
66
273
  };
274
+ var useOperationInvoker = () => useCapability(capabilities_exports.OperationInvoker);
275
+
276
+ // src/ui/hooks/useLoading.tsx
277
+ import { useEffect as useEffect2, useState as useState2 } from "react";
278
+ var LoadingState = /* @__PURE__ */ (function(LoadingState2) {
279
+ LoadingState2[LoadingState2["Loading"] = 0] = "Loading";
280
+ LoadingState2[LoadingState2["FadeIn"] = 1] = "FadeIn";
281
+ LoadingState2[LoadingState2["FadeOut"] = 2] = "FadeOut";
282
+ LoadingState2[LoadingState2["Done"] = 3] = "Done";
283
+ return LoadingState2;
284
+ })({});
285
+ var useLoading = (ready, debounce = 0) => {
286
+ const [stage, setStage] = useState2(0);
287
+ useEffect2(() => {
288
+ if (!debounce) {
289
+ return;
290
+ }
291
+ const i = setInterval(() => {
292
+ setStage((stage2) => {
293
+ switch (stage2) {
294
+ case 0: {
295
+ if (!ready) {
296
+ return 1;
297
+ } else {
298
+ clearInterval(i);
299
+ return 3;
300
+ }
301
+ }
302
+ case 1: {
303
+ if (ready) {
304
+ return 2;
305
+ }
306
+ break;
307
+ }
308
+ case 2: {
309
+ clearInterval(i);
310
+ return 3;
311
+ }
312
+ }
313
+ return stage2;
314
+ });
315
+ }, debounce);
316
+ return () => clearInterval(i);
317
+ }, [
318
+ debounce
319
+ ]);
320
+ if (!debounce) {
321
+ return ready ? 3 : 0;
322
+ }
323
+ return stage;
324
+ };
325
+
326
+ // src/ui/hooks/useOperationResolver.ts
327
+ import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
328
+ var useOperationResolver = (module, resolver) => {
329
+ const manager = usePluginManager();
330
+ const resolverArray = useMemo2(() => [
331
+ resolver
332
+ ], [
333
+ resolver
334
+ ]);
335
+ useEffect3(() => {
336
+ manager.capabilities.contribute({
337
+ module,
338
+ interface: capabilities_exports.OperationResolver,
339
+ implementation: resolverArray
340
+ });
341
+ return () => manager.capabilities.remove(capabilities_exports.OperationResolver, resolverArray);
342
+ }, [
343
+ module,
344
+ resolverArray
345
+ ]);
346
+ };
67
347
 
68
- // src/react/common.ts
69
- var useOperationInvoker = () => useCapability(Capability.OperationInvoker);
70
- var useAppGraph = () => useCapability(Capability.AppGraph);
71
- var useLayout = () => useAtomCapability(Capability.Layout);
348
+ // src/ui/hooks/useSettingsState.ts
349
+ import { RegistryContext as RegistryContext2, useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
350
+ import { useCallback as useCallback3, useContext } from "react";
72
351
  var useSettingsState = (atom) => {
73
- const registry = useContext2(RegistryContext);
352
+ const registry = useContext(RegistryContext2);
74
353
  const settings = useAtomValue2(atom);
75
- const updateSettings = useCallback2((fn) => {
354
+ const updateSettings = useCallback3((fn) => {
76
355
  registry.set(atom, fn(registry.get(atom)));
77
356
  }, [
78
357
  registry,
@@ -84,66 +363,70 @@ var useSettingsState = (atom) => {
84
363
  };
85
364
  };
86
365
 
87
- // src/react/ErrorBoundary.tsx
88
- import React, { Component } from "react";
89
- var ErrorBoundary = class extends Component {
90
- static getDerivedStateFromError(error) {
91
- return {
92
- error
93
- };
94
- }
95
- state = {
96
- error: void 0
97
- };
98
- componentDidUpdate(prevProps) {
99
- if (prevProps.data !== this.props.data) {
100
- this.resetError();
101
- }
366
+ // src/ui/hooks/useSurface.ts
367
+ import { useContext as useContext2 } from "react";
368
+ import { raise } from "@dxos/debug";
369
+ var useSurface = () => {
370
+ return useContext2(Surface.Context) ?? raise(new Error("Missing SurfaceContext"));
371
+ };
372
+
373
+ // src/ui/components/App/App.tsx
374
+ var App = ({ placeholder: Placeholder, ready, error, debounce }) => {
375
+ const reactContexts = useCapabilities(capabilities_exports.ReactContext);
376
+ const reactRoots = useCapabilities(capabilities_exports.ReactRoot);
377
+ const stage = useLoading(ready, debounce);
378
+ if (error) {
379
+ throw error;
102
380
  }
103
- render() {
104
- if (this.state.error) {
105
- const Fallback = this.props.fallback ?? DefaultFallback;
106
- return /* @__PURE__ */ React.createElement(Fallback, {
107
- data: this.props.data,
108
- error: this.state.error
109
- });
381
+ if (stage < LoadingState.Done) {
382
+ if (!Placeholder) {
383
+ return null;
110
384
  }
111
- return this.props.children;
112
- }
113
- resetError() {
114
- this.setState({
115
- error: void 0
385
+ return /* @__PURE__ */ React2.createElement(Placeholder, {
386
+ stage
116
387
  });
117
388
  }
389
+ const ComposedContext = composeContexts(reactContexts);
390
+ return /* @__PURE__ */ React2.createElement(ComposedContext, null, reactRoots.map(({ id, root: Component }) => /* @__PURE__ */ React2.createElement(Component, {
391
+ key: id
392
+ })));
118
393
  };
119
- var DefaultFallback = ({ data, error }) => {
120
- return /* @__PURE__ */ React.createElement("div", {
121
- className: "flex flex-col gap-2 overflow-hidden border border-red-500 rounded-sm"
122
- }, /* @__PURE__ */ React.createElement("h1", {
123
- className: "p-2"
124
- }, "ERROR: ", error.message), /* @__PURE__ */ React.createElement("pre", {
125
- className: "p-2 overflow-y-auto text-sm text-subdued"
126
- }, JSON.stringify(data, null, 2)));
394
+ var composeContexts = (contexts) => {
395
+ if (contexts.length === 0) {
396
+ return ({ children }) => /* @__PURE__ */ React2.createElement(React2.Fragment, null, children);
397
+ }
398
+ return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React2.createElement(Acc, null, /* @__PURE__ */ React2.createElement(Next, null, children)));
127
399
  };
128
400
 
129
- // src/react/Surface.tsx
130
- import React3, { Fragment, Suspense, createContext as createContext2, forwardRef as forwardRef2, memo, useContext as useContext3, useEffect, useMemo, useRef } from "react";
401
+ // src/ui/components/PluginManager/PluginManagerProvider.ts
402
+ import { createContext, useContext as useContext3 } from "react";
131
403
  import { raise as raise2 } from "@dxos/debug";
132
- import { log } from "@dxos/log";
133
- import { useDefaultValue } from "@dxos/react-hooks";
404
+ var PluginManagerContext2 = createContext(void 0);
405
+ var usePluginManager = () => useContext3(PluginManagerContext2) ?? raise2(new Error("Missing PluginManagerContext"));
406
+ var PluginManagerProvider = PluginManagerContext2.Provider;
407
+
408
+ // src/ui/components/Surface/context.ts
409
+ import { createContext as createContext2 } from "react";
410
+ var SurfaceContext = createContext2(void 0);
411
+
412
+ // src/ui/components/Surface/SurfaceComponent.tsx
413
+ import React4, { Fragment, Suspense, forwardRef as forwardRef2, memo, useEffect as useEffect4, useMemo as useMemo3, useRef as useRef2 } from "react";
414
+ import { log as log2 } from "@dxos/log";
415
+ import { ErrorBoundary as ErrorBoundary2 } from "@dxos/react-error-boundary";
416
+ import { useDefaultValue as useDefaultValue2 } from "@dxos/react-hooks";
134
417
  import { byPosition } from "@dxos/util";
135
418
 
136
- // src/react/SurfaceInfo.tsx
137
- import React2, { cloneElement, forwardRef, useCallback as useCallback3, useLayoutEffect, useState } from "react";
419
+ // src/ui/components/Surface/SurfaceInfo.tsx
420
+ import React3, { cloneElement, forwardRef, useCallback as useCallback4, useLayoutEffect, useState as useState3 } from "react";
138
421
  import { createPortal } from "react-dom";
139
422
  import { addEventListener, combine } from "@dxos/async";
140
423
  import { useMergeRefs } from "@dxos/react-hooks";
141
424
  var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
142
- const [rect, setRect] = useState(null);
143
- const [expand, setExpand] = useState(false);
425
+ const [rect, setRect] = useState3(null);
426
+ const [expand, setExpand] = useState3(false);
144
427
  const info = useSurface();
145
- const [root, setRoot] = useState(null);
146
- const measureRef = useCallback3((node) => setRoot(node), []);
428
+ const [root, setRoot] = useState3(null);
429
+ const measureRef = useCallback4((node) => setRoot(node), []);
147
430
  const mergedRef = useMergeRefs([
148
431
  measureRef,
149
432
  forwardedRef
@@ -169,8 +452,8 @@ var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
169
452
  root
170
453
  ]);
171
454
  const padding = 0;
172
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, childWithRef, rect && /* @__PURE__ */ createPortal(
173
- /* @__PURE__ */ React2.createElement("div", {
455
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, childWithRef, rect && /* @__PURE__ */ createPortal(
456
+ /* @__PURE__ */ React3.createElement("div", {
174
457
  role: "none",
175
458
  className: "z-[100] fixed flex flex-col-reverse scrollbar-none overflow-auto pointer-events-none",
176
459
  style: {
@@ -179,18 +462,18 @@ var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
179
462
  width: rect.width - padding * 2,
180
463
  height: rect.height - padding * 2
181
464
  }
182
- }, expand ? /* @__PURE__ */ React2.createElement("div", {
183
- className: "absolute inset-0 bg-deckSurface border border-green-500 cursor-pointer pointer-events-auto overflow-auto",
465
+ }, expand ? /* @__PURE__ */ React3.createElement("div", {
466
+ className: "absolute inset-0 bg-deck-surface border border-green-500 cursor-pointer pointer-events-auto overflow-auto",
184
467
  onPointerDown: (ev) => ev.stopPropagation(),
185
468
  onClick: (ev) => {
186
469
  ev.stopPropagation();
187
470
  setExpand(false);
188
471
  }
189
- }, /* @__PURE__ */ React2.createElement("pre", {
472
+ }, /* @__PURE__ */ React3.createElement("pre", {
190
473
  className: "p-2 text-xs text-description font-mono"
191
474
  }, JSON.stringify({
192
475
  info
193
- }, null, 2))) : /* @__PURE__ */ React2.createElement("span", {
476
+ }, null, 2))) : /* @__PURE__ */ React3.createElement("span", {
194
477
  className: "absolute right-1 bottom-0 flex items-center p-1 text-green-500 opacity-80 hover:opacity-100 text-xl cursor-pointer pointer-events-auto",
195
478
  title: info.id,
196
479
  onPointerDown: (ev) => ev.stopPropagation(),
@@ -204,15 +487,14 @@ var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
204
487
  ));
205
488
  });
206
489
 
207
- // src/react/Surface.tsx
208
- var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/app-framework/src/react/Surface.tsx";
209
- var DEFAULT_PLACEHOLDER = /* @__PURE__ */ React3.createElement(Fragment, null);
490
+ // src/ui/components/Surface/SurfaceComponent.tsx
491
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/components/Surface/SurfaceComponent.tsx";
492
+ var DEFAULT_PLACEHOLDER = /* @__PURE__ */ React4.createElement(Fragment, null);
210
493
  var DEBUG = import.meta.env.VITE_DEBUG;
211
- var SurfaceContext = /* @__PURE__ */ createContext2(void 0);
212
494
  var WebComponentWrapper = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id, role, data, limit, definition, ...rest }, forwardedRef) => {
213
- const containerRef = useRef(null);
214
- const elementRef = useRef(null);
215
- const propsRef = useRef({
495
+ const containerRef = useRef2(null);
496
+ const elementRef = useRef2(null);
497
+ const propsRef = useRef2({
216
498
  id,
217
499
  role,
218
500
  data,
@@ -226,8 +508,10 @@ var WebComponentWrapper = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id
226
508
  limit,
227
509
  ...rest
228
510
  };
229
- useEffect(() => {
230
- if (!containerRef.current || elementRef.current) return;
511
+ useEffect4(() => {
512
+ if (!containerRef.current || elementRef.current) {
513
+ return;
514
+ }
231
515
  const element = document.createElement(definition.tagName);
232
516
  elementRef.current = element;
233
517
  Object.assign(element, propsRef.current);
@@ -252,18 +536,20 @@ var WebComponentWrapper = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id
252
536
  definition.tagName,
253
537
  forwardedRef
254
538
  ]);
255
- useEffect(() => {
539
+ useEffect4(() => {
256
540
  const element = elementRef.current;
257
- if (!element) return;
541
+ if (!element) {
542
+ return;
543
+ }
258
544
  Object.assign(element, propsRef.current);
259
545
  });
260
- return /* @__PURE__ */ React3.createElement("div", {
546
+ return /* @__PURE__ */ React4.createElement("div", {
261
547
  ref: containerRef
262
548
  });
263
549
  }));
264
550
  WebComponentWrapper.displayName = "WebComponentWrapper";
265
- var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id, role, data, limit, fallback = DefaultFallback2, definition, ...rest }, forwardedRef) => {
266
- const contextValue = useMemo(() => ({
551
+ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id, role, data, limit, fallback = ErrorFallback2, definition, ...rest }, forwardedRef) => {
552
+ const contextValue = useMemo3(() => ({
267
553
  id,
268
554
  role,
269
555
  data
@@ -273,12 +559,15 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
273
559
  data
274
560
  ]);
275
561
  if (definition.kind === "web-component") {
276
- return /* @__PURE__ */ React3.createElement(ErrorBoundary, {
277
- data,
278
- fallback
279
- }, /* @__PURE__ */ React3.createElement(SurfaceContext.Provider, {
562
+ return /* @__PURE__ */ React4.createElement(ErrorBoundary2, {
563
+ name: "surface",
564
+ resetKeys: [
565
+ data
566
+ ],
567
+ FallbackComponent: fallback
568
+ }, /* @__PURE__ */ React4.createElement(SurfaceContext.Provider, {
280
569
  value: contextValue
281
- }, /* @__PURE__ */ React3.createElement(WebComponentWrapper, {
570
+ }, /* @__PURE__ */ React4.createElement(WebComponentWrapper, {
282
571
  id,
283
572
  role,
284
573
  data,
@@ -288,22 +577,25 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
288
577
  ...rest
289
578
  })));
290
579
  }
291
- const Component2 = definition.component;
580
+ const Component = definition.component;
292
581
  const debug = DEBUG || "__DX_DEBUG__" in window;
293
582
  if (debug) {
294
- return /* @__PURE__ */ React3.createElement(ErrorBoundary, {
295
- data,
296
- fallback
297
- }, /* @__PURE__ */ React3.createElement("div", {
583
+ return /* @__PURE__ */ React4.createElement(ErrorBoundary2, {
584
+ name: "surface",
585
+ resetKeys: [
586
+ data
587
+ ],
588
+ FallbackComponent: fallback
589
+ }, /* @__PURE__ */ React4.createElement("div", {
298
590
  role: "none",
299
591
  className: "contents",
300
592
  "data-id": id,
301
593
  "data-role": role
302
- }, /* @__PURE__ */ React3.createElement(SurfaceContext.Provider, {
594
+ }, /* @__PURE__ */ React4.createElement(SurfaceContext.Provider, {
303
595
  value: contextValue
304
- }, /* @__PURE__ */ React3.createElement(SurfaceInfo, {
596
+ }, /* @__PURE__ */ React4.createElement(SurfaceInfo, {
305
597
  ref: forwardedRef
306
- }, /* @__PURE__ */ React3.createElement(Component2, {
598
+ }, /* @__PURE__ */ React4.createElement(Component, {
307
599
  id,
308
600
  role,
309
601
  data,
@@ -311,17 +603,20 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
311
603
  ...rest
312
604
  })))));
313
605
  }
314
- return /* @__PURE__ */ React3.createElement(ErrorBoundary, {
315
- data,
316
- fallback
317
- }, /* @__PURE__ */ React3.createElement("div", {
606
+ return /* @__PURE__ */ React4.createElement(ErrorBoundary2, {
607
+ name: "surface",
608
+ resetKeys: [
609
+ data
610
+ ],
611
+ FallbackComponent: fallback
612
+ }, /* @__PURE__ */ React4.createElement("div", {
318
613
  role: "none",
319
614
  className: "contents",
320
615
  "data-id": id,
321
616
  "data-role": role
322
- }, /* @__PURE__ */ React3.createElement(SurfaceContext.Provider, {
617
+ }, /* @__PURE__ */ React4.createElement(SurfaceContext.Provider, {
323
618
  value: contextValue
324
- }, /* @__PURE__ */ React3.createElement(Component2, {
619
+ }, /* @__PURE__ */ React4.createElement(Component, {
325
620
  id,
326
621
  role,
327
622
  data,
@@ -331,12 +626,8 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
331
626
  }))));
332
627
  }));
333
628
  SurfaceContextProvider.displayName = "SurfaceContextProvider";
334
- var useSurface = () => {
335
- const context = useContext3(SurfaceContext) ?? raise2(new Error("Missing SurfaceContext"));
336
- return context;
337
- };
338
- var Surface = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _id, role, data: dataProp, limit, placeholder = DEFAULT_PLACEHOLDER, ...rest }, forwardedRef) => {
339
- const data = useDefaultValue(dataProp, () => ({}));
629
+ var SurfaceComponent = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _id, role, data: dataProp, limit, placeholder = DEFAULT_PLACEHOLDER, ...rest }, forwardedRef) => {
630
+ const data = useDefaultValue2(dataProp, () => ({}));
340
631
  const surfaces = useSurfaces();
341
632
  const definitions = findCandidates(surfaces, {
342
633
  role,
@@ -344,20 +635,20 @@ var Surface = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _id, role,
344
635
  });
345
636
  const candidates = limit ? definitions.slice(0, limit) : definitions;
346
637
  if (DEBUG && candidates.length === 0) {
347
- log.warn("no candidates for surface", {
638
+ log2.warn("no candidates for surface", {
348
639
  role,
349
640
  data
350
641
  }, {
351
- F: __dxlog_file2,
352
- L: 191,
642
+ F: __dxlog_file3,
643
+ L: 185,
353
644
  S: void 0,
354
645
  C: (f, a) => f(...a)
355
646
  });
356
647
  return null;
357
648
  }
358
- return /* @__PURE__ */ React3.createElement(Suspense, {
649
+ return /* @__PURE__ */ React4.createElement(Suspense, {
359
650
  fallback: placeholder
360
- }, candidates.map((definition) => /* @__PURE__ */ React3.createElement(SurfaceContextProvider, {
651
+ }, candidates.map((definition) => /* @__PURE__ */ React4.createElement(SurfaceContextProvider, {
361
652
  key: definition.id,
362
653
  id: definition.id,
363
654
  role,
@@ -368,38 +659,29 @@ var Surface = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _id, role,
368
659
  ...rest
369
660
  })));
370
661
  }));
371
- Surface.displayName = "Surface";
662
+ SurfaceComponent.displayName = "Surface";
663
+ var ErrorFallback2 = ({ error }) => {
664
+ const { message } = error instanceof Error ? error : {
665
+ message: String(error)
666
+ };
667
+ return /* @__PURE__ */ React4.createElement("div", {
668
+ role: "alert",
669
+ "data-testid": "error-boundary-fallback"
670
+ }, /* @__PURE__ */ React4.createElement("h1", {
671
+ className: "flex gap-2 text-sm mt-2 text-info-text"
672
+ }, message));
673
+ };
372
674
  var findCandidates = (surfaces, { role, data }) => {
373
675
  return Object.values(surfaces).filter((definition) => Array.isArray(definition.role) ? definition.role.includes(role) : definition.role === role).filter(({ filter }) => filter ? filter(data ?? {}) : true).toSorted(byPosition);
374
676
  };
375
- var DefaultFallback2 = ({ data, error, dev }) => {
376
- if (dev) {
377
- return /* @__PURE__ */ React3.createElement("div", {
378
- className: "flex flex-col gap-4 p-4 is-full overflow-y-auto"
379
- }, /* @__PURE__ */ React3.createElement("h1", {
380
- className: "flex gap-2 text-sm mbs-2"
381
- }, error.message), /* @__PURE__ */ React3.createElement("pre", {
382
- className: "overflow-auto text-xs text-description"
383
- }, JSON.stringify(data, null, 2)));
384
- }
385
- return /* @__PURE__ */ React3.createElement("div", {
386
- className: "flex flex-col gap-4 p-4 is-full overflow-y-auto border border-roseFill"
387
- }, /* @__PURE__ */ React3.createElement("h1", {
388
- className: "flex gap-2 text-sm mbs-2 text-rose-500"
389
- }, error.message), /* @__PURE__ */ React3.createElement("pre", {
390
- className: "overflow-auto text-xs text-description"
391
- }, error.stack), /* @__PURE__ */ React3.createElement("pre", {
392
- className: "overflow-auto text-xs text-description"
393
- }, JSON.stringify(data, null, 2)));
394
- };
395
677
  var useSurfaces = () => {
396
- const surfaces = useCapabilities(Capability.ReactSurface);
397
- return useMemo(() => surfaces.flat(), [
678
+ const surfaces = useCapabilities(capabilities_exports.ReactSurface);
679
+ return useMemo3(() => surfaces.flat(), [
398
680
  surfaces
399
681
  ]);
400
682
  };
401
683
  var isSurfaceAvailable = (capabilityManager, { role, data }) => {
402
- const surfaces = capabilityManager.getAll(Capability.ReactSurface);
684
+ const surfaces = capabilityManager.getAll(capabilities_exports.ReactSurface);
403
685
  const candidates = findCandidates(surfaces.flat(), {
404
686
  role,
405
687
  data
@@ -407,341 +689,41 @@ var isSurfaceAvailable = (capabilityManager, { role, data }) => {
407
689
  return candidates.length > 0;
408
690
  };
409
691
 
410
- // src/react/useApp.tsx
411
- import { RegistryContext as RegistryContext2 } from "@effect-atom/atom-react";
412
- import * as Effect from "effect/Effect";
413
- import * as Fiber from "effect/Fiber";
414
- import * as PubSub from "effect/PubSub";
415
- import * as Queue from "effect/Queue";
416
- import React6, { useCallback as useCallback4, useEffect as useEffect3, useMemo as useMemo2, useRef as useRef2, useState as useState3 } from "react";
417
- import { runAndForwardErrors } from "@dxos/effect";
418
- import { invariant as invariant2 } from "@dxos/invariant";
419
- import { log as log2 } from "@dxos/log";
420
- import { useAsyncEffect, useDefaultValue as useDefaultValue2 } from "@dxos/react-hooks";
421
- import { ContextProtocolProvider } from "@dxos/web-context-react";
422
-
423
- // src/react/App.tsx
424
- import React4 from "react";
425
-
426
- // src/helpers.ts
427
- var topologicalSort = (nodes) => {
428
- const getDependencies = (nodeId, seen = /* @__PURE__ */ new Set(), path = /* @__PURE__ */ new Set()) => {
429
- if (path.has(nodeId)) {
430
- throw new Error(`Circular dependency detected involving ${nodeId}`);
431
- }
432
- if (seen.has(nodeId)) {
433
- return [];
434
- }
435
- const node = nodes.find((n) => n.id === nodeId);
436
- if (!node) {
437
- throw new Error(`Node ${nodeId} not found but is listed as a dependency`);
438
- }
439
- const newPath = /* @__PURE__ */ new Set([
440
- ...path,
441
- nodeId
442
- ]);
443
- const newSeen = /* @__PURE__ */ new Set([
444
- ...seen,
445
- nodeId
446
- ]);
447
- const dependsOn = node.dependsOn ?? [];
448
- return [
449
- ...dependsOn.flatMap((depId) => getDependencies(depId, newSeen, newPath)),
450
- nodeId
451
- ];
452
- };
453
- const allDependencies = nodes.map((node) => node.id).flatMap((id) => getDependencies(id)).filter((id, index, self) => self.indexOf(id) === index);
454
- return allDependencies.map((id) => nodes.find((node) => node.id === id)).filter((node) => node !== void 0);
455
- };
456
-
457
- // src/react/useLoading.tsx
458
- import { useEffect as useEffect2, useState as useState2 } from "react";
459
- var LoadingState = /* @__PURE__ */ (function(LoadingState2) {
460
- LoadingState2[LoadingState2["Loading"] = 0] = "Loading";
461
- LoadingState2[LoadingState2["FadeIn"] = 1] = "FadeIn";
462
- LoadingState2[LoadingState2["FadeOut"] = 2] = "FadeOut";
463
- LoadingState2[LoadingState2["Done"] = 3] = "Done";
464
- return LoadingState2;
465
- })({});
466
- var useLoading = (ready, debounce = 0) => {
467
- const [stage, setStage] = useState2(0);
468
- useEffect2(() => {
469
- if (!debounce) {
470
- return;
471
- }
472
- const i = setInterval(() => {
473
- setStage((stage2) => {
474
- switch (stage2) {
475
- case 0: {
476
- if (!ready) {
477
- return 1;
478
- } else {
479
- clearInterval(i);
480
- return 3;
481
- }
482
- }
483
- case 1: {
484
- if (ready) {
485
- return 2;
486
- }
487
- break;
488
- }
489
- case 2: {
490
- clearInterval(i);
491
- return 3;
492
- }
493
- }
494
- return stage2;
495
- });
496
- }, debounce);
497
- return () => clearInterval(i);
498
- }, [
499
- debounce
500
- ]);
501
- if (!debounce) {
502
- return ready ? 3 : 0;
503
- }
504
- return stage;
505
- };
506
-
507
- // src/react/App.tsx
508
- var App = ({ placeholder: Placeholder, ready, error, debounce }) => {
509
- const reactContexts = useCapabilities(Capability.ReactContext);
510
- const reactRoots = useCapabilities(Capability.ReactRoot);
511
- const stage = useLoading(ready, debounce);
512
- if (error) {
513
- throw error;
514
- }
515
- if (stage < LoadingState.Done) {
516
- if (!Placeholder) {
517
- return null;
518
- }
519
- return /* @__PURE__ */ React4.createElement(Placeholder, {
520
- stage
521
- });
522
- }
523
- const ComposedContext = composeContexts(reactContexts);
524
- return /* @__PURE__ */ React4.createElement(ComposedContext, null, reactRoots.map(({ id, root: Component2 }) => /* @__PURE__ */ React4.createElement(Component2, {
525
- key: id
526
- })));
527
- };
528
- var composeContexts = (contexts) => {
529
- if (contexts.length === 0) {
530
- return ({ children }) => /* @__PURE__ */ React4.createElement(React4.Fragment, null, children);
531
- }
532
- return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React4.createElement(Acc, null, /* @__PURE__ */ React4.createElement(Next, null, children)));
533
- };
534
-
535
- // src/react/DefaultFallback.tsx
536
- import React5 from "react";
537
- var DefaultFallback3 = ({ error }) => {
538
- return /* @__PURE__ */ React5.createElement("div", {
539
- style: {
540
- margin: "1rem",
541
- padding: "1rem",
542
- overflow: "hidden",
543
- border: "4px solid teal",
544
- borderRadius: "1rem"
545
- }
546
- }, /* @__PURE__ */ React5.createElement("h1", {
547
- style: {
548
- margin: "0.5rem 0",
549
- fontSize: "1.2rem"
550
- }
551
- }, "ERROR: ", error.message), /* @__PURE__ */ React5.createElement("pre", {
552
- style: {
553
- overflow: "auto",
554
- fontSize: "1rem",
555
- whiteSpace: "pre-wrap",
556
- color: "#888888"
557
- }
558
- }, error.stack));
559
- };
560
-
561
- // src/react/useApp.tsx
562
- var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/app-framework/src/react/useApp.tsx";
563
- var ENABLED_KEY = "dxos.org/app-framework/enabled";
564
- var useApp = ({ pluginManager, pluginLoader: pluginLoaderProp, plugins: pluginsProp, core: coreProp, defaults: defaultsProp, placeholder, fallback = DefaultFallback3, cacheEnabled = false, safeMode = false, debounce = 0, timeout = 3e4 }) => {
565
- const plugins = useDefaultValue2(pluginsProp, () => []);
566
- const core = useDefaultValue2(coreProp, () => plugins.map(({ meta }) => meta.id));
567
- const defaults = useDefaultValue2(defaultsProp, () => []);
568
- const pluginLoader = useMemo2(() => pluginLoaderProp ?? ((id) => Effect.sync(() => {
569
- const plugin = plugins.find((plugin2) => plugin2.meta.id === id);
570
- invariant2(plugin, `Plugin not found: ${id}`, {
571
- F: __dxlog_file3,
572
- L: 92,
573
- S: void 0,
574
- A: [
575
- "plugin",
576
- "`Plugin not found: ${id}`"
577
- ]
578
- });
579
- return plugin;
580
- })), [
581
- pluginLoaderProp,
582
- plugins
583
- ]);
584
- const readyRef = useRef2(false);
585
- const [ready, setReady] = useState3(false);
586
- const errorRef = useRef2(null);
587
- const [error, setError] = useState3(null);
588
- const cached = useMemo2(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? "[]"), []);
589
- const enabled = useMemo2(() => safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults, [
590
- safeMode,
591
- cacheEnabled,
592
- cached,
593
- defaults
594
- ]);
595
- const manager = useMemo2(() => pluginManager ?? plugin_manager_exports.make({
596
- pluginLoader,
597
- plugins,
598
- core,
599
- enabled
600
- }), [
601
- pluginManager,
602
- pluginLoader,
603
- plugins,
604
- core,
605
- enabled
606
- ]);
607
- useEffect3(() => {
608
- if (!cacheEnabled) {
609
- return;
610
- }
611
- return manager.registry.subscribe(manager.enabled, (value) => {
612
- localStorage.setItem(ENABLED_KEY, JSON.stringify(value));
613
- });
614
- }, [
615
- cacheEnabled,
616
- manager
617
- ]);
618
- useEffect3(() => {
619
- setupDevtools(manager);
620
- }, [
621
- manager
622
- ]);
623
- useAsyncEffect(async () => {
624
- manager.capabilities.contribute({
625
- interface: Capability.PluginManager,
626
- implementation: manager,
627
- module: "dxos.org/app-framework/plugin-manager"
628
- });
629
- manager.capabilities.contribute({
630
- interface: Capability.AtomRegistry,
631
- implementation: manager.registry,
632
- module: "dxos.org/app-framework/atom-registry"
633
- });
634
- const fiber = Effect.gen(function* () {
635
- const queue = yield* PubSub.subscribe(manager.activation);
636
- const listener = yield* Effect.forkDaemon(Queue.take(queue).pipe(Effect.tap(({ event, state, error: error$ }) => Effect.sync(() => {
637
- if (event === ActivationEvent.Startup.id && state === "activated") {
638
- clearTimeout(timeoutId);
639
- setReady(true);
640
- readyRef.current = true;
641
- }
642
- if (error$ && !readyRef.current) {
643
- setError(error$);
644
- errorRef.current = error$;
645
- }
646
- })), Effect.forever));
647
- yield* Effect.all([
648
- manager.activate(ActivationEvent.SetupSettings),
649
- manager.activate(ActivationEvent.SetupReactSurface),
650
- manager.activate(ActivationEvent.Startup)
651
- ]);
652
- return yield* Fiber.join(listener);
653
- }).pipe(Effect.scoped, Effect.runFork);
654
- const timeoutId = setTimeout(() => {
655
- if (!readyRef.current && !errorRef.current) {
656
- log2.warn("startup timeout diagnostic", {
657
- eventsFired: manager.getEventsFired(),
658
- activeModules: manager.getActive(),
659
- pendingReset: manager.getPendingReset()
660
- }, {
661
- F: __dxlog_file3,
662
- L: 172,
663
- S: void 0,
664
- C: (f, a) => f(...a)
665
- });
666
- void runAndForwardErrors(Fiber.interrupt(fiber));
667
- setError(new Error(`Startup timed out after ${timeout}ms`));
668
- }
669
- }, timeout);
670
- return () => {
671
- clearTimeout(timeoutId);
672
- void runAndForwardErrors(Fiber.interrupt(fiber));
673
- manager.capabilities.remove(Capability.PluginManager, manager);
674
- manager.capabilities.remove(Capability.AtomRegistry, manager.registry);
675
- };
676
- }, [
677
- manager
678
- ]);
679
- return useCallback4(() => /* @__PURE__ */ React6.createElement(ErrorBoundary, {
680
- fallback
681
- }, /* @__PURE__ */ React6.createElement(PluginManagerProvider, {
682
- value: manager
683
- }, /* @__PURE__ */ React6.createElement(ContextProtocolProvider, {
684
- value: manager,
685
- context: PluginManagerContext
686
- }, /* @__PURE__ */ React6.createElement(RegistryContext2.Provider, {
687
- value: manager.registry
688
- }, /* @__PURE__ */ React6.createElement(App, {
689
- placeholder,
690
- ready,
691
- error,
692
- debounce
693
- }))))), [
694
- fallback,
695
- manager,
696
- placeholder,
697
- ready,
698
- error
699
- ]);
700
- };
701
- var setupDevtools = (manager) => {
702
- globalThis.composer ??= {};
703
- globalThis.composer.manager = manager;
704
- };
692
+ // src/ui/components/Surface/types.ts
693
+ var create = (definition) => ({
694
+ ...definition,
695
+ kind: "react"
696
+ });
697
+ var createWeb = (definition) => ({
698
+ ...definition,
699
+ kind: "web-component"
700
+ });
705
701
 
706
- // src/react/useOperationResolver.ts
707
- import { useEffect as useEffect4, useMemo as useMemo3 } from "react";
708
- var useOperationResolver = (module, resolver) => {
709
- const manager = usePluginManager();
710
- const resolverArray = useMemo3(() => [
711
- resolver
712
- ], [
713
- resolver
714
- ]);
715
- useEffect4(() => {
716
- manager.capabilities.contribute({
717
- module,
718
- interface: Capability.OperationResolver,
719
- implementation: resolverArray
720
- });
721
- return () => manager.capabilities.remove(Capability.OperationResolver, resolverArray);
722
- }, [
723
- module,
724
- resolverArray
725
- ]);
726
- };
702
+ // src/ui/components/Surface/index.ts
703
+ (function(Surface2) {
704
+ Surface2.create = create;
705
+ Surface2.createWeb = createWeb;
706
+ Surface2.Context = SurfaceContext;
707
+ Surface2.Surface = SurfaceComponent;
708
+ Surface2.isAvailable = isSurfaceAvailable;
709
+ })(Surface || (Surface = {}));
710
+ var Surface;
727
711
 
728
712
  export {
729
- usePluginManager,
730
- PluginManagerProvider,
713
+ useApp,
731
714
  useCapabilities,
732
715
  useCapability,
733
716
  useAtomCapability,
734
717
  useAtomCapabilityState,
735
718
  useOperationInvoker,
736
- useAppGraph,
737
- useLayout,
719
+ LoadingState,
720
+ useLoading,
721
+ useOperationResolver,
738
722
  useSettingsState,
739
- ErrorBoundary,
740
723
  useSurface,
741
- Surface,
742
- useSurfaces,
743
- isSurfaceAvailable,
744
- useApp,
745
- useOperationResolver
724
+ App,
725
+ usePluginManager,
726
+ PluginManagerProvider,
727
+ Surface
746
728
  };
747
- //# sourceMappingURL=chunk-6WXBT3EC.mjs.map
729
+ //# sourceMappingURL=chunk-I7FZT4A7.mjs.map