@dxos/plugin-registry 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.0

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 (352) hide show
  1. package/dist/lib/{chunk-definitions.mjs → RegistryOperation.mjs} +46 -5
  2. package/dist/lib/RegistryOperation.mjs.map +1 -0
  3. package/dist/lib/RegistryPlugin.mjs.map +1 -1
  4. package/dist/lib/capabilities.browser.mjs +37 -0
  5. package/dist/lib/capabilities.browser.mjs.map +1 -0
  6. package/dist/lib/capabilities.mjs +13 -1
  7. package/dist/lib/capabilities.mjs.map +1 -1
  8. package/dist/lib/capabilities.node.mjs +2 -1
  9. package/dist/lib/capabilities.node.mjs.map +1 -1
  10. package/dist/lib/capabilities.tauri.mjs +37 -0
  11. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  12. package/dist/lib/capabilities.workerd.mjs +2 -1
  13. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  14. package/dist/lib/chunk-BaseRegistryArticle.mjs +51 -41
  15. package/dist/lib/chunk-BaseRegistryArticle.mjs.map +1 -1
  16. package/dist/lib/chunk-LoadPluginDialog.mjs +27 -28
  17. package/dist/lib/chunk-LoadPluginDialog.mjs.map +1 -1
  18. package/dist/lib/chunk-PluginArticle.mjs +234 -7
  19. package/dist/lib/chunk-PluginArticle.mjs.map +1 -1
  20. package/dist/lib/chunk-PublicRegistryArticle.mjs +45 -13
  21. package/dist/lib/chunk-PublicRegistryArticle.mjs.map +1 -1
  22. package/dist/lib/chunk-RegistryArticle.mjs +4 -4
  23. package/dist/lib/chunk-RegistryArticle.mjs.map +1 -1
  24. package/dist/lib/chunk-RegistrySettingsContainer.mjs +13 -5
  25. package/dist/lib/chunk-RegistrySettingsContainer.mjs.map +1 -1
  26. package/dist/lib/chunk-app-graph-builder.mjs +37 -73
  27. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
  28. package/dist/lib/chunk-categories.mjs +37 -1
  29. package/dist/lib/chunk-categories.mjs.map +1 -1
  30. package/dist/lib/chunk-constants.mjs +1 -1
  31. package/dist/lib/chunk-dev-plugin-loader.mjs +4 -3
  32. package/dist/lib/chunk-dev-plugin-loader.mjs.map +1 -1
  33. package/dist/lib/chunk-disable-plugins.mjs +47 -0
  34. package/dist/lib/chunk-disable-plugins.mjs.map +1 -0
  35. package/dist/lib/chunk-enable-plugins.mjs +1 -1
  36. package/dist/lib/chunk-enable-plugins.mjs.map +1 -1
  37. package/dist/lib/chunk-load-plugin.mjs +18 -0
  38. package/dist/lib/chunk-load-plugin.mjs.map +1 -0
  39. package/dist/lib/chunk-loader.mjs +101 -0
  40. package/dist/lib/chunk-loader.mjs.map +1 -0
  41. package/dist/lib/chunk-open-plugin-registry.mjs +3 -3
  42. package/dist/lib/chunk-open-plugin-registry.mjs.map +1 -1
  43. package/dist/lib/chunk-paths.mjs +6 -7
  44. package/dist/lib/chunk-paths.mjs.map +1 -1
  45. package/dist/lib/chunk-private-registry.mjs +52 -0
  46. package/dist/lib/chunk-private-registry.mjs.map +1 -0
  47. package/dist/lib/chunk-query-disabled-plugins.mjs +1 -1
  48. package/dist/lib/chunk-query-disabled-plugins.mjs.map +1 -1
  49. package/dist/lib/chunk-query-plugins.mjs +1 -1
  50. package/dist/lib/chunk-query-plugins.mjs.map +1 -1
  51. package/dist/lib/chunk-react-surface.mjs +72 -62
  52. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  53. package/dist/lib/chunk-rolldown-runtime.mjs +15 -1
  54. package/dist/lib/chunk-settings.mjs +7 -7
  55. package/dist/lib/chunk-settings.mjs.map +1 -1
  56. package/dist/lib/chunk-storage.mjs +126 -0
  57. package/dist/lib/chunk-storage.mjs.map +1 -0
  58. package/dist/lib/chunk-useDisableConfirmation.mjs +57 -0
  59. package/dist/lib/chunk-useDisableConfirmation.mjs.map +1 -0
  60. package/dist/lib/chunk-useRegistryPlugins.mjs +52 -0
  61. package/dist/lib/chunk-useRegistryPlugins.mjs.map +1 -0
  62. package/dist/lib/commands.mjs +533 -174
  63. package/dist/lib/commands.mjs.map +1 -1
  64. package/dist/lib/components.mjs +268 -214
  65. package/dist/lib/components.mjs.map +1 -1
  66. package/dist/lib/containers.mjs.map +1 -1
  67. package/dist/lib/index.mjs +5 -5
  68. package/dist/lib/meta.mjs.map +1 -1
  69. package/dist/lib/ns/Operations.mjs +10 -0
  70. package/dist/lib/ns/Operations.mjs.map +1 -0
  71. package/dist/lib/ns/PluginLoader.mjs +14 -0
  72. package/dist/lib/ns/PluginLoader.mjs.map +1 -0
  73. package/dist/lib/ns/PluginStorage.mjs +17 -0
  74. package/dist/lib/ns/PluginStorage.mjs.map +1 -0
  75. package/dist/lib/operations.mjs +13 -4
  76. package/dist/lib/operations.mjs.map +1 -1
  77. package/dist/lib/plugin.mjs +2 -2
  78. package/dist/lib/plugin.mjs.map +1 -1
  79. package/dist/lib/skills.mjs +1 -1
  80. package/dist/lib/translations.mjs +9 -0
  81. package/dist/lib/translations.mjs.map +1 -1
  82. package/dist/lib/types.mjs +1 -1
  83. package/dist/lib/types.mjs.map +1 -1
  84. package/dist/types/src/Operations.d.ts +2 -0
  85. package/dist/types/src/Operations.d.ts.map +1 -0
  86. package/dist/types/src/PluginLoader.d.ts +2 -0
  87. package/dist/types/src/PluginLoader.d.ts.map +1 -0
  88. package/dist/types/src/PluginStorage.d.ts +2 -0
  89. package/dist/types/src/PluginStorage.d.ts.map +1 -0
  90. package/dist/types/src/RegistryPlugin.d.ts +3 -1
  91. package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/RegistryCategoryArticle.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/commands.d.ts +1 -1
  96. package/dist/types/src/capabilities/commands.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/dev-plugin-loader.d.ts +2 -1
  98. package/dist/types/src/capabilities/dev-plugin-loader.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/gen/browser.d.ts +11 -0
  100. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/gen/node.d.ts +4 -3
  102. package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/gen/tauri.d.ts +11 -0
  104. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/gen/workerd.d.ts +4 -3
  106. package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/index.d.ts +5 -4
  108. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/private-registry.d.ts +11 -0
  110. package/dist/types/src/capabilities/private-registry.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/react-surface.d.ts +2 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/settings.d.ts +2 -1
  114. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  115. package/dist/types/src/categories.d.ts +10 -0
  116. package/dist/types/src/categories.d.ts.map +1 -1
  117. package/dist/types/src/commands/index.d.ts +2 -2
  118. package/dist/types/src/commands/index.d.ts.map +1 -1
  119. package/dist/types/src/commands/plugin/add.d.ts +2 -2
  120. package/dist/types/src/commands/plugin/add.d.ts.map +1 -1
  121. package/dist/types/src/commands/plugin/disable.d.ts +2 -2
  122. package/dist/types/src/commands/plugin/disable.d.ts.map +1 -1
  123. package/dist/types/src/commands/plugin/enable.d.ts +2 -2
  124. package/dist/types/src/commands/plugin/enable.d.ts.map +1 -1
  125. package/dist/types/src/commands/plugin/index.d.ts +1 -1
  126. package/dist/types/src/commands/plugin/index.d.ts.map +1 -1
  127. package/dist/types/src/commands/plugin/list.d.ts +1 -1
  128. package/dist/types/src/commands/plugin/list.d.ts.map +1 -1
  129. package/dist/types/src/commands/plugin/remove.d.ts +2 -2
  130. package/dist/types/src/commands/plugin/remove.d.ts.map +1 -1
  131. package/dist/types/src/commands/registry/errors.d.ts +63 -0
  132. package/dist/types/src/commands/registry/errors.d.ts.map +1 -0
  133. package/dist/types/src/commands/registry/index.d.ts +1 -1
  134. package/dist/types/src/commands/registry/index.d.ts.map +1 -1
  135. package/dist/types/src/commands/registry/publish-package.d.ts +2 -2
  136. package/dist/types/src/commands/registry/publish-package.d.ts.map +1 -1
  137. package/dist/types/src/commands/registry/publish-publisher.d.ts +2 -2
  138. package/dist/types/src/commands/registry/publish-publisher.d.ts.map +1 -1
  139. package/dist/types/src/commands/registry/publish.d.ts +7 -3
  140. package/dist/types/src/commands/registry/publish.d.ts.map +1 -1
  141. package/dist/types/src/commands/registry/records.d.ts +2 -2
  142. package/dist/types/src/commands/registry/records.d.ts.map +1 -1
  143. package/dist/types/src/commands/registry/unpublish.d.ts +2 -2
  144. package/dist/types/src/commands/registry/unpublish.d.ts.map +1 -1
  145. package/dist/types/src/commands/registry/util.d.ts +9 -8
  146. package/dist/types/src/commands/registry/util.d.ts.map +1 -1
  147. package/dist/types/src/commands/registry/verify.d.ts +2 -2
  148. package/dist/types/src/commands/registry/verify.d.ts.map +1 -1
  149. package/dist/types/src/components/DisableDependentsAlert/DisableDependentsAlert.d.ts.map +1 -1
  150. package/dist/types/src/components/DisableDependentsAlert/index.d.ts +1 -1
  151. package/dist/types/src/components/DisableDependentsAlert/index.d.ts.map +1 -1
  152. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts +3 -1
  153. package/dist/types/src/components/PluginDetail/PluginDetail.d.ts.map +1 -1
  154. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts +10 -1
  155. package/dist/types/src/components/PluginDetail/PluginDetail.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/PluginDetail/index.d.ts +1 -1
  157. package/dist/types/src/components/PluginDetail/index.d.ts.map +1 -1
  158. package/dist/types/src/components/PluginFailureBadge/PluginFailureBadge.d.ts +4 -5
  159. package/dist/types/src/components/PluginFailureBadge/PluginFailureBadge.d.ts.map +1 -1
  160. package/dist/types/src/components/PluginFailureBadge/index.d.ts +1 -1
  161. package/dist/types/src/components/PluginFailureBadge/index.d.ts.map +1 -1
  162. package/dist/types/src/components/PluginList/PluginItem.d.ts +4 -1
  163. package/dist/types/src/components/PluginList/PluginItem.d.ts.map +1 -1
  164. package/dist/types/src/components/PluginList/PluginList.d.ts +4 -2
  165. package/dist/types/src/components/PluginList/PluginList.d.ts.map +1 -1
  166. package/dist/types/src/components/PluginList/PluginList.stories.d.ts +15 -1
  167. package/dist/types/src/components/PluginList/PluginList.stories.d.ts.map +1 -1
  168. package/dist/types/src/components/PluginList/index.d.ts +1 -1
  169. package/dist/types/src/components/PluginList/index.d.ts.map +1 -1
  170. package/dist/types/src/components/PluginScope/PluginScope.d.ts +14 -0
  171. package/dist/types/src/components/PluginScope/PluginScope.d.ts.map +1 -0
  172. package/dist/types/src/components/PluginScope/index.d.ts +2 -0
  173. package/dist/types/src/components/PluginScope/index.d.ts.map +1 -0
  174. package/dist/types/src/components/RegistrySettings/RegistrySettings.d.ts +6 -3
  175. package/dist/types/src/components/RegistrySettings/RegistrySettings.d.ts.map +1 -1
  176. package/dist/types/src/components/RegistrySettings/RegistrySettings.stories.d.ts +12 -1
  177. package/dist/types/src/components/RegistrySettings/RegistrySettings.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/RegistrySettings/index.d.ts +1 -1
  179. package/dist/types/src/components/RegistrySettings/index.d.ts.map +1 -1
  180. package/dist/types/src/components/index.d.ts +6 -5
  181. package/dist/types/src/components/index.d.ts.map +1 -1
  182. package/dist/types/src/containers/BaseRegistryArticle/BaseRegistryArticle.d.ts +2 -1
  183. package/dist/types/src/containers/BaseRegistryArticle/BaseRegistryArticle.d.ts.map +1 -1
  184. package/dist/types/src/containers/BaseRegistryArticle/index.d.ts +1 -1
  185. package/dist/types/src/containers/BaseRegistryArticle/index.d.ts.map +1 -1
  186. package/dist/types/src/containers/LoadPluginDialog/LoadPluginDialog.d.ts.map +1 -1
  187. package/dist/types/src/containers/LoadPluginDialog/index.d.ts +1 -1
  188. package/dist/types/src/containers/LoadPluginDialog/index.d.ts.map +1 -1
  189. package/dist/types/src/containers/PluginArticle/PluginArticle.d.ts.map +1 -1
  190. package/dist/types/src/containers/PluginArticle/index.d.ts +1 -1
  191. package/dist/types/src/containers/PluginArticle/index.d.ts.map +1 -1
  192. package/dist/types/src/containers/PublicRegistryArticle/PublicRegistryArticle.d.ts.map +1 -1
  193. package/dist/types/src/containers/PublicRegistryArticle/index.d.ts +1 -1
  194. package/dist/types/src/containers/PublicRegistryArticle/index.d.ts.map +1 -1
  195. package/dist/types/src/containers/RegistryArticle/index.d.ts +1 -1
  196. package/dist/types/src/containers/RegistryArticle/index.d.ts.map +1 -1
  197. package/dist/types/src/containers/RegistrySettingsContainer/RegistrySettingsContainer.d.ts.map +1 -1
  198. package/dist/types/src/containers/RegistrySettingsContainer/index.d.ts +1 -1
  199. package/dist/types/src/containers/RegistrySettingsContainer/index.d.ts.map +1 -1
  200. package/dist/types/src/containers/index.d.ts.map +1 -1
  201. package/dist/types/src/hooks/index.d.ts +8 -8
  202. package/dist/types/src/hooks/index.d.ts.map +1 -1
  203. package/dist/types/src/hooks/useDisableConfirmation.d.ts.map +1 -1
  204. package/dist/types/src/hooks/usePluginActions.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useRegistryPlugins.d.ts.map +1 -1
  206. package/dist/types/src/index.d.ts +5 -6
  207. package/dist/types/src/index.d.ts.map +1 -1
  208. package/dist/types/src/operations/describe-load-error.d.ts +6 -0
  209. package/dist/types/src/operations/describe-load-error.d.ts.map +1 -0
  210. package/dist/types/src/operations/disable-plugins.d.ts +5 -0
  211. package/dist/types/src/operations/disable-plugins.d.ts.map +1 -0
  212. package/dist/types/src/operations/disable-plugins.test.d.ts +2 -0
  213. package/dist/types/src/operations/disable-plugins.test.d.ts.map +1 -0
  214. package/dist/types/src/operations/enable-plugins.d.ts +2 -2
  215. package/dist/types/src/operations/enable-plugins.d.ts.map +1 -1
  216. package/dist/types/src/operations/index.d.ts +2 -1
  217. package/dist/types/src/operations/index.d.ts.map +1 -1
  218. package/dist/types/src/operations/load-plugin.d.ts +5 -0
  219. package/dist/types/src/operations/load-plugin.d.ts.map +1 -0
  220. package/dist/types/src/operations/load-plugin.test.d.ts +2 -0
  221. package/dist/types/src/operations/load-plugin.test.d.ts.map +1 -0
  222. package/dist/types/src/operations/query-disabled-plugins.d.ts +2 -2
  223. package/dist/types/src/operations/query-disabled-plugins.d.ts.map +1 -1
  224. package/dist/types/src/operations/query-plugins.d.ts +2 -2
  225. package/dist/types/src/operations/query-plugins.d.ts.map +1 -1
  226. package/dist/types/src/paths.d.ts +4 -4
  227. package/dist/types/src/paths.d.ts.map +1 -1
  228. package/dist/types/src/plugin.d.ts +2 -1
  229. package/dist/types/src/plugin.d.ts.map +1 -1
  230. package/dist/types/src/skills/index.d.ts +1 -1
  231. package/dist/types/src/skills/index.d.ts.map +1 -1
  232. package/dist/types/src/translations.d.ts +9 -0
  233. package/dist/types/src/translations.d.ts.map +1 -1
  234. package/dist/types/src/{operations/definitions.d.ts → types/RegistryOperation.d.ts} +22 -1
  235. package/dist/types/src/types/RegistryOperation.d.ts.map +1 -0
  236. package/dist/types/src/types/index.d.ts +2 -0
  237. package/dist/types/src/types/index.d.ts.map +1 -0
  238. package/dist/types/src/types.d.ts +8 -1
  239. package/dist/types/src/types.d.ts.map +1 -1
  240. package/dist/types/src/util/assets.d.ts +2 -2
  241. package/dist/types/src/util/assets.d.ts.map +1 -1
  242. package/dist/types/src/util/index.d.ts +5 -5
  243. package/dist/types/src/util/index.d.ts.map +1 -1
  244. package/dist/types/src/util/loader.d.ts +1 -1
  245. package/dist/types/src/util/loader.d.ts.map +1 -1
  246. package/dist/types/src/util/resolve.d.ts +2 -2
  247. package/dist/types/src/util/resolve.d.ts.map +1 -1
  248. package/dist/types/tsconfig.tsbuildinfo +1 -1
  249. package/package.json +95 -54
  250. package/src/Operations.ts +7 -0
  251. package/src/PluginLoader.ts +7 -0
  252. package/src/PluginStorage.ts +7 -0
  253. package/src/RegistryPlugin.ts +4 -1
  254. package/src/capabilities/RegistryCategoryArticle.tsx +11 -6
  255. package/src/capabilities/app-graph-builder.ts +70 -96
  256. package/src/capabilities/commands.ts +1 -1
  257. package/src/capabilities/dev-plugin-loader.ts +6 -2
  258. package/src/capabilities/gen/browser.ts +50 -0
  259. package/src/capabilities/gen/node.ts +6 -5
  260. package/src/capabilities/gen/tauri.ts +50 -0
  261. package/src/capabilities/gen/workerd.ts +6 -5
  262. package/src/capabilities/index.ts +19 -6
  263. package/src/capabilities/private-registry.ts +63 -0
  264. package/src/capabilities/react-surface.ts +32 -26
  265. package/src/capabilities/settings.ts +15 -11
  266. package/src/categories.test.ts +17 -1
  267. package/src/categories.ts +45 -0
  268. package/src/commands/index.ts +2 -2
  269. package/src/commands/plugin/add.ts +13 -11
  270. package/src/commands/plugin/disable.ts +5 -5
  271. package/src/commands/plugin/enable.ts +5 -5
  272. package/src/commands/plugin/index.ts +6 -6
  273. package/src/commands/plugin/list.ts +8 -5
  274. package/src/commands/plugin/remove.ts +6 -6
  275. package/src/commands/registry/errors.ts +11 -0
  276. package/src/commands/registry/index.ts +7 -7
  277. package/src/commands/registry/publish-package.ts +17 -17
  278. package/src/commands/registry/publish-publisher.ts +10 -10
  279. package/src/commands/registry/publish.ts +96 -47
  280. package/src/commands/registry/records.ts +6 -6
  281. package/src/commands/registry/unpublish.ts +7 -7
  282. package/src/commands/registry/util.ts +18 -11
  283. package/src/commands/registry/verify.ts +9 -9
  284. package/src/components/DisableDependentsAlert/DisableDependentsAlert.tsx +9 -12
  285. package/src/components/DisableDependentsAlert/index.ts +1 -1
  286. package/src/components/PluginDetail/PluginDetail.stories.tsx +3 -3
  287. package/src/components/PluginDetail/PluginDetail.tsx +108 -82
  288. package/src/components/PluginDetail/index.ts +1 -1
  289. package/src/components/PluginFailureBadge/PluginFailureBadge.tsx +24 -29
  290. package/src/components/PluginFailureBadge/index.ts +1 -1
  291. package/src/components/PluginList/PluginItem.tsx +86 -131
  292. package/src/components/PluginList/PluginList.stories.tsx +40 -8
  293. package/src/components/PluginList/PluginList.tsx +25 -19
  294. package/src/components/PluginList/index.ts +1 -1
  295. package/src/components/PluginScope/PluginScope.tsx +55 -0
  296. package/src/components/PluginScope/index.ts +5 -0
  297. package/src/components/RegistrySettings/RegistrySettings.stories.tsx +35 -1
  298. package/src/components/RegistrySettings/RegistrySettings.tsx +79 -27
  299. package/src/components/RegistrySettings/index.ts +1 -1
  300. package/src/components/index.ts +6 -5
  301. package/src/containers/BaseRegistryArticle/BaseRegistryArticle.tsx +59 -46
  302. package/src/containers/BaseRegistryArticle/index.ts +1 -1
  303. package/src/containers/LoadPluginDialog/LoadPluginDialog.tsx +35 -36
  304. package/src/containers/LoadPluginDialog/index.ts +1 -1
  305. package/src/containers/PluginArticle/PluginArticle.tsx +14 -6
  306. package/src/containers/PluginArticle/index.ts +1 -1
  307. package/src/containers/PublicRegistryArticle/PublicRegistryArticle.tsx +21 -14
  308. package/src/containers/PublicRegistryArticle/index.ts +1 -1
  309. package/src/containers/RegistryArticle/RegistryArticle.tsx +5 -5
  310. package/src/containers/RegistryArticle/index.ts +1 -1
  311. package/src/containers/RegistrySettingsContainer/RegistrySettingsContainer.tsx +12 -4
  312. package/src/containers/RegistrySettingsContainer/index.ts +1 -1
  313. package/src/containers/index.ts +5 -5
  314. package/src/hooks/index.ts +8 -8
  315. package/src/hooks/useAutoTags.ts +1 -1
  316. package/src/hooks/useCatalogEntry.ts +1 -1
  317. package/src/hooks/useDisableConfirmation.ts +3 -3
  318. package/src/hooks/usePluginActions.ts +9 -9
  319. package/src/hooks/useRegistryPlugins.ts +3 -3
  320. package/src/hooks/useVersionPicker.ts +1 -1
  321. package/src/index.ts +5 -6
  322. package/src/meta.ts +1 -1
  323. package/src/operations/describe-load-error.ts +10 -0
  324. package/src/operations/disable-plugins.test.ts +90 -0
  325. package/src/operations/disable-plugins.ts +67 -0
  326. package/src/operations/enable-plugins.test.ts +7 -7
  327. package/src/operations/enable-plugins.ts +2 -2
  328. package/src/operations/index.ts +9 -6
  329. package/src/operations/load-plugin.test.ts +73 -0
  330. package/src/operations/load-plugin.ts +25 -0
  331. package/src/operations/open-plugin-registry.ts +1 -1
  332. package/src/operations/query-disabled-plugins.ts +23 -22
  333. package/src/operations/query-plugins.test.ts +3 -3
  334. package/src/operations/query-plugins.ts +2 -2
  335. package/src/paths.ts +6 -7
  336. package/src/plugin.test.ts +2 -2
  337. package/src/plugin.tsx +4 -1
  338. package/src/skills/index.ts +1 -1
  339. package/src/translations.ts +13 -2
  340. package/src/{operations/definitions.ts → types/RegistryOperation.ts} +54 -0
  341. package/src/types/index.ts +5 -0
  342. package/src/types.ts +9 -1
  343. package/src/util/assets.ts +6 -6
  344. package/src/util/index.ts +5 -5
  345. package/src/util/loader.ts +1 -1
  346. package/src/util/resolve.ts +5 -5
  347. package/dist/lib/chunk-definitions.mjs.map +0 -1
  348. package/dist/lib/chunk-hooks.mjs +0 -347
  349. package/dist/lib/chunk-hooks.mjs.map +0 -1
  350. package/dist/lib/chunk-util.mjs +0 -541
  351. package/dist/lib/chunk-util.mjs.map +0 -1
  352. package/dist/types/src/operations/definitions.d.ts.map +0 -1
@@ -1,11 +1,13 @@
1
1
  import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
2
2
  import * as Plugin from "@dxos/app-framework/Plugin";
3
3
  import * as Schema from "effect/Schema";
4
- import { DXN } from "@dxos/keys";
5
4
  import * as Operation from "@dxos/compute/Operation";
6
- //#region src/operations/definitions.ts
7
- var definitions_exports = /* @__PURE__ */ __exportAll({
5
+ import { DXN } from "@dxos/keys";
6
+ //#region src/types/RegistryOperation.ts
7
+ var RegistryOperation_exports = /* @__PURE__ */ __exportAll({
8
+ DisablePlugins: () => DisablePlugins,
8
9
  EnablePlugins: () => EnablePlugins,
10
+ LoadPlugin: () => LoadPlugin,
9
11
  QueryDisabledPlugins: () => QueryDisabledPlugins,
10
12
  QueryPlugins: () => QueryPlugins
11
13
  });
@@ -52,6 +54,23 @@ var QueryDisabledPlugins = Operation.make({
52
54
  input: Schema.Struct({}),
53
55
  output: Schema.Struct({ plugins: Schema.Array(PluginSummary) })
54
56
  }).pipe(Operation.mutation("none"));
57
+ var DisablePlugins = Operation.make({
58
+ meta: {
59
+ key: DXN.make("org.dxos.operation.registry.disablePlugins"),
60
+ name: "Disable Plugins",
61
+ description: "Disable enabled plugins by id. Enabled dependents are disabled with them, dependents first. Core plugins cannot be disabled and are reported as rejected.",
62
+ icon: "ph--plugs--regular"
63
+ },
64
+ services: [Plugin.Service],
65
+ input: Schema.Struct({ ids: Schema.Array(Schema.String).annotate({
66
+ description: "Ids of the plugins to disable, as reported by the plugin query.",
67
+ examples: [["dxos.org/plugin/markdown", "dxos.org/plugin/table"]]
68
+ }) }),
69
+ output: Schema.Struct({
70
+ disabled: Schema.Array(Schema.String).annotate({ description: "Ids now disabled, including dependents that went off and plugins already disabled." }),
71
+ rejected: Schema.Array(PluginRejection)
72
+ })
73
+ }).pipe(Operation.mutation("write"));
55
74
  var EnablePlugins = Operation.make({
56
75
  meta: {
57
76
  key: DXN.make("org.dxos.operation.registry.enablePlugins"),
@@ -69,7 +88,29 @@ var EnablePlugins = Operation.make({
69
88
  rejected: Schema.Array(PluginRejection)
70
89
  })
71
90
  }).pipe(Operation.mutation("write"));
91
+ /**
92
+ * User-initiated, like {@link EnablePlugins}: loading runs code from the URL inside the host, so the
93
+ * assistant offers it as a `plugin-url-prompt` surface and this runs on the user's click — it is
94
+ * never projected as an agent tool.
95
+ */
96
+ var LoadPlugin = Operation.make({
97
+ meta: {
98
+ key: DXN.make("org.dxos.operation.registry.loadPlugin"),
99
+ name: "Load Plugin",
100
+ description: "Load a plugin from the URL of its manifest.json and, unless told not to, enable it.",
101
+ icon: "ph--cloud-arrow-down--regular"
102
+ },
103
+ services: [Plugin.Service],
104
+ input: Schema.Struct({
105
+ url: Schema.String.annotate({ description: "URL of the plugin manifest, e.g. https://example.com/my-plugin/manifest.json." }),
106
+ enable: Schema.optional(Schema.Boolean).annotate({ description: "Enable the plugin once it is loaded (default true); false leaves it listed but off, unless its id is already enabled (e.g. from an earlier session), in which case it starts." })
107
+ }),
108
+ output: Schema.Struct({
109
+ id: Schema.String.annotate({ description: "Id of the plugin that was loaded." }),
110
+ name: Schema.optional(Schema.String)
111
+ })
112
+ }).pipe(Operation.mutation("write"));
72
113
  //#endregion
73
- export { definitions_exports as i, QueryDisabledPlugins as n, QueryPlugins as r, EnablePlugins as t };
114
+ export { DisablePlugins, EnablePlugins, LoadPlugin, QueryDisabledPlugins, QueryPlugins, RegistryOperation_exports as t };
74
115
 
75
- //# sourceMappingURL=chunk-definitions.mjs.map
116
+ //# sourceMappingURL=RegistryOperation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryOperation.mjs","names":[],"sources":["../../src/types/RegistryOperation.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\nimport * as Operation from '@dxos/compute/Operation';\nimport { DXN } from '@dxos/keys';\n\nconst PluginSummary = Schema.Struct({\n id: Schema.String.annotate({ description: 'Plugin id, as passed to plugin enable/disable.' }),\n name: Schema.optional(Schema.String),\n description: Schema.optional(Schema.String),\n core: Schema.Boolean.annotate({ description: 'Core plugins are always on and cannot be disabled.' }),\n enabled: Schema.Boolean,\n active: Schema.Boolean.annotate({\n description:\n 'Whether any of the plugin’s modules have activated. An enabled plugin that is not active ' +\n 'contributes nothing yet, so its operations are absent from this host.',\n }),\n});\n\nconst PluginRejection = Schema.Struct({\n id: Schema.String,\n reason: Schema.String,\n});\n\nexport const QueryPlugins = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.registry.queryPlugins'),\n name: 'Query Plugins',\n description:\n 'List the plugins installed on this host, each with whether it is enabled and whether it has ' +\n 'activated. What a plugin contributes — operations, types, skills — is only present once it is active.',\n icon: 'ph--plugs--regular',\n },\n services: [Plugin.Service],\n input: Schema.Struct({\n enabled: Schema.optional(Schema.Boolean).annotate({\n description: 'Restrict to enabled plugins. Omit to list everything installed.',\n }),\n }),\n output: Schema.Struct({\n plugins: Schema.Array(PluginSummary),\n }),\n}).pipe(Operation.mutation('none'));\n\n/**\n * User-initiated: enabling reshapes the workspace, so the assistant asks via its `plugin-prompt`\n * surface and this runs on the click, rather than being projected as an agent tool.\n */\n/**\n * Void input so it can back a skill template's input, which invokes with no arguments: the\n * disabled set is rendered into the agent's prompt rather than fetched by a tool call it has to\n * think to make.\n */\nexport const QueryDisabledPlugins = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.registry.queryDisabledPlugins'),\n name: 'Query Disabled Plugins',\n description:\n 'List the plugins installed on this host but not enabled. Their operations, types and skills ' +\n 'are absent until the user enables them.',\n icon: 'ph--plugs--regular',\n },\n services: [Plugin.Service],\n input: Schema.Struct({}),\n output: Schema.Struct({\n plugins: Schema.Array(PluginSummary),\n }),\n}).pipe(Operation.mutation('none'));\n\nexport const DisablePlugins = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.registry.disablePlugins'),\n name: 'Disable Plugins',\n description:\n 'Disable enabled plugins by id. Enabled dependents are disabled with them, dependents first. ' +\n 'Core plugins cannot be disabled and are reported as rejected.',\n icon: 'ph--plugs--regular',\n },\n services: [Plugin.Service],\n input: Schema.Struct({\n ids: Schema.Array(Schema.String).annotate({\n description: 'Ids of the plugins to disable, as reported by the plugin query.',\n examples: [['dxos.org/plugin/markdown', 'dxos.org/plugin/table']],\n }),\n }),\n output: Schema.Struct({\n disabled: Schema.Array(Schema.String).annotate({\n description: 'Ids now disabled, including dependents that went off and plugins already disabled.',\n }),\n rejected: Schema.Array(PluginRejection),\n }),\n}).pipe(Operation.mutation('write'));\n\nexport const EnablePlugins = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.registry.enablePlugins'),\n name: 'Enable Plugins',\n description:\n 'Enable installed plugins by id. Dependencies are enabled with them. A plugin the host does ' +\n 'not have installed cannot be enabled here — it is reported as rejected.',\n icon: 'ph--plugs-connected--regular',\n },\n services: [Plugin.Service],\n input: Schema.Struct({\n ids: Schema.Array(Schema.String).annotate({\n description: 'Ids of the plugins to enable, as reported by the plugin query.',\n examples: [['dxos.org/plugin/markdown', 'dxos.org/plugin/table']],\n }),\n }),\n output: Schema.Struct({\n enabled: Schema.Array(Schema.String).annotate({\n description: 'Ids now enabled, including dependencies pulled in and plugins already enabled.',\n }),\n rejected: Schema.Array(PluginRejection),\n }),\n}).pipe(Operation.mutation('write'));\n\n/**\n * User-initiated, like {@link EnablePlugins}: loading runs code from the URL inside the host, so the\n * assistant offers it as a `plugin-url-prompt` surface and this runs on the user's click — it is\n * never projected as an agent tool.\n */\nexport const LoadPlugin = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.registry.loadPlugin'),\n name: 'Load Plugin',\n description: 'Load a plugin from the URL of its manifest.json and, unless told not to, enable it.',\n icon: 'ph--cloud-arrow-down--regular',\n },\n services: [Plugin.Service],\n input: Schema.Struct({\n url: Schema.String.annotate({\n description: 'URL of the plugin manifest, e.g. https://example.com/my-plugin/manifest.json.',\n }),\n enable: Schema.optional(Schema.Boolean).annotate({\n description:\n 'Enable the plugin once it is loaded (default true); false leaves it listed but off, unless its id is already enabled (e.g. from an earlier session), in which case it starts.',\n }),\n }),\n output: Schema.Struct({\n id: Schema.String.annotate({ description: 'Id of the plugin that was loaded.' }),\n name: Schema.optional(Schema.String),\n }),\n}).pipe(Operation.mutation('write'));\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RegistryPlugin.mjs","names":[],"sources":["../../src/RegistryPlugin.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport { meta as pluginMeta } from '#meta';\n\n/** Plugin metadata, available without loading the plugin body. */\nexport const meta = pluginMeta;\n\n/** Constructs the plugin; the body loads on first enable. */\nexport const make = Plugin.lazy(meta, () => import('#plugin'));\n"],"mappings":";;;;;;;;;AAWA,IAAa,OAAO;;AAGpB,IAAa,OAAO,OAAO,KAAK,YAAY,OAAO,UAAU"}
1
+ {"version":3,"file":"RegistryPlugin.mjs","names":[],"sources":["../../src/RegistryPlugin.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport { meta as pluginMeta } from '#meta';\nimport type { RegistryPluginOptions } from '#types';\n\n/** Plugin metadata, available without loading the plugin body. */\nexport const meta = pluginMeta;\n\n/** Constructs the plugin; the body loads on first enable. */\nexport const make = Plugin.lazy<RegistryPluginOptions>(meta, () => import('#plugin'));\n\nexport type { RegistryPluginOptions as Options };\n"],"mappings":";;;;;;;;;AAYA,IAAa,OAAO;;AAGpB,IAAa,OAAO,OAAO,KAA4B,YAAY,OAAO,UAAU"}
@@ -0,0 +1,37 @@
1
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
+ import * as AppCapability from "@dxos/app-toolkit/AppCapability";
4
+ import { translations } from "#translations";
5
+ import { RegistryCapabilities } from "#types";
6
+ import * as ClientCapabilities from "@dxos/plugin-client/ClientCapabilities";
7
+ import * as ClientEvents from "@dxos/plugin-client/ClientEvents";
8
+ //#region src/capabilities/gen/browser.ts
9
+ var AppGraphBuilder = AppCapability.appGraphBuilder(() => import("./chunk-app-graph-builder.mjs"));
10
+ var DevPluginLoader = Capability.lazyModule("DevPluginLoader", {
11
+ requires: [
12
+ Capabilities.PluginManager,
13
+ Capabilities.AtomRegistry,
14
+ RegistryCapabilities.Settings
15
+ ],
16
+ provides: []
17
+ }, () => import("./chunk-dev-plugin-loader.mjs"));
18
+ var PrivateRegistry = Capability.lazyModule("PrivateRegistry", {
19
+ requires: [
20
+ Capabilities.PluginManager,
21
+ ClientCapabilities.Client,
22
+ ClientCapabilities.IdentityService
23
+ ],
24
+ provides: [],
25
+ activatesOn: ClientEvents.Initialized,
26
+ environments: ["browser", "tauri"]
27
+ }, () => import("./chunk-private-registry.mjs"));
28
+ var Commands = AppCapability.commands(() => import("#commands"));
29
+ var OperationHandler = AppCapability.operationHandler(() => import("./chunk-operation-handler.mjs"));
30
+ var SkillDefinition = AppCapability.skillDefinition(() => import("./chunk-skill-definition.mjs"));
31
+ var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs"), { roles: ["org.dxos.role.article", "org.dxos.role.dialog"] });
32
+ var RegistrySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [RegistryCapabilities.Settings] });
33
+ var Translations = AppCapability.translations(translations);
34
+ //#endregion
35
+ export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, PrivateRegistry, ReactSurface, RegistrySettings, SkillDefinition, Translations };
36
+
37
+ //# sourceMappingURL=capabilities.browser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.browser.mjs","names":[],"sources":["../../src/capabilities/gen/browser.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'browser' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\nimport * as ClientCapabilities from '@dxos/plugin-client/ClientCapabilities';\nimport * as ClientEvents from '@dxos/plugin-client/ClientEvents';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader.ts'),\n);\n\nexport const PrivateRegistry = Capability.lazyModule(\n 'PrivateRegistry',\n {\n requires: [Capabilities.PluginManager, ClientCapabilities.Client, ClientCapabilities.IdentityService],\n provides: [],\n // An initialized client, since the module reads the identity synchronously.\n activatesOn: ClientEvents.Initialized,\n environments: ['browser', 'tauri'],\n },\n () => import('../private-registry.ts'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition.ts'));\n\nexport const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {\n roles: ['org.dxos.role.article', 'org.dxos.role.dialog'],\n});\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;AAeA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAA0B;AAEpG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,kBAAkB,WAAW,WACxC,mBACA;CACE,UAAU;EAAC,aAAa;EAAe,mBAAmB;EAAQ,mBAAmB;CAAe;CACpG,UAAU,CAAC;CAEX,aAAa,aAAa;CAC1B,cAAc,CAAC,WAAW,OAAO;AACnC,SACM,OAAO,+BACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAA0B;AAEtG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAyB;AAEnG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAwB,EACrF,OAAO,CAAC,yBAAyB,sBAAsB,EACzD,CAAC;AAED,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAmB,EACrF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -3,6 +3,8 @@ import * as Capability from "@dxos/app-framework/Capability";
3
3
  import * as AppCapability from "@dxos/app-toolkit/AppCapability";
4
4
  import { translations } from "#translations";
5
5
  import { RegistryCapabilities } from "#types";
6
+ import * as ClientCapabilities from "@dxos/plugin-client/ClientCapabilities";
7
+ import * as ClientEvents from "@dxos/plugin-client/ClientEvents";
6
8
  //#region src/capabilities/index.ts
7
9
  var AppGraphBuilder = AppCapability.appGraphBuilder(() => import("./chunk-app-graph-builder.mjs"));
8
10
  var DevPluginLoader = Capability.lazyModule("DevPluginLoader", {
@@ -13,6 +15,16 @@ var DevPluginLoader = Capability.lazyModule("DevPluginLoader", {
13
15
  ],
14
16
  provides: []
15
17
  }, () => import("./chunk-dev-plugin-loader.mjs"));
18
+ var PrivateRegistry = Capability.lazyModule("PrivateRegistry", {
19
+ requires: [
20
+ Capabilities.PluginManager,
21
+ ClientCapabilities.Client,
22
+ ClientCapabilities.IdentityService
23
+ ],
24
+ provides: [],
25
+ activatesOn: ClientEvents.Initialized,
26
+ environments: ["browser", "tauri"]
27
+ }, () => import("./chunk-private-registry.mjs"));
16
28
  var Commands = AppCapability.commands(() => import("#commands"));
17
29
  var OperationHandler = AppCapability.operationHandler(() => import("./chunk-operation-handler.mjs"));
18
30
  var SkillDefinition = AppCapability.skillDefinition(() => import("./chunk-skill-definition.mjs"));
@@ -20,6 +32,6 @@ var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs
20
32
  var RegistrySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [RegistryCapabilities.Settings] });
21
33
  var Translations = AppCapability.translations(translations);
22
34
  //#endregion
23
- export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, ReactSurface, RegistrySettings, SkillDefinition, Translations };
35
+ export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, PrivateRegistry, ReactSurface, RegistrySettings, SkillDefinition, Translations };
24
36
 
25
37
  //# sourceMappingURL=capabilities.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('./app-graph-builder'));\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('./dev-plugin-loader'),\n);\nexport const Commands = AppCapability.commands(() => import('#commands'));\nexport const OperationHandler = AppCapability.operationHandler(() => import('./operation-handler'));\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('./skill-definition'));\nexport const ReactSurface = AppCapability.surface(() => import('./react-surface'), {\n roles: ['org.dxos.role.article', 'org.dxos.role.dialog'],\n});\nexport const RegistrySettings = AppCapability.settings(() => import('./settings'), {\n provides: [RegistryCapabilities.Settings],\n});\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;AAWA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAAsB;AAChG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AACA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AACxE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAAsB;AAClG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAqB;AAC/F,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAoB,EACjF,OAAO,CAAC,yBAAyB,sBAAsB,EACzD,CAAC;AACD,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAe,EACjF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AACD,IAAa,eAAe,cAAc,aAAa,YAAY"}
1
+ {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\nimport * as ClientCapabilities from '@dxos/plugin-client/ClientCapabilities';\nimport * as ClientEvents from '@dxos/plugin-client/ClientEvents';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('./app-graph-builder.ts'));\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('./dev-plugin-loader.ts'),\n);\nexport const PrivateRegistry = Capability.lazyModule(\n 'PrivateRegistry',\n {\n requires: [Capabilities.PluginManager, ClientCapabilities.Client, ClientCapabilities.IdentityService],\n provides: [],\n // An initialized client, since the module reads the identity synchronously.\n activatesOn: ClientEvents.Initialized,\n environments: ['browser', 'tauri'],\n },\n () => import('./private-registry.ts'),\n);\nexport const Commands = AppCapability.commands(() => import('#commands'));\nexport const OperationHandler = AppCapability.operationHandler(() => import('./operation-handler.ts'));\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('./skill-definition.ts'));\nexport const ReactSurface = AppCapability.surface(() => import('./react-surface.ts'), {\n roles: ['org.dxos.role.article', 'org.dxos.role.dialog'],\n});\nexport const RegistrySettings = AppCapability.settings(() => import('./settings.ts'), {\n provides: [RegistryCapabilities.Settings],\n});\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;AAaA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAAyB;AACnG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AACA,IAAa,kBAAkB,WAAW,WACxC,mBACA;CACE,UAAU;EAAC,aAAa;EAAe,mBAAmB;EAAQ,mBAAmB;CAAe;CACpG,UAAU,CAAC;CAEX,aAAa,aAAa;CAC1B,cAAc,CAAC,WAAW,OAAO;AACnC,SACM,OAAO,+BACf;AACA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AACxE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAAyB;AACrG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAwB;AAClG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAuB,EACpF,OAAO,CAAC,yBAAyB,sBAAsB,EACzD,CAAC;AACD,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAkB,EACpF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AACD,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -18,8 +18,9 @@ var OperationHandler = AppCapability.operationHandler(() => import("./chunk-oper
18
18
  var SkillDefinition = AppCapability.skillDefinition(() => import("./chunk-skill-definition.mjs"));
19
19
  var RegistrySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [RegistryCapabilities.Settings] });
20
20
  var Translations = AppCapability.translations(translations);
21
+ var PrivateRegistry = void 0;
21
22
  var ReactSurface = void 0;
22
23
  //#endregion
23
- export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, ReactSurface, RegistrySettings, SkillDefinition, Translations };
24
+ export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, PrivateRegistry, ReactSurface, RegistrySettings, SkillDefinition, Translations };
24
25
 
25
26
  //# sourceMappingURL=capabilities.node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.node.mjs","names":[],"sources":["../../src/capabilities/gen/node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'node' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition'));\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;AAaA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAAuB;AAEjG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAAuB;AAEnG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAsB;AAEhG,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAgB,EAClF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,eAAe,KAAA"}
1
+ {"version":3,"file":"capabilities.node.mjs","names":[],"sources":["../../src/capabilities/gen/node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'node' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader.ts'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition.ts'));\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const PrivateRegistry = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;AAaA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAA0B;AAEpG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAA0B;AAEtG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAyB;AAEnG,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAmB,EACrF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,kBAAkB,KAAA;AAC/B,IAAa,eAAe,KAAA"}
@@ -0,0 +1,37 @@
1
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
+ import * as AppCapability from "@dxos/app-toolkit/AppCapability";
4
+ import { translations } from "#translations";
5
+ import { RegistryCapabilities } from "#types";
6
+ import * as ClientCapabilities from "@dxos/plugin-client/ClientCapabilities";
7
+ import * as ClientEvents from "@dxos/plugin-client/ClientEvents";
8
+ //#region src/capabilities/gen/tauri.ts
9
+ var AppGraphBuilder = AppCapability.appGraphBuilder(() => import("./chunk-app-graph-builder.mjs"));
10
+ var DevPluginLoader = Capability.lazyModule("DevPluginLoader", {
11
+ requires: [
12
+ Capabilities.PluginManager,
13
+ Capabilities.AtomRegistry,
14
+ RegistryCapabilities.Settings
15
+ ],
16
+ provides: []
17
+ }, () => import("./chunk-dev-plugin-loader.mjs"));
18
+ var PrivateRegistry = Capability.lazyModule("PrivateRegistry", {
19
+ requires: [
20
+ Capabilities.PluginManager,
21
+ ClientCapabilities.Client,
22
+ ClientCapabilities.IdentityService
23
+ ],
24
+ provides: [],
25
+ activatesOn: ClientEvents.Initialized,
26
+ environments: ["browser", "tauri"]
27
+ }, () => import("./chunk-private-registry.mjs"));
28
+ var Commands = AppCapability.commands(() => import("#commands"));
29
+ var OperationHandler = AppCapability.operationHandler(() => import("./chunk-operation-handler.mjs"));
30
+ var SkillDefinition = AppCapability.skillDefinition(() => import("./chunk-skill-definition.mjs"));
31
+ var ReactSurface = AppCapability.surface(() => import("./chunk-react-surface.mjs"), { roles: ["org.dxos.role.article", "org.dxos.role.dialog"] });
32
+ var RegistrySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [RegistryCapabilities.Settings] });
33
+ var Translations = AppCapability.translations(translations);
34
+ //#endregion
35
+ export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, PrivateRegistry, ReactSurface, RegistrySettings, SkillDefinition, Translations };
36
+
37
+ //# sourceMappingURL=capabilities.tauri.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.tauri.mjs","names":[],"sources":["../../src/capabilities/gen/tauri.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'tauri' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\nimport * as ClientCapabilities from '@dxos/plugin-client/ClientCapabilities';\nimport * as ClientEvents from '@dxos/plugin-client/ClientEvents';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader.ts'),\n);\n\nexport const PrivateRegistry = Capability.lazyModule(\n 'PrivateRegistry',\n {\n requires: [Capabilities.PluginManager, ClientCapabilities.Client, ClientCapabilities.IdentityService],\n provides: [],\n // An initialized client, since the module reads the identity synchronously.\n activatesOn: ClientEvents.Initialized,\n environments: ['browser', 'tauri'],\n },\n () => import('../private-registry.ts'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition.ts'));\n\nexport const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {\n roles: ['org.dxos.role.article', 'org.dxos.role.dialog'],\n});\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n"],"mappings":";;;;;;;;AAeA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAA0B;AAEpG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,kBAAkB,WAAW,WACxC,mBACA;CACE,UAAU;EAAC,aAAa;EAAe,mBAAmB;EAAQ,mBAAmB;CAAe;CACpG,UAAU,CAAC;CAEX,aAAa,aAAa;CAC1B,cAAc,CAAC,WAAW,OAAO;AACnC,SACM,OAAO,+BACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAA0B;AAEtG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAyB;AAEnG,IAAa,eAAe,cAAc,cAAc,OAAO,8BAAwB,EACrF,OAAO,CAAC,yBAAyB,sBAAsB,EACzD,CAAC;AAED,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAmB,EACrF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY"}
@@ -18,8 +18,9 @@ var OperationHandler = AppCapability.operationHandler(() => import("./chunk-oper
18
18
  var SkillDefinition = AppCapability.skillDefinition(() => import("./chunk-skill-definition.mjs"));
19
19
  var RegistrySettings = AppCapability.settings(() => import("./chunk-settings.mjs"), { provides: [RegistryCapabilities.Settings] });
20
20
  var Translations = AppCapability.translations(translations);
21
+ var PrivateRegistry = void 0;
21
22
  var ReactSurface = void 0;
22
23
  //#endregion
23
- export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, ReactSurface, RegistrySettings, SkillDefinition, Translations };
24
+ export { AppGraphBuilder, Commands, DevPluginLoader, OperationHandler, PrivateRegistry, ReactSurface, RegistrySettings, SkillDefinition, Translations };
24
25
 
25
26
  //# sourceMappingURL=capabilities.workerd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.workerd.mjs","names":[],"sources":["../../src/capabilities/gen/workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'workerd' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition'));\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;AAaA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAAuB;AAEjG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAAuB;AAEnG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAsB;AAEhG,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAgB,EAClF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,eAAe,KAAA"}
1
+ {"version":3,"file":"capabilities.workerd.mjs","names":[],"sources":["../../src/capabilities/gen/workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'workerd' condition.\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport { translations } from '#translations';\nimport { RegistryCapabilities } from '#types';\n\nexport const AppGraphBuilder = AppCapability.appGraphBuilder(() => import('../app-graph-builder.ts'));\n\nexport const DevPluginLoader = Capability.lazyModule(\n 'DevPluginLoader',\n { requires: [Capabilities.PluginManager, Capabilities.AtomRegistry, RegistryCapabilities.Settings], provides: [] },\n () => import('../dev-plugin-loader.ts'),\n);\n\nexport const Commands = AppCapability.commands(() => import('#commands'));\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'));\n\nexport const SkillDefinition = AppCapability.skillDefinition(() => import('../skill-definition.ts'));\n\nexport const RegistrySettings = AppCapability.settings(() => import('../settings.ts'), {\n provides: [RegistryCapabilities.Settings],\n});\n\nexport const Translations = AppCapability.translations(translations);\n\nexport const PrivateRegistry = undefined;\nexport const ReactSurface = undefined;\n"],"mappings":";;;;;;AAaA,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,gCAA0B;AAEpG,IAAa,kBAAkB,WAAW,WACxC,mBACA;CAAE,UAAU;EAAC,aAAa;EAAe,aAAa;EAAc,qBAAqB;CAAQ;CAAG,UAAU,CAAC;AAAE,SAC3G,OAAO,gCACf;AAEA,IAAa,WAAW,cAAc,eAAe,OAAO,YAAY;AAExE,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAA0B;AAEtG,IAAa,kBAAkB,cAAc,sBAAsB,OAAO,+BAAyB;AAEnG,IAAa,mBAAmB,cAAc,eAAe,OAAO,yBAAmB,EACrF,UAAU,CAAC,qBAAqB,QAAQ,EAC1C,CAAC;AAED,IAAa,eAAe,cAAc,aAAa,YAAY;AAEnE,IAAa,kBAAkB,KAAA;AAC/B,IAAa,eAAe,KAAA"}
@@ -1,28 +1,37 @@
1
- import { n as getPluginPath } from "./chunk-paths.mjs";
2
- import { a as useDisableConfirmation } from "./chunk-hooks.mjs";
1
+ import { r as getPluginPath } from "./chunk-paths.mjs";
2
+ import { t as useDisableConfirmation } from "./chunk-useDisableConfirmation.mjs";
3
3
  import * as Effect from "effect/Effect";
4
4
  import { meta } from "#meta";
5
5
  import { useCallback, useMemo, useState } from "react";
6
- import { Input, Panel, ScrollArea, Toolbar, composable, composableProps, useTranslation } from "@dxos/react-ui";
6
+ import * as UiHooks from "@dxos/react-ui/Hooks";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
+ import * as Input from "@dxos/react-ui/Input";
9
+ import * as Layout from "@dxos/react-ui/Layout";
10
+ import * as ScrollArea from "@dxos/react-ui/ScrollArea";
11
+ import * as Util from "@dxos/react-ui/Util";
8
12
  import * as SettingsOperation from "@dxos/app-toolkit/SettingsOperation";
9
13
  import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
10
14
  import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
11
- import { useCapabilities, useOperationInvoker, usePluginManager } from "@dxos/app-framework/ui";
12
15
  import { PluginList } from "#components";
16
+ import * as PluginManagerProvider from "@dxos/app-framework/PluginManagerProvider";
13
17
  import { useAtomValue } from "@effect/atom-react/Hooks";
14
- import { EffectEx } from "@dxos/effect";
18
+ import * as Hooks from "@dxos/app-framework/Hooks";
19
+ import * as EffectEx from "@dxos/effect/EffectEx";
15
20
  import * as ObservabilityOperation from "@dxos/plugin-observability/ObservabilityOperation";
21
+ import "@dxos/react-ui/theme.css";
22
+ import * as Panel from "@dxos/react-ui/Panel";
23
+ import * as Toolbar from "@dxos/react-ui/Toolbar";
16
24
  //#region src/containers/BaseRegistryArticle/BaseRegistryArticle.tsx
17
25
  var matchesFilter = (plugin, query) => {
18
26
  return `${plugin.meta.profile.name ?? ""} ${plugin.meta.profile.key}`.toLowerCase().includes(query);
19
27
  };
20
- var BaseRegistryArticle = composable(({ id, plugins, source, empty, installed, installing, updating, updateAvailableIds, extraTagsById, failuresById, onInstall, onUpdate, ...props }, forwardedRef) => {
21
- const { t } = useTranslation(meta.profile.key);
22
- const manager = usePluginManager();
23
- const { invoke, invokePromise } = useOperationInvoker();
24
- const allSettings = useCapabilities(AppCapabilities.Settings);
28
+ var BaseRegistryArticle = Util.composable(({ id, plugins, source, empty, installed, installing, updating, updateAvailableIds, extraTagsById, failuresById, deviceOnlyIds, onInstall, onUpdate, ...props }, forwardedRef) => {
29
+ const { t } = UiHooks.useTranslation(meta.profile.key);
30
+ const manager = PluginManagerProvider.usePluginManager();
31
+ const { invoke, invokePromise } = Hooks.useOperationInvoker();
32
+ const allSettings = Hooks.useCapabilities(AppCapabilities.Settings);
25
33
  const enabled = useAtomValue(manager.enabled);
34
+ const settingsSync = Hooks.useOptionalCapability(AppCapabilities.SettingsSync);
26
35
  const [filter, setFilter] = useState("");
27
36
  const filtered = useMemo(() => {
28
37
  const query = filter.trim().toLowerCase();
@@ -63,39 +72,40 @@ var BaseRegistryArticle = composable(({ id, plugins, source, empty, installed, i
63
72
  const hasSettings = useCallback((pluginId) => allSettings.some((setting) => setting.prefix === pluginId), [allSettings]);
64
73
  const handleSettings = useCallback((pluginId) => invokePromise(SettingsOperation.Open, { plugin: pluginId }), [invokePromise]);
65
74
  return /* @__PURE__ */ jsxs(Panel.Root, {
66
- ...composableProps(props),
75
+ ...Util.composableProps(props),
67
76
  ref: forwardedRef,
68
- children: [/* @__PURE__ */ jsx(Panel.Toolbar, {
77
+ children: [/* @__PURE__ */ jsx(Panel.Header, { children: /* @__PURE__ */ jsx(Toolbar.Root, { children: /* @__PURE__ */ jsx(Input.Root, {
78
+ "aria-label": t("filter.label"),
79
+ placeholder: t("filter.placeholder"),
80
+ value: filter,
81
+ onChange: (event) => setFilter(event.target.value)
82
+ }) }) }), /* @__PURE__ */ jsx(Panel.Body, {
69
83
  asChild: true,
70
- children: /* @__PURE__ */ jsx(Toolbar.Root, { children: /* @__PURE__ */ jsxs(Input.Root, { children: [/* @__PURE__ */ jsx(Input.Label, {
71
- srOnly: true,
72
- children: t("filter.label")
73
- }), /* @__PURE__ */ jsx(Input.TextInput, {
74
- placeholder: t("filter.placeholder"),
75
- value: filter,
76
- onChange: (event) => setFilter(event.target.value)
77
- })] }) })
78
- }), /* @__PURE__ */ jsx(Panel.Content, {
79
- asChild: true,
80
- children: /* @__PURE__ */ jsx(ScrollArea.Root, {
81
- orientation: "vertical",
82
- children: /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: filtered.length > 0 ? /* @__PURE__ */ jsx(PluginList, {
83
- plugins: filtered,
84
- enabled,
85
- installed,
86
- installing,
87
- updating,
88
- updateAvailableIds,
89
- extraTagsById,
90
- failuresById,
91
- onClick: handleClick,
92
- onChange: handleChange,
93
- onInstall,
94
- onUpdate,
95
- hasSettings,
96
- onSettings: handleSettings
97
- }) : empty })
98
- })
84
+ children: /* @__PURE__ */ jsx(ScrollArea.Root, { children: /* @__PURE__ */ jsx(ScrollArea.Viewport, {
85
+ asChild: true,
86
+ children: /* @__PURE__ */ jsx(Layout.Container, {
87
+ gutter: "md",
88
+ padBlock: true,
89
+ children: filtered.length > 0 ? /* @__PURE__ */ jsx(PluginList, {
90
+ plugins: filtered,
91
+ enabled,
92
+ installed,
93
+ installing,
94
+ updating,
95
+ updateAvailableIds,
96
+ extraTagsById,
97
+ failuresById,
98
+ deviceOnlyIds,
99
+ onClick: handleClick,
100
+ readOnly: settingsSync === void 0,
101
+ onChange: handleChange,
102
+ onInstall,
103
+ onUpdate,
104
+ hasSettings,
105
+ onSettings: handleSettings
106
+ }) : empty
107
+ })
108
+ }) })
99
109
  })]
100
110
  });
101
111
  });
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-BaseRegistryArticle.mjs","names":[],"sources":["../../src/containers/BaseRegistryArticle/BaseRegistryArticle.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useAtomValue } from '@effect/atom-react/Hooks';\nimport * as Effect from 'effect/Effect';\nimport React, { type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport type * as Plugin from '@dxos/app-framework/Plugin';\nimport { useCapabilities, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as SettingsOperation from '@dxos/app-toolkit/SettingsOperation';\nimport { EffectEx } from '@dxos/effect';\nimport * as ObservabilityOperation from '@dxos/plugin-observability/ObservabilityOperation';\nimport { Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\n\nimport { PluginList, type PluginListProps } from '#components';\nimport { meta } from '#meta';\n\nimport { useDisableConfirmation } from '../../hooks';\nimport { getPluginPath } from '../../paths';\n\nconst matchesFilter = (plugin: Plugin.Plugin, query: string) => {\n const haystack = `${plugin.meta.profile.name ?? ''} ${plugin.meta.profile.key}`.toLowerCase();\n return haystack.includes(query);\n};\n\nexport type BaseRegistryArticleProps = {\n /** Article id used as the pivotId when opening a plugin's detail surface. */\n id: string;\n /** Plugins to display, pre-sorted by the caller. */\n plugins: readonly Plugin.Plugin[];\n /**\n * Distinguishes the source of toggle events for observability\n * (e.g. `'registry'` for the public registry surface).\n */\n source?: string;\n /** Rendered in place of the list when no plugins match the current filter. */\n empty?: ReactNode;\n} & Pick<\n PluginListProps,\n | 'installed'\n | 'installing'\n | 'updating'\n | 'updateAvailableIds'\n | 'extraTagsById'\n | 'failuresById'\n | 'onInstall'\n | 'onUpdate'\n>;\n\nexport const BaseRegistryArticle = composable<HTMLDivElement, BaseRegistryArticleProps>(\n (\n {\n id,\n plugins,\n source,\n empty,\n installed,\n installing,\n updating,\n updateAvailableIds,\n extraTagsById,\n failuresById,\n onInstall,\n onUpdate,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(meta.profile.key);\n const manager = usePluginManager();\n const { invoke, invokePromise } = useOperationInvoker();\n const allSettings = useCapabilities(AppCapabilities.Settings);\n const enabled = useAtomValue(manager.enabled);\n const [filter, setFilter] = useState('');\n\n const filtered = useMemo(() => {\n const query = filter.trim().toLowerCase();\n return query.length === 0 ? plugins : plugins.filter((plugin) => matchesFilter(plugin, query));\n }, [plugins, filter]);\n\n const dispatchToggle = useCallback(\n (pluginId: string, nextEnabled: boolean) =>\n Effect.gen(function* () {\n if (nextEnabled) {\n yield* manager.enable(pluginId);\n } else {\n yield* manager.disable(pluginId);\n }\n yield* invoke(ObservabilityOperation.SendEvent, {\n name: 'plugins.toggle',\n properties: source\n ? { plugin: pluginId, enabled: nextEnabled, source }\n : { plugin: pluginId, enabled: nextEnabled },\n });\n }).pipe(EffectEx.runAndForwardErrors),\n [invoke, manager, source],\n );\n\n const requestDisable = useDisableConfirmation(manager, (id) => void dispatchToggle(id, false));\n\n const handleChange = useCallback(\n (pluginId: string, nextEnabled: boolean) => {\n if (nextEnabled) {\n void dispatchToggle(pluginId, true);\n return;\n }\n requestDisable(pluginId);\n },\n [dispatchToggle, requestDisable],\n );\n\n const handleClick = useCallback(\n (pluginId: string) =>\n invokePromise(LayoutOperation.Open, {\n subject: [getPluginPath(pluginId)],\n pivotId: getPluginPath(id),\n disposition: 'add',\n }),\n [invokePromise, id],\n );\n\n const hasSettings = useCallback(\n (pluginId: string) => allSettings.some((setting) => setting.prefix === pluginId),\n [allSettings],\n );\n\n const handleSettings = useCallback(\n (pluginId: string) => invokePromise(SettingsOperation.Open, { plugin: pluginId }),\n [invokePromise],\n );\n\n return (\n <Panel.Root {...composableProps(props)} ref={forwardedRef}>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <Input.Root>\n <Input.Label srOnly>{t('filter.label')}</Input.Label>\n <Input.TextInput\n placeholder={t('filter.placeholder')}\n value={filter}\n onChange={(event) => setFilter(event.target.value)}\n />\n </Input.Root>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n {filtered.length > 0 ? (\n <PluginList\n plugins={filtered}\n enabled={enabled}\n installed={installed}\n installing={installing}\n updating={updating}\n updateAvailableIds={updateAvailableIds}\n extraTagsById={extraTagsById}\n failuresById={failuresById}\n onClick={handleClick}\n onChange={handleChange}\n onInstall={onInstall}\n onUpdate={onUpdate}\n hasSettings={hasSettings}\n onSettings={handleSettings}\n />\n ) : (\n empty\n )}\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n );\n },\n);\n\nBaseRegistryArticle.displayName = 'BaseRegistryArticle';\n"],"mappings":"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"}
1
+ {"version":3,"file":"chunk-BaseRegistryArticle.mjs","names":[],"sources":["../../src/containers/BaseRegistryArticle/BaseRegistryArticle.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useAtomValue } from '@effect/atom-react/Hooks';\nimport * as Effect from 'effect/Effect';\nimport React, { type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\n// Loaded only through the lazy registry containers, so Next's CSS stays out of the boot graph.\nimport '@dxos/react-ui/theme.css';\nimport type * as Plugin from '@dxos/app-framework/Plugin';\nimport * as PluginManagerProvider from '@dxos/app-framework/PluginManagerProvider';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as SettingsOperation from '@dxos/app-toolkit/SettingsOperation';\nimport * as EffectEx from '@dxos/effect/EffectEx';\nimport * as ObservabilityOperation from '@dxos/plugin-observability/ObservabilityOperation';\nimport * as UiHooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Layout from '@dxos/react-ui/Layout';\nimport * as Panel from '@dxos/react-ui/Panel';\nimport * as ScrollArea from '@dxos/react-ui/ScrollArea';\nimport * as Toolbar from '@dxos/react-ui/Toolbar';\nimport * as Util from '@dxos/react-ui/Util';\n\nimport { PluginList, type PluginListProps } from '#components';\nimport { meta } from '#meta';\n\nimport { useDisableConfirmation } from '../../hooks/index.ts';\nimport { getPluginPath } from '../../paths.ts';\n\nconst matchesFilter = (plugin: Plugin.Plugin, query: string) => {\n const haystack = `${plugin.meta.profile.name ?? ''} ${plugin.meta.profile.key}`.toLowerCase();\n return haystack.includes(query);\n};\n\nexport type BaseRegistryArticleProps = {\n /** Article id used as the pivotId when opening a plugin's detail surface. */\n id: string;\n /** Plugins to display, pre-sorted by the caller. */\n plugins: readonly Plugin.Plugin[];\n /**\n * Distinguishes the source of toggle events for observability\n * (e.g. `'registry'` for the public registry surface).\n */\n source?: string;\n /** Rendered in place of the list when no plugins match the current filter. */\n empty?: ReactNode;\n} & Pick<\n PluginListProps,\n | 'installed'\n | 'installing'\n | 'updating'\n | 'updateAvailableIds'\n | 'extraTagsById'\n | 'failuresById'\n | 'deviceOnlyIds'\n | 'onInstall'\n | 'onUpdate'\n>;\n\nexport const BaseRegistryArticle = Util.composable<HTMLDivElement, BaseRegistryArticleProps>(\n (\n {\n id,\n plugins,\n source,\n empty,\n installed,\n installing,\n updating,\n updateAvailableIds,\n extraTagsById,\n failuresById,\n deviceOnlyIds,\n onInstall,\n onUpdate,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = UiHooks.useTranslation(meta.profile.key);\n const manager = PluginManagerProvider.usePluginManager();\n const { invoke, invokePromise } = Hooks.useOperationInvoker();\n const allSettings = Hooks.useCapabilities(AppCapabilities.Settings);\n const enabled = useAtomValue(manager.enabled);\n const settingsSync = Hooks.useOptionalCapability(AppCapabilities.SettingsSync);\n const [filter, setFilter] = useState('');\n\n const filtered = useMemo(() => {\n const query = filter.trim().toLowerCase();\n return query.length === 0 ? plugins : plugins.filter((plugin) => matchesFilter(plugin, query));\n }, [plugins, filter]);\n\n const dispatchToggle = useCallback(\n (pluginId: string, nextEnabled: boolean) =>\n Effect.gen(function* () {\n if (nextEnabled) {\n yield* manager.enable(pluginId);\n } else {\n yield* manager.disable(pluginId);\n }\n yield* invoke(ObservabilityOperation.SendEvent, {\n name: 'plugins.toggle',\n properties: source\n ? { plugin: pluginId, enabled: nextEnabled, source }\n : { plugin: pluginId, enabled: nextEnabled },\n });\n }).pipe(EffectEx.runAndForwardErrors),\n [invoke, manager, source],\n );\n\n const requestDisable = useDisableConfirmation(manager, (id) => void dispatchToggle(id, false));\n\n const handleChange = useCallback(\n (pluginId: string, nextEnabled: boolean) => {\n if (nextEnabled) {\n void dispatchToggle(pluginId, true);\n return;\n }\n requestDisable(pluginId);\n },\n [dispatchToggle, requestDisable],\n );\n\n const handleClick = useCallback(\n (pluginId: string) =>\n invokePromise(LayoutOperation.Open, {\n subject: [getPluginPath(pluginId)],\n pivotId: getPluginPath(id),\n disposition: 'add',\n }),\n [invokePromise, id],\n );\n\n const hasSettings = useCallback(\n (pluginId: string) => allSettings.some((setting) => setting.prefix === pluginId),\n [allSettings],\n );\n\n const handleSettings = useCallback(\n (pluginId: string) => invokePromise(SettingsOperation.Open, { plugin: pluginId }),\n [invokePromise],\n );\n\n return (\n <Panel.Root {...Util.composableProps(props)} ref={forwardedRef}>\n <Panel.Header>\n <Toolbar.Root>\n <Input.Root\n aria-label={t('filter.label')}\n placeholder={t('filter.placeholder')}\n value={filter}\n onChange={(event) => setFilter(event.target.value)}\n />\n </Toolbar.Root>\n </Panel.Header>\n <Panel.Body asChild>\n <ScrollArea.Root>\n <ScrollArea.Viewport asChild>\n <Layout.Container gutter='md' padBlock>\n {filtered.length > 0 ? (\n <PluginList\n plugins={filtered}\n enabled={enabled}\n installed={installed}\n installing={installing}\n updating={updating}\n updateAvailableIds={updateAvailableIds}\n extraTagsById={extraTagsById}\n failuresById={failuresById}\n deviceOnlyIds={deviceOnlyIds}\n onClick={handleClick}\n readOnly={settingsSync === undefined}\n onChange={handleChange}\n onInstall={onInstall}\n onUpdate={onUpdate}\n hasSettings={hasSettings}\n onSettings={handleSettings}\n />\n ) : (\n empty\n )}\n </Layout.Container>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Body>\n </Panel.Root>\n );\n },\n);\n\nBaseRegistryArticle.displayName = 'BaseRegistryArticle';\n"],"mappings":"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"}
@@ -1,45 +1,44 @@
1
- import * as Effect from "effect/Effect";
1
+ import { RegistryOperation, describeLoadError } from "#operations";
2
2
  import { meta } from "#meta";
3
3
  import { useCallback, useRef, useState } from "react";
4
- import { Button, Dialog, Flex, Input, useTranslation } from "@dxos/react-ui";
4
+ import * as UiHooks from "@dxos/react-ui/Hooks";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { usePluginManager } from "@dxos/app-framework/ui";
7
- import { EffectEx } from "@dxos/effect";
6
+ import * as Button from "@dxos/react-ui/Button";
7
+ import * as Field from "@dxos/react-ui/Field";
8
+ import * as Input from "@dxos/react-ui/Input";
9
+ import * as Layout from "@dxos/react-ui/Layout";
10
+ import * as Hooks from "@dxos/app-framework/Hooks";
11
+ import * as Dialog from "@dxos/react-ui/Dialog";
12
+ import * as SystemButton from "@dxos/react-ui/SystemButton";
8
13
  //#region src/containers/LoadPluginDialog/LoadPluginDialog.tsx
9
14
  var LoadPluginDialog = () => {
10
- const manager = usePluginManager();
11
- const { t } = useTranslation(meta.profile.key);
15
+ const { invokePromise } = Hooks.useOperationInvoker();
16
+ const { t } = UiHooks.useTranslation(meta.profile.key);
12
17
  const [url, setUrl] = useState("");
13
18
  const [loading, setLoading] = useState(false);
14
19
  const [error, setError] = useState(null);
15
20
  const closeRef = useRef(null);
16
- const handleLoad = useCallback(() => {
21
+ const handleLoad = useCallback(async () => {
17
22
  const trimmed = url.trim();
18
23
  if (!trimmed) return;
19
24
  setLoading(true);
20
25
  setError(null);
21
- Effect.gen(function* () {
22
- const plugin = yield* manager.add(trimmed);
23
- yield* manager.enable(plugin.meta.profile.key);
24
- closeRef.current?.click();
25
- }).pipe(Effect.catch((err) => Effect.sync(() => {
26
- setError(String(err));
27
- })), Effect.tap(() => Effect.sync(() => setLoading(false))), EffectEx.runAndForwardErrors);
28
- }, [url, manager]);
29
- return /* @__PURE__ */ jsxs(Dialog.Content, { children: [/* @__PURE__ */ jsxs(Dialog.Header, { children: [/* @__PURE__ */ jsx(Dialog.Title, { children: t("load-by-url-dialog.title") }), /* @__PURE__ */ jsx(Dialog.Close, {
26
+ const { error } = await invokePromise(RegistryOperation.LoadPlugin, { url: trimmed });
27
+ setLoading(false);
28
+ if (error) setError(describeLoadError(error));
29
+ else closeRef.current?.click();
30
+ }, [url, invokePromise]);
31
+ return /* @__PURE__ */ jsxs(Dialog.Content, { children: [/* @__PURE__ */ jsxs(Dialog.Header, { children: [/* @__PURE__ */ jsx(Dialog.Title, { children: t("load-by-url-dialog.title") }), /* @__PURE__ */ jsx(Dialog.CloseTrigger, {
30
32
  asChild: true,
31
- children: /* @__PURE__ */ jsx(Dialog.ActionIconButton, {
32
- action: "close",
33
- ref: closeRef
34
- })
35
- })] }), /* @__PURE__ */ jsx(Dialog.Body, { children: /* @__PURE__ */ jsxs(Flex, {
33
+ children: /* @__PURE__ */ jsx(SystemButton.Close, { ref: closeRef })
34
+ })] }), /* @__PURE__ */ jsx(Dialog.Body, { children: /* @__PURE__ */ jsxs(Layout.Flex, {
36
35
  column: true,
37
36
  gap: "lg",
38
- children: [/* @__PURE__ */ jsxs(Input.Root, {
37
+ children: [/* @__PURE__ */ jsxs(Field.Root, {
39
38
  validationValence: error ? "error" : void 0,
40
39
  children: [
41
- /* @__PURE__ */ jsx(Input.Label, { children: t("plugin-url.label") }),
42
- /* @__PURE__ */ jsx(Input.TextInput, {
40
+ /* @__PURE__ */ jsx(Field.Label, { children: t("plugin-url.label") }),
41
+ /* @__PURE__ */ jsx(Input.Root, {
43
42
  placeholder: "https://example.com/manifest.json",
44
43
  value: url,
45
44
  onChange: (event) => {
@@ -52,14 +51,14 @@ var LoadPluginDialog = () => {
52
51
  disabled: loading,
53
52
  autoFocus: true
54
53
  }),
55
- error && /* @__PURE__ */ jsx(Input.DescriptionAndValidation, { children: error })
54
+ error && /* @__PURE__ */ jsx(Field.HelperText, { children: error })
56
55
  ]
57
- }), /* @__PURE__ */ jsx(Flex, {
56
+ }), /* @__PURE__ */ jsx(Layout.Flex, {
58
57
  justify: "end",
59
- children: /* @__PURE__ */ jsx(Button, {
58
+ children: /* @__PURE__ */ jsx(Button.Root, {
60
59
  variant: "primary",
61
60
  disabled: !url.trim() || loading,
62
- onClick: handleLoad,
61
+ onClick: () => void handleLoad(),
63
62
  children: loading ? t("loading.label") : t("load-plugin.label")
64
63
  })
65
64
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-LoadPluginDialog.mjs","names":[],"sources":["../../src/containers/LoadPluginDialog/LoadPluginDialog.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { usePluginManager } from '@dxos/app-framework/ui';\nimport { EffectEx } from '@dxos/effect';\nimport { Button, Dialog, Flex, Input, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nexport const LoadPluginDialog = () => {\n const manager = usePluginManager();\n const { t } = useTranslation(meta.profile.key);\n const [url, setUrl] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const closeRef = useRef<HTMLButtonElement | null>(null);\n\n const handleLoad = useCallback(() => {\n const trimmed = url.trim();\n if (!trimmed) {\n return;\n }\n\n setLoading(true);\n setError(null);\n\n void Effect.gen(function* () {\n const plugin = yield* manager.add(trimmed);\n yield* manager.enable(plugin.meta.profile.key);\n closeRef.current?.click();\n }).pipe(\n Effect.catch((err) =>\n Effect.sync(() => {\n setError(String(err));\n }),\n ),\n Effect.tap(() => Effect.sync(() => setLoading(false))),\n EffectEx.runAndForwardErrors,\n );\n }, [url, manager]);\n\n return (\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>{t('load-by-url-dialog.title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Dialog.ActionIconButton action='close' ref={closeRef} />\n </Dialog.Close>\n </Dialog.Header>\n <Dialog.Body>\n {/* TODO(burdon): Form section. */}\n <Flex column gap='lg'>\n <Input.Root validationValence={error ? 'error' : undefined}>\n <Input.Label>{t('plugin-url.label')}</Input.Label>\n <Input.TextInput\n placeholder='https://example.com/manifest.json'\n value={url}\n onChange={(event) => {\n setUrl(event.target.value);\n setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleLoad();\n }\n }}\n disabled={loading}\n autoFocus\n />\n {error && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n <Flex justify='end'>\n <Button variant='primary' disabled={!url.trim() || loading} onClick={handleLoad}>\n {loading ? t('loading.label') : t('load-plugin.label')}\n </Button>\n </Flex>\n </Flex>\n </Dialog.Body>\n </Dialog.Content>\n );\n};\n\nLoadPluginDialog.displayName = 'LoadPluginDialog';\n"],"mappings":";;;;;;;;AAaA,IAAa,yBAAyB;CACpC,MAAM,UAAU,iBAAiB;CACjC,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,CAAC,KAAK,UAAU,SAAS,EAAE;CACjC,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CACtD,MAAM,WAAW,OAAiC,IAAI;CAEtD,MAAM,aAAa,kBAAkB;EACnC,MAAM,UAAU,IAAI,KAAK;EACzB,IAAI,CAAC,SACH;EAGF,WAAW,IAAI;EACf,SAAS,IAAI;EAEb,OAAY,IAAI,aAAa;GAC3B,MAAM,SAAS,OAAO,QAAQ,IAAI,OAAO;GACzC,OAAO,QAAQ,OAAO,OAAO,KAAK,QAAQ,GAAG;GAC7C,SAAS,SAAS,MAAM;EAC1B,CAAC,CAAC,CAAC,KACD,OAAO,OAAO,QACZ,OAAO,WAAW;GAChB,SAAS,OAAO,GAAG,CAAC;EACtB,CAAC,CACH,GACA,OAAO,UAAU,OAAO,WAAW,WAAW,KAAK,CAAC,CAAC,GACrD,SAAS,mBACX;CACF,GAAG,CAAC,KAAK,OAAO,CAAC;CAEjB,OACE,qBAAC,OAAO,SAAR,EAAA,UAAA,CACE,qBAAC,OAAO,QAAR,EAAA,UAAA,CACE,oBAAC,OAAO,OAAR,EAAA,UAAe,EAAE,0BAA0B,EAAgB,CAAA,GAC3D,oBAAC,OAAO,OAAR;EAAc,SAAA;EACZ,UAAA,oBAAC,OAAO,kBAAR;GAAyB,QAAO;GAAQ,KAAK;EAAW,CAAA;CAC5C,CAAA,CACD,EAAA,CAAA,GACf,oBAAC,OAAO,MAAR,EAAA,UAEE,qBAAC,MAAD;EAAM,QAAA;EAAO,KAAI;EAAjB,UAAA,CACE,qBAAC,MAAM,MAAP;GAAY,mBAAmB,QAAQ,UAAU,KAAA;GAAjD,UAAA;IACE,oBAAC,MAAM,OAAP,EAAA,UAAc,EAAE,kBAAkB,EAAe,CAAA;IACjD,oBAAC,MAAM,WAAP;KACE,aAAY;KACZ,OAAO;KACP,WAAW,UAAU;MACnB,OAAO,MAAM,OAAO,KAAK;MACzB,SAAS,IAAI;KACf;KACA,YAAY,UAAU;MACpB,IAAI,MAAM,QAAQ,SAChB,WAAW;KAEf;KACA,UAAU;KACV,WAAA;IACD,CAAA;IACA,SAAS,oBAAC,MAAM,0BAAP,EAAA,UAAiC,MAAsC,CAAA;GACvE;EACZ,CAAA,GAAA,oBAAC,MAAD;GAAM,SAAQ;GACZ,UAAA,oBAAC,QAAD;IAAQ,SAAQ;IAAU,UAAU,CAAC,IAAI,KAAK,KAAK;IAAS,SAAS;IAClE,UAAA,UAAU,EAAE,eAAe,IAAI,EAAE,mBAAmB;GAC/C,CAAA;EACJ,CAAA,CACF;CACK,CAAA,EAAA,CAAA,CACC,EAAA,CAAA;AAEpB;AAEA,iBAAiB,cAAc"}
1
+ {"version":3,"file":"chunk-LoadPluginDialog.mjs","names":[],"sources":["../../src/containers/LoadPluginDialog/LoadPluginDialog.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as Dialog from '@dxos/react-ui/Dialog';\nimport * as Field from '@dxos/react-ui/Field';\nimport * as UiHooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Layout from '@dxos/react-ui/Layout';\nimport * as SystemButton from '@dxos/react-ui/SystemButton';\n\nimport { meta } from '#meta';\nimport { RegistryOperation, describeLoadError } from '#operations';\n\nexport const LoadPluginDialog = () => {\n const { invokePromise } = Hooks.useOperationInvoker();\n const { t } = UiHooks.useTranslation(meta.profile.key);\n const [url, setUrl] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const closeRef = useRef<HTMLButtonElement | null>(null);\n\n const handleLoad = useCallback(async () => {\n const trimmed = url.trim();\n if (!trimmed) {\n return;\n }\n\n setLoading(true);\n setError(null);\n // `invokePromise` reports a handler failure as `{ error }` rather than rejecting.\n const { error } = await invokePromise(RegistryOperation.LoadPlugin, { url: trimmed });\n setLoading(false);\n if (error) {\n setError(describeLoadError(error));\n } else {\n closeRef.current?.click();\n }\n }, [url, invokePromise]);\n\n return (\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>{t('load-by-url-dialog.title')}</Dialog.Title>\n <Dialog.CloseTrigger asChild>\n <SystemButton.Close ref={closeRef} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>\n {/* TODO(burdon): Form section. */}\n <Layout.Flex column gap='lg'>\n <Field.Root validationValence={error ? 'error' : undefined}>\n <Field.Label>{t('plugin-url.label')}</Field.Label>\n <Input.Root\n placeholder='https://example.com/manifest.json'\n value={url}\n onChange={(event) => {\n setUrl(event.target.value);\n setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n void handleLoad();\n }\n }}\n disabled={loading}\n autoFocus\n />\n {error && <Field.HelperText>{error}</Field.HelperText>}\n </Field.Root>\n <Layout.Flex justify='end'>\n <Button.Root variant='primary' disabled={!url.trim() || loading} onClick={() => void handleLoad()}>\n {loading ? t('loading.label') : t('load-plugin.label')}\n </Button.Root>\n </Layout.Flex>\n </Layout.Flex>\n </Dialog.Body>\n </Dialog.Content>\n );\n};\n\nLoadPluginDialog.displayName = 'LoadPluginDialog';\n"],"mappings":";;;;;;;;;;;;;AAkBA,IAAa,yBAAyB;CACpC,MAAM,EAAE,kBAAkB,MAAM,oBAAoB;CACpD,MAAM,EAAE,MAAM,QAAQ,eAAe,KAAK,QAAQ,GAAG;CACrD,MAAM,CAAC,KAAK,UAAU,SAAS,EAAE;CACjC,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CACtD,MAAM,WAAW,OAAiC,IAAI;CAEtD,MAAM,aAAa,YAAY,YAAY;EACzC,MAAM,UAAU,IAAI,KAAK;EACzB,IAAI,CAAC,SACH;EAGF,WAAW,IAAI;EACf,SAAS,IAAI;EAEb,MAAM,EAAE,UAAU,MAAM,cAAc,kBAAkB,YAAY,EAAE,KAAK,QAAQ,CAAC;EACpF,WAAW,KAAK;EAChB,IAAI,OACF,SAAS,kBAAkB,KAAK,CAAC;OAEjC,SAAS,SAAS,MAAM;CAE5B,GAAG,CAAC,KAAK,aAAa,CAAC;CAEvB,OACE,qBAAC,OAAO,SAAR,EAAA,UAAA,CACE,qBAAC,OAAO,QAAR,EAAA,UAAA,CACE,oBAAC,OAAO,OAAR,EAAA,UAAe,EAAE,0BAA0B,EAAgB,CAAA,GAC3D,oBAAC,OAAO,cAAR;EAAqB,SAAA;EACnB,UAAA,oBAAC,aAAa,OAAd,EAAoB,KAAK,SAAW,CAAA;CACjB,CAAA,CACR,EAAA,CAAA,GACf,oBAAC,OAAO,MAAR,EAAA,UAEE,qBAAC,OAAO,MAAR;EAAa,QAAA;EAAO,KAAI;EAAxB,UAAA,CACE,qBAAC,MAAM,MAAP;GAAY,mBAAmB,QAAQ,UAAU,KAAA;GAAjD,UAAA;IACE,oBAAC,MAAM,OAAP,EAAA,UAAc,EAAE,kBAAkB,EAAe,CAAA;IACjD,oBAAC,MAAM,MAAP;KACE,aAAY;KACZ,OAAO;KACP,WAAW,UAAU;MACnB,OAAO,MAAM,OAAO,KAAK;MACzB,SAAS,IAAI;KACf;KACA,YAAY,UAAU;MACpB,IAAI,MAAM,QAAQ,SAChB,WAAgB;KAEpB;KACA,UAAU;KACV,WAAA;IACD,CAAA;IACA,SAAS,oBAAC,MAAM,YAAP,EAAA,UAAmB,MAAwB,CAAA;GAC3C;EACZ,CAAA,GAAA,oBAAC,OAAO,MAAR;GAAa,SAAQ;GACnB,UAAA,oBAAC,OAAO,MAAR;IAAa,SAAQ;IAAU,UAAU,CAAC,IAAI,KAAK,KAAK;IAAS,eAAe,KAAK,WAAW;IAC7F,UAAA,UAAU,EAAE,eAAe,IAAI,EAAE,mBAAmB;GAC1C,CAAA;EACF,CAAA,CACF;CACF,CAAA,EAAA,CAAA,CACC,EAAA,CAAA;AAEpB;AAEA,iBAAiB,cAAc"}