@dxos/app-framework 0.8.4-main.937b3ca → 0.8.4-main.9be5663bfe

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 (430) hide show
  1. package/.storybook/main.mts +1 -3
  2. package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-BBBBAPDI.mjs} +16 -11
  3. package/dist/lib/browser/capability-BBBBAPDI.mjs.map +7 -0
  4. package/dist/lib/browser/capability-OP63CD5N.mjs +35 -0
  5. package/dist/lib/browser/capability-OP63CD5N.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-2CKCJ6PN.mjs} +6 -4
  7. package/dist/lib/browser/chunk-2CKCJ6PN.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-F7FW2RK2.mjs} +9 -12
  9. package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-FU4GAFUQ.mjs} +10 -7
  11. package/dist/lib/browser/chunk-FU4GAFUQ.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-GX4TUNM6.mjs} +343 -187
  13. package/dist/lib/browser/chunk-GX4TUNM6.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  15. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-JKWMHZP6.mjs +80 -0
  17. package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-LVJW5EFU.mjs +157 -0
  19. package/dist/lib/browser/chunk-LVJW5EFU.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-QSXYHXCE.mjs} +3 -2
  21. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  23. package/dist/lib/browser/chunk-T3Y4AEKX.mjs +42 -0
  24. package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  26. package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
  27. package/dist/lib/browser/chunk-WPE6AL7I.mjs +905 -0
  28. package/dist/lib/browser/chunk-WPE6AL7I.mjs.map +7 -0
  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 +3 -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-H5PPENOC.mjs +43 -0
  41. package/dist/lib/browser/invoker-capability-H5PPENOC.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-AWBEMRYR.mjs} +16 -11
  48. package/dist/lib/node-esm/capability-AWBEMRYR.mjs.map +7 -0
  49. package/dist/lib/node-esm/capability-WFEG6CIZ.mjs +36 -0
  50. package/dist/lib/node-esm/capability-WFEG6CIZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-42KBWDE4.mjs} +6 -4
  52. package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs +158 -0
  54. package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-BCEOLX47.mjs} +343 -187
  56. package/dist/lib/node-esm/chunk-BCEOLX47.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  58. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
  60. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
  61. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs +81 -0
  62. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-LQKOTNJW.mjs +906 -0
  64. package/dist/lib/node-esm/chunk-LQKOTNJW.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-ULUEXB7Q.mjs} +10 -7
  66. package/dist/lib/node-esm/chunk-ULUEXB7Q.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-URWHJQT2.mjs} +9 -12
  68. package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +43 -0
  70. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  72. package/dist/lib/node-esm/chunk-WZCSOX5Q.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 +3 -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-S3ZA527J.mjs +44 -0
  90. package/dist/lib/node-esm/invoker-capability-S3ZA527J.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-manager.d.ts +5 -0
  116. package/dist/types/src/core/capability-manager.d.ts.map +1 -1
  117. package/dist/types/src/core/capability.d.ts +13 -7
  118. package/dist/types/src/core/capability.d.ts.map +1 -1
  119. package/dist/types/src/core/index.d.ts +1 -0
  120. package/dist/types/src/core/index.d.ts.map +1 -1
  121. package/dist/types/src/core/plugin-manager.d.ts +9 -2
  122. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  123. package/dist/types/src/core/plugin.d.ts +6 -1
  124. package/dist/types/src/core/plugin.d.ts.map +1 -1
  125. package/dist/types/src/core/url-loader.d.ts +25 -0
  126. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  127. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  128. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  129. package/dist/types/src/index.d.ts +1 -3
  130. package/dist/types/src/index.d.ts.map +1 -1
  131. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -1
  132. package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
  133. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -1
  134. package/dist/types/src/plugin-operation/history/errors.d.ts +30 -3
  135. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
  136. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -1
  137. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
  138. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  139. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  140. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
  141. package/dist/types/src/plugin-operation/testing.d.ts +26 -77
  142. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
  143. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -1
  144. package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
  145. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  146. package/dist/types/src/testing/withPluginManager.d.ts +1 -1
  147. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  148. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  149. package/dist/types/src/{react → ui/components/App}/App.d.ts +3 -2
  150. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  151. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
  152. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  153. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  154. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  155. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  156. package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
  157. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  158. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  159. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  160. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  161. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  162. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  163. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  164. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  165. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  166. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  167. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  168. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  169. package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
  170. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  171. package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
  172. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  173. package/dist/types/src/ui/components/index.d.ts +4 -0
  174. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  175. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  176. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  177. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +26 -9
  178. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  179. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  180. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  181. package/dist/types/src/{react → ui/hooks}/useCapabilities.d.ts +6 -1
  182. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  183. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  184. package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
  185. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  186. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  187. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  188. package/dist/types/src/ui/index.d.ts +3 -0
  189. package/dist/types/src/ui/index.d.ts.map +1 -0
  190. package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
  191. package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
  192. package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
  193. package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
  194. package/dist/types/src/vite-plugin/index.d.ts +3 -0
  195. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  196. package/dist/types/src/vite-plugin/packages.d.ts +7 -0
  197. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  198. package/dist/types/tsconfig.tsbuildinfo +1 -1
  199. package/moon.yml +20 -6
  200. package/package.json +91 -64
  201. package/src/{cli.ts → cli/cli.ts} +10 -10
  202. package/src/{playground/debug → cli}/index.ts +1 -1
  203. package/src/common/activation-events.ts +44 -0
  204. package/src/common/capabilities.ts +172 -0
  205. package/src/common/index.ts +4 -9
  206. package/src/common/operations.ts +6 -383
  207. package/src/common/translations.ts +0 -12
  208. package/src/context.ts +1 -1
  209. package/src/core/activation-event.ts +5 -2
  210. package/src/core/capability-manager.test.ts +1 -1
  211. package/src/core/capability-manager.ts +22 -1
  212. package/src/core/capability.ts +21 -10
  213. package/src/core/index.ts +1 -0
  214. package/src/core/plugin-manager.test.ts +314 -46
  215. package/src/core/plugin-manager.ts +344 -157
  216. package/src/core/plugin.ts +10 -2
  217. package/src/core/url-loader.test.ts +79 -0
  218. package/src/core/url-loader.ts +148 -0
  219. package/src/index.ts +1 -3
  220. package/src/plugin-operation/OperationPlugin.ts +5 -6
  221. package/src/plugin-operation/history/capability.ts +5 -6
  222. package/src/plugin-operation/history/errors.ts +2 -6
  223. package/src/plugin-operation/history/history-tracker.test.ts +36 -43
  224. package/src/plugin-operation/history/history-tracker.ts +0 -1
  225. package/src/plugin-operation/history/undo-mapping.ts +6 -3
  226. package/src/plugin-operation/history/undo-registry.test.ts +3 -4
  227. package/src/plugin-operation/invoker-capability.ts +21 -7
  228. package/src/plugin-operation/meta.ts +1 -1
  229. package/src/plugin-operation/testing.ts +25 -45
  230. package/src/plugin-runtime/RuntimePlugin.ts +4 -5
  231. package/src/plugin-runtime/capability.ts +5 -5
  232. package/src/plugin-runtime/meta.ts +1 -1
  233. package/src/testing/service.ts +6 -6
  234. package/src/testing/withPluginManager.stories.tsx +6 -7
  235. package/src/testing/withPluginManager.tsx +44 -19
  236. package/src/ui/components/App/App.stories.tsx +92 -0
  237. package/src/{react → ui/components/App}/App.tsx +9 -11
  238. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  239. package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
  240. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
  241. package/src/ui/components/PluginManager/index.ts +5 -0
  242. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +31 -28
  243. package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +59 -60
  244. package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
  245. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  246. package/src/ui/components/Surface/context.ts +12 -0
  247. package/src/ui/components/Surface/index.ts +35 -0
  248. package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
  249. package/src/ui/components/index.ts +7 -0
  250. package/src/ui/hooks/index.ts +9 -0
  251. package/src/ui/hooks/useApp.test.tsx +159 -0
  252. package/src/{react → ui/hooks}/useApp.tsx +110 -30
  253. package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
  254. package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
  255. package/src/ui/hooks/useSurface.ts +13 -0
  256. package/src/ui/index.ts +6 -0
  257. package/src/vite-plugin/composer-plugin.ts +128 -0
  258. package/src/vite-plugin/import-map-plugin.ts +314 -0
  259. package/src/vite-plugin/index.ts +6 -0
  260. package/src/vite-plugin/packages.ts +29 -0
  261. package/tsconfig.json +4 -28
  262. package/tsconfig.node.json +2 -4
  263. package/typedoc.json +2 -4
  264. package/vitest.config.ts +1 -1
  265. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
  266. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
  267. package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
  268. package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
  269. package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
  273. package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
  275. package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
  277. package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-XYNO72GQ.mjs +0 -746
  281. package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
  282. package/dist/lib/browser/common/index.mjs +0 -38
  283. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +0 -32
  284. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
  285. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
  286. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
  287. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
  288. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
  289. package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
  290. package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
  291. package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +0 -747
  294. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
  297. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
  298. package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
  301. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
  303. package/dist/lib/node-esm/common/index.mjs +0 -39
  304. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +0 -33
  305. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
  306. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
  307. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
  308. package/dist/types/src/cli.d.ts.map +0 -1
  309. package/dist/types/src/common/activation-event.d.ts +0 -66
  310. package/dist/types/src/common/activation-event.d.ts.map +0 -1
  311. package/dist/types/src/common/capability.d.ts +0 -265
  312. package/dist/types/src/common/capability.d.ts.map +0 -1
  313. package/dist/types/src/common/collaboration.d.ts +0 -26
  314. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  315. package/dist/types/src/common/file.d.ts +0 -14
  316. package/dist/types/src/common/file.d.ts.map +0 -1
  317. package/dist/types/src/common/graph.d.ts +0 -21
  318. package/dist/types/src/common/graph.d.ts.map +0 -1
  319. package/dist/types/src/common/plugin.d.ts +0 -201
  320. package/dist/types/src/common/plugin.d.ts.map +0 -1
  321. package/dist/types/src/common/surface.d.ts.map +0 -1
  322. package/dist/types/src/playground/debug/Debug.d.ts +0 -8
  323. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  324. package/dist/types/src/playground/debug/index.d.ts +0 -2
  325. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  326. package/dist/types/src/playground/debug/plugin.d.ts +0 -3
  327. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  328. package/dist/types/src/playground/generator/Main.d.ts +0 -8
  329. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  330. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
  331. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  332. package/dist/types/src/playground/generator/generator.d.ts +0 -19
  333. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  334. package/dist/types/src/playground/generator/index.d.ts +0 -3
  335. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  336. package/dist/types/src/playground/generator/plugin.d.ts +0 -3
  337. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  338. package/dist/types/src/playground/layout/Layout.d.ts +0 -10
  339. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  340. package/dist/types/src/playground/layout/index.d.ts +0 -2
  341. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  342. package/dist/types/src/playground/layout/plugin.d.ts +0 -3
  343. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  344. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
  345. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  346. package/dist/types/src/playground/logger/index.d.ts +0 -2
  347. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  348. package/dist/types/src/playground/logger/plugin.d.ts +0 -3
  349. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  350. package/dist/types/src/playground/logger/schema.d.ts +0 -27
  351. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  352. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  353. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  354. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
  355. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  356. package/dist/types/src/plugin-settings/actions.d.ts +0 -61
  357. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  358. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
  359. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  360. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  361. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  362. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  363. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  364. package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
  365. package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
  366. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  367. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  368. package/dist/types/src/react/App.d.ts.map +0 -1
  369. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  370. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  371. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  372. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  373. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  374. package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
  375. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  376. package/dist/types/src/react/Surface.d.ts +0 -14
  377. package/dist/types/src/react/Surface.d.ts.map +0 -1
  378. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  379. package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
  380. package/dist/types/src/react/common.d.ts.map +0 -1
  381. package/dist/types/src/react/index.d.ts +0 -9
  382. package/dist/types/src/react/index.d.ts.map +0 -1
  383. package/dist/types/src/react/types.d.ts +0 -12
  384. package/dist/types/src/react/types.d.ts.map +0 -1
  385. package/dist/types/src/react/useApp.d.ts.map +0 -1
  386. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  387. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  388. package/dist/types/src/react/useOperationResolver.d.ts +0 -19
  389. package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
  390. package/src/common/activation-event.ts +0 -99
  391. package/src/common/capability.ts +0 -343
  392. package/src/common/collaboration.ts +0 -31
  393. package/src/common/file.ts +0 -22
  394. package/src/common/graph.ts +0 -30
  395. package/src/common/plugin.ts +0 -364
  396. package/src/playground/debug/Debug.tsx +0 -49
  397. package/src/playground/debug/plugin.ts +0 -16
  398. package/src/playground/generator/Main.tsx +0 -80
  399. package/src/playground/generator/Toolbar.tsx +0 -57
  400. package/src/playground/generator/generator.ts +0 -48
  401. package/src/playground/generator/index.ts +0 -6
  402. package/src/playground/generator/plugin.ts +0 -21
  403. package/src/playground/layout/Layout.tsx +0 -37
  404. package/src/playground/layout/plugin.ts +0 -18
  405. package/src/playground/logger/Toolbar.tsx +0 -33
  406. package/src/playground/logger/index.ts +0 -5
  407. package/src/playground/logger/plugin.ts +0 -42
  408. package/src/playground/logger/schema.ts +0 -22
  409. package/src/playground/playground.stories.tsx +0 -54
  410. package/src/plugin-settings/SettingsPlugin.ts +0 -19
  411. package/src/plugin-settings/actions.ts +0 -64
  412. package/src/plugin-settings/app-graph-builder.ts +0 -140
  413. package/src/plugin-settings/index.ts +0 -6
  414. package/src/plugin-settings/meta.ts +0 -10
  415. package/src/plugin-settings/operation-resolver.ts +0 -55
  416. package/src/plugin-settings/translations.ts +0 -19
  417. package/src/react/App.stories.tsx +0 -63
  418. package/src/react/DefaultFallback.tsx +0 -26
  419. package/src/react/ErrorBoundary.tsx +0 -56
  420. package/src/react/index.ts +0 -14
  421. package/src/react/types.ts +0 -27
  422. package/src/react/useOperationResolver.ts +0 -40
  423. /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-RFSO3JRG.mjs.map} +0 -0
  424. /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  425. /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
  426. /package/dist/lib/browser/{common/index.mjs.map → core/url-loader.mjs.map} +0 -0
  427. /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
  428. /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
  429. /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
  430. /package/src/{react → ui/hooks}/useLoading.tsx +0 -0
@@ -0,0 +1,905 @@
1
+ import {
2
+ PluginManagerContext
3
+ } from "./chunk-TGX63LTL.mjs";
4
+ import {
5
+ capabilities_exports
6
+ } from "./chunk-JKWMHZP6.mjs";
7
+ import {
8
+ activation_events_exports
9
+ } from "./chunk-I34GF4NG.mjs";
10
+ import {
11
+ plugin_manager_exports
12
+ } from "./chunk-GX4TUNM6.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 { useAtomValue as useAtomValue3 } from "@effect-atom/atom-react";
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 manager = usePluginManager();
839
+ const surfacesByModule = useAtomValue3(manager.capabilities.atomByModule(capabilities_exports.ReactSurface));
840
+ return useMemo3(() => {
841
+ const result = [];
842
+ for (const [moduleId, surfaces] of Object.entries(surfacesByModule)) {
843
+ for (const def of surfaces.flat()) {
844
+ result.push({
845
+ ...def,
846
+ id: `${moduleId}.${def.id}`
847
+ });
848
+ }
849
+ }
850
+ return result;
851
+ }, [
852
+ surfacesByModule
853
+ ]);
854
+ };
855
+ var isSurfaceAvailable = (capabilityManager, { role, data }) => {
856
+ const surfaces = capabilityManager.getAll(capabilities_exports.ReactSurface);
857
+ const candidates = findCandidates(surfaces.flat(), {
858
+ role,
859
+ data
860
+ });
861
+ return candidates.length > 0;
862
+ };
863
+
864
+ // src/ui/components/Surface/types.ts
865
+ var create = (definition) => ({
866
+ ...definition,
867
+ kind: "react"
868
+ });
869
+ var createWeb = (definition) => ({
870
+ ...definition,
871
+ kind: "web-component"
872
+ });
873
+
874
+ // src/ui/components/Surface/index.ts
875
+ (function(Surface2) {
876
+ Surface2.create = create;
877
+ Surface2.createWeb = createWeb;
878
+ Surface2.Context = SurfaceContext;
879
+ Surface2.Surface = SurfaceComponent;
880
+ Surface2.isAvailable = isSurfaceAvailable;
881
+ Surface2.ProfilerProvider = SurfaceProfilerProvider;
882
+ Surface2.useProfilerCallback = useSurfaceProfilerCallback;
883
+ Surface2.useProfilerEntries = useSurfaceProfilerEntries;
884
+ Surface2.useProfilerStats = useSurfaceProfilerStats;
885
+ Surface2.useProfilerClear = useSurfaceProfilerClear;
886
+ })(Surface || (Surface = {}));
887
+ var Surface;
888
+
889
+ export {
890
+ useApp,
891
+ useCapabilities,
892
+ useCapability,
893
+ useAtomCapability,
894
+ useAtomCapabilityState,
895
+ useOperationInvoker,
896
+ LoadingState,
897
+ useLoading,
898
+ useSettingsState,
899
+ useSurface,
900
+ App,
901
+ usePluginManager,
902
+ PluginManagerProvider,
903
+ Surface
904
+ };
905
+ //# sourceMappingURL=chunk-WPE6AL7I.mjs.map