@dxos/app-framework 0.8.4-main.422d1c7879 → 0.8.4-main.43cb759274

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 (359) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/{capability-DOMNPRJP.mjs → capability-JCUNWZ66.mjs} +12 -12
  4. package/dist/lib/browser/capability-JCUNWZ66.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-JKWMHZP6.mjs → chunk-2ZIYRDAF.mjs} +17 -2
  6. package/dist/lib/browser/chunk-2ZIYRDAF.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-5GY3YOEL.mjs +28 -0
  8. package/dist/lib/browser/chunk-5GY3YOEL.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-QSXYHXCE.mjs → chunk-66IXTIVK.mjs} +1 -1
  10. package/dist/lib/browser/{chunk-QSXYHXCE.mjs.map → chunk-66IXTIVK.mjs.map} +2 -2
  11. package/dist/lib/browser/{chunk-QRTB4Q3U.mjs → chunk-7MBI66M7.mjs} +14 -21
  12. package/dist/lib/browser/chunk-7MBI66M7.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-BMLCIFZW.mjs +1467 -0
  14. package/dist/lib/browser/chunk-BMLCIFZW.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GDWTW4ZW.mjs → chunk-DC3WRPBV.mjs} +92 -13
  16. package/dist/lib/browser/chunk-DC3WRPBV.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-F7FW2RK2.mjs → chunk-E5DTDNDY.mjs} +26 -50
  18. package/dist/lib/browser/chunk-E5DTDNDY.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-TGX63LTL.mjs → chunk-FJ4765WW.mjs} +1 -1
  20. package/dist/lib/browser/{chunk-TGX63LTL.mjs.map → chunk-FJ4765WW.mjs.map} +2 -2
  21. package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
  22. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-2CKCJ6PN.mjs → chunk-IW44C7UL.mjs} +5 -1
  24. package/dist/lib/browser/chunk-IW44C7UL.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-KZUDO43J.mjs +422 -0
  26. package/dist/lib/browser/chunk-KZUDO43J.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-Q2GLJTVV.mjs +12 -0
  28. package/dist/lib/browser/chunk-Q2GLJTVV.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-BMIAYUWT.mjs → chunk-VBG5F5UF.mjs} +166 -87
  30. package/dist/lib/browser/chunk-VBG5F5UF.mjs.map +7 -0
  31. package/dist/lib/browser/cli/index.mjs +15 -31
  32. package/dist/lib/browser/cli/index.mjs.map +3 -3
  33. package/dist/lib/browser/common/activation-events.mjs +11 -15
  34. package/dist/lib/browser/common/capabilities.mjs +17 -7
  35. package/dist/lib/browser/core/activation-event.mjs +1 -1
  36. package/dist/lib/browser/core/capability.mjs +3 -1
  37. package/dist/lib/browser/core/plugin-manager.mjs +8 -4
  38. package/dist/lib/browser/core/plugin.mjs +14 -2
  39. package/dist/lib/browser/core/url-loader.mjs +13 -5
  40. package/dist/lib/browser/index.mjs +45 -52
  41. package/dist/lib/browser/index.mjs.map +4 -4
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/process-manager-capability-4FUA4TRP.mjs +89 -0
  44. package/dist/lib/browser/process-manager-capability-4FUA4TRP.mjs.map +7 -0
  45. package/dist/lib/browser/testing/index.mjs +41 -44
  46. package/dist/lib/browser/testing/index.mjs.map +3 -3
  47. package/dist/lib/browser/testing/react.mjs +11 -11
  48. package/dist/lib/browser/ui/index.mjs +19 -13
  49. package/dist/lib/node-esm/{capability-KJTQIWDK.mjs → capability-7TCQK7ZP.mjs} +12 -12
  50. package/dist/lib/node-esm/capability-7TCQK7ZP.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-FKE4Z3D6.mjs → chunk-37Z53PXZ.mjs} +1 -1
  52. package/dist/lib/node-esm/{chunk-FKE4Z3D6.mjs.map → chunk-37Z53PXZ.mjs.map} +2 -2
  53. package/dist/lib/node-esm/chunk-4BX2AE47.mjs +1468 -0
  54. package/dist/lib/node-esm/chunk-4BX2AE47.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-42KBWDE4.mjs → chunk-CTKEZHKF.mjs} +5 -1
  56. package/dist/lib/node-esm/chunk-CTKEZHKF.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-FPW45EZH.mjs +14 -0
  58. package/dist/lib/node-esm/chunk-FPW45EZH.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-JPWVIQ5I.mjs → chunk-GEWHMHM7.mjs} +14 -21
  60. package/dist/lib/node-esm/chunk-GEWHMHM7.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-KFZEB6BV.mjs +29 -0
  62. package/dist/lib/node-esm/chunk-KFZEB6BV.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-URWHJQT2.mjs → chunk-KSH4OVMY.mjs} +26 -50
  64. package/dist/lib/node-esm/chunk-KSH4OVMY.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-G3RTFSNG.mjs → chunk-QBUGLR4H.mjs} +17 -2
  66. package/dist/lib/node-esm/chunk-QBUGLR4H.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
  68. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-XGBUKRCK.mjs +423 -0
  70. package/dist/lib/node-esm/chunk-XGBUKRCK.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-HI3YBICQ.mjs → chunk-XIGPWXCQ.mjs} +92 -13
  72. package/dist/lib/node-esm/chunk-XIGPWXCQ.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-ZZ7CKK6W.mjs → chunk-XOCUANHO.mjs} +1 -1
  74. package/dist/lib/node-esm/{chunk-ZZ7CKK6W.mjs.map → chunk-XOCUANHO.mjs.map} +2 -2
  75. package/dist/lib/node-esm/{chunk-WZ6DHQER.mjs → chunk-Y7JKXNDU.mjs} +166 -87
  76. package/dist/lib/node-esm/chunk-Y7JKXNDU.mjs.map +7 -0
  77. package/dist/lib/node-esm/cli/index.mjs +15 -31
  78. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  79. package/dist/lib/node-esm/common/activation-events.mjs +11 -15
  80. package/dist/lib/node-esm/common/capabilities.mjs +17 -7
  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 +8 -4
  84. package/dist/lib/node-esm/core/plugin.mjs +14 -2
  85. package/dist/lib/node-esm/core/url-loader.mjs +13 -5
  86. package/dist/lib/node-esm/index.mjs +45 -52
  87. package/dist/lib/node-esm/index.mjs.map +4 -4
  88. package/dist/lib/node-esm/meta.json +1 -1
  89. package/dist/lib/node-esm/process-manager-capability-F23D62RN.mjs +90 -0
  90. package/dist/lib/node-esm/process-manager-capability-F23D62RN.mjs.map +7 -0
  91. package/dist/lib/node-esm/testing/index.mjs +41 -44
  92. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  93. package/dist/lib/node-esm/testing/react.mjs +11 -11
  94. package/dist/lib/node-esm/ui/index.mjs +19 -13
  95. package/dist/plugin/node-esm/index.mjs +243 -66
  96. package/dist/plugin/node-esm/index.mjs.map +4 -4
  97. package/dist/plugin/node-esm/meta.json +1 -1
  98. package/dist/types/src/cli/cli.d.ts +1 -3
  99. package/dist/types/src/cli/cli.d.ts.map +1 -1
  100. package/dist/types/src/common/activation-events.d.ts +10 -13
  101. package/dist/types/src/common/activation-events.d.ts.map +1 -1
  102. package/dist/types/src/common/annotations.d.ts +1 -0
  103. package/dist/types/src/common/annotations.d.ts.map +1 -0
  104. package/dist/types/src/common/capabilities.d.ts +112 -6
  105. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  106. package/dist/types/src/common/index.d.ts +0 -1
  107. package/dist/types/src/common/index.d.ts.map +1 -1
  108. package/dist/types/src/common/translations.d.ts +1 -1
  109. package/dist/types/src/core/activation-event.d.ts +4 -4
  110. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  111. package/dist/types/src/core/capability-manager.d.ts +4 -0
  112. package/dist/types/src/core/capability-manager.d.ts.map +1 -1
  113. package/dist/types/src/core/capability.d.ts +7 -2
  114. package/dist/types/src/core/capability.d.ts.map +1 -1
  115. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
  116. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
  117. package/dist/types/src/core/index.d.ts +5 -0
  118. package/dist/types/src/core/index.d.ts.map +1 -1
  119. package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
  120. package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
  121. package/dist/types/src/core/plugin-manager.d.ts +224 -5
  122. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  123. package/dist/types/src/core/plugin-manifest.d.ts +101 -0
  124. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
  125. package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
  126. package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
  127. package/dist/types/src/core/plugin.d.ts +181 -5
  128. package/dist/types/src/core/plugin.d.ts.map +1 -1
  129. package/dist/types/src/core/registry.d.ts +107 -0
  130. package/dist/types/src/core/registry.d.ts.map +1 -0
  131. package/dist/types/src/core/url-loader.d.ts +88 -3
  132. package/dist/types/src/core/url-loader.d.ts.map +1 -1
  133. package/dist/types/src/helpers.d.ts.map +1 -1
  134. package/dist/types/src/index.d.ts +1 -2
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts +3 -0
  137. package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts.map +1 -0
  138. package/dist/types/src/plugin-process-manager/history/capability.d.ts.map +1 -0
  139. package/dist/types/src/{plugin-operation → plugin-process-manager}/history/errors.d.ts +6 -6
  140. package/dist/types/src/plugin-process-manager/history/errors.d.ts.map +1 -0
  141. package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts +32 -0
  142. package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts.map +1 -0
  143. package/dist/types/src/plugin-process-manager/history/history-tracker.test.d.ts.map +1 -0
  144. package/dist/types/src/plugin-process-manager/history/index.d.ts.map +1 -0
  145. package/dist/types/src/{plugin-operation → plugin-process-manager}/history/types.d.ts +1 -1
  146. package/dist/types/src/plugin-process-manager/history/types.d.ts.map +1 -0
  147. package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-mapping.d.ts +2 -2
  148. package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts.map +1 -0
  149. package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-registry.d.ts +1 -1
  150. package/dist/types/src/plugin-process-manager/history/undo-registry.d.ts.map +1 -0
  151. package/dist/types/src/plugin-process-manager/history/undo-registry.test.d.ts.map +1 -0
  152. package/dist/types/src/plugin-process-manager/index.d.ts +3 -0
  153. package/dist/types/src/plugin-process-manager/index.d.ts.map +1 -0
  154. package/dist/types/src/plugin-process-manager/meta.d.ts +3 -0
  155. package/dist/types/src/plugin-process-manager/meta.d.ts.map +1 -0
  156. package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts +8 -0
  157. package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts.map +1 -0
  158. package/dist/types/src/{plugin-operation → plugin-process-manager}/testing.d.ts +2 -1
  159. package/dist/types/src/plugin-process-manager/testing.d.ts.map +1 -0
  160. package/dist/types/src/testing/harness.d.ts +17 -5
  161. package/dist/types/src/testing/harness.d.ts.map +1 -1
  162. package/dist/types/src/testing/react.d.ts.map +1 -1
  163. package/dist/types/src/testing/service.d.ts.map +1 -1
  164. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  165. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  166. package/dist/types/src/ui/components/App/App.d.ts +34 -2
  167. package/dist/types/src/ui/components/App/App.d.ts.map +1 -1
  168. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -1
  169. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -1
  170. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -1
  171. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -1
  172. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -1
  173. package/dist/types/src/ui/components/Surface/index.d.ts +1 -1
  174. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -1
  175. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -1
  176. package/dist/types/src/ui/hooks/index.d.ts +1 -0
  177. package/dist/types/src/ui/hooks/index.d.ts.map +1 -1
  178. package/dist/types/src/ui/hooks/useApp.d.ts +34 -16
  179. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -1
  180. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -1
  181. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -1
  182. package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts +30 -0
  183. package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts.map +1 -0
  184. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -1
  185. package/dist/types/src/vite-plugin/boot-loader/index.d.ts +1 -50
  186. package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -1
  187. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +54 -0
  188. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -0
  189. package/dist/types/src/vite-plugin/composer/index.d.ts +12 -12
  190. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -1
  191. package/dist/types/src/vite-plugin/import-map/index.d.ts +13 -1
  192. package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -1
  193. package/dist/types/src/vite-plugin/manifest.d.ts +30 -5
  194. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -1
  195. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -1
  196. package/dist/types/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +42 -29
  198. package/src/cli/cli.ts +2 -7
  199. package/src/common/activation-events.ts +10 -15
  200. package/src/common/annotations.ts +3 -0
  201. package/src/common/capabilities.ts +143 -6
  202. package/src/common/index.ts +0 -1
  203. package/src/common/translations.ts +1 -1
  204. package/src/core/capability-manager.test.ts +3 -0
  205. package/src/core/capability-manager.ts +22 -1
  206. package/src/core/capability.ts +8 -1
  207. package/src/core/edge-registry-plugin-provider.ts +92 -0
  208. package/src/core/index.ts +5 -0
  209. package/src/core/plugin-asset-cache.ts +60 -0
  210. package/src/core/plugin-manager.test.ts +807 -20
  211. package/src/core/plugin-manager.ts +839 -40
  212. package/src/core/plugin-manifest.test.ts +75 -0
  213. package/src/core/plugin-manifest.ts +134 -0
  214. package/src/core/plugin.ts +196 -7
  215. package/src/core/registry.ts +163 -0
  216. package/src/core/url-loader.test.ts +117 -7
  217. package/src/core/url-loader.ts +253 -43
  218. package/src/index.ts +1 -2
  219. package/src/plugin-process-manager/ProcessManagerPlugin.ts +24 -0
  220. package/src/{plugin-operation → plugin-process-manager}/history/capability.ts +1 -1
  221. package/src/{plugin-operation → plugin-process-manager}/history/history-tracker.test.ts +41 -61
  222. package/src/{plugin-operation → plugin-process-manager}/history/history-tracker.ts +33 -17
  223. package/src/{plugin-operation → plugin-process-manager}/history/types.ts +1 -1
  224. package/src/{plugin-operation → plugin-process-manager}/history/undo-mapping.ts +2 -2
  225. package/src/{plugin-operation → plugin-process-manager}/history/undo-registry.test.ts +3 -1
  226. package/src/{plugin-operation → plugin-process-manager}/history/undo-registry.ts +1 -1
  227. package/src/{plugin-operation → plugin-process-manager}/index.ts +1 -1
  228. package/src/plugin-process-manager/meta.ts +16 -0
  229. package/src/plugin-process-manager/process-manager-capability.ts +178 -0
  230. package/src/{plugin-operation → plugin-process-manager}/testing.ts +8 -6
  231. package/src/testing/harness.ts +27 -9
  232. package/src/testing/react.test.tsx +3 -1
  233. package/src/testing/service.ts +2 -2
  234. package/src/testing/withPluginManager.stories.tsx +1 -1
  235. package/src/testing/withPluginManager.tsx +9 -5
  236. package/src/ui/components/App/App.stories.tsx +10 -18
  237. package/src/ui/components/App/App.tsx +85 -11
  238. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +13 -17
  239. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +2 -2
  240. package/src/ui/components/Surface/SurfaceComponent.tsx +3 -3
  241. package/src/ui/components/Surface/SurfaceInfo.tsx +0 -1
  242. package/src/ui/components/Surface/types.test.ts +4 -4
  243. package/src/ui/components/Surface/types.ts +21 -0
  244. package/src/ui/hooks/index.ts +1 -0
  245. package/src/ui/hooks/useApp.test.tsx +4 -2
  246. package/src/ui/hooks/useApp.tsx +165 -50
  247. package/src/ui/hooks/useCapabilities.ts +1 -0
  248. package/src/ui/hooks/useLoading.tsx +14 -6
  249. package/src/ui/hooks/useProcessManagerRuntime.ts +78 -0
  250. package/src/vite-plugin/boot-loader/BootLoader.solid-stories.tsx +198 -0
  251. package/src/vite-plugin/boot-loader/index.ts +1 -95
  252. package/src/vite-plugin/boot-loader/loader-app/Loader.tsx +166 -0
  253. package/src/vite-plugin/boot-loader/loader-app/boot-loader.css +311 -0
  254. package/src/vite-plugin/boot-loader/loader-app/bridge.ts +25 -0
  255. package/src/vite-plugin/boot-loader/loader-app/entry.tsx +21 -0
  256. package/src/vite-plugin/boot-loader/loader-app/mount.tsx +70 -0
  257. package/src/vite-plugin/boot-loader/loader-app/store.test.ts +137 -0
  258. package/src/vite-plugin/boot-loader/loader-app/store.ts +149 -0
  259. package/src/vite-plugin/boot-loader/loader-app/tsconfig.json +11 -0
  260. package/src/vite-plugin/boot-loader/loader-app/types.ts +78 -0
  261. package/src/vite-plugin/boot-loader/loader.ts +193 -0
  262. package/src/vite-plugin/composer/index.ts +61 -39
  263. package/src/vite-plugin/import-map/index.ts +42 -5
  264. package/src/vite-plugin/index.ts +2 -2
  265. package/src/vite-plugin/manifest.test.ts +37 -5
  266. package/src/vite-plugin/manifest.ts +48 -5
  267. package/src/vite-plugin/packages.ts +8 -2
  268. package/tsconfig.json +23 -3
  269. package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
  270. package/dist/lib/browser/capability-DOMNPRJP.mjs.map +0 -7
  271. package/dist/lib/browser/capability-KSNT34SN.mjs +0 -38
  272. package/dist/lib/browser/capability-KSNT34SN.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-2CKCJ6PN.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-7B6AJK4D.mjs +0 -964
  275. package/dist/lib/browser/chunk-7B6AJK4D.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-BMIAYUWT.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-GDWTW4ZW.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-I34GF4NG.mjs +0 -34
  280. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-QRTB4Q3U.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-RFSO3JRG.mjs +0 -1
  284. package/dist/lib/browser/chunk-RFSO3JRG.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-T3Y4AEKX.mjs +0 -42
  286. package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-Y543KCO7.mjs +0 -174
  288. package/dist/lib/browser/chunk-Y543KCO7.mjs.map +0 -7
  289. package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs +0 -43
  290. package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs.map +0 -7
  291. package/dist/lib/node-esm/capability-EOQTORML.mjs +0 -39
  292. package/dist/lib/node-esm/capability-EOQTORML.mjs.map +0 -7
  293. package/dist/lib/node-esm/capability-KJTQIWDK.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs +0 -965
  296. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs +0 -175
  298. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +0 -2
  300. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-HI3YBICQ.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-JPWVIQ5I.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +0 -7
  305. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +0 -43
  306. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-WZ6DHQER.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +0 -35
  309. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +0 -7
  310. package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs +0 -44
  311. package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs.map +0 -7
  312. package/dist/types/src/common/operations.d.ts +0 -19
  313. package/dist/types/src/common/operations.d.ts.map +0 -1
  314. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +0 -3
  315. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +0 -1
  316. package/dist/types/src/plugin-operation/history/capability.d.ts.map +0 -1
  317. package/dist/types/src/plugin-operation/history/errors.d.ts.map +0 -1
  318. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +0 -18
  319. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +0 -1
  320. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +0 -1
  321. package/dist/types/src/plugin-operation/history/index.d.ts.map +0 -1
  322. package/dist/types/src/plugin-operation/history/types.d.ts.map +0 -1
  323. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +0 -1
  324. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +0 -1
  325. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +0 -1
  326. package/dist/types/src/plugin-operation/index.d.ts +0 -3
  327. package/dist/types/src/plugin-operation/index.d.ts.map +0 -1
  328. package/dist/types/src/plugin-operation/invoker-capability.d.ts +0 -6
  329. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +0 -1
  330. package/dist/types/src/plugin-operation/meta.d.ts +0 -3
  331. package/dist/types/src/plugin-operation/meta.d.ts.map +0 -1
  332. package/dist/types/src/plugin-operation/testing.d.ts.map +0 -1
  333. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +0 -3
  334. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +0 -1
  335. package/dist/types/src/plugin-runtime/capability.d.ts +0 -6
  336. package/dist/types/src/plugin-runtime/capability.d.ts.map +0 -1
  337. package/dist/types/src/plugin-runtime/index.d.ts +0 -2
  338. package/dist/types/src/plugin-runtime/index.d.ts.map +0 -1
  339. package/dist/types/src/plugin-runtime/meta.d.ts +0 -3
  340. package/dist/types/src/plugin-runtime/meta.d.ts.map +0 -1
  341. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +0 -50
  342. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +0 -1
  343. package/src/common/operations.ts +0 -35
  344. package/src/plugin-operation/OperationPlugin.ts +0 -24
  345. package/src/plugin-operation/invoker-capability.ts +0 -54
  346. package/src/plugin-operation/meta.ts +0 -11
  347. package/src/plugin-runtime/RuntimePlugin.ts +0 -19
  348. package/src/plugin-runtime/capability.ts +0 -53
  349. package/src/plugin-runtime/index.ts +0 -5
  350. package/src/plugin-runtime/meta.ts +0 -11
  351. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +0 -162
  352. package/src/vite-plugin/boot-loader/boot-loader.css +0 -117
  353. package/src/vite-plugin/boot-loader/boot-loader.js +0 -55
  354. /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/capability.d.ts +0 -0
  355. /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/history-tracker.test.d.ts +0 -0
  356. /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/index.d.ts +0 -0
  357. /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-registry.test.d.ts +0 -0
  358. /package/src/{plugin-operation → plugin-process-manager}/history/errors.ts +0 -0
  359. /package/src/{plugin-operation → plugin-process-manager}/history/index.ts +0 -0
package/LICENSE CHANGED
@@ -1,8 +1,105 @@
1
- MIT License
2
- Copyright (c) 2022 DXOS
1
+ # Functional Source License, Version 1.1, ALv2 Future License
3
2
 
4
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
3
+ ## Abbreviation
5
4
 
6
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
5
+ FSL-1.1-Apache-2.0
7
6
 
8
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
7
+ ## Notice
8
+
9
+ Copyright 2026 DXOS
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
75
+ PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the Apache License, Version 2.0 that is effective on the second anniversary of
91
+ the date we make the Software available. On or after that date, you may use the
92
+ Software under the Apache License, Version 2.0, in which case the following
93
+ will apply:
94
+
95
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
96
+ this file except in compliance with the License.
97
+
98
+ You may obtain a copy of the License at
99
+
100
+ http://www.apache.org/licenses/LICENSE-2.0
101
+
102
+ Unless required by applicable law or agreed to in writing, software distributed
103
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
104
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
105
+ specific language governing permissions and limitations under the License.
package/README.md CHANGED
@@ -18,4 +18,4 @@ pnpm i @dxos/app-framework
18
18
 
19
19
  Your ideas, issues, and code are most welcome. Please take a look at our [community code of conduct](https://github.com/dxos/dxos/blob/main/CODE_OF_CONDUCT.md), the [issue guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-issues), and the [PR contribution guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-prs).
20
20
 
21
- License: [MIT](./LICENSE) Copyright 2022 © DXOS
21
+ License: [FSL-1.1-Apache-2.0](./LICENSE) Copyright 2022 © DXOS
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  make,
3
3
  make2
4
- } from "./chunk-F7FW2RK2.mjs";
5
- import "./chunk-T3Y4AEKX.mjs";
4
+ } from "./chunk-E5DTDNDY.mjs";
5
+ import "./chunk-Q2GLJTVV.mjs";
6
6
  import {
7
7
  capabilities_exports
8
- } from "./chunk-JKWMHZP6.mjs";
9
- import "./chunk-I34GF4NG.mjs";
10
- import "./chunk-RFSO3JRG.mjs";
11
- import "./chunk-Y543KCO7.mjs";
12
- import "./chunk-7B6AJK4D.mjs";
13
- import "./chunk-QSXYHXCE.mjs";
14
- import "./chunk-GDWTW4ZW.mjs";
8
+ } from "./chunk-2ZIYRDAF.mjs";
9
+ import "./chunk-5GY3YOEL.mjs";
10
+ import "./chunk-FO3IYSLV.mjs";
11
+ import "./chunk-KZUDO43J.mjs";
12
+ import "./chunk-BMLCIFZW.mjs";
13
+ import "./chunk-66IXTIVK.mjs";
14
+ import "./chunk-DC3WRPBV.mjs";
15
15
  import {
16
16
  capability_exports
17
- } from "./chunk-2CKCJ6PN.mjs";
17
+ } from "./chunk-IW44C7UL.mjs";
18
18
  import "./chunk-J5LGTIGS.mjs";
19
19
 
20
- // src/plugin-operation/history/capability.ts
20
+ // src/plugin-process-manager/history/capability.ts
21
21
  import * as Effect from "effect/Effect";
22
22
  var capability_default = capability_exports.makeModule(Effect.fnUntraced(function* () {
23
23
  const capabilities = yield* capability_exports.Service;
@@ -32,4 +32,4 @@ var capability_default = capability_exports.makeModule(Effect.fnUntraced(functio
32
32
  export {
33
33
  capability_default as default
34
34
  };
35
- //# sourceMappingURL=capability-DOMNPRJP.mjs.map
35
+ //# sourceMappingURL=capability-JCUNWZ66.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin-process-manager/history/capability.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { OperationInvoker } from '@dxos/operation';\n\nimport { Capabilities } from '../../common';\nimport { Capability } from '../../core';\nimport * as HistoryTracker from './history-tracker';\nimport * as UndoRegistry from './undo-registry';\n\n//\n// Capability Module - contributes both UndoRegistry and HistoryTracker.\n//\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n // Get the context for synchronous access in callbacks.\n const capabilities = yield* Capability.Service;\n\n // Create UndoRegistry.\n const undoRegistry = UndoRegistry.make(() => capabilities.getAll(Capabilities.UndoMapping).flat());\n\n // Create HistoryTracker (depends on UndoRegistry and OperationInvoker).\n const invoker = yield* Capability.get(Capabilities.OperationInvoker);\n // Cast to internal type - the factory always returns OperationInvokerInternal.\n const historyTracker = HistoryTracker.make(invoker as OperationInvoker.OperationInvokerInternal, undoRegistry);\n\n return [\n Capability.contributes(Capabilities.UndoRegistry, undoRegistry),\n Capability.contributes(Capabilities.HistoryTracker, historyTracker),\n ];\n }),\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAaxB,IAAA,qBAAeC,mBAAWC,WACjBC,kBAAW,aAAA;AAEhB,QAAMC,eAAe,OAAOH,mBAAWI;AAGvC,QAAMC,eAA4BC,KAAK,MAAMH,aAAaI,OAAOC,qBAAaC,WAAW,EAAEC,KAAI,CAAA;AAG/F,QAAMC,UAAU,OAAOX,mBAAWY,IAAIJ,qBAAaK,gBAAgB;AAEnE,QAAMC,iBAAgCR,MAAKK,SAAsDN,YAAAA;AAEjG,SAAO;IACLL,mBAAWe,YAAYP,qBAAaQ,cAAcX,YAAAA;IAClDL,mBAAWe,YAAYP,qBAAaS,gBAAgBH,cAAAA;;AAExD,CAAA,CAAA;",
6
+ "names": ["Effect", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "undoRegistry", "make", "getAll", "Capabilities", "UndoMapping", "flat", "invoker", "get", "OperationInvoker", "historyTracker", "contributes", "UndoRegistry", "HistoryTracker"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  capability_exports
3
- } from "./chunk-2CKCJ6PN.mjs";
3
+ } from "./chunk-IW44C7UL.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-J5LGTIGS.mjs";
@@ -12,14 +12,19 @@ __export(capabilities_exports, {
12
12
  Command: () => Command,
13
13
  HistoryTracker: () => HistoryTracker,
14
14
  Layer: () => Layer,
15
+ LayerSpec: () => LayerSpec,
15
16
  ManagedRuntime: () => ManagedRuntime,
16
17
  Null: () => Null,
17
18
  OperationHandler: () => OperationHandler,
18
19
  OperationInvoker: () => OperationInvoker,
19
20
  PluginManager: () => PluginManager,
21
+ ProcessManagerRuntime: () => ProcessManagerRuntime,
22
+ ProcessMonitor: () => ProcessMonitor,
20
23
  ReactContext: () => ReactContext,
21
24
  ReactRoot: () => ReactRoot,
22
25
  ReactSurface: () => ReactSurface,
26
+ ServiceResolver: () => ServiceResolver,
27
+ TraceSink: () => TraceSink,
23
28
  UndoMapping: () => UndoMapping,
24
29
  UndoRegistry: () => UndoRegistry,
25
30
  getAtomValue: () => getAtomValue,
@@ -35,6 +40,11 @@ var ReactRoot = capability_exports.make("org.dxos.app-framework.capability.react
35
40
  var ReactSurface = capability_exports.make("org.dxos.app-framework.common.react-surface");
36
41
  var Command = capability_exports.make("org.dxos.app-framework.capability.command");
37
42
  var Layer = capability_exports.make("org.dxos.app-framework.capability.layer");
43
+ var LayerSpec = capability_exports.make("org.dxos.app-framework.capability.layer-spec");
44
+ var TraceSink = capability_exports.make("org.dxos.app-framework.capability.trace-sink");
45
+ var ServiceResolver = capability_exports.make("org.dxos.app-framework.capability.service-resolver");
46
+ var ProcessMonitor = capability_exports.make("org.dxos.app-framework.capability.process-monitor");
47
+ var ProcessManagerRuntime = capability_exports.make("org.dxos.app-framework.capability.process-manager-runtime");
38
48
  var ManagedRuntime = capability_exports.make("org.dxos.app-framework.capability.managed-runtime");
39
49
  var OperationHandler = capability_exports.make("org.dxos.app-framework.capability.operation-handler");
40
50
  var UndoMapping = capability_exports.make("org.dxos.app-framework.capability.undo-mapping");
@@ -66,6 +76,11 @@ export {
66
76
  ReactSurface,
67
77
  Command,
68
78
  Layer,
79
+ LayerSpec,
80
+ TraceSink,
81
+ ServiceResolver,
82
+ ProcessMonitor,
83
+ ProcessManagerRuntime,
69
84
  ManagedRuntime,
70
85
  OperationHandler,
71
86
  UndoMapping,
@@ -77,4 +92,4 @@ export {
77
92
  subscribeAtom,
78
93
  capabilities_exports
79
94
  };
80
- //# sourceMappingURL=chunk-JKWMHZP6.mjs.map
95
+ //# sourceMappingURL=chunk-2ZIYRDAF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/common/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, type Registry } from '@effect-atom/atom-react';\nimport type * as Command$ from '@effect/cli/Command';\nimport * as Effect from 'effect/Effect';\nimport type * as Exit$ from 'effect/Exit';\nimport type * as Fiber$ from 'effect/Fiber';\nimport type * as Layer$ from 'effect/Layer';\nimport type * as ManagedRuntime$ from 'effect/ManagedRuntime';\nimport type * as Runtime$ from 'effect/Runtime';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport type {\n LayerSpec as LayerSpec$,\n Operation as Operation$,\n OperationHandlerSet,\n Process as Process$,\n ServiceResolver as ServiceResolver$,\n Trace as Trace$,\n} from '@dxos/compute';\nimport type { ProcessManager as ProcessManager$ } from '@dxos/compute-runtime';\nimport { OperationInvoker as OperationInvoker$ } from '@dxos/operation';\n\nimport { Capability as Capability$, Plugin as Plugin$, type PluginManager as PluginManager$ } from '../core';\nimport type {\n HistoryTracker as HistoryTracker$,\n UndoMapping as UndoMapping$,\n UndoRegistry as UndoRegistry$,\n} from '../plugin-process-manager';\nimport type { Surface } from '../ui';\n\n/**\n * Null capability.\n * @category Capability\n */\nexport const Null = Capability$.make<null>('org.dxos.app-framework.capability.null');\n\n/**\n * @category Capability\n */\nexport const PluginManager = Capability$.make<PluginManager$.PluginManager>(\n 'org.dxos.app-framework.capability.plugin-manager',\n);\n\n/**\n * @category Capability\n */\nexport const AtomRegistry = Capability$.make<Registry.Registry>('org.dxos.app-framework.capability.atom-registry');\n\nexport type ReactContext = Readonly<{\n id: string;\n dependsOn?: string[];\n context: FC<PropsWithChildren>;\n}>;\n\n/**\n * @category Capability\n */\nexport const ReactContext = Capability$.make<ReactContext>('org.dxos.app-framework.capability.react-context');\n\nexport type ReactRoot = Readonly<{ id: string; root: FC<PropsWithChildren> }>;\n\n/**\n * @category Capability\n */\nexport const ReactRoot = Capability$.make<ReactRoot>('org.dxos.app-framework.capability.react-root');\n\n/**\n * Surface definitions that can be either React components or Web Components.\n */\nexport type ReactSurface = Surface.Definition | readonly Surface.Definition[];\n\n/**\n * @category Capability\n */\nexport const ReactSurface = Capability$.make<ReactSurface>('org.dxos.app-framework.common.react-surface');\n\nexport type AnyCommand = Command$.Command<any, any, any, any>;\n\n/**\n * @category Capability\n */\nexport const Command = Capability$.make<AnyCommand>('org.dxos.app-framework.capability.command');\n\n/**\n * @category Capability\n */\nexport const Layer = Capability$.make<Layer$.Layer<any, any, any>>('org.dxos.app-framework.capability.layer');\n\n/**\n * Layer specification contributed by plugins.\n *\n * Plugins contribute {@link LayerSpec.LayerSpec} entries that are collected by the\n * process-manager module and composed into a {@link LayerStack} which backs the\n * {@link ProcessManagerRuntime}'s service resolver.\n *\n * @category Capability\n */\nexport const LayerSpec = Capability$.make<LayerSpec$.LayerSpec>('org.dxos.app-framework.capability.layer-spec');\n\n/**\n * Context passed to {@link TraceSinkFactory} implementations when the\n * process-manager capability materialises contributed sinks.\n */\nexport interface TraceSinkFactoryContext {\n /**\n * Service resolver backing the shared {@link ProcessManagerRuntime}. Use it\n * to resolve per-space (or per-process) services like `FeedTraceSink` when\n * building a routing sink.\n */\n readonly resolver: ServiceResolver$.ServiceResolver;\n}\n\n/**\n * Factory that builds a {@link Trace$.Sink} when the process-manager\n * capability is ready. Plugins that only need a static sink can ignore the\n * context (e.g. `() => myConsoleSink`); plugins that need per-space routing\n * can use {@link TraceSinkFactoryContext.resolver} to look up services.\n */\nexport type TraceSinkFactory = (ctx: TraceSinkFactoryContext) => Trace$.Sink;\n\n/**\n * Trace sink contribution.\n *\n * Plugins contribute {@link TraceSinkFactory} functions; the process-manager\n * capability invokes each factory with the runtime's\n * {@link ServiceResolver$.ServiceResolver}, collects the resulting\n * {@link Trace$.Sink}s, merges them via {@link Trace$.mergeSinks}, and\n * installs the merged sink as {@link Trace$.TraceSink} in the runtime layer\n * so every process writes to every contributed sink.\n *\n * @category Capability\n */\nexport const TraceSink = Capability$.make<TraceSinkFactory>('org.dxos.app-framework.capability.trace-sink');\n\n/**\n * Service resolver backing the shared {@link ProcessManagerRuntime}.\n *\n * Contributed by the process-manager capability module. Consumers can combine\n * it with {@link ServiceResolver$.provide} to build space-scoped layers without\n * having to go through the process-manager runtime:\n *\n * @example\n * ```ts\n * const resolver = yield* Capability.get(Capabilities.ServiceResolver);\n * yield* effect.pipe(\n * Effect.provide(\n * ServiceResolver.provide({ space }, Database.Service, Feed.FeedService).pipe(\n * Layer.provide(Layer.succeed(ServiceResolver.ServiceResolver, resolver)),\n * ),\n * ),\n * );\n * ```\n *\n * @category Capability\n */\nexport const ServiceResolver = Capability$.make<ServiceResolver$.ServiceResolver>(\n 'org.dxos.app-framework.capability.service-resolver',\n);\n\n/**\n * Process monitor backing the shared {@link ProcessManagerRuntime}. Exposes the\n * live process tree (including inactive/terminated entries) via\n * {@link Process$.Monitor#processTreeAtom}.\n *\n * @category Capability\n */\nexport const ProcessMonitor = Capability$.make<Process$.Monitor>('org.dxos.app-framework.capability.process-monitor');\n\n/**\n * Services that are always available when running effects through a {@link ProcessManagerRuntime}.\n */\nexport type ProcessManagerRuntimeServices =\n | Capability$.Service\n | Plugin$.Service\n | ProcessManager$.ProcessManagerService\n | Operation$.Service\n | ProcessManager$.ProcessOperationInvoker.Service\n | ServiceResolver$.ServiceResolver;\n\n/**\n * Runtime that runs effects requiring a fixed set of capability-manager and\n * process-manager services.\n *\n * The shape mirrors {@link ManagedRuntime$.ManagedRuntime} but deliberately does\n * not expose `dispose` – lifecycle is driven by the host plugin manager.\n */\nexport interface ProcessManagerRuntime {\n runPromise<A, E>(\n effect: Effect.Effect<A, E, ProcessManagerRuntimeServices>,\n options?: { readonly signal?: AbortSignal },\n ): Promise<A>;\n runPromiseExit<A, E>(\n effect: Effect.Effect<A, E, ProcessManagerRuntimeServices>,\n options?: { readonly signal?: AbortSignal },\n ): Promise<Exit$.Exit<A, E>>;\n runFork<A, E>(\n effect: Effect.Effect<A, E, ProcessManagerRuntimeServices>,\n options?: Runtime$.RunForkOptions,\n ): Fiber$.RuntimeFiber<A, E>;\n runSync<A, E>(effect: Effect.Effect<A, E, ProcessManagerRuntimeServices>): A;\n}\n\n/**\n * @category Capability\n */\nexport const ProcessManagerRuntime = Capability$.make<ProcessManagerRuntime>(\n 'org.dxos.app-framework.capability.process-manager-runtime',\n);\n\nexport type ManagedRuntime = ManagedRuntime$.ManagedRuntime<any, any>;\n\n/**\n * @category Capability\n */\nexport const ManagedRuntime = Capability$.make<ManagedRuntime>('org.dxos.app-framework.capability.managed-runtime');\n\n//\n// Operation System Capabilities\n//\n\nexport const OperationHandler = Capability$.make<OperationHandlerSet.OperationHandlerSet>(\n 'org.dxos.app-framework.capability.operation-handler',\n);\n\nexport type UndoMapping = UndoMapping$.UndoMapping;\n\n/**\n * Undo mapping registration - contributed by plugins.\n * @category Capability\n */\nexport const UndoMapping = Capability$.make<UndoMapping[]>('org.dxos.app-framework.capability.undo-mapping');\n\n/**\n * Operation invoker backed by the process manager. Spawns a process per\n * operation invocation; see {@link ProcessManager$.ProcessOperationInvoker}.\n */\nexport type OperationInvoker = OperationInvoker$.OperationInvoker;\n\n/**\n * Operation invoker - provided by the process-manager capability.\n * @category Capability\n */\nexport const OperationInvoker = Capability$.make<OperationInvoker>(\n 'org.dxos.app-framework.capability.operation-invoker',\n);\n\nexport type UndoRegistry = UndoRegistry$.UndoRegistry;\n\n/**\n * Undo registry - provided by ProcessManagerPlugin.\n * @category Capability\n */\nexport const UndoRegistry = Capability$.make<UndoRegistry>('org.dxos.app-framework.capability.undo-registry');\n\nexport type HistoryTracker = HistoryTracker$.HistoryTracker;\n\n/**\n * History tracker - provided by ProcessManagerPlugin.\n * @category Capability\n */\nexport const HistoryTracker = Capability$.make<HistoryTracker>('org.dxos.app-framework.capability.history-tracker');\n\n//\n// Atom Capability Helpers\n//\n\n/**\n * Get the current value of an atom capability.\n * @example const settings = yield* Capabilities.getAtomValue(ThreadCapabilities.Settings);\n */\nexport const getAtomValue = <T>(\n atomCapability: Capability$.InterfaceDef<Atom.Atom<T>>,\n): Effect.Effect<T, Error, Capability$.Service> =>\n Effect.gen(function* () {\n const registry = yield* Capability$.get(AtomRegistry);\n const atom = yield* Capability$.get(atomCapability);\n return registry.get(atom);\n });\n\n/**\n * Update an atom capability value (requires writable atom).\n * @example yield* Capabilities.updateAtomValue(ThreadCapabilities.Settings, (s) => ({ ...s, foo: true }));\n */\nexport const updateAtomValue = <T>(\n atomCapability: Capability$.InterfaceDef<Atom.Writable<T>>,\n fn: (current: T) => T,\n): Effect.Effect<void, Error, Capability$.Service> =>\n Effect.gen(function* () {\n const registry = yield* Capability$.get(AtomRegistry);\n const atom = yield* Capability$.get(atomCapability);\n registry.set(atom, fn(registry.get(atom)));\n });\n\n/**\n * Subscribe to an atom capability.\n * @example const unsubscribe = yield* Capabilities.subscribeAtom(ThreadCapabilities.Settings, (value) => ...);\n */\nexport const subscribeAtom = <T>(\n atomCapability: Capability$.InterfaceDef<Atom.Atom<T>>,\n callback: (value: T) => void,\n): Effect.Effect<() => void, Error, Capability$.Service> =>\n Effect.gen(function* () {\n const registry = yield* Capability$.get(AtomRegistry);\n const atom = yield* Capability$.get(atomCapability);\n return registry.subscribe(atom, () => callback(registry.get(atom)));\n });\n"],
5
+ "mappings": ";;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,YAAYA,YAAY;AA+BjB,IAAMC,OAAOC,mBAAYC,KAAW,wCAAA;AAKpC,IAAMC,gBAAgBF,mBAAYC,KACvC,kDAAA;AAMK,IAAME,eAAeH,mBAAYC,KAAwB,iDAAA;AAWzD,IAAMG,eAAeJ,mBAAYC,KAAmB,iDAAA;AAOpD,IAAMI,YAAYL,mBAAYC,KAAgB,8CAAA;AAU9C,IAAMK,eAAeN,mBAAYC,KAAmB,6CAAA;AAOpD,IAAMM,UAAUP,mBAAYC,KAAiB,2CAAA;AAK7C,IAAMO,QAAQR,mBAAYC,KAAkC,yCAAA;AAW5D,IAAMQ,YAAYT,mBAAYC,KAA2B,8CAAA;AAmCzD,IAAMS,YAAYV,mBAAYC,KAAuB,8CAAA;AAuBrD,IAAMU,kBAAkBX,mBAAYC,KACzC,oDAAA;AAUK,IAAMW,iBAAiBZ,mBAAYC,KAAuB,mDAAA;AAuC1D,IAAMY,wBAAwBb,mBAAYC,KAC/C,2DAAA;AAQK,IAAMa,iBAAiBd,mBAAYC,KAAqB,mDAAA;AAMxD,IAAMc,mBAAmBf,mBAAYC,KAC1C,qDAAA;AASK,IAAMe,cAAchB,mBAAYC,KAAoB,gDAAA;AAYpD,IAAMgB,mBAAmBjB,mBAAYC,KAC1C,qDAAA;AASK,IAAMiB,eAAelB,mBAAYC,KAAmB,iDAAA;AAQpD,IAAMkB,iBAAiBnB,mBAAYC,KAAqB,mDAAA;AAUxD,IAAMmB,eAAe,CAC1BC,mBAEOC,WAAI,aAAA;AACT,QAAMC,WAAW,OAAOvB,mBAAYwB,IAAIrB,YAAAA;AACxC,QAAMsB,OAAO,OAAOzB,mBAAYwB,IAAIH,cAAAA;AACpC,SAAOE,SAASC,IAAIC,IAAAA;AACtB,CAAA;AAMK,IAAMC,kBAAkB,CAC7BL,gBACAM,OAEOL,WAAI,aAAA;AACT,QAAMC,WAAW,OAAOvB,mBAAYwB,IAAIrB,YAAAA;AACxC,QAAMsB,OAAO,OAAOzB,mBAAYwB,IAAIH,cAAAA;AACpCE,WAASK,IAAIH,MAAME,GAAGJ,SAASC,IAAIC,IAAAA,CAAAA,CAAAA;AACrC,CAAA;AAMK,IAAMI,gBAAgB,CAC3BR,gBACAS,aAEOR,WAAI,aAAA;AACT,QAAMC,WAAW,OAAOvB,mBAAYwB,IAAIrB,YAAAA;AACxC,QAAMsB,OAAO,OAAOzB,mBAAYwB,IAAIH,cAAAA;AACpC,SAAOE,SAASQ,UAAUN,MAAM,MAAMK,SAASP,SAASC,IAAIC,IAAAA,CAAAA,CAAAA;AAC9D,CAAA;",
6
+ "names": ["Effect", "Null", "Capability$", "make", "PluginManager", "AtomRegistry", "ReactContext", "ReactRoot", "ReactSurface", "Command", "Layer", "LayerSpec", "TraceSink", "ServiceResolver", "ProcessMonitor", "ProcessManagerRuntime", "ManagedRuntime", "OperationHandler", "UndoMapping", "OperationInvoker", "UndoRegistry", "HistoryTracker", "getAtomValue", "atomCapability", "gen", "registry", "get", "atom", "updateAtomValue", "fn", "set", "subscribeAtom", "callback", "subscribe"]
7
+ }
@@ -0,0 +1,28 @@
1
+ import {
2
+ activation_event_exports
3
+ } from "./chunk-66IXTIVK.mjs";
4
+ import {
5
+ __export
6
+ } from "./chunk-J5LGTIGS.mjs";
7
+
8
+ // src/common/activation-events.ts
9
+ var activation_events_exports = {};
10
+ __export(activation_events_exports, {
11
+ ProcessManagerReady: () => ProcessManagerReady,
12
+ SetupProcessManager: () => SetupProcessManager,
13
+ SetupReactSurface: () => SetupReactSurface,
14
+ Startup: () => Startup
15
+ });
16
+ var Startup = activation_event_exports.make("org.dxos.app-framework.event.startup");
17
+ var SetupReactSurface = activation_event_exports.make("org.dxos.app-framework.event.setup-react-surface");
18
+ var SetupProcessManager = activation_event_exports.make("org.dxos.app-framework.event.setup-process-manager");
19
+ var ProcessManagerReady = activation_event_exports.make("org.dxos.app-framework.event.process-manager-ready");
20
+
21
+ export {
22
+ Startup,
23
+ SetupReactSurface,
24
+ SetupProcessManager,
25
+ ProcessManagerReady,
26
+ activation_events_exports
27
+ };
28
+ //# sourceMappingURL=chunk-5GY3YOEL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/common/activation-events.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent as ActivationEvent$ } from '../core';\n\n/**\n * Fired when the app is started.\n */\nexport const Startup = ActivationEvent$.make('org.dxos.app-framework.event.startup');\n\n//\n// Dependent Events\n//\n\n/**\n * Fired to load any newly available surfaces.\n */\nexport const SetupReactSurface = ActivationEvent$.make('org.dxos.app-framework.event.setup-react-surface');\n\n/**\n * Fired before the process manager is created.\n * Plugins should contribute their {@link Capabilities.LayerSpec} entries and\n * {@link Capabilities.OperationHandler} sets before this event fires so the\n * process manager's {@link ServiceResolver} and {@link OperationInvoker} pick\n * them up at construction time.\n */\nexport const SetupProcessManager = ActivationEvent$.make('org.dxos.app-framework.event.setup-process-manager');\n\n//\n// Triggered Events\n//\n\n/**\n * Fired after the process manager runtime is ready and its derived capabilities\n * (`ProcessManagerRuntime`, `ServiceResolver`, `ProcessMonitor`, `OperationInvoker`)\n * have been contributed.\n */\nexport const ProcessManagerReady = ActivationEvent$.make('org.dxos.app-framework.event.process-manager-ready');\n"],
5
+ "mappings": ";;;;;;;;AAAA;;;;;;;AASO,IAAMA,UAAUC,yBAAiBC,KAAK,sCAAA;AAStC,IAAMC,oBAAoBF,yBAAiBC,KAAK,kDAAA;AAShD,IAAME,sBAAsBH,yBAAiBC,KAAK,oDAAA;AAWlD,IAAMG,sBAAsBJ,yBAAiBC,KAAK,oDAAA;",
6
+ "names": ["Startup", "ActivationEvent$", "make", "SetupReactSurface", "SetupProcessManager", "ProcessManagerReady"]
7
+ }
@@ -45,4 +45,4 @@ export {
45
45
  getEvents,
46
46
  activation_event_exports
47
47
  };
48
- //# sourceMappingURL=chunk-QSXYHXCE.mjs.map
48
+ //# sourceMappingURL=chunk-66IXTIVK.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/core/activation-event.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { compositeKey } from '@dxos/util';\n\n/**\n * A unique string identifier representing an event.\n * This is expected to be a URI, where initial parts are often the id of the plugin whose package defines the event.\n *\n * @example org.dxos.plugin.example.event.ready\n */\nexport type ActivationEvent = {\n id: string;\n specifier?: string;\n};\n\n/**\n * An activation event that can be a single event, or a combination of events.\n */\nexport type Events =\n | ActivationEvent\n | { type: 'one-of'; events: ActivationEvent[] }\n | { type: 'all-of'; events: ActivationEvent[] };\n\n/**\n * Helper to define an activation event.\n */\nexport const make = (id: string, specifier?: string) => {\n return { id, specifier } as ActivationEvent;\n};\n\n/**\n * Helper to create an activation event key.\n */\nexport const eventKey = (event: ActivationEvent) =>\n event.specifier ? compositeKey(event.id, event.specifier) : event.id;\n\n/**\n * Helper to create an activation event that triggers when any of the given events are activated.\n */\nexport const oneOf = (...events: ActivationEvent[]) => ({ type: 'one-of' as const, events });\n\n/**\n * Helper to create an activation event that triggers when all of the given events are activated.\n */\nexport const allOf = (...events: ActivationEvent[]) => ({ type: 'all-of' as const, events });\n\n/**\n * Helper to check if an activation event is a one-of event.\n */\nexport const isOneOf = (events: Events): events is { type: 'one-of'; events: ActivationEvent[] } =>\n 'type' in events && events.type === 'one-of';\n\n/**\n * Helper to check if an activation event is an all-of event.\n */\nexport const isAllOf = (events: Events): events is { type: 'all-of'; events: ActivationEvent[] } =>\n 'type' in events && events.type === 'all-of';\n\n/**\n * Helper to get the events from an activation event.\n */\nexport const getEvents = (events: Events) => ('type' in events ? events.events : [events]);\n"],
5
- "mappings": ";;;;;AAAA;;;;;;;;;;AAIA,SAASA,oBAAoB;AAwBtB,IAAMC,OAAO,CAACC,IAAYC,cAAAA;AAC/B,SAAO;IAAED;IAAIC;EAAU;AACzB;AAKO,IAAMC,WAAW,CAACC,UACvBA,MAAMF,YAAYG,aAAaD,MAAMH,IAAIG,MAAMF,SAAS,IAAIE,MAAMH;AAK7D,IAAMK,QAAQ,IAAIC,YAA+B;EAAEC,MAAM;EAAmBD;AAAO;AAKnF,IAAME,QAAQ,IAAIF,YAA+B;EAAEC,MAAM;EAAmBD;AAAO;AAKnF,IAAMG,UAAU,CAACH,WACtB,UAAUA,UAAUA,OAAOC,SAAS;AAK/B,IAAMG,UAAU,CAACJ,WACtB,UAAUA,UAAUA,OAAOC,SAAS;AAK/B,IAAMI,YAAY,CAACL,WAAoB,UAAUA,SAASA,OAAOA,SAAS;EAACA;;",
6
- "names": ["compositeKey", "make", "id", "specifier", "eventKey", "event", "compositeKey", "oneOf", "events", "type", "allOf", "isOneOf", "isAllOf", "getEvents"]
5
+ "mappings": ";;;;;AAAA;;;;;;;;;;AAIA,SAASA,oBAAoB;AAwBtB,IAAMC,OAAO,CAACC,IAAYC,cAAAA;AAC/B,SAAO;IAAED;IAAIC;EAAU;AACzB;AAKO,IAAMC,WAAW,CAACC,UACvBA,MAAMF,YAAYH,aAAaK,MAAMH,IAAIG,MAAMF,SAAS,IAAIE,MAAMH;AAK7D,IAAMI,QAAQ,IAAIC,YAA+B;EAAEC,MAAM;EAAmBD;AAAO;AAKnF,IAAME,QAAQ,IAAIF,YAA+B;EAAEC,MAAM;EAAmBD;AAAO;AAKnF,IAAMG,UAAU,CAACH,WACtB,UAAUA,UAAUA,OAAOC,SAAS;AAK/B,IAAMG,UAAU,CAACJ,WACtB,UAAUA,UAAUA,OAAOC,SAAS;AAK/B,IAAMI,YAAY,CAACL,WAAoB,UAAUA,SAASA,OAAOA,SAAS;EAACA;;",
6
+ "names": ["compositeKey", "make", "id", "specifier", "eventKey", "event", "oneOf", "events", "type", "allOf", "isOneOf", "isAllOf", "getEvents"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  capabilities_exports
3
- } from "./chunk-JKWMHZP6.mjs";
3
+ } from "./chunk-2ZIYRDAF.mjs";
4
4
 
5
5
  // src/helpers.ts
6
6
  var topologicalSort = (nodes) => {
@@ -94,7 +94,6 @@ var SurfaceInfo = /* @__PURE__ */ forwardRef(({ children }, forwardedRef) => {
94
94
  const padding = 0;
95
95
  return /* @__PURE__ */ React.createElement(React.Fragment, null, childWithRef, rect && /* @__PURE__ */ createPortal(
96
96
  /* @__PURE__ */ React.createElement("div", {
97
- role: "none",
98
97
  className: "z-[100] fixed flex flex-col-reverse scrollbar-none overflow-auto pointer-events-none",
99
98
  style: {
100
99
  top: rect.top + padding,
@@ -364,7 +363,6 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
364
363
  ],
365
364
  FallbackComponent: fallback
366
365
  }, /* @__PURE__ */ React3.createElement("div", {
367
- role: "none",
368
366
  className: "contents",
369
367
  "data-id": id,
370
368
  "data-role": role
@@ -396,7 +394,6 @@ var SurfaceContextProvider = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({
396
394
  ],
397
395
  FallbackComponent: fallback
398
396
  }, /* @__PURE__ */ React3.createElement("div", {
399
- role: "none",
400
397
  className: "contents",
401
398
  "data-id": id,
402
399
  "data-role": role
@@ -420,12 +417,7 @@ var SurfaceComponent = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _
420
417
  if (DEBUG) {
421
418
  log.warn("Surface has neither `role` nor `type` prop", {
422
419
  id: _id
423
- }, {
424
- F: __dxlog_file,
425
- L: 201,
426
- S: void 0,
427
- C: (f, a) => f(...a)
428
- });
420
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 194, S: void 0 });
429
421
  }
430
422
  return null;
431
423
  }
@@ -438,12 +430,7 @@ var SurfaceComponent = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef2(({ id: _
438
430
  log.warn("no candidates for surface", {
439
431
  role: effectiveRole,
440
432
  data
441
- }, {
442
- F: __dxlog_file,
443
- L: 210,
444
- S: void 0,
445
- C: (f, a) => f(...a)
446
- });
433
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 207, S: void 0 });
447
434
  return null;
448
435
  }
449
436
  return /* @__PURE__ */ React3.createElement(Suspense, {
@@ -481,10 +468,7 @@ var useSurfaces = () => {
481
468
  const result = [];
482
469
  for (const [moduleId, surfaces] of Object.entries(surfacesByModule)) {
483
470
  for (const def of surfaces.flat()) {
484
- result.push({
485
- ...def,
486
- id: `${moduleId}.${def.id}`
487
- });
471
+ result.push(def);
488
472
  }
489
473
  }
490
474
  return result;
@@ -524,7 +508,15 @@ var expandBindings = (filter) => {
524
508
  guard
525
509
  };
526
510
  };
511
+ var validateLocalId = (id) => {
512
+ const segments = id.split(".");
513
+ const finalSegment = segments[segments.length - 1];
514
+ if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(finalSegment)) {
515
+ throw new Error(`Invalid surface id: "${id}". The final segment "${finalSegment}" must be camelCase (letters and digits only, starting with a letter \u2014 no hyphens or underscores).`);
516
+ }
517
+ };
527
518
  function create(definition) {
519
+ validateLocalId(definition.id);
528
520
  if (isSurfaceFilter(definition.filter)) {
529
521
  const { id, filter, component, position } = definition;
530
522
  const { role, guard } = expandBindings(filter);
@@ -543,6 +535,7 @@ function create(definition) {
543
535
  };
544
536
  }
545
537
  function createWeb(definition) {
538
+ validateLocalId(definition.id);
546
539
  if (isSurfaceFilter(definition.filter)) {
547
540
  const { id, filter, tagName, position } = definition;
548
541
  const { role, guard } = expandBindings(filter);
@@ -591,4 +584,4 @@ export {
591
584
  SurfaceComponent,
592
585
  Surface
593
586
  };
594
- //# sourceMappingURL=chunk-QRTB4Q3U.mjs.map
587
+ //# sourceMappingURL=chunk-7MBI66M7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers.ts", "../../../src/ui/hooks/useSurface.ts", "../../../src/ui/components/PluginManager/PluginManagerProvider.ts", "../../../src/ui/components/Surface/context.ts", "../../../src/ui/components/Surface/SurfaceComponent.tsx", "../../../src/ui/components/Surface/SurfaceInfo.tsx", "../../../src/ui/components/Surface/SurfaceProfilerContext.tsx", "../../../src/ui/components/Surface/types.ts", "../../../src/ui/components/Surface/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\ntype DependencyNode = {\n id: string;\n dependsOn?: string[];\n};\n\n/**\n * Topologically sorts a list of nodes based on their dependencies.\n */\n// TODO(wittjosiah): Factor out?\nexport const topologicalSort = <T extends DependencyNode>(nodes: T[]): T[] => {\n const getDependencies = (nodeId: string, seen = new Set<string>(), path = new Set<string>()): string[] => {\n if (path.has(nodeId)) {\n throw new Error(`Circular dependency detected involving ${nodeId}`);\n }\n if (seen.has(nodeId)) {\n return [];\n }\n\n const node = nodes.find((n) => n.id === nodeId);\n if (!node) {\n throw new Error(`Node ${nodeId} not found but is listed as a dependency`);\n }\n\n const newPath = new Set([...path, nodeId]);\n const newSeen = new Set([...seen, nodeId]);\n\n const dependsOn = node.dependsOn ?? [];\n return [...dependsOn.flatMap((depId) => getDependencies(depId, newSeen, newPath)), nodeId];\n };\n\n // Get all unique dependencies.\n const allDependencies = nodes\n .map((node) => node.id)\n .flatMap((id) => getDependencies(id))\n .filter((id, index, self) => self.indexOf(id) === index);\n\n // Map back to original nodes\n return allDependencies\n .map((id) => nodes.find((node) => node.id === id))\n .filter((node): node is T => node !== undefined);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { Surface } from '../components';\n\nexport const useSurface = (): Surface.Context => {\n return useContext(Surface.Context) ?? raise(new Error('Missing SurfaceContext'));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type PluginManager } from '../../../core';\n\nconst PluginManagerContext = createContext<PluginManager.PluginManager | undefined>(undefined);\n\n/**\n * Get the plugin manager.\n */\nexport const usePluginManager = (): PluginManager.PluginManager =>\n useContext(PluginManagerContext) ?? raise(new Error('Missing PluginManagerContext'));\n\n/**\n * Context provider for a plugin manager.\n */\nexport const PluginManagerProvider = PluginManagerContext.Provider;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Context, createContext } from 'react';\n\nimport { type Props } from './types';\n\nexport type SurfaceContext = Pick<Props, 'id' | 'role' | 'data'>;\n\n// TODO(burdon): Use @radix-ui/react-context\nexport const SurfaceContext: Context<SurfaceContext | undefined> = createContext<SurfaceContext | undefined>(undefined);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, {\n Fragment,\n type NamedExoticComponent,\n Profiler,\n type RefAttributes,\n Suspense,\n forwardRef,\n memo,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { log } from '@dxos/log';\nimport { ErrorBoundary } from '@dxos/react-error-boundary';\nimport { useDefaultValue } from '@dxos/react-hooks';\nimport { byPosition } from '@dxos/util';\n\nimport { Capabilities } from '../../../common';\nimport { type CapabilityManager } from '../../../core';\nimport { usePluginManager } from '../PluginManager/PluginManagerProvider';\nimport { SurfaceContext } from './context';\nimport { SurfaceInfo } from './SurfaceInfo';\nimport { useSurfaceProfilerCallback } from './SurfaceProfilerContext';\nimport {\n type Definition,\n type Props,\n type RoleToken,\n type TokenData,\n type TypedProps,\n type WebComponentDefinition,\n} from './types';\n\nconst DEBUG = import.meta.env.VITE_DEBUG;\n\nconst DEFAULT_PLACEHOLDER = <Fragment />;\n\n/**\n * Wrapper component for rendering Web Component surfaces.\n * Handles creation, prop setting, and cleanup of Web Components.\n */\nconst WebComponentWrapper = memo(\n forwardRef<HTMLElement, Omit<Props, 'role'> & { role: string; definition: WebComponentDefinition }>(\n ({ id, role, data, limit, definition, ...rest }, forwardedRef) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const elementRef = useRef<HTMLElement | null>(null);\n const propsRef = useRef({ id, role, data, limit, ...rest });\n\n // Update props ref on every render\n propsRef.current = { id, role, data, limit, ...rest };\n\n // Create element only once\n useEffect(() => {\n if (!containerRef.current || elementRef.current) {\n return;\n }\n\n // Create the Web Component\n const element = document.createElement(definition.tagName);\n elementRef.current = element;\n\n // Set initial properties on the Web Component\n Object.assign(element, propsRef.current);\n\n // Append to container\n containerRef.current.appendChild(element);\n\n // Setup ref forwarding if provided\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n\n // Cleanup on unmount to prevent memory leaks\n return () => {\n if (elementRef.current && containerRef.current?.contains(elementRef.current)) {\n containerRef.current.removeChild(elementRef.current);\n }\n if (typeof forwardedRef === 'function') {\n forwardedRef(null);\n } else if (forwardedRef) {\n forwardedRef.current = null;\n }\n elementRef.current = null;\n };\n }, [definition.tagName, forwardedRef]);\n\n // Update props on existing element without recreating it\n // This runs on every render to ensure all props (including those in `rest`) are kept up to date\n useEffect(() => {\n const element = elementRef.current;\n if (!element) {\n return;\n }\n\n // Update properties on the existing Web Component\n Object.assign(element, propsRef.current);\n });\n\n return <div ref={containerRef} />;\n },\n ),\n);\n\nWebComponentWrapper.displayName = 'WebComponentWrapper';\n\n/**\n * Wrapper component that provides context for a surface.\n */\n// TODO(burdon): Allow DebugPlugin to provide different fallback using react-ui ErrorFallback.\nconst SurfaceContextProvider = memo(\n forwardRef<HTMLElement, Omit<Props, 'role'> & { role: string; definition: Definition }>(\n ({ id, role, data, limit, fallback = ErrorFallback, definition, ...rest }, forwardedRef) => {\n const contextValue = useMemo(() => ({ id, role, data }), [id, role, data]);\n const onProfilerRender = useSurfaceProfilerCallback();\n const profilerId = `surface/${id}/${role}`;\n\n // Handle Web Component surfaces\n if (definition.kind === 'web-component') {\n return (\n <ErrorBoundary name='surface' resetKeys={[data]} FallbackComponent={fallback}>\n <SurfaceContext.Provider value={contextValue}>\n <WebComponentWrapper\n id={id}\n role={role}\n data={data}\n limit={limit}\n definition={definition}\n ref={forwardedRef}\n {...rest}\n />\n </SurfaceContext.Provider>\n </ErrorBoundary>\n );\n }\n\n // Handle React component surfaces\n const Component = definition.component;\n\n // TODO(burdon): Remove from production build?\n const debug = DEBUG || '__DX_DEBUG__' in window;\n if (debug) {\n return (\n <ErrorBoundary name='surface' resetKeys={[data]} FallbackComponent={fallback}>\n <div className='contents' data-id={id} data-role={role}>\n <SurfaceContext.Provider value={contextValue}>\n <SurfaceInfo ref={forwardedRef}>\n {onProfilerRender && !profilerId.includes('org.dxos.plugin.debug') ? (\n <Profiler id={profilerId} onRender={onProfilerRender}>\n <Component id={id} role={role} data={data} limit={limit} {...rest} />\n </Profiler>\n ) : (\n <Component id={id} role={role} data={data} limit={limit} {...rest} />\n )}\n </SurfaceInfo>\n </SurfaceContext.Provider>\n </div>\n </ErrorBoundary>\n );\n }\n\n return (\n <ErrorBoundary name='surface' resetKeys={[data]} FallbackComponent={fallback}>\n <div className='contents' data-id={id} data-role={role}>\n <SurfaceContext.Provider value={contextValue}>\n <Component id={id} role={role} data={data} limit={limit} {...rest} ref={forwardedRef} />\n </SurfaceContext.Provider>\n </div>\n </ErrorBoundary>\n );\n },\n ),\n);\n\nSurfaceContextProvider.displayName = 'SurfaceContextProvider';\n\n/**\n * A surface is a named region of the screen that can be populated by plugins.\n */\n// TODO(burdon): Remove `ref` since relying on this would be error prone.\nexport const SurfaceComponent = memo(\n forwardRef<HTMLElement, Props & { type?: RoleToken<any> }>(\n ({ id: _id, role, type, data: dataProp, limit, placeholder = DEFAULT_PLACEHOLDER, ...rest }, forwardedRef) => {\n const data = useDefaultValue(dataProp, () => ({}));\n // TODO(wittjosiah): This will make all surfaces depend on a single signal.\n // This isn't ideal because it means that any change to the data will cause all surfaces to re-render.\n // This effectively means that plugin modules which contribute surfaces need to all be activated at startup.\n // This should be fine for now because it's how it worked prior to capabilities api anyway.\n // In the future, it would be nice to be able to bucket the surface contributions by role.\n const surfaces = useSurfaces();\n\n const effectiveRole = role ?? type?.role;\n if (effectiveRole == null) {\n if (DEBUG) {\n log.warn('Surface has neither `role` nor `type` prop', { id: _id });\n }\n return null;\n }\n\n // NOTE: Memoizing the candidates makes the surface not re-render based on reactivity within data.\n const definitions = findCandidates(surfaces, { role: effectiveRole, data });\n const candidates = limit ? definitions.slice(0, limit) : definitions;\n if (DEBUG && candidates.length === 0) {\n log.warn('no candidates for surface', { role: effectiveRole, data });\n return null;\n }\n\n return (\n <Suspense fallback={placeholder}>\n {candidates.map((definition) => (\n <SurfaceContextProvider\n key={definition.id}\n id={definition.id}\n role={effectiveRole}\n data={data}\n limit={limit}\n definition={definition}\n ref={forwardedRef}\n {...rest}\n />\n ))}\n </Suspense>\n );\n },\n ),\n) as (<TToken extends RoleToken<any>>(props: TypedProps<TToken> & RefAttributes<HTMLElement>) => React.ReactNode) &\n NamedExoticComponent<Props & RefAttributes<HTMLElement>>;\n\nSurfaceComponent.displayName = 'Surface';\n\n// TODO(burdon): Make user facing, with telemetry.\nconst ErrorFallback = ({ error }: Props) => {\n const { message } = error instanceof Error ? error : { message: String(error) };\n return (\n <div role='alert' data-testid='error-boundary-fallback'>\n <h1 className='flex gap-2 text-sm mt-2 text-info-text'>{message}</h1>\n </div>\n );\n};\n\nconst findCandidates = (surfaces: Definition[], { role, data }: { role: string; data: Props['data'] }) => {\n return Object.values(surfaces)\n .filter((definition) =>\n Array.isArray(definition.role) ? definition.role.includes(role) : definition.role === role,\n )\n .filter(({ filter }) => (filter ? filter(data ?? {}, role) : true))\n .toSorted(byPosition);\n};\n\n/**\n * @internal\n */\nexport const useSurfaces = () => {\n const manager = usePluginManager();\n const surfacesByModule = useAtomValue(manager.capabilities.atomByModule(Capabilities.ReactSurface));\n return useMemo(() => {\n const result: Definition[] = [];\n for (const [moduleId, surfaces] of Object.entries(surfacesByModule)) {\n for (const def of surfaces.flat()) {\n result.push(def);\n }\n }\n return result;\n }, [surfacesByModule]);\n};\n\n/**\n * @returns `true` if there is a contributed surface which matches the specified role & data, `false` otherwise.\n *\n * Two overloads:\n * - Typed: pass a `type` role token and `data` is constrained to the token's\n * declared contract (e.g. `AppSurface.Section` requires `attendableId`).\n * - Legacy: pass a string `role` and `data` is untyped.\n */\nexport function isSurfaceAvailable<TToken extends RoleToken<any>>(\n capabilityManager: CapabilityManager.CapabilityManager,\n args: { type: TToken; data?: TokenData<TToken>; role?: never },\n): boolean;\nexport function isSurfaceAvailable(\n capabilityManager: CapabilityManager.CapabilityManager,\n args: Pick<Props, 'role' | 'data'> & { type?: undefined },\n): boolean;\nexport function isSurfaceAvailable(\n capabilityManager: CapabilityManager.CapabilityManager,\n { role, type, data }: { role?: string; type?: RoleToken<any>; data?: unknown },\n): boolean {\n const effectiveRole = role ?? type?.role;\n if (effectiveRole == null) {\n return false;\n }\n const surfaces = capabilityManager.getAll(Capabilities.ReactSurface);\n const candidates = findCandidates(surfaces.flat(), {\n role: effectiveRole,\n data: data as Props['data'],\n });\n return candidates.length > 0;\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, {\n type ReactElement,\n type Ref,\n cloneElement,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { addEventListener, combine } from '@dxos/async';\nimport { useMergeRefs } from '@dxos/react-hooks';\n\nimport { useSurface } from '../../hooks';\n\nexport type SurfaceInfoProps = {\n children: ReactElement<{ ref?: Ref<HTMLElement> }>;\n};\n\n/**\n * Debug wrapper for surfaces.\n */\nexport const SurfaceInfo = forwardRef<HTMLElement, SurfaceInfoProps>(({ children }, forwardedRef) => {\n const [rect, setRect] = useState<DOMRect | null>(null);\n const [expand, setExpand] = useState(false);\n const info = useSurface();\n\n const [root, setRoot] = useState<HTMLElement | null>(null);\n const measureRef = useCallback((node: HTMLElement | null) => setRoot(node), []);\n const mergedRef = useMergeRefs([measureRef, forwardedRef]);\n const childWithRef = cloneElement(children, { ref: mergedRef });\n\n useLayoutEffect(() => {\n if (!root) {\n setRect(null);\n return;\n }\n\n const measure = () => {\n setRect(root.getBoundingClientRect());\n };\n\n const observer = new ResizeObserver(measure);\n observer.observe(root);\n measure();\n\n return combine(\n addEventListener(window, 'scroll', measure, true),\n addEventListener(window, 'resize', measure),\n () => {\n observer.disconnect();\n },\n );\n }, [root]);\n\n const padding = 0;\n return (\n <>\n {childWithRef}\n {rect &&\n createPortal(\n <div\n className='z-[100] fixed flex flex-col-reverse scrollbar-none overflow-auto pointer-events-none'\n style={{\n top: rect.top + padding,\n left: rect.left + padding,\n width: rect.width - padding * 2,\n height: rect.height - padding * 2,\n }}\n >\n {expand ? (\n <div\n className='absolute inset-0 bg-deck-surface border border-green-500 cursor-pointer pointer-events-auto overflow-auto'\n onPointerDown={(ev) => ev.stopPropagation()}\n onClick={(ev) => {\n ev.stopPropagation();\n setExpand(false);\n }}\n >\n <pre className='p-2 text-xs text-description font-mono'>{JSON.stringify({ info }, null, 2)}</pre>\n </div>\n ) : (\n <span\n 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'\n title={info.id}\n onPointerDown={(ev) => ev.stopPropagation()}\n onClick={(ev) => {\n ev.stopPropagation();\n setExpand(true);\n }}\n >\n ⓘ\n </span>\n )}\n </div>,\n // TODO(burdon): Create well-known element to gather all debug portals.\n document.body,\n )}\n </>\n );\n});\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, {\n type Context,\n type PropsWithChildren,\n type ProfilerOnRenderCallback,\n createContext,\n useContext,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react';\n\nconst MAX_ENTRIES = 500;\n\n/**\n * Single profiler record captured from React Profiler onRender callback.\n */\nexport type SurfaceProfilerEntry = {\n id: string;\n phase: 'mount' | 'update' | 'nested-update';\n actualDuration: number;\n baseDuration: number;\n startTime: number;\n commitTime: number;\n timestamp: number;\n};\n\n/**\n * Aggregated stats for a single profiled surface.\n */\nexport type SurfaceProfilerStats = {\n id: string;\n mountCount: number;\n updateCount: number;\n totalRenders: number;\n avgActualDuration: number;\n maxActualDuration: number;\n avgBaseDuration: number;\n lastActualDuration: number;\n lastCommitTime: number;\n};\n\n/**\n * Store that collects profiler entries and notifies subscribers.\n */\nclass SurfaceProfilerStore {\n private _entries: SurfaceProfilerEntry[] = [];\n private _listeners = new Set<() => void>();\n private _snapshot: readonly SurfaceProfilerEntry[] = [];\n private _pendingNotify = false;\n\n /** Records an entry and schedules a deferred notification to avoid re-render loops. */\n record(entry: SurfaceProfilerEntry) {\n this._entries.push(entry);\n if (this._entries.length > MAX_ENTRIES) {\n this._entries = this._entries.slice(-MAX_ENTRIES);\n }\n this._snapshot = [...this._entries];\n this._scheduleNotify();\n }\n\n clear() {\n this._entries = [];\n this._snapshot = [];\n this._notifySync();\n }\n\n subscribe = (listener: () => void) => {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n };\n\n getSnapshot = (): readonly SurfaceProfilerEntry[] => {\n return this._snapshot;\n };\n\n /**\n * Defers notification to the next animation frame to break the\n * Profiler onRender → record → notify → re-render → onRender loop.\n */\n private _scheduleNotify() {\n if (!this._pendingNotify) {\n this._pendingNotify = true;\n requestAnimationFrame(() => {\n this._pendingNotify = false;\n this._notifySync();\n });\n }\n }\n\n private _notifySync() {\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n\ntype SurfaceProfilerContextValue = {\n store: SurfaceProfilerStore;\n};\n\nconst SurfaceProfilerContext: Context<SurfaceProfilerContextValue | undefined> = createContext<\n SurfaceProfilerContextValue | undefined\n>(undefined);\n\n/**\n * Provider that collects React Profiler data from Surface components.\n */\nexport const SurfaceProfilerProvider = ({ children }: PropsWithChildren) => {\n const storeRef = useRef<SurfaceProfilerStore>(null);\n if (!storeRef.current) {\n storeRef.current = new SurfaceProfilerStore();\n }\n return (\n <SurfaceProfilerContext.Provider value={{ store: storeRef.current }}>{children}</SurfaceProfilerContext.Provider>\n );\n};\n\n/**\n * Returns a stable onRender callback for use with React Profiler.\n */\nexport const useSurfaceProfilerCallback = (): ProfilerOnRenderCallback | undefined => {\n const store = useContext(SurfaceProfilerContext)?.store;\n return useMemo<ProfilerOnRenderCallback | undefined>(() => {\n if (!store) {\n return undefined;\n }\n return (id, phase, actualDuration, baseDuration, startTime, commitTime) => {\n store.record({\n id,\n phase,\n actualDuration,\n baseDuration,\n startTime,\n commitTime,\n timestamp: Date.now(),\n });\n };\n }, [store]);\n};\n\n/**\n * Returns all profiler entries reactively.\n */\nexport const useSurfaceProfilerEntries = (): readonly SurfaceProfilerEntry[] => {\n const context = useContext(SurfaceProfilerContext);\n return useSyncExternalStore(context?.store.subscribe ?? noop, context?.store.getSnapshot ?? emptySnapshot);\n};\n\n/**\n * Returns aggregated stats grouped by surface id.\n */\nexport const useSurfaceProfilerStats = (): SurfaceProfilerStats[] => {\n const entries = useSurfaceProfilerEntries();\n const statsMap = new Map<string, SurfaceProfilerStats>();\n\n for (const entry of entries) {\n let stats = statsMap.get(entry.id);\n if (!stats) {\n stats = {\n id: entry.id,\n mountCount: 0,\n updateCount: 0,\n totalRenders: 0,\n avgActualDuration: 0,\n maxActualDuration: 0,\n avgBaseDuration: 0,\n lastActualDuration: 0,\n lastCommitTime: 0,\n };\n statsMap.set(entry.id, stats);\n }\n\n if (entry.phase === 'mount') {\n stats.mountCount++;\n } else {\n stats.updateCount++;\n }\n stats.totalRenders++;\n stats.avgActualDuration =\n (stats.avgActualDuration * (stats.totalRenders - 1) + entry.actualDuration) / stats.totalRenders;\n stats.avgBaseDuration =\n (stats.avgBaseDuration * (stats.totalRenders - 1) + entry.baseDuration) / stats.totalRenders;\n stats.maxActualDuration = Math.max(stats.maxActualDuration, entry.actualDuration);\n stats.lastActualDuration = entry.actualDuration;\n stats.lastCommitTime = entry.commitTime;\n }\n\n return [...statsMap.values()].sort((a, b) => b.maxActualDuration - a.maxActualDuration);\n};\n\n/**\n * Clears all collected profiler entries.\n */\nexport const useSurfaceProfilerClear = (): (() => void) | undefined => {\n const store = useContext(SurfaceProfilerContext)?.store;\n return useMemo(() => (store ? () => store.clear() : undefined), [store]);\n};\n\nconst noop = () => () => {};\nconst EMPTY_SNAPSHOT: readonly SurfaceProfilerEntry[] = [];\nconst emptySnapshot = () => EMPTY_SNAPSHOT;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { FC, PropsWithChildren, ReactNode, RefCallback } from 'react';\n\nimport type { MakeOptional, Position } from '@dxos/util';\n\n/**\n * A typed role token. Carries a role string for runtime dispatch plus a phantom\n * data type so consumers using `type={SomeToken}` and providers using\n * `AppSurface.object(SomeToken, ...)` share a single type-level contract.\n *\n * Mint via {@link makeType}.\n */\nexport type RoleToken<TData> = {\n readonly role: string;\n /** Covariant phantom; never accessed at runtime. */\n readonly _phantom?: TData;\n};\n\n/**\n * One entry in a {@link SurfaceFilter} — a role plus the guard that validates\n * the data shape when the Surface dispatcher is matching that role.\n */\nexport type SurfaceBinding = {\n readonly role: string;\n readonly guard: (data: unknown) => boolean;\n};\n\n/**\n * Typed filter binding for {@link create}. Combines one or more `(role, guard)`\n * pairs so a provider can register against multiple roles while keeping the\n * role and its data shape in a single expression.\n */\nexport type SurfaceFilter<TData> = {\n readonly bindings: ReadonlyArray<SurfaceBinding>;\n /** Covariant phantom; never accessed at runtime. */\n readonly _phantom?: TData;\n};\n\n/**\n * Narrow data type carried by a role token.\n */\nexport type TokenData<T> = T extends RoleToken<infer D> ? D : never;\n\n/**\n * Runtime guard for {@link SurfaceFilter}. Distinguishes new-style filter\n * bindings from legacy predicate filters.\n */\nexport const isSurfaceFilter = (value: unknown): value is SurfaceFilter<any> =>\n typeof value === 'object' && value !== null && Array.isArray((value as { bindings?: unknown }).bindings);\n\n/**\n * Mints a typed role token. Identity is structural; all tokens with the same\n * `role` string are interchangeable at runtime.\n */\nexport const makeType = <TData>(role: string): RoleToken<TData> => ({ role });\n\n/**\n * Props that are passed to the Surface component.\n *\n * The role can be provided either as a string via `role` or as a typed\n * {@link RoleToken} via `type`. The typed form narrows `data` to the token's\n * declared shape.\n */\nexport type Props<T extends Record<string, any> = Record<string, unknown>> = {\n /**\n * If specified, the Surface will be wrapped in an error boundary.\n * The fallback component will be rendered if an error occurs.\n */\n fallback?: FC<{ error: Error; data?: any }>;\n\n /**\n * If specified, the Surface will be wrapped in a suspense boundary.\n * The placeholder component will be rendered while the surface component is loading.\n */\n placeholder?: ReactNode;\n} & MakeOptional<CoreProps<T>, 'id' | 'data' | 'role'> & {\n /**\n * Explicitly disallow `type` on the untyped Props overload — if the caller\n * provides `type={AppSurface.X}`, TypeScript must route to the typed\n * overload (where `data` is narrowed by the token). Without this, the\n * catch-all index signature below would accept any `type` value and mask\n * the typed overload entirely.\n */\n type?: undefined;\n } /**\n * Additional props to pass to the component.\n * These props are not used by Surface itself but may be used by components which resolve the surface.\n * Exclude known prop names to prevent overriding well-defined props.\n */ & {\n [K in keyof Record<string, any>]: K extends keyof CoreProps<T> | 'fallback' | 'placeholder' | 'type' ? never : any;\n };\n\n/**\n * Typed Surface consumer props — carries the role/data-shape contract via a\n * {@link RoleToken}. Available as a typed overload of the Surface component so\n * ad-hoc `type` fields on arbitrary spread props don't conflict with the\n * untyped consumer form.\n */\nexport type TypedProps<TToken extends RoleToken<any>> = {\n fallback?: FC<{ error: Error; data?: any }>;\n placeholder?: ReactNode;\n id?: string;\n type: TToken;\n data?: TokenData<TToken>;\n limit?: number | undefined;\n} & {\n /**\n * Additional pass-through props. Known prop names are excluded so the\n * catch-all doesn't widen `data` / `type` / etc. to `any` at the intersection.\n */\n [K in keyof Record<string, any>]: K extends 'fallback' | 'placeholder' | 'id' | 'type' | 'data' | 'limit'\n ? never\n : any;\n};\n\n/**\n * NOTE: If `[key: string]: unknown` is included in shared types, when re-used other fields become unknown as well.\n */\nexport type CoreProps<T extends Record<string, any> = Record<string, unknown>> = PropsWithChildren<{\n /**\n * ID for debugging.\n */\n id: string;\n\n /**\n * Role defines how the data should be rendered. For new code, prefer the\n * typed overload of the Surface component which takes a {@link RoleToken}\n * via the `type` prop instead — it enforces a role/data contract at compile\n * time.\n */\n role: string;\n\n /**\n * The data to be rendered by the surface.\n * NOTE: This must be a stable value.\n */\n data: T;\n\n /**\n * If more than one component is resolved, the limit determines how many are rendered.\n */\n limit?: number | undefined;\n}>;\n\n// TODO(burdon): Remove ref since relying on this would be error prone.\nexport type ComponentProps<T extends Record<string, any> = Record<string, any>> = CoreProps<T> & {\n ref?: RefCallback<HTMLElement>;\n} & Record<string, any>;\n\n/**\n * React component used to render a surface once is has matched.\n */\nexport type ComponentFunction<T extends Record<string, any> = Record<string, any>> = (\n props: ComponentProps<T>,\n) => ReactNode;\n\n/**\n * Definition of when a React component surface should be rendered.\n *\n * The optional `filter` receives the consumer-supplied `role` as its second\n * argument so a single definition can encode role-specific guards (used by the\n * {@link SurfaceFilter}-based `create` overload).\n */\nexport type ReactDefinition<T extends Record<string, any> = any> = Readonly<{\n kind: 'react';\n id: string;\n role: string | string[];\n position?: Position;\n component: ComponentFunction<T>;\n filter?: (data: Record<string, unknown>, role?: string) => data is T;\n}>;\n\n/**\n * Definition of when a Web Component surface should be rendered.\n */\nexport type WebComponentDefinition<T extends Record<string, any> = any> = Readonly<{\n kind: 'web-component';\n id: string;\n role: string | string[];\n position?: Position;\n /**\n * The tag name of the Web Component to render.\n * The Web Component will receive the same props as React surfaces via properties/attributes.\n */\n tagName: string;\n filter?: (data: Record<string, unknown>, role?: string) => data is T;\n}>;\n\n/**\n * Definition of when a surface (React or Web Component) should be rendered.\n */\nexport type Definition<T extends Record<string, any> = any> = ReactDefinition<T> | WebComponentDefinition<T>;\n\n/**\n * Typed React surface definition — role is derived from the filter's bindings.\n */\nexport type TypedReactDefinition<T extends Record<string, any> = any> = Readonly<{\n id: string;\n filter: SurfaceFilter<T>;\n component: ComponentFunction<T>;\n position?: Position;\n}>;\n\n/**\n * Typed Web Component surface definition.\n */\nexport type TypedWebComponentDefinition<T extends Record<string, any> = any> = Readonly<{\n id: string;\n filter: SurfaceFilter<T>;\n tagName: string;\n position?: Position;\n}>;\n\nconst expandBindings = <T extends Record<string, any>>(\n filter: SurfaceFilter<T>,\n): { role: string | string[]; guard: (data: Record<string, unknown>, role?: string) => data is T } => {\n const bindings = filter.bindings;\n const roles = Array.from(new Set(bindings.map((binding) => binding.role)));\n const guard = (data: Record<string, unknown>, role?: string): data is T => {\n if (role != null) {\n // Multiple bindings may share a role (e.g. via `oneOf` of same-role filters);\n // the role matches if ANY of them passes.\n return bindings.some((entry) => entry.role === role && entry.guard(data));\n }\n return bindings.some((entry) => entry.guard(data));\n };\n return { role: roles.length === 1 ? roles[0] : roles, guard };\n};\n\n/**\n * Validates that a surface or extension local ID follows NSID conventions:\n * each dot-separated segment must be alphanumeric, and the final segment must\n * be camelCase (no hyphens). This mirrors the rule enforced when the id is\n * appended to a plugin's NSID to form a full DXN path.\n *\n * @example Valid: 'about', 'integrationArticle', 'article.journal'\n * @example Invalid: 'integration-article', 'plugin-spec'\n */\nconst validateLocalId = (id: string): void => {\n const segments = id.split('.');\n const finalSegment = segments[segments.length - 1];\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(finalSegment)) {\n throw new Error(\n `Invalid surface id: \"${id}\". The final segment \"${finalSegment}\" must be camelCase (letters and digits only, starting with a letter — no hyphens or underscores).`,\n );\n }\n};\n\n/**\n * Creates a React surface definition.\n */\nexport function create<T extends Record<string, any> = any>(definition: TypedReactDefinition<T>): ReactDefinition<T>;\nexport function create<T extends Record<string, any> = any>(\n definition: Omit<ReactDefinition<T>, 'kind'>,\n): ReactDefinition<T>;\nexport function create<T extends Record<string, any> = any>(\n definition: TypedReactDefinition<T> | Omit<ReactDefinition<T>, 'kind'>,\n): ReactDefinition<T> {\n validateLocalId(definition.id);\n if (isSurfaceFilter(definition.filter)) {\n const { id, filter, component, position } = definition as TypedReactDefinition<T>;\n const { role, guard } = expandBindings(filter);\n return { kind: 'react', id, role, position, component, filter: guard };\n }\n return { ...(definition as Omit<ReactDefinition<T>, 'kind'>), kind: 'react' };\n}\n\n/**\n * Creates a Web Component surface definition.\n */\nexport function createWeb<T extends Record<string, any> = any>(\n definition: TypedWebComponentDefinition<T>,\n): WebComponentDefinition<T>;\nexport function createWeb<T extends Record<string, any> = any>(\n definition: Omit<WebComponentDefinition<T>, 'kind'>,\n): WebComponentDefinition<T>;\nexport function createWeb<T extends Record<string, any> = any>(\n definition: TypedWebComponentDefinition<T> | Omit<WebComponentDefinition<T>, 'kind'>,\n): WebComponentDefinition<T> {\n validateLocalId(definition.id);\n if (isSurfaceFilter(definition.filter)) {\n const { id, filter, tagName, position } = definition as TypedWebComponentDefinition<T>;\n const { role, guard } = expandBindings(filter);\n return { kind: 'web-component', id, role, position, tagName, filter: guard };\n }\n return { ...(definition as Omit<WebComponentDefinition<T>, 'kind'>), kind: 'web-component' };\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(wittjosiah): Cleanup to avoid re-naming.\nimport { SurfaceContext } from './context';\nimport { SurfaceComponent, isSurfaceAvailable } from './SurfaceComponent';\nimport {\n SurfaceProfilerProvider,\n useSurfaceProfilerCallback,\n useSurfaceProfilerClear,\n useSurfaceProfilerEntries,\n useSurfaceProfilerStats,\n} from './SurfaceProfilerContext';\nimport {\n type Definition as SurfaceDefinition,\n type RoleToken as SurfaceRoleToken,\n type SurfaceBinding as SurfaceBindingType,\n type SurfaceFilter as SurfaceFilterType,\n type TokenData as SurfaceTokenData,\n type TypedProps as SurfaceTypedProps,\n create as createSurface,\n createWeb as createWebSurface,\n isSurfaceFilter as isSurfaceFilterFn,\n makeType as makeTypeFn,\n} from './types';\n\nexport namespace Surface {\n export type Definition = SurfaceDefinition;\n export const create = createSurface;\n export const createWeb = createWebSurface;\n\n export type Context = SurfaceContext;\n export const Context = SurfaceContext;\n\n export const Surface = SurfaceComponent;\n export const isAvailable = isSurfaceAvailable;\n\n export type RoleToken<TData> = SurfaceRoleToken<TData>;\n export type Binding = SurfaceBindingType;\n export type Filter<TData> = SurfaceFilterType<TData>;\n export type TokenData<T> = SurfaceTokenData<T>;\n export type TypedProps<TToken extends SurfaceRoleToken<any>> = SurfaceTypedProps<TToken>;\n export const makeType = makeTypeFn;\n export const isFilter = isSurfaceFilterFn;\n\n export const ProfilerProvider = SurfaceProfilerProvider;\n export const useProfilerCallback = useSurfaceProfilerCallback;\n export const useProfilerEntries = useSurfaceProfilerEntries;\n export const useProfilerStats = useSurfaceProfilerStats;\n export const useProfilerClear = useSurfaceProfilerClear;\n}\n\nexport type { SurfaceProfilerEntry, SurfaceProfilerStats } from './SurfaceProfilerContext';\n"],
5
+ "mappings": "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",
6
+ "names": ["topologicalSort", "nodes", "getDependencies", "nodeId", "seen", "Set", "path", "has", "Error", "node", "find", "n", "id", "newPath", "newSeen", "dependsOn", "flatMap", "depId", "allDependencies", "map", "filter", "index", "self", "indexOf", "undefined", "useContext", "raise", "createContext", "useContext", "raise", "PluginManagerContext", "undefined", "usePluginManager", "Error", "PluginManagerProvider", "Provider", "createContext", "SurfaceContext", "undefined", "useAtomValue", "React", "Fragment", "Profiler", "Suspense", "forwardRef", "memo", "useEffect", "useMemo", "useRef", "log", "ErrorBoundary", "useDefaultValue", "byPosition", "React", "cloneElement", "forwardRef", "useCallback", "useLayoutEffect", "useState", "createPortal", "addEventListener", "combine", "useMergeRefs", "SurfaceInfo", "forwardRef", "children", "forwardedRef", "rect", "setRect", "useState", "expand", "setExpand", "info", "useSurface", "root", "setRoot", "measureRef", "useCallback", "node", "mergedRef", "useMergeRefs", "childWithRef", "cloneElement", "ref", "useLayoutEffect", "measure", "getBoundingClientRect", "observer", "ResizeObserver", "observe", "combine", "addEventListener", "window", "disconnect", "padding", "createPortal", "div", "className", "style", "top", "left", "width", "height", "onPointerDown", "ev", "stopPropagation", "onClick", "pre", "JSON", "stringify", "span", "title", "id", "document", "body", "React", "createContext", "useContext", "useMemo", "useRef", "useSyncExternalStore", "MAX_ENTRIES", "SurfaceProfilerStore", "_entries", "_listeners", "Set", "_snapshot", "_pendingNotify", "record", "entry", "push", "length", "slice", "_scheduleNotify", "clear", "_notifySync", "subscribe", "listener", "add", "delete", "getSnapshot", "requestAnimationFrame", "SurfaceProfilerContext", "undefined", "SurfaceProfilerProvider", "children", "storeRef", "current", "Provider", "value", "store", "useSurfaceProfilerCallback", "id", "phase", "actualDuration", "baseDuration", "startTime", "commitTime", "timestamp", "Date", "now", "useSurfaceProfilerEntries", "context", "noop", "emptySnapshot", "useSurfaceProfilerStats", "entries", "statsMap", "Map", "stats", "get", "mountCount", "updateCount", "totalRenders", "avgActualDuration", "maxActualDuration", "avgBaseDuration", "lastActualDuration", "lastCommitTime", "set", "Math", "max", "values", "sort", "a", "b", "useSurfaceProfilerClear", "EMPTY_SNAPSHOT", "elementRef", "forwardRef", "propsRef", "useRef", "id", "role", "data", "limit", "useEffect", "Object", "assign", "element", "containerRef", "current", "appendChild", "forwardedRef", "definition", "div", "WebComponentWrapper", "React", "FallbackComponent", "value", "contextValue", "ref", "debug", "DEBUG", "name", "className", "data-role", "SurfaceInfo", "onProfilerRender", "includes", "profilerId", "Component", "SurfaceContextProvider", "effectiveRole", "log", "SurfaceComponent", "ErrorFallback", "String", "error", "message", "findCandidates", "surfacesByModule", "useAtomValue", "useMemo", "moduleId", "def", "result", "surfaces", "isSurfaceFilter", "value", "Array", "isArray", "bindings", "makeType", "role", "expandBindings", "filter", "roles", "from", "Set", "map", "binding", "guard", "data", "some", "entry", "length", "validateLocalId", "id", "segments", "split", "finalSegment", "test", "Error", "create", "definition", "component", "position", "kind", "createWeb", "tagName", "Surface", "create", "createSurface", "createWeb", "createWebSurface", "Context", "SurfaceContext", "SurfaceComponent", "isAvailable", "isSurfaceAvailable", "makeType", "makeTypeFn", "isFilter", "isSurfaceFilterFn", "ProfilerProvider", "SurfaceProfilerProvider", "useProfilerCallback", "useSurfaceProfilerCallback", "useProfilerEntries", "useSurfaceProfilerEntries", "useProfilerStats", "useSurfaceProfilerStats", "useProfilerClear", "useSurfaceProfilerClear", "useSurface", "useContext", "Surface", "Context", "raise", "Error"]
7
+ }