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