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