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

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 (421) hide show
  1. package/.storybook/main.mts +1 -3
  2. package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-4NSF2SOO.mjs} +16 -11
  3. package/dist/lib/browser/capability-4NSF2SOO.mjs.map +7 -0
  4. package/dist/lib/browser/capability-EB3UKSKA.mjs +35 -0
  5. package/dist/lib/browser/capability-EB3UKSKA.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-27FZETIA.mjs} +324 -181
  7. package/dist/lib/browser/chunk-27FZETIA.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-CV7I2AAB.mjs +80 -0
  9. package/dist/lib/browser/chunk-CV7I2AAB.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-FL2XTEJH.mjs} +3 -4
  11. package/dist/lib/browser/chunk-FL2XTEJH.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-H7OMDDGW.mjs +42 -0
  13. package/dist/lib/browser/chunk-H7OMDDGW.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-HDQXX5DC.mjs +157 -0
  15. package/dist/lib/browser/chunk-HDQXX5DC.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  17. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-KNBRTZVK.mjs +892 -0
  19. package/dist/lib/browser/chunk-KNBRTZVK.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-NO7R7QHA.mjs} +4 -7
  21. package/dist/lib/browser/chunk-NO7R7QHA.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-P2E7VMRF.mjs} +10 -7
  23. package/dist/lib/browser/chunk-P2E7VMRF.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-QSXYHXCE.mjs} +3 -2
  25. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  27. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  28. package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
  29. package/dist/lib/browser/cli/index.mjs +90 -0
  30. package/dist/lib/browser/cli/index.mjs.map +7 -0
  31. package/dist/lib/browser/common/activation-events.mjs +24 -0
  32. package/dist/lib/browser/common/capabilities.mjs +46 -0
  33. package/dist/lib/browser/core/activation-event.mjs +1 -1
  34. package/dist/lib/browser/core/capability.mjs +1 -1
  35. package/dist/lib/browser/core/plugin-manager.mjs +4 -4
  36. package/dist/lib/browser/core/plugin.mjs +6 -4
  37. package/dist/lib/browser/core/url-loader.mjs +12 -0
  38. package/dist/lib/browser/index.mjs +40 -131
  39. package/dist/lib/browser/index.mjs.map +4 -4
  40. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs +43 -0
  41. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/testing/index.mjs +56 -34
  44. package/dist/lib/browser/testing/index.mjs.map +3 -3
  45. package/dist/lib/browser/{react → ui}/index.mjs +19 -21
  46. package/dist/lib/browser/ui/index.mjs.map +7 -0
  47. package/dist/lib/node-esm/{capability-CFLQ2QQU.mjs → capability-CB3MNEI3.mjs} +16 -11
  48. package/dist/lib/node-esm/capability-CB3MNEI3.mjs.map +7 -0
  49. package/dist/lib/node-esm/capability-CMROGK7R.mjs +36 -0
  50. package/dist/lib/node-esm/capability-CMROGK7R.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-37NG7SIN.mjs} +3 -4
  52. package/dist/lib/node-esm/chunk-37NG7SIN.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs +893 -0
  54. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs +81 -0
  56. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs +43 -0
  58. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-CG6UBBZZ.mjs} +10 -7
  60. package/dist/lib/node-esm/chunk-CG6UBBZZ.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  62. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-EXYTXQ47.mjs} +4 -7
  64. package/dist/lib/node-esm/chunk-EXYTXQ47.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
  66. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
  67. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs +158 -0
  68. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  70. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-YH44RHP6.mjs} +324 -181
  72. package/dist/lib/node-esm/chunk-YH44RHP6.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-ZZ7CKK6W.mjs} +3 -2
  74. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
  75. package/dist/lib/node-esm/cli/index.mjs +91 -0
  76. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  77. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  78. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  79. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  80. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  81. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  82. package/dist/lib/node-esm/core/capability.mjs +1 -1
  83. package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
  84. package/dist/lib/node-esm/core/plugin.mjs +6 -4
  85. package/dist/lib/node-esm/core/url-loader.mjs +13 -0
  86. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  87. package/dist/lib/node-esm/index.mjs +40 -131
  88. package/dist/lib/node-esm/index.mjs.map +4 -4
  89. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs +44 -0
  90. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs.map +7 -0
  91. package/dist/lib/node-esm/meta.json +1 -1
  92. package/dist/lib/node-esm/testing/index.mjs +56 -34
  93. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{react → ui}/index.mjs +19 -21
  95. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  96. package/dist/plugin/node-esm/index.mjs +384 -0
  97. package/dist/plugin/node-esm/index.mjs.map +7 -0
  98. package/dist/plugin/node-esm/meta.json +1 -0
  99. package/dist/types/src/{cli.d.ts → cli/cli.d.ts} +2 -2
  100. package/dist/types/src/cli/cli.d.ts.map +1 -0
  101. package/dist/types/src/cli/index.d.ts +2 -0
  102. package/dist/types/src/cli/index.d.ts.map +1 -0
  103. package/dist/types/src/common/activation-events.d.ts +27 -0
  104. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  105. package/dist/types/src/common/capabilities.d.ts +110 -0
  106. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  107. package/dist/types/src/common/index.d.ts +4 -9
  108. package/dist/types/src/common/index.d.ts.map +1 -1
  109. package/dist/types/src/common/operations.d.ts +8 -369
  110. package/dist/types/src/common/operations.d.ts.map +1 -1
  111. package/dist/types/src/common/translations.d.ts +0 -9
  112. package/dist/types/src/common/translations.d.ts.map +1 -1
  113. package/dist/types/src/core/activation-event.d.ts +1 -1
  114. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  115. package/dist/types/src/core/capability.d.ts +7 -7
  116. package/dist/types/src/core/capability.d.ts.map +1 -1
  117. package/dist/types/src/core/index.d.ts +1 -0
  118. package/dist/types/src/core/index.d.ts.map +1 -1
  119. package/dist/types/src/core/plugin-manager.d.ts +9 -2
  120. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  121. package/dist/types/src/core/plugin.d.ts +6 -1
  122. package/dist/types/src/core/plugin.d.ts.map +1 -1
  123. package/dist/types/src/core/url-loader.d.ts +25 -0
  124. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  125. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  126. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  127. package/dist/types/src/index.d.ts +1 -3
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
  130. package/dist/types/src/plugin-operation/history/errors.d.ts +30 -3
  131. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
  132. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
  133. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  134. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  135. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
  136. package/dist/types/src/plugin-operation/testing.d.ts +26 -77
  137. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
  138. package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
  139. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  140. package/dist/types/src/testing/withPluginManager.d.ts +1 -1
  141. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  142. package/dist/types/src/{react → ui/components/App}/App.d.ts +3 -2
  143. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  144. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
  145. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  146. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  147. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  148. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  149. package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
  150. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  151. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  152. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  153. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  154. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  155. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  156. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  157. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  158. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  159. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  160. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  161. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  162. package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
  163. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  164. package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
  165. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  166. package/dist/types/src/ui/components/index.d.ts +4 -0
  167. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  168. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  169. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  170. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +26 -9
  171. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  172. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  173. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  174. package/dist/types/src/{react → ui/hooks}/useCapabilities.d.ts +6 -1
  175. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  176. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  177. package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
  178. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  179. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  180. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  181. package/dist/types/src/ui/index.d.ts +3 -0
  182. package/dist/types/src/ui/index.d.ts.map +1 -0
  183. package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
  184. package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
  185. package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
  186. package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
  187. package/dist/types/src/vite-plugin/index.d.ts +3 -0
  188. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  189. package/dist/types/src/vite-plugin/packages.d.ts +7 -0
  190. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/moon.yml +20 -6
  193. package/package.json +91 -64
  194. package/src/{cli.ts → cli/cli.ts} +10 -10
  195. package/src/{playground/debug → cli}/index.ts +1 -1
  196. package/src/common/activation-events.ts +44 -0
  197. package/src/common/capabilities.ts +172 -0
  198. package/src/common/index.ts +4 -9
  199. package/src/common/operations.ts +6 -382
  200. package/src/common/translations.ts +0 -12
  201. package/src/context.ts +1 -1
  202. package/src/core/activation-event.ts +5 -2
  203. package/src/core/capability-manager.ts +1 -1
  204. package/src/core/capability.ts +11 -10
  205. package/src/core/index.ts +1 -0
  206. package/src/core/plugin-manager.test.ts +313 -44
  207. package/src/core/plugin-manager.ts +344 -157
  208. package/src/core/plugin.ts +10 -2
  209. package/src/core/url-loader.test.ts +79 -0
  210. package/src/core/url-loader.ts +148 -0
  211. package/src/index.ts +1 -3
  212. package/src/plugin-operation/OperationPlugin.ts +5 -5
  213. package/src/plugin-operation/history/capability.ts +5 -5
  214. package/src/plugin-operation/history/errors.ts +2 -6
  215. package/src/plugin-operation/history/history-tracker.test.ts +36 -42
  216. package/src/plugin-operation/history/undo-mapping.ts +6 -3
  217. package/src/plugin-operation/history/undo-registry.test.ts +3 -3
  218. package/src/plugin-operation/invoker-capability.ts +21 -7
  219. package/src/plugin-operation/meta.ts +1 -1
  220. package/src/plugin-operation/testing.ts +25 -45
  221. package/src/plugin-runtime/RuntimePlugin.ts +4 -4
  222. package/src/plugin-runtime/capability.ts +5 -5
  223. package/src/plugin-runtime/meta.ts +1 -1
  224. package/src/testing/service.ts +6 -6
  225. package/src/testing/withPluginManager.stories.tsx +6 -6
  226. package/src/testing/withPluginManager.tsx +46 -19
  227. package/src/ui/components/App/App.stories.tsx +92 -0
  228. package/src/{react → ui/components/App}/App.tsx +9 -11
  229. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  230. package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
  231. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
  232. package/src/ui/components/PluginManager/index.ts +5 -0
  233. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +28 -24
  234. package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +48 -58
  235. package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
  236. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  237. package/src/ui/components/Surface/context.ts +12 -0
  238. package/src/ui/components/Surface/index.ts +35 -0
  239. package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
  240. package/src/ui/components/index.ts +7 -0
  241. package/src/ui/hooks/index.ts +9 -0
  242. package/src/ui/hooks/useApp.test.tsx +159 -0
  243. package/src/{react → ui/hooks}/useApp.tsx +110 -30
  244. package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
  245. package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
  246. package/src/ui/hooks/useSurface.ts +13 -0
  247. package/src/ui/index.ts +6 -0
  248. package/src/vite-plugin/composer-plugin.ts +128 -0
  249. package/src/vite-plugin/import-map-plugin.ts +315 -0
  250. package/src/vite-plugin/index.ts +6 -0
  251. package/src/vite-plugin/packages.ts +29 -0
  252. package/tsconfig.json +4 -28
  253. package/tsconfig.node.json +2 -4
  254. package/typedoc.json +2 -4
  255. package/vitest.config.ts +1 -1
  256. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
  257. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
  258. package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
  259. package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
  260. package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
  264. package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
  266. package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
  268. package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-XYNO72GQ.mjs +0 -746
  272. package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
  273. package/dist/lib/browser/common/index.mjs +0 -38
  274. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +0 -32
  275. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
  276. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
  277. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
  278. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
  279. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
  280. package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
  281. package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
  282. package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +0 -747
  285. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
  288. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
  292. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
  294. package/dist/lib/node-esm/common/index.mjs +0 -39
  295. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +0 -33
  296. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
  297. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
  298. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
  299. package/dist/types/src/cli.d.ts.map +0 -1
  300. package/dist/types/src/common/activation-event.d.ts +0 -66
  301. package/dist/types/src/common/activation-event.d.ts.map +0 -1
  302. package/dist/types/src/common/capability.d.ts +0 -265
  303. package/dist/types/src/common/capability.d.ts.map +0 -1
  304. package/dist/types/src/common/collaboration.d.ts +0 -26
  305. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  306. package/dist/types/src/common/file.d.ts +0 -14
  307. package/dist/types/src/common/file.d.ts.map +0 -1
  308. package/dist/types/src/common/graph.d.ts +0 -21
  309. package/dist/types/src/common/graph.d.ts.map +0 -1
  310. package/dist/types/src/common/plugin.d.ts +0 -201
  311. package/dist/types/src/common/plugin.d.ts.map +0 -1
  312. package/dist/types/src/common/surface.d.ts.map +0 -1
  313. package/dist/types/src/playground/debug/Debug.d.ts +0 -8
  314. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  315. package/dist/types/src/playground/debug/index.d.ts +0 -2
  316. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  317. package/dist/types/src/playground/debug/plugin.d.ts +0 -3
  318. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  319. package/dist/types/src/playground/generator/Main.d.ts +0 -8
  320. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  321. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
  322. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  323. package/dist/types/src/playground/generator/generator.d.ts +0 -19
  324. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  325. package/dist/types/src/playground/generator/index.d.ts +0 -3
  326. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  327. package/dist/types/src/playground/generator/plugin.d.ts +0 -3
  328. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  329. package/dist/types/src/playground/layout/Layout.d.ts +0 -10
  330. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  331. package/dist/types/src/playground/layout/index.d.ts +0 -2
  332. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  333. package/dist/types/src/playground/layout/plugin.d.ts +0 -3
  334. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  335. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
  336. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  337. package/dist/types/src/playground/logger/index.d.ts +0 -2
  338. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  339. package/dist/types/src/playground/logger/plugin.d.ts +0 -3
  340. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  341. package/dist/types/src/playground/logger/schema.d.ts +0 -27
  342. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  343. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  344. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  345. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
  346. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  347. package/dist/types/src/plugin-settings/actions.d.ts +0 -61
  348. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  349. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
  350. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  351. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  352. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  353. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  354. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  355. package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
  356. package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
  357. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  358. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  359. package/dist/types/src/react/App.d.ts.map +0 -1
  360. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  361. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  362. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  363. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  364. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  365. package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
  366. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  367. package/dist/types/src/react/Surface.d.ts +0 -14
  368. package/dist/types/src/react/Surface.d.ts.map +0 -1
  369. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  370. package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
  371. package/dist/types/src/react/common.d.ts.map +0 -1
  372. package/dist/types/src/react/index.d.ts +0 -9
  373. package/dist/types/src/react/index.d.ts.map +0 -1
  374. package/dist/types/src/react/types.d.ts +0 -12
  375. package/dist/types/src/react/types.d.ts.map +0 -1
  376. package/dist/types/src/react/useApp.d.ts.map +0 -1
  377. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  378. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  379. package/dist/types/src/react/useOperationResolver.d.ts +0 -19
  380. package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
  381. package/src/common/activation-event.ts +0 -99
  382. package/src/common/capability.ts +0 -343
  383. package/src/common/collaboration.ts +0 -31
  384. package/src/common/file.ts +0 -22
  385. package/src/common/graph.ts +0 -30
  386. package/src/common/plugin.ts +0 -364
  387. package/src/playground/debug/Debug.tsx +0 -49
  388. package/src/playground/debug/plugin.ts +0 -16
  389. package/src/playground/generator/Main.tsx +0 -80
  390. package/src/playground/generator/Toolbar.tsx +0 -57
  391. package/src/playground/generator/generator.ts +0 -48
  392. package/src/playground/generator/index.ts +0 -6
  393. package/src/playground/generator/plugin.ts +0 -21
  394. package/src/playground/layout/Layout.tsx +0 -37
  395. package/src/playground/layout/plugin.ts +0 -18
  396. package/src/playground/logger/Toolbar.tsx +0 -33
  397. package/src/playground/logger/index.ts +0 -5
  398. package/src/playground/logger/plugin.ts +0 -42
  399. package/src/playground/logger/schema.ts +0 -22
  400. package/src/playground/playground.stories.tsx +0 -54
  401. package/src/plugin-settings/SettingsPlugin.ts +0 -19
  402. package/src/plugin-settings/actions.ts +0 -64
  403. package/src/plugin-settings/app-graph-builder.ts +0 -140
  404. package/src/plugin-settings/index.ts +0 -6
  405. package/src/plugin-settings/meta.ts +0 -10
  406. package/src/plugin-settings/operation-resolver.ts +0 -55
  407. package/src/plugin-settings/translations.ts +0 -19
  408. package/src/react/App.stories.tsx +0 -63
  409. package/src/react/DefaultFallback.tsx +0 -26
  410. package/src/react/ErrorBoundary.tsx +0 -56
  411. package/src/react/index.ts +0 -14
  412. package/src/react/types.ts +0 -27
  413. package/src/react/useOperationResolver.ts +0 -40
  414. /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-RFSO3JRG.mjs.map} +0 -0
  415. /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  416. /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
  417. /package/dist/lib/browser/{common/index.mjs.map → core/url-loader.mjs.map} +0 -0
  418. /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
  419. /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
  420. /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
  421. /package/src/{react → ui/hooks}/useLoading.tsx +0 -0
@@ -0,0 +1,893 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ PluginManagerContext
4
+ } from "./chunk-FKE4Z3D6.mjs";
5
+ import {
6
+ capabilities_exports
7
+ } from "./chunk-7PPVTBYR.mjs";
8
+ import {
9
+ activation_events_exports
10
+ } from "./chunk-WZCSOX5Q.mjs";
11
+ import {
12
+ plugin_manager_exports
13
+ } from "./chunk-YH44RHP6.mjs";
14
+
15
+ // src/ui/components/App/App.tsx
16
+ import React2 from "react";
17
+
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
+ };
48
+
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: 111,
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 [startupProgress, setStartupProgress] = useState({
90
+ activated: 0,
91
+ total: 0,
92
+ progress: 0
93
+ });
94
+ const cached = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? "[]"), []);
95
+ const enabled = useMemo(() => safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults, [
96
+ safeMode,
97
+ cacheEnabled,
98
+ cached,
99
+ defaults
100
+ ]);
101
+ const isExternalManager = !!pluginManager;
102
+ const manager = useMemo(() => {
103
+ const mgr = pluginManager ?? plugin_manager_exports.make({
104
+ pluginLoader,
105
+ plugins,
106
+ core,
107
+ enabled
108
+ });
109
+ log("useApp: useMemo created/reused manager", {
110
+ provided: !!pluginManager
111
+ }, {
112
+ F: __dxlog_file,
113
+ L: 135,
114
+ S: void 0,
115
+ C: (f, a) => f(...a)
116
+ });
117
+ return mgr;
118
+ }, [
119
+ pluginManager,
120
+ pluginLoader,
121
+ plugins,
122
+ core,
123
+ enabled
124
+ ]);
125
+ useEffect(() => {
126
+ if (!cacheEnabled) {
127
+ return;
128
+ }
129
+ return manager.registry.subscribe(manager.enabled, (value) => {
130
+ localStorage.setItem(ENABLED_KEY, JSON.stringify(value));
131
+ });
132
+ }, [
133
+ cacheEnabled,
134
+ manager
135
+ ]);
136
+ useEffect(() => {
137
+ setupDevtools(manager);
138
+ }, [
139
+ manager
140
+ ]);
141
+ useAsyncEffect(async () => {
142
+ log("useApp: effect mount", void 0, {
143
+ F: __dxlog_file,
144
+ L: 153,
145
+ S: void 0,
146
+ C: (f, a) => f(...a)
147
+ });
148
+ manager.capabilities.contribute({
149
+ interface: capabilities_exports.PluginManager,
150
+ implementation: manager,
151
+ module: "org.dxos.app-framework.plugin-manager"
152
+ });
153
+ manager.capabilities.contribute({
154
+ interface: capabilities_exports.AtomRegistry,
155
+ implementation: manager.registry,
156
+ module: "org.dxos.app-framework.atom-registry"
157
+ });
158
+ const progressInterval = setInterval(() => {
159
+ if (readyRef.current) {
160
+ clearInterval(progressInterval);
161
+ return;
162
+ }
163
+ const active = manager.getActive();
164
+ const modules = manager.getModules();
165
+ const total = modules.length;
166
+ const activated = active.length;
167
+ const lastModule = active.length > 0 ? active[active.length - 1] : void 0;
168
+ setStartupProgress({
169
+ activated,
170
+ total,
171
+ progress: total > 0 ? activated / total : 0,
172
+ status: lastModule ? humanizeModuleId(lastModule) : void 0
173
+ });
174
+ }, 100);
175
+ const fiber = Effect.gen(function* () {
176
+ const queue = yield* PubSub.subscribe(manager.activation);
177
+ const listener = yield* Effect.forkDaemon(Queue.take(queue).pipe(Effect.tap(({ event, state, error: error$ }) => Effect.sync(() => {
178
+ if (event === activation_events_exports.Startup.id && state === "activated") {
179
+ clearTimeout(timeoutId);
180
+ clearInterval(progressInterval);
181
+ setReady(true);
182
+ readyRef.current = true;
183
+ globalThis.composer?.profiler?.dump();
184
+ }
185
+ if (error$ && !readyRef.current) {
186
+ setError(error$);
187
+ errorRef.current = error$;
188
+ }
189
+ })), Effect.forever));
190
+ yield* Effect.all([
191
+ ...setupEvents.map((event) => manager.activate(event)),
192
+ manager.activate(activation_events_exports.SetupReactSurface),
193
+ manager.activate(activation_events_exports.Startup)
194
+ ]);
195
+ return yield* Fiber.join(listener);
196
+ }).pipe(Effect.scoped, Effect.runFork);
197
+ const timeoutId = setTimeout(() => {
198
+ if (!readyRef.current && !errorRef.current) {
199
+ log.warn("startup timeout diagnostic", {
200
+ eventsFired: manager.getEventsFired(),
201
+ activeModules: manager.getActive(),
202
+ pendingReset: manager.getPendingReset()
203
+ }, {
204
+ F: __dxlog_file,
205
+ L: 222,
206
+ S: void 0,
207
+ C: (f, a) => f(...a)
208
+ });
209
+ void runAndForwardErrors(Fiber.interrupt(fiber));
210
+ setError(new Error(`Startup timed out after ${timeout}ms`));
211
+ }
212
+ }, timeout);
213
+ return () => {
214
+ log("useApp: effect cleanup", void 0, {
215
+ F: __dxlog_file,
216
+ L: 233,
217
+ S: void 0,
218
+ C: (f, a) => f(...a)
219
+ });
220
+ clearTimeout(timeoutId);
221
+ clearInterval(progressInterval);
222
+ void runAndForwardErrors(Fiber.interrupt(fiber));
223
+ if (!isExternalManager) {
224
+ void runAndForwardErrors(manager.shutdown());
225
+ }
226
+ };
227
+ }, [
228
+ manager
229
+ ]);
230
+ return useCallback(() => /* @__PURE__ */ React.createElement(ErrorBoundary, {
231
+ name: "app",
232
+ FallbackComponent: fallback
233
+ }, /* @__PURE__ */ React.createElement(PluginManagerProvider, {
234
+ value: manager
235
+ }, /* @__PURE__ */ React.createElement(ContextProtocolProvider, {
236
+ value: manager,
237
+ context: PluginManagerContext
238
+ }, /* @__PURE__ */ React.createElement(RegistryContext.Provider, {
239
+ value: manager.registry
240
+ }, /* @__PURE__ */ React.createElement(App, {
241
+ placeholder,
242
+ ready,
243
+ error,
244
+ debounce,
245
+ progress: startupProgress
246
+ }))))), [
247
+ fallback,
248
+ manager,
249
+ placeholder,
250
+ ready,
251
+ error
252
+ ]);
253
+ };
254
+ var setupDevtools = (manager) => {
255
+ globalThis.composer ??= {};
256
+ globalThis.composer.manager = manager;
257
+ };
258
+ var humanizeModuleId = (moduleId) => {
259
+ const pluginMatch = moduleId.match(/\.plugin\.([^.]+)\./);
260
+ if (pluginMatch) {
261
+ const name = pluginMatch[1];
262
+ return name.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
263
+ }
264
+ const parts = moduleId.split(".");
265
+ return parts[parts.length - 1];
266
+ };
267
+
268
+ // src/ui/hooks/useCapabilities.ts
269
+ import { useAtomValue } from "@effect-atom/atom-react";
270
+ import { useCallback as useCallback2 } from "react";
271
+ import { invariant as invariant2 } from "@dxos/invariant";
272
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/hooks/useCapabilities.ts";
273
+ var useCapabilities = (interfaceDef) => {
274
+ const manager = usePluginManager();
275
+ return useAtomValue(manager.capabilities.atom(interfaceDef));
276
+ };
277
+ var useCapability = (interfaceDef) => {
278
+ const capabilities = useCapabilities(interfaceDef);
279
+ invariant2(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`, {
280
+ F: __dxlog_file2,
281
+ L: 30,
282
+ S: void 0,
283
+ A: [
284
+ "capabilities.length > 0",
285
+ "`No capability found for ${interfaceDef.identifier}`"
286
+ ]
287
+ });
288
+ return capabilities[0];
289
+ };
290
+ var useAtomCapability = (atomCapability) => {
291
+ const atom = useCapability(atomCapability);
292
+ return useAtomValue(atom);
293
+ };
294
+ var useAtomCapabilityState = (atomCapability) => {
295
+ const registry = useCapability(capabilities_exports.AtomRegistry);
296
+ const atom = useCapability(atomCapability);
297
+ const value = useAtomValue(atom);
298
+ const update = useCallback2((fn) => {
299
+ registry.set(atom, fn(registry.get(atom)));
300
+ }, [
301
+ registry,
302
+ atom
303
+ ]);
304
+ return [
305
+ value,
306
+ update
307
+ ];
308
+ };
309
+ var useOperationInvoker = () => useCapability(capabilities_exports.OperationInvoker);
310
+
311
+ // src/ui/hooks/useLoading.tsx
312
+ import { useEffect as useEffect2, useState as useState2 } from "react";
313
+ var LoadingState = /* @__PURE__ */ (function(LoadingState2) {
314
+ LoadingState2[LoadingState2["Loading"] = 0] = "Loading";
315
+ LoadingState2[LoadingState2["FadeIn"] = 1] = "FadeIn";
316
+ LoadingState2[LoadingState2["FadeOut"] = 2] = "FadeOut";
317
+ LoadingState2[LoadingState2["Done"] = 3] = "Done";
318
+ return LoadingState2;
319
+ })({});
320
+ var useLoading = (ready, debounce = 0) => {
321
+ const [stage, setStage] = useState2(0);
322
+ useEffect2(() => {
323
+ if (!debounce) {
324
+ return;
325
+ }
326
+ const i = setInterval(() => {
327
+ setStage((stage2) => {
328
+ switch (stage2) {
329
+ case 0: {
330
+ if (!ready) {
331
+ return 1;
332
+ } else {
333
+ clearInterval(i);
334
+ return 3;
335
+ }
336
+ }
337
+ case 1: {
338
+ if (ready) {
339
+ return 2;
340
+ }
341
+ break;
342
+ }
343
+ case 2: {
344
+ clearInterval(i);
345
+ return 3;
346
+ }
347
+ }
348
+ return stage2;
349
+ });
350
+ }, debounce);
351
+ return () => clearInterval(i);
352
+ }, [
353
+ debounce
354
+ ]);
355
+ if (!debounce) {
356
+ return ready ? 3 : 0;
357
+ }
358
+ return stage;
359
+ };
360
+
361
+ // src/ui/hooks/useSettingsState.ts
362
+ import { RegistryContext as RegistryContext2, useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
363
+ import { useCallback as useCallback3, useContext } from "react";
364
+ var useSettingsState = (atom) => {
365
+ const registry = useContext(RegistryContext2);
366
+ const settings = useAtomValue2(atom);
367
+ const updateSettings = useCallback3((fn) => {
368
+ registry.set(atom, fn(registry.get(atom)));
369
+ }, [
370
+ registry,
371
+ atom
372
+ ]);
373
+ return {
374
+ settings,
375
+ updateSettings
376
+ };
377
+ };
378
+
379
+ // src/ui/hooks/useSurface.ts
380
+ import { useContext as useContext2 } from "react";
381
+ import { raise } from "@dxos/debug";
382
+ var useSurface = () => {
383
+ return useContext2(Surface.Context) ?? raise(new Error("Missing SurfaceContext"));
384
+ };
385
+
386
+ // src/ui/components/App/App.tsx
387
+ var App = ({ placeholder: Placeholder, ready, error, debounce, progress }) => {
388
+ const reactContexts = useCapabilities(capabilities_exports.ReactContext);
389
+ const reactRoots = useCapabilities(capabilities_exports.ReactRoot);
390
+ const stage = useLoading(ready, debounce);
391
+ if (error) {
392
+ throw error;
393
+ }
394
+ if (stage < LoadingState.Done) {
395
+ if (!Placeholder) {
396
+ return null;
397
+ }
398
+ return /* @__PURE__ */ React2.createElement(Placeholder, {
399
+ stage,
400
+ progress
401
+ });
402
+ }
403
+ const ComposedContext = composeContexts(reactContexts);
404
+ return /* @__PURE__ */ React2.createElement(ComposedContext, null, reactRoots.map(({ id, root: Component }) => /* @__PURE__ */ React2.createElement(Component, {
405
+ key: id
406
+ })));
407
+ };
408
+ var composeContexts = (contexts) => {
409
+ if (contexts.length === 0) {
410
+ return ({ children }) => /* @__PURE__ */ React2.createElement(React2.Fragment, null, children);
411
+ }
412
+ return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React2.createElement(Acc, null, /* @__PURE__ */ React2.createElement(Next, null, children)));
413
+ };
414
+
415
+ // src/ui/components/PluginManager/PluginManagerProvider.ts
416
+ import { createContext, useContext as useContext3 } from "react";
417
+ import { raise as raise2 } from "@dxos/debug";
418
+ var PluginManagerContext2 = createContext(void 0);
419
+ var usePluginManager = () => useContext3(PluginManagerContext2) ?? raise2(new Error("Missing PluginManagerContext"));
420
+ var PluginManagerProvider = PluginManagerContext2.Provider;
421
+
422
+ // src/ui/components/Surface/context.ts
423
+ import { createContext as createContext2 } from "react";
424
+ var SurfaceContext = createContext2(void 0);
425
+
426
+ // src/ui/components/Surface/SurfaceComponent.tsx
427
+ import React5, { Fragment, Profiler, Suspense, forwardRef as forwardRef2, memo, useEffect as useEffect3, useMemo as useMemo3, useRef as useRef3 } from "react";
428
+ import { log as log2 } from "@dxos/log";
429
+ import { ErrorBoundary as ErrorBoundary2 } from "@dxos/react-error-boundary";
430
+ import { useDefaultValue as useDefaultValue2 } from "@dxos/react-hooks";
431
+ import { byPosition } from "@dxos/util";
432
+
433
+ // src/ui/components/Surface/SurfaceInfo.tsx
434
+ import React3, { cloneElement, forwardRef, useCallback as useCallback4, useLayoutEffect, useState as useState3 } from "react";
435
+ import { createPortal } from "react-dom";
436
+ import { addEventListener, combine } from "@dxos/async";
437
+ import { useMergeRefs } from "@dxos/react-hooks";
438
+ var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
439
+ const [rect, setRect] = useState3(null);
440
+ const [expand, setExpand] = useState3(false);
441
+ const info = useSurface();
442
+ const [root, setRoot] = useState3(null);
443
+ const measureRef = useCallback4((node) => setRoot(node), []);
444
+ const mergedRef = useMergeRefs([
445
+ measureRef,
446
+ forwardedRef
447
+ ]);
448
+ const childWithRef = /* @__PURE__ */ cloneElement(children, {
449
+ ref: mergedRef
450
+ });
451
+ useLayoutEffect(() => {
452
+ if (!root) {
453
+ setRect(null);
454
+ return;
455
+ }
456
+ const measure = () => {
457
+ setRect(root.getBoundingClientRect());
458
+ };
459
+ const observer = new ResizeObserver(measure);
460
+ observer.observe(root);
461
+ measure();
462
+ return combine(addEventListener(window, "scroll", measure, true), addEventListener(window, "resize", measure), () => {
463
+ observer.disconnect();
464
+ });
465
+ }, [
466
+ root
467
+ ]);
468
+ const padding = 0;
469
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, childWithRef, rect && /* @__PURE__ */ createPortal(
470
+ /* @__PURE__ */ React3.createElement("div", {
471
+ role: "none",
472
+ className: "z-[100] fixed flex flex-col-reverse scrollbar-none overflow-auto pointer-events-none",
473
+ style: {
474
+ top: rect.top + padding,
475
+ left: rect.left + padding,
476
+ width: rect.width - padding * 2,
477
+ height: rect.height - padding * 2
478
+ }
479
+ }, expand ? /* @__PURE__ */ React3.createElement("div", {
480
+ className: "absolute inset-0 bg-deck-surface border border-green-500 cursor-pointer pointer-events-auto overflow-auto",
481
+ onPointerDown: (ev) => ev.stopPropagation(),
482
+ onClick: (ev) => {
483
+ ev.stopPropagation();
484
+ setExpand(false);
485
+ }
486
+ }, /* @__PURE__ */ React3.createElement("pre", {
487
+ className: "p-2 text-xs text-description font-mono"
488
+ }, JSON.stringify({
489
+ info
490
+ }, null, 2))) : /* @__PURE__ */ React3.createElement("span", {
491
+ 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",
492
+ title: info.id,
493
+ onPointerDown: (ev) => ev.stopPropagation(),
494
+ onClick: (ev) => {
495
+ ev.stopPropagation();
496
+ setExpand(true);
497
+ }
498
+ }, "\u24D8")),
499
+ // TODO(burdon): Create well-known element to gather all debug portals.
500
+ document.body
501
+ ));
502
+ });
503
+
504
+ // src/ui/components/Surface/SurfaceProfilerContext.tsx
505
+ import React4, { createContext as createContext3, useContext as useContext4, useMemo as useMemo2, useRef as useRef2, useSyncExternalStore } from "react";
506
+ var MAX_ENTRIES = 500;
507
+ var SurfaceProfilerStore = class {
508
+ _entries = [];
509
+ _listeners = /* @__PURE__ */ new Set();
510
+ _snapshot = [];
511
+ _pendingNotify = false;
512
+ /** Records an entry and schedules a deferred notification to avoid re-render loops. */
513
+ record(entry) {
514
+ this._entries.push(entry);
515
+ if (this._entries.length > MAX_ENTRIES) {
516
+ this._entries = this._entries.slice(-MAX_ENTRIES);
517
+ }
518
+ this._snapshot = [
519
+ ...this._entries
520
+ ];
521
+ this._scheduleNotify();
522
+ }
523
+ clear() {
524
+ this._entries = [];
525
+ this._snapshot = [];
526
+ this._notifySync();
527
+ }
528
+ subscribe = (listener) => {
529
+ this._listeners.add(listener);
530
+ return () => {
531
+ this._listeners.delete(listener);
532
+ };
533
+ };
534
+ getSnapshot = () => {
535
+ return this._snapshot;
536
+ };
537
+ /**
538
+ * Defers notification to the next animation frame to break the
539
+ * Profiler onRender → record → notify → re-render → onRender loop.
540
+ */
541
+ _scheduleNotify() {
542
+ if (!this._pendingNotify) {
543
+ this._pendingNotify = true;
544
+ requestAnimationFrame(() => {
545
+ this._pendingNotify = false;
546
+ this._notifySync();
547
+ });
548
+ }
549
+ }
550
+ _notifySync() {
551
+ for (const listener of this._listeners) {
552
+ listener();
553
+ }
554
+ }
555
+ };
556
+ var SurfaceProfilerContext = /* @__PURE__ */ createContext3(void 0);
557
+ var SurfaceProfilerProvider = ({ children }) => {
558
+ const storeRef = useRef2(null);
559
+ if (!storeRef.current) {
560
+ storeRef.current = new SurfaceProfilerStore();
561
+ }
562
+ return /* @__PURE__ */ React4.createElement(SurfaceProfilerContext.Provider, {
563
+ value: {
564
+ store: storeRef.current
565
+ }
566
+ }, children);
567
+ };
568
+ var useSurfaceProfilerCallback = () => {
569
+ const store = useContext4(SurfaceProfilerContext)?.store;
570
+ return useMemo2(() => {
571
+ if (!store) {
572
+ return void 0;
573
+ }
574
+ return (id, phase, actualDuration, baseDuration, startTime, commitTime) => {
575
+ store.record({
576
+ id,
577
+ phase,
578
+ actualDuration,
579
+ baseDuration,
580
+ startTime,
581
+ commitTime,
582
+ timestamp: Date.now()
583
+ });
584
+ };
585
+ }, [
586
+ store
587
+ ]);
588
+ };
589
+ var useSurfaceProfilerEntries = () => {
590
+ const context = useContext4(SurfaceProfilerContext);
591
+ return useSyncExternalStore(context?.store.subscribe ?? noop, context?.store.getSnapshot ?? emptySnapshot);
592
+ };
593
+ var useSurfaceProfilerStats = () => {
594
+ const entries = useSurfaceProfilerEntries();
595
+ const statsMap = /* @__PURE__ */ new Map();
596
+ for (const entry of entries) {
597
+ let stats = statsMap.get(entry.id);
598
+ if (!stats) {
599
+ stats = {
600
+ id: entry.id,
601
+ mountCount: 0,
602
+ updateCount: 0,
603
+ totalRenders: 0,
604
+ avgActualDuration: 0,
605
+ maxActualDuration: 0,
606
+ avgBaseDuration: 0,
607
+ lastActualDuration: 0,
608
+ lastCommitTime: 0
609
+ };
610
+ statsMap.set(entry.id, stats);
611
+ }
612
+ if (entry.phase === "mount") {
613
+ stats.mountCount++;
614
+ } else {
615
+ stats.updateCount++;
616
+ }
617
+ stats.totalRenders++;
618
+ stats.avgActualDuration = (stats.avgActualDuration * (stats.totalRenders - 1) + entry.actualDuration) / stats.totalRenders;
619
+ stats.avgBaseDuration = (stats.avgBaseDuration * (stats.totalRenders - 1) + entry.baseDuration) / stats.totalRenders;
620
+ stats.maxActualDuration = Math.max(stats.maxActualDuration, entry.actualDuration);
621
+ stats.lastActualDuration = entry.actualDuration;
622
+ stats.lastCommitTime = entry.commitTime;
623
+ }
624
+ return [
625
+ ...statsMap.values()
626
+ ].sort((a, b) => b.maxActualDuration - a.maxActualDuration);
627
+ };
628
+ var useSurfaceProfilerClear = () => {
629
+ const store = useContext4(SurfaceProfilerContext)?.store;
630
+ return useMemo2(() => store ? () => store.clear() : void 0, [
631
+ store
632
+ ]);
633
+ };
634
+ var noop = () => () => {
635
+ };
636
+ var EMPTY_SNAPSHOT = [];
637
+ var emptySnapshot = () => EMPTY_SNAPSHOT;
638
+
639
+ // src/ui/components/Surface/SurfaceComponent.tsx
640
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/app-framework/src/ui/components/Surface/SurfaceComponent.tsx";
641
+ var DEBUG = import.meta.env.VITE_DEBUG;
642
+ var DEFAULT_PLACEHOLDER = /* @__PURE__ */ React5.createElement(Fragment, null);
643
+ var WebComponentWrapper = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id, role, data, limit, definition, ...rest }, forwardedRef) => {
644
+ const containerRef = useRef3(null);
645
+ const elementRef = useRef3(null);
646
+ const propsRef = useRef3({
647
+ id,
648
+ role,
649
+ data,
650
+ limit,
651
+ ...rest
652
+ });
653
+ propsRef.current = {
654
+ id,
655
+ role,
656
+ data,
657
+ limit,
658
+ ...rest
659
+ };
660
+ useEffect3(() => {
661
+ if (!containerRef.current || elementRef.current) {
662
+ return;
663
+ }
664
+ const element = document.createElement(definition.tagName);
665
+ elementRef.current = element;
666
+ Object.assign(element, propsRef.current);
667
+ containerRef.current.appendChild(element);
668
+ if (typeof forwardedRef === "function") {
669
+ forwardedRef(element);
670
+ } else if (forwardedRef) {
671
+ forwardedRef.current = element;
672
+ }
673
+ return () => {
674
+ if (elementRef.current && containerRef.current?.contains(elementRef.current)) {
675
+ containerRef.current.removeChild(elementRef.current);
676
+ }
677
+ if (typeof forwardedRef === "function") {
678
+ forwardedRef(null);
679
+ } else if (forwardedRef) {
680
+ forwardedRef.current = null;
681
+ }
682
+ elementRef.current = null;
683
+ };
684
+ }, [
685
+ definition.tagName,
686
+ forwardedRef
687
+ ]);
688
+ useEffect3(() => {
689
+ const element = elementRef.current;
690
+ if (!element) {
691
+ return;
692
+ }
693
+ Object.assign(element, propsRef.current);
694
+ });
695
+ return /* @__PURE__ */ React5.createElement("div", {
696
+ ref: containerRef
697
+ });
698
+ }));
699
+ WebComponentWrapper.displayName = "WebComponentWrapper";
700
+ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id, role, data, limit, fallback = ErrorFallback2, definition, ...rest }, forwardedRef) => {
701
+ const contextValue = useMemo3(() => ({
702
+ id,
703
+ role,
704
+ data
705
+ }), [
706
+ id,
707
+ role,
708
+ data
709
+ ]);
710
+ const onProfilerRender = useSurfaceProfilerCallback();
711
+ const profilerId = `surface/${id}/${role}`;
712
+ if (definition.kind === "web-component") {
713
+ return /* @__PURE__ */ React5.createElement(ErrorBoundary2, {
714
+ name: "surface",
715
+ resetKeys: [
716
+ data
717
+ ],
718
+ FallbackComponent: fallback
719
+ }, /* @__PURE__ */ React5.createElement(SurfaceContext.Provider, {
720
+ value: contextValue
721
+ }, /* @__PURE__ */ React5.createElement(WebComponentWrapper, {
722
+ id,
723
+ role,
724
+ data,
725
+ limit,
726
+ definition,
727
+ ref: forwardedRef,
728
+ ...rest
729
+ })));
730
+ }
731
+ const Component = definition.component;
732
+ const debug = DEBUG || "__DX_DEBUG__" in window;
733
+ if (debug) {
734
+ return /* @__PURE__ */ React5.createElement(ErrorBoundary2, {
735
+ name: "surface",
736
+ resetKeys: [
737
+ data
738
+ ],
739
+ FallbackComponent: fallback
740
+ }, /* @__PURE__ */ React5.createElement("div", {
741
+ role: "none",
742
+ className: "contents",
743
+ "data-id": id,
744
+ "data-role": role
745
+ }, /* @__PURE__ */ React5.createElement(SurfaceContext.Provider, {
746
+ value: contextValue
747
+ }, /* @__PURE__ */ React5.createElement(SurfaceInfo, {
748
+ ref: forwardedRef
749
+ }, onProfilerRender && !profilerId.includes("org.dxos.plugin.debug") ? /* @__PURE__ */ React5.createElement(Profiler, {
750
+ id: profilerId,
751
+ onRender: onProfilerRender
752
+ }, /* @__PURE__ */ React5.createElement(Component, {
753
+ id,
754
+ role,
755
+ data,
756
+ limit,
757
+ ...rest
758
+ })) : /* @__PURE__ */ React5.createElement(Component, {
759
+ id,
760
+ role,
761
+ data,
762
+ limit,
763
+ ...rest
764
+ })))));
765
+ }
766
+ return /* @__PURE__ */ React5.createElement(ErrorBoundary2, {
767
+ name: "surface",
768
+ resetKeys: [
769
+ data
770
+ ],
771
+ FallbackComponent: fallback
772
+ }, /* @__PURE__ */ React5.createElement("div", {
773
+ role: "none",
774
+ className: "contents",
775
+ "data-id": id,
776
+ "data-role": role
777
+ }, /* @__PURE__ */ React5.createElement(SurfaceContext.Provider, {
778
+ value: contextValue
779
+ }, /* @__PURE__ */ React5.createElement(Component, {
780
+ id,
781
+ role,
782
+ data,
783
+ limit,
784
+ ...rest,
785
+ ref: forwardedRef
786
+ }))));
787
+ }));
788
+ SurfaceContextProvider.displayName = "SurfaceContextProvider";
789
+ var SurfaceComponent = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _id, role, data: dataProp, limit, placeholder = DEFAULT_PLACEHOLDER, ...rest }, forwardedRef) => {
790
+ const data = useDefaultValue2(dataProp, () => ({}));
791
+ const surfaces = useSurfaces();
792
+ const definitions = findCandidates(surfaces, {
793
+ role,
794
+ data
795
+ });
796
+ const candidates = limit ? definitions.slice(0, limit) : definitions;
797
+ if (DEBUG && candidates.length === 0) {
798
+ log2.warn("no candidates for surface", {
799
+ role,
800
+ data
801
+ }, {
802
+ F: __dxlog_file3,
803
+ L: 195,
804
+ S: void 0,
805
+ C: (f, a) => f(...a)
806
+ });
807
+ return null;
808
+ }
809
+ return /* @__PURE__ */ React5.createElement(Suspense, {
810
+ fallback: placeholder
811
+ }, candidates.map((definition) => /* @__PURE__ */ React5.createElement(SurfaceContextProvider, {
812
+ key: definition.id,
813
+ id: definition.id,
814
+ role,
815
+ data,
816
+ limit,
817
+ definition,
818
+ ref: forwardedRef,
819
+ ...rest
820
+ })));
821
+ }));
822
+ SurfaceComponent.displayName = "Surface";
823
+ var ErrorFallback2 = ({ error }) => {
824
+ const { message } = error instanceof Error ? error : {
825
+ message: String(error)
826
+ };
827
+ return /* @__PURE__ */ React5.createElement("div", {
828
+ role: "alert",
829
+ "data-testid": "error-boundary-fallback"
830
+ }, /* @__PURE__ */ React5.createElement("h1", {
831
+ className: "flex gap-2 text-sm mt-2 text-info-text"
832
+ }, message));
833
+ };
834
+ var findCandidates = (surfaces, { role, data }) => {
835
+ 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);
836
+ };
837
+ var useSurfaces = () => {
838
+ const surfaces = useCapabilities(capabilities_exports.ReactSurface);
839
+ return useMemo3(() => surfaces.flat(), [
840
+ surfaces
841
+ ]);
842
+ };
843
+ var isSurfaceAvailable = (capabilityManager, { role, data }) => {
844
+ const surfaces = capabilityManager.getAll(capabilities_exports.ReactSurface);
845
+ const candidates = findCandidates(surfaces.flat(), {
846
+ role,
847
+ data
848
+ });
849
+ return candidates.length > 0;
850
+ };
851
+
852
+ // src/ui/components/Surface/types.ts
853
+ var create = (definition) => ({
854
+ ...definition,
855
+ kind: "react"
856
+ });
857
+ var createWeb = (definition) => ({
858
+ ...definition,
859
+ kind: "web-component"
860
+ });
861
+
862
+ // src/ui/components/Surface/index.ts
863
+ (function(Surface2) {
864
+ Surface2.create = create;
865
+ Surface2.createWeb = createWeb;
866
+ Surface2.Context = SurfaceContext;
867
+ Surface2.Surface = SurfaceComponent;
868
+ Surface2.isAvailable = isSurfaceAvailable;
869
+ Surface2.ProfilerProvider = SurfaceProfilerProvider;
870
+ Surface2.useProfilerCallback = useSurfaceProfilerCallback;
871
+ Surface2.useProfilerEntries = useSurfaceProfilerEntries;
872
+ Surface2.useProfilerStats = useSurfaceProfilerStats;
873
+ Surface2.useProfilerClear = useSurfaceProfilerClear;
874
+ })(Surface || (Surface = {}));
875
+ var Surface;
876
+
877
+ export {
878
+ useApp,
879
+ useCapabilities,
880
+ useCapability,
881
+ useAtomCapability,
882
+ useAtomCapabilityState,
883
+ useOperationInvoker,
884
+ LoadingState,
885
+ useLoading,
886
+ useSettingsState,
887
+ useSurface,
888
+ App,
889
+ usePluginManager,
890
+ PluginManagerProvider,
891
+ Surface
892
+ };
893
+ //# sourceMappingURL=chunk-7JPKC7OM.mjs.map