@dxos/app-framework 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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