@openhands/agent-canvas 1.0.0-beta.6 → 1.0.0-beta.7

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 (802) hide show
  1. package/README.md +24 -7
  2. package/README.windows.md +27 -0
  3. package/bin/agent-canvas.mjs +26 -3
  4. package/build/assets/{QueryClientProvider-CkGuhXg-.js → QueryClientProvider-Cnr-Yl3j.js} +1 -1
  5. package/build/assets/{Trans-Cvm_-SMi.js → Trans-4jmk54WC.js} +1 -1
  6. package/build/assets/acp-providers-CPdgcp13.js +1 -0
  7. package/build/assets/{acp-route-guard-B2yoBZ_4.js → acp-route-guard-BoVmCn0e.js} +1 -1
  8. package/build/assets/active-backend-context-Beu-LZL-.js +1 -0
  9. package/build/assets/add-backend-modal-BheqYXHK.js +1 -0
  10. package/build/assets/agent-server-client-options-HEOwGVIU.js +1 -0
  11. package/build/assets/agent-server-compatibility-CdI3N7dr.js +1 -0
  12. package/build/assets/agent-server-conversation-service.api-CORdqJZg.js +5 -0
  13. package/build/assets/{agent-settings-CnGSCmK8.js → agent-settings-UFvcGjoI.js} +1 -1
  14. package/build/assets/{alert-banner-DtzAX654.js → alert-banner-DFnn_lC6.js} +1 -1
  15. package/build/assets/{analytics-consent-form-modal-CHZ3I37v.js → analytics-consent-form-modal-CVNugqzu.js} +1 -1
  16. package/build/assets/api-key-entry-screen-M6su2VSf.js +1 -0
  17. package/build/assets/{app-settings-Db9ITeJH.js → app-settings-BlvBhBdc.js} +1 -1
  18. package/build/assets/automation-detail-BWrQk4Oa.js +1 -0
  19. package/build/assets/automations-list-ux9KvYsU.js +1 -0
  20. package/build/assets/back-nav-button-7dQJ2k3O.js +1 -0
  21. package/build/assets/backend-form-modal-CDnEYjaU.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-Dc6c7GT4.js → backend-synced-settings-badge-BTIj-Ffq.js} +1 -1
  23. package/build/assets/base-modal-C2oy2EBG.js +1 -0
  24. package/build/assets/brand-button-DJ_S16rO.js +1 -0
  25. package/build/assets/{browser-D810xUYt.js → browser-CGM-k-sH.js} +2 -2
  26. package/build/assets/browser-store-DAsixKdU.js +1 -0
  27. package/build/assets/{browser-tab-B-aIqXRl.js → browser-tab-dvSPdvkm.js} +1 -1
  28. package/build/assets/{checkmark-DL7acQA7.js → checkmark-Dus0b6jt.js} +1 -1
  29. package/build/assets/{chevron-left-small-CVWf8TI6.js → chevron-left-small-_uvG7RVM.js} +1 -1
  30. package/build/assets/{circle-plus-check-toggle-P7ZZToV4.js → circle-plus-check-toggle-DKS8MAVV.js} +1 -1
  31. package/build/assets/{close-B5LROHR3.js → close-BU5iTc66.js} +1 -1
  32. package/build/assets/code-tag-BzyqOtPD.js +1 -0
  33. package/build/assets/combobox-caret-BJC7XJsz.js +1 -0
  34. package/build/assets/{command-store-DFN_17p1.js → command-store-CE1weJy8.js} +1 -1
  35. package/build/assets/{condenser-settings-wnEKhBof.js → condenser-settings-BolbDvm5.js} +1 -1
  36. package/build/assets/{confirmation-modal-Dau3w_sa.js → confirmation-modal-B5Ca6qFE.js} +1 -1
  37. package/build/assets/context-menu-list-item-7tAcm2c3.js +1 -0
  38. package/build/assets/conversation-D0N4dw_p.js +19 -0
  39. package/build/assets/conversation-DhRJuZLG.js +1 -0
  40. package/build/assets/conversation-panel-CNqHbS_Z.js +1 -0
  41. package/build/assets/conversation-service.api-BsJy6uuL.js +1 -0
  42. package/build/assets/conversation-state-store-D-w0uurj.js +1 -0
  43. package/build/assets/conversation-store-CC-isCnP.js +1 -0
  44. package/build/assets/{conversation-tab-empty-state-DyssnnWa.js → conversation-tab-empty-state-CStQLPVW.js} +1 -1
  45. package/build/assets/conversation-websocket-context-DvHgx_FE.js +3 -0
  46. package/build/assets/{copy-DYgmUdIw.js → copy-Chg-sFu3.js} +1 -1
  47. package/build/assets/{custom-toast-handlers-C-SZFmto.js → custom-toast-handlers-ufGJ6_Rc.js} +1 -1
  48. package/build/assets/declaration-CR6HMp29.js +1 -0
  49. package/build/assets/{device-verify-DqDlphsG.js → device-verify-C6mj28zv.js} +1 -1
  50. package/build/assets/dist-DNeWJ2bh.js +1 -0
  51. package/build/assets/dropdown-classes-BsVmxlNG.js +1 -0
  52. package/build/assets/edit-automation-modal-BpX-t-HD.js +1 -0
  53. package/build/assets/ellipsis-button-Vh5MvRZa.js +1 -0
  54. package/build/assets/entry.client-Ck9rQCg-.js +2 -0
  55. package/build/assets/enum-filter-dropdown-5JeF2RLb.js +1 -0
  56. package/build/assets/{environment-switch-overlay-XL8yCGP6.js → environment-switch-overlay-Tf_BIfeR.js} +1 -1
  57. package/build/assets/extensions-hub-CE9QOb5n.js +1 -0
  58. package/build/assets/{extensions-navigation-BYR8Giqq.js → extensions-navigation-DSLGNGbS.js} +1 -1
  59. package/build/assets/file-BTY6Gyy9.js +1 -0
  60. package/build/assets/files-tab-cL668j1I.js +1 -0
  61. package/build/assets/files-tab-store-m0ARqX_E.js +1 -0
  62. package/build/assets/{folder-ZZJVGgd7.js → folder-D1T2W1cj.js} +1 -1
  63. package/build/assets/git-control-bar-branch-button-DtIrOrie.js +27 -0
  64. package/build/assets/git-provider-icon-CHdGBdU2.js +1 -0
  65. package/build/assets/globe-Bzj_0oXT.js +1 -0
  66. package/build/assets/home-Cz2Veg56.js +1 -0
  67. package/build/assets/{i18n-CTohRuoO.js → i18n-DET2iOyh.js} +1 -1
  68. package/build/assets/install-server-modal-B9nXCS3u.js +1 -0
  69. package/build/assets/launch-CWz0dm4o.js +1 -0
  70. package/build/assets/{lesson-plan-dH5Bj0pN.js → lesson-plan-duSsqWVs.js} +1 -1
  71. package/build/assets/link-external-DGxVm4Ps.js +1 -0
  72. package/build/assets/{llm-client-DaH1TuyR.js → llm-client-CYEaUjGx.js} +1 -1
  73. package/build/assets/llm-settings-DFkXHuvT.js +1 -0
  74. package/build/assets/llm-settings-DhrdCXqX.js +1 -0
  75. package/build/assets/{loading-spinner-BPtYORNK.js → loading-spinner-5GT9q1xy.js} +1 -1
  76. package/build/assets/manage-backends-modal-DpBD_vR9.js +1 -0
  77. package/build/assets/manage-workspaces-modal-CtRbxREx.js +1 -0
  78. package/build/assets/manifest-eed90ff5.js +1 -0
  79. package/build/assets/{markdown-renderer-DMzf2i4x.js → markdown-renderer-B3IAVfv4.js} +1 -1
  80. package/build/assets/mcp-BUe7kiYM.js +9 -0
  81. package/build/assets/messages-dqp_KYyl.js +36 -0
  82. package/build/assets/{modal-backdrop-BAbgYsqB.js → modal-backdrop-RfNCrSpK.js} +1 -1
  83. package/build/assets/{modal-body-BI6Ru2Qr.js → modal-body-aoa2fx5W.js} +1 -1
  84. package/build/assets/modal-classes-6YqcqA6y.js +1 -0
  85. package/build/assets/{modal-close-button-t1Gh3qmL.js → modal-close-button-CtWOUMmw.js} +1 -1
  86. package/build/assets/{model-selector-SM9IUz-q.js → model-selector-BvSTrkhT.js} +1 -1
  87. package/build/assets/{navigation-context-D0YWpT8d.js → navigation-context-BdKYH32C.js} +1 -1
  88. package/build/assets/{navigation-link-Cn7KP3c5.js → navigation-link-U4vY9i_C.js} +1 -1
  89. package/build/assets/{openhands-logo-CnrF6LKb.js → openhands-logo-CCo0wJZX.js} +1 -1
  90. package/build/assets/{option-service.api-KvY_mZMY.js → option-service.api-DmNVxAvS.js} +1 -1
  91. package/build/assets/{organization-service.api-DzYTHTYC.js → organization-service.api-DbnougaQ.js} +1 -1
  92. package/build/assets/{path-utils-C3bQf6lJ.js → path-utils-onx24uF5.js} +1 -1
  93. package/build/assets/{plan-components-atxXCF0R.js → plan-components-CRDMQzsS.js} +1 -1
  94. package/build/assets/{planner-tab-BlrCpv-7.js → planner-tab-CmIjLz7q.js} +1 -1
  95. package/build/assets/{profiles-client-D6IkTJof.js → profiles-client-fEmgWkCW.js} +1 -1
  96. package/build/assets/{providers-Bx6EfrzZ.js → providers-CbD7fiic.js} +1 -1
  97. package/build/assets/proxy-BAdHH8QB.js +1 -0
  98. package/build/assets/{query-client-config-B7u9asM0.js → query-client-config-CRnGSujB.js} +1 -1
  99. package/build/assets/{recommended-automations-launcher-CgV8FyPK.js → recommended-automations-launcher-uTyODuzB.js} +3 -3
  100. package/build/assets/{root-dNntxffj.js → root-DmjpFpTu.js} +2 -2
  101. package/build/assets/root-Z2VHU4R3.css +1 -0
  102. package/build/assets/root-layout-DejMsKhy.js +2 -0
  103. package/build/assets/{sdk-section-page-DOIKvwSL.js → sdk-section-page-BgDlMhcq.js} +1 -1
  104. package/build/assets/{sdk-settings-schema-DsUf9wu1.js → sdk-settings-schema-CLmJ9sho.js} +1 -1
  105. package/build/assets/{search-27Owlc3A.js → search-SuJctqNJ.js} +1 -1
  106. package/build/assets/secrets-service-B7CxNinp.js +1 -0
  107. package/build/assets/secrets-settings-yK7CqIpm.js +1 -0
  108. package/build/assets/{server-client-DyAQ3NZ_.js → server-client-Kh4QSwDJ.js} +1 -1
  109. package/build/assets/{settings-BYkVX7vW.js → settings-DN5PpgRD.js} +1 -1
  110. package/build/assets/{settings-dropdown-input-BJYvGdg-.js → settings-dropdown-input-BtoovFre.js} +1 -1
  111. package/build/assets/{settings-gear-C77PgE_O.js → settings-gear-Dd8K2_8B.js} +1 -1
  112. package/build/assets/settings-index-DKC8IY1P.js +1 -0
  113. package/build/assets/{settings-input-Bn7F5C75.js → settings-input-CehsXnb3.js} +1 -1
  114. package/build/assets/settings-list-classes-E3v_f6QG.js +1 -0
  115. package/build/assets/settings-modal-DJ4kGzUx.js +1 -0
  116. package/build/assets/{settings-section-header-context-BgZe5YkE.js → settings-section-header-context-DewwJ0-F.js} +1 -1
  117. package/build/assets/settings-service.api-C3rxTtPj.js +1 -0
  118. package/build/assets/{settings-switch-BeIKrWms.js → settings-switch-BiBuS3xa.js} +1 -1
  119. package/build/assets/{settings-utils-B6Nl07io.js → settings-utils-DY04tWG1.js} +1 -1
  120. package/build/assets/{shared-conversation-AMyqXvpk.js → shared-conversation-h9YnBtCU.js} +1 -1
  121. package/build/assets/sidebar-mobile-menu-toggle-D0-AvsnT.js +1 -0
  122. package/build/assets/{sidebar-nav-link-BGjiJq-4.js → sidebar-nav-link-OhIeFyna.js} +1 -1
  123. package/build/assets/{sidebar-store-Uy3v0AOV.js → sidebar-store-DnQAJAE5.js} +1 -1
  124. package/build/assets/{skill-card-pill-row-DF1axQCG.js → skill-card-pill-row-BW9qvhoK.js} +1 -1
  125. package/build/assets/{skills-ChIKZPK4.js → skills-0GRKX5Xj.js} +1 -1
  126. package/build/assets/{skills-plugins-CcI_19lM.js → skills-plugins-DNcsNF88.js} +1 -1
  127. package/build/assets/skills-settings-7liFiSY6.js +2 -0
  128. package/build/assets/{styled-tooltip-CBzrri6o.js → styled-tooltip-hdfMXPQC.js} +1 -1
  129. package/build/assets/{switch-skeleton-DnC9wLp7.js → switch-skeleton-DSKqSx2A.js} +1 -1
  130. package/build/assets/{task-list-tab-DUJn1sgz.js → task-list-tab-DT6_zfUs.js} +1 -1
  131. package/build/assets/{terminal-DgQk1Ay6.js → terminal-CDhQGDua.js} +2 -2
  132. package/build/assets/{terminal-RmuaSdhJ.js → terminal-CPYWdo4j.js} +1 -1
  133. package/build/assets/{toggle-switch-Pvyp2RAN.js → toggle-switch-T2v6sJ6l.js} +1 -1
  134. package/build/assets/{typography-gpuWmrQO.js → typography-BDgnT7Yp.js} +1 -1
  135. package/build/assets/{u-check-circle-IUIfACQQ.js → u-check-circle-DOauqQKb.js} +1 -1
  136. package/build/assets/{u-check-circle-half-C1YxB6py.js → u-check-circle-half-steSK_JB.js} +1 -1
  137. package/build/assets/{u-circuit-BmVikJHu.js → u-circuit-x3ExjBbU.js} +1 -1
  138. package/build/assets/{u-edit-CFvXHqZk.js → u-edit-BbrptMCa.js} +1 -1
  139. package/build/assets/{use-active-conversation-BEFNwnFk.js → use-active-conversation-DHGcmjCK.js} +1 -1
  140. package/build/assets/use-agent-settings-schema-CLoTOSJI.js +1 -0
  141. package/build/assets/{use-agent-state-Bkrd1FZq.js → use-agent-state-PKrUPMJ3.js} +1 -1
  142. package/build/assets/{use-cloud-current-user-id-CvkXFnTT.js → use-cloud-current-user-id-Ddr75hEz.js} +1 -1
  143. package/build/assets/{use-config-Co1O8-Ey.js → use-config-OIMQLQ2s.js} +1 -1
  144. package/build/assets/{use-create-conversation-CEgXpkfH.js → use-create-conversation-Bszyp13O.js} +1 -1
  145. package/build/assets/{use-event-store-BT_gV3ut.js → use-event-store-BomO7ywK.js} +1 -1
  146. package/build/assets/{use-get-secrets-DuhdIA59.js → use-get-secrets-8Jby8ele.js} +1 -1
  147. package/build/assets/{use-handle-plan-click-Ckkm5eIY.js → use-handle-plan-click-CohJPvvW.js} +1 -1
  148. package/build/assets/use-is-authed-dw2026rR.js +1 -0
  149. package/build/assets/{use-is-creating-conversation-BZ5hB_Bg.js → use-is-creating-conversation-DX2qSlfL.js} +1 -1
  150. package/build/assets/{use-launch-skill-in-chat-fNN_xGZG.js → use-launch-skill-in-chat-sQNEOLGD.js} +1 -1
  151. package/build/assets/use-llm-profiles-C861aFAq.js +1 -0
  152. package/build/assets/use-runtime-is-ready-Do2h_hRl.js +1 -0
  153. package/build/assets/{use-save-settings-VUrj_QNG.js → use-save-settings-DkAOEfD9.js} +1 -1
  154. package/build/assets/use-settings-D5hbTS9t.js +1 -0
  155. package/build/assets/{use-settings-nav-items-1ZvovKSr.js → use-settings-nav-items-BcSbo02d.js} +1 -1
  156. package/build/assets/{use-skills-DAMLFjKU.js → use-skills-D7PS0fH0.js} +1 -1
  157. package/build/assets/{use-task-list-CLJbuJgM.js → use-task-list-CsT10CBb.js} +1 -1
  158. package/build/assets/{use-unified-vscode-url-DdSRw-6P.js → use-unified-vscode-url-DEoe-NRI.js} +1 -1
  159. package/build/assets/use-user-conversation-Cs5H1pUF.js +1 -0
  160. package/build/assets/{useMutation-DqrumCWD.js → useMutation-GSSKKebK.js} +1 -1
  161. package/build/assets/{useTranslation-DCOdSSMl.js → useTranslation-B6voJV4y.js} +1 -1
  162. package/build/assets/utils-DCVfKFRt.js +1 -0
  163. package/build/assets/{vendor~browser-BNjNhjFU.js → vendor~browser-BrOJLj3y.js} +1 -1
  164. package/build/assets/vendor~conversation-panel~conversation-C9o-K1hW.js +1 -0
  165. package/build/assets/vendor~conversation-panel~conversation~index-RXYdJYxU.js +1 -0
  166. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-VnmIZrq3.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-DJS-rJdI.js} +1 -1
  167. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DpAdkv8m.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-6ByzelMS.js} +1 -1
  168. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B92czPCF.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BED5W_c4.js} +1 -1
  169. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-By5W2oHN.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CCbqAFiI.js} +1 -1
  170. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BbFOrAjI.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CG96FCly.js} +1 -1
  171. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-smY2r837.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-E4d6IEfI.js} +1 -1
  172. package/build/assets/{vendor~home~mcp~automations-list-Cs-TO3fK.js → vendor~home~mcp~automations-list-CZSK-lT2.js} +1 -1
  173. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-Z3nsiNNq.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-CjJdFLoM.js} +1 -1
  174. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DbfELDJu.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-m8dOii0J.js} +2 -2
  175. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DjAjXS5J.js → vendor~root-layout~home~conversation-panel~conversation-B5WNMnt4.js} +1 -1
  176. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-CbAhtEMv.js +1 -0
  177. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-6Rm8U_Sr.js +9 -0
  178. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BkQGKpye.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-tTR8C6m0.js} +1 -1
  179. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-Bbs7UJ5U.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-BJbu9kpL.js} +2 -2
  180. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-DTwbEEcX.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-hTzSytKK.js} +1 -1
  181. package/build/assets/{vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-CDXvdvb2.js → vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-DYXOLEck.js} +1 -1
  182. package/build/assets/{verification-settings-CsbvQcYS.js → verification-settings-Dlt8pINd.js} +1 -1
  183. package/build/assets/{vscode-tab-DjNArCgY.js → vscode-tab-DgepcYtF.js} +1 -1
  184. package/build/assets/{waiting-for-runtime-message-CntjExbU.js → waiting-for-runtime-message-CdK3btDZ.js} +1 -1
  185. package/build/assets/{x-mark-CrpjscNc.js → x-mark-BrkSPIiT.js} +1 -1
  186. package/build/index.html +4 -4
  187. package/build/locales/ar/openhands.json +20 -2
  188. package/build/locales/ca/openhands.json +20 -2
  189. package/build/locales/de/openhands.json +20 -2
  190. package/build/locales/en/openhands.json +20 -2
  191. package/build/locales/es/openhands.json +20 -2
  192. package/build/locales/fr/openhands.json +20 -2
  193. package/build/locales/it/openhands.json +20 -2
  194. package/build/locales/ja/openhands.json +20 -2
  195. package/build/locales/ko-KR/openhands.json +20 -2
  196. package/build/locales/no/openhands.json +20 -2
  197. package/build/locales/pt/openhands.json +20 -2
  198. package/build/locales/tr/openhands.json +20 -2
  199. package/build/locales/uk/openhands.json +20 -2
  200. package/build/locales/zh-CN/openhands.json +20 -2
  201. package/build/locales/zh-TW/openhands.json +20 -2
  202. package/dist/api/acp-service/acp-service.api.d.ts +18 -0
  203. package/dist/api/agent-server-adapter.cjs +3 -3
  204. package/dist/api/agent-server-adapter.cjs.map +1 -1
  205. package/dist/api/agent-server-adapter.js +54 -55
  206. package/dist/api/agent-server-adapter.js.map +1 -1
  207. package/dist/api/agent-server-client-options.cjs +1 -1
  208. package/dist/api/agent-server-client-options.cjs.map +1 -1
  209. package/dist/api/agent-server-client-options.d.ts +4 -0
  210. package/dist/api/agent-server-client-options.js +18 -12
  211. package/dist/api/agent-server-client-options.js.map +1 -1
  212. package/dist/api/agent-server-compatibility.cjs +1 -1
  213. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  214. package/dist/api/agent-server-compatibility.d.ts +1 -1
  215. package/dist/api/agent-server-compatibility.js +30 -25
  216. package/dist/api/agent-server-compatibility.js.map +1 -1
  217. package/dist/api/agent-server-config.cjs +1 -1
  218. package/dist/api/agent-server-config.cjs.map +1 -1
  219. package/dist/api/agent-server-config.d.ts +1 -51
  220. package/dist/api/agent-server-config.js +20 -70
  221. package/dist/api/agent-server-config.js.map +1 -1
  222. package/dist/api/backend-registry/active-store.cjs +1 -1
  223. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  224. package/dist/api/backend-registry/active-store.d.ts +11 -5
  225. package/dist/api/backend-registry/active-store.js +36 -27
  226. package/dist/api/backend-registry/active-store.js.map +1 -1
  227. package/dist/api/backend-registry/auth.cjs +1 -1
  228. package/dist/api/backend-registry/auth.cjs.map +1 -1
  229. package/dist/api/backend-registry/auth.js +3 -9
  230. package/dist/api/backend-registry/auth.js.map +1 -1
  231. package/dist/api/backend-registry/default-backend.cjs +1 -1
  232. package/dist/api/backend-registry/default-backend.cjs.map +1 -1
  233. package/dist/api/backend-registry/default-backend.d.ts +9 -16
  234. package/dist/api/backend-registry/default-backend.js +5 -4
  235. package/dist/api/backend-registry/default-backend.js.map +1 -1
  236. package/dist/api/backend-registry/storage.cjs +1 -1
  237. package/dist/api/backend-registry/storage.cjs.map +1 -1
  238. package/dist/api/backend-registry/storage.js +67 -34
  239. package/dist/api/backend-registry/storage.js.map +1 -1
  240. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  241. package/dist/api/cloud/conversation-service.api.d.ts +8 -13
  242. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +1 -2
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/proxy.cjs +1 -1
  247. package/dist/api/cloud/proxy.cjs.map +1 -1
  248. package/dist/api/cloud/proxy.d.ts +6 -6
  249. package/dist/api/cloud/proxy.js +33 -24
  250. package/dist/api/cloud/proxy.js.map +1 -1
  251. package/dist/api/cloud/sandbox-service.api.cjs.map +1 -1
  252. package/dist/api/cloud/sandbox-service.api.d.ts +3 -3
  253. package/dist/api/cloud/sandbox-service.api.js.map +1 -1
  254. package/dist/api/cloud/secrets-service.api.cjs.map +1 -1
  255. package/dist/api/cloud/secrets-service.api.d.ts +3 -4
  256. package/dist/api/cloud/secrets-service.api.js.map +1 -1
  257. package/dist/api/cloud/settings-service.api.cjs +1 -1
  258. package/dist/api/cloud/settings-service.api.cjs.map +1 -1
  259. package/dist/api/cloud/settings-service.api.js +5 -1
  260. package/dist/api/cloud/settings-service.api.js.map +1 -1
  261. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  262. package/dist/api/cloud/skills-service.api.d.ts +5 -5
  263. package/dist/api/cloud/skills-service.api.js.map +1 -1
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  265. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.js +115 -108
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  268. package/dist/api/device-flow-client.cjs +1 -1
  269. package/dist/api/device-flow-client.cjs.map +1 -1
  270. package/dist/api/device-flow-client.d.ts +3 -5
  271. package/dist/api/device-flow-client.js +55 -66
  272. package/dist/api/device-flow-client.js.map +1 -1
  273. package/dist/api/event-service/event-service.api.cjs +1 -1
  274. package/dist/api/event-service/event-service.api.cjs.map +1 -1
  275. package/dist/api/event-service/event-service.api.d.ts +3 -3
  276. package/dist/api/event-service/event-service.api.js +17 -17
  277. package/dist/api/event-service/event-service.api.js.map +1 -1
  278. package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
  279. package/dist/api/git-service/agent-server-git-service.api.js +11 -11
  280. package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
  281. package/dist/api/runtime-service/agent-server-runtime-service.js +6 -6
  282. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.cjs +2 -2
  283. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.js +10 -10
  284. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.cjs.map +1 -1
  285. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.d.ts +5 -5
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.js.map +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  289. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +1 -1
  290. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  291. package/dist/components/features/automations/automation-action-button-classes.d.ts +2 -2
  292. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  293. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  294. package/dist/components/features/backends/backend-form-modal.d.ts +1 -0
  295. package/dist/components/features/backends/backend-form-modal.js +203 -140
  296. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  297. package/dist/components/features/backends/backend-selector.cjs +1 -1
  298. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  299. package/dist/components/features/backends/backend-selector.js +117 -105
  300. package/dist/components/features/backends/backend-selector.js.map +1 -1
  301. package/dist/components/features/backends/backend-status-dot.cjs +1 -1
  302. package/dist/components/features/backends/backend-status-dot.cjs.map +1 -1
  303. package/dist/components/features/backends/backend-status-dot.d.ts +1 -1
  304. package/dist/components/features/backends/backend-status-dot.js +1 -1
  305. package/dist/components/features/backends/backend-status-dot.js.map +1 -1
  306. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  307. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  308. package/dist/components/features/backends/manage-backends-modal.js +81 -70
  309. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  310. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  311. package/dist/components/features/chat/change-agent-button.cjs.map +1 -1
  312. package/dist/components/features/chat/change-agent-button.js +59 -57
  313. package/dist/components/features/chat/change-agent-button.js.map +1 -1
  314. package/dist/components/features/chat/change-agent-context-menu.cjs +1 -1
  315. package/dist/components/features/chat/change-agent-context-menu.cjs.map +1 -1
  316. package/dist/components/features/chat/change-agent-context-menu.d.ts +3 -1
  317. package/dist/components/features/chat/change-agent-context-menu.js +30 -25
  318. package/dist/components/features/chat/change-agent-context-menu.js.map +1 -1
  319. package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
  320. package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
  321. package/dist/components/features/chat/chat-add-file-button.js +39 -38
  322. package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
  323. package/dist/components/features/chat/chat-message.cjs +1 -1
  324. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  325. package/dist/components/features/chat/chat-message.d.ts +2 -1
  326. package/dist/components/features/chat/chat-message.js +185 -57
  327. package/dist/components/features/chat/chat-message.js.map +1 -1
  328. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  329. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  330. package/dist/components/features/chat/components/chat-input-actions.js +113 -113
  331. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  332. package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
  333. package/dist/components/features/chat/components/chat-input-model.cjs.map +1 -1
  334. package/dist/components/features/chat/components/chat-input-model.js +52 -51
  335. package/dist/components/features/chat/components/chat-input-model.js.map +1 -1
  336. package/dist/components/features/chat/components/slash-command-menu.cjs +2 -2
  337. package/dist/components/features/chat/components/slash-command-menu.cjs.map +1 -1
  338. package/dist/components/features/chat/components/slash-command-menu.js +38 -34
  339. package/dist/components/features/chat/components/slash-command-menu.js.map +1 -1
  340. package/dist/components/features/chat/git-control-bar-pr-button.cjs +1 -1
  341. package/dist/components/features/chat/git-control-bar-pr-button.cjs.map +1 -1
  342. package/dist/components/features/chat/git-control-bar-pr-button.js +16 -15
  343. package/dist/components/features/chat/git-control-bar-pr-button.js.map +1 -1
  344. package/dist/components/features/chat/git-control-bar-pull-button.cjs +1 -1
  345. package/dist/components/features/chat/git-control-bar-pull-button.cjs.map +1 -1
  346. package/dist/components/features/chat/git-control-bar-pull-button.js +16 -15
  347. package/dist/components/features/chat/git-control-bar-pull-button.js.map +1 -1
  348. package/dist/components/features/chat/git-control-bar-push-button.cjs +1 -1
  349. package/dist/components/features/chat/git-control-bar-push-button.cjs.map +1 -1
  350. package/dist/components/features/chat/git-control-bar-push-button.js +16 -15
  351. package/dist/components/features/chat/git-control-bar-push-button.js.map +1 -1
  352. package/dist/components/features/chat/git-control-bar.cjs +1 -1
  353. package/dist/components/features/chat/git-control-bar.cjs.map +1 -1
  354. package/dist/components/features/chat/git-control-bar.js +63 -62
  355. package/dist/components/features/chat/git-control-bar.js.map +1 -1
  356. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  357. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  358. package/dist/components/features/chat/pending-user-messages.js +27 -23
  359. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  360. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  361. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  362. package/dist/components/features/chat/switch-profile-button.js +26 -25
  363. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  364. package/dist/components/features/chat/switch-profile-context-menu.cjs +1 -1
  365. package/dist/components/features/chat/switch-profile-context-menu.cjs.map +1 -1
  366. package/dist/components/features/chat/switch-profile-context-menu.js +77 -67
  367. package/dist/components/features/chat/switch-profile-context-menu.js.map +1 -1
  368. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs +1 -1
  369. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs.map +1 -1
  370. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +2 -1
  371. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js +3 -2
  372. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js.map +1 -1
  373. package/dist/components/features/context-menu/context-menu-icon-text.cjs +1 -1
  374. package/dist/components/features/context-menu/context-menu-icon-text.cjs.map +1 -1
  375. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +2 -1
  376. package/dist/components/features/context-menu/context-menu-icon-text.js +20 -10
  377. package/dist/components/features/context-menu/context-menu-icon-text.js.map +1 -1
  378. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  379. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  380. package/dist/components/features/context-menu/context-menu-list-item.js +10 -9
  381. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  382. package/dist/components/features/controls/agent-status.cjs +1 -1
  383. package/dist/components/features/controls/agent-status.js +12 -12
  384. package/dist/components/features/controls/git-tools-submenu.cjs +1 -1
  385. package/dist/components/features/controls/git-tools-submenu.cjs.map +1 -1
  386. package/dist/components/features/controls/git-tools-submenu.js +1 -1
  387. package/dist/components/features/controls/git-tools-submenu.js.map +1 -1
  388. package/dist/components/features/controls/macros-submenu.cjs +1 -1
  389. package/dist/components/features/controls/macros-submenu.cjs.map +1 -1
  390. package/dist/components/features/controls/macros-submenu.js +1 -1
  391. package/dist/components/features/controls/macros-submenu.js.map +1 -1
  392. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs +1 -1
  393. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs.map +1 -1
  394. package/dist/components/features/controls/server-status-context-menu-icon-text.js +14 -15
  395. package/dist/components/features/controls/server-status-context-menu-icon-text.js.map +1 -1
  396. package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
  397. package/dist/components/features/controls/server-status-context-menu.js +4 -4
  398. package/dist/components/features/controls/server-status.cjs +1 -1
  399. package/dist/components/features/controls/server-status.js +7 -7
  400. package/dist/components/features/controls/tools-context-menu-icon-text.cjs +1 -1
  401. package/dist/components/features/controls/tools-context-menu-icon-text.cjs.map +1 -1
  402. package/dist/components/features/controls/tools-context-menu-icon-text.js +16 -16
  403. package/dist/components/features/controls/tools-context-menu-icon-text.js.map +1 -1
  404. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs +1 -1
  405. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs.map +1 -1
  406. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js +11 -11
  407. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js.map +1 -1
  408. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  409. package/dist/components/features/conversation/conversation-name-with-status.js +11 -11
  410. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  411. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  412. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +60 -47
  413. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  414. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
  415. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
  416. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +86 -82
  417. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +4 -4
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +9 -9
  422. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  423. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  424. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +93 -93
  425. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  426. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  427. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  428. package/dist/components/features/conversation-panel/conversation-panel.js +177 -177
  429. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  430. package/dist/components/features/conversation-panel/ellipsis-button.cjs +1 -1
  431. package/dist/components/features/conversation-panel/ellipsis-button.cjs.map +1 -1
  432. package/dist/components/features/conversation-panel/ellipsis-button.js +13 -13
  433. package/dist/components/features/conversation-panel/ellipsis-button.js.map +1 -1
  434. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  435. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  436. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +57 -53
  437. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  438. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs +1 -1
  439. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js +3 -2
  441. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js.map +1 -1
  442. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs +1 -1
  443. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs.map +1 -1
  444. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js +11 -8
  445. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js.map +1 -1
  446. package/dist/components/features/conversation-panel/system-message-modal/tab-content.cjs.map +1 -1
  447. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +2 -5
  448. package/dist/components/features/conversation-panel/system-message-modal/tab-content.js.map +1 -1
  449. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  450. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  451. package/dist/components/features/files-tab/file-content-viewer.js +45 -42
  452. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  453. package/dist/components/features/home/llm-not-configured-banner.d.ts +11 -0
  454. package/dist/components/features/home/shared/dropdown-item.cjs +1 -1
  455. package/dist/components/features/home/shared/dropdown-item.cjs.map +1 -1
  456. package/dist/components/features/home/shared/dropdown-item.js +20 -16
  457. package/dist/components/features/home/shared/dropdown-item.js.map +1 -1
  458. package/dist/components/features/home/shared/generic-dropdown-menu.cjs +1 -1
  459. package/dist/components/features/home/shared/generic-dropdown-menu.cjs.map +1 -1
  460. package/dist/components/features/home/shared/generic-dropdown-menu.js +23 -22
  461. package/dist/components/features/home/shared/generic-dropdown-menu.js.map +1 -1
  462. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  463. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs.map +1 -1
  464. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +103 -102
  465. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js.map +1 -1
  466. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  467. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs.map +1 -1
  468. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +68 -67
  469. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js.map +1 -1
  470. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  471. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  472. package/dist/components/features/mcp-page/custom-server-editor.js +62 -60
  473. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  474. package/dist/components/features/mcp-page/index.cjs +1 -1
  475. package/dist/components/features/mcp-page/index.d.ts +1 -0
  476. package/dist/components/features/mcp-page/index.js +1 -0
  477. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  478. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  479. package/dist/components/features/mcp-page/install-server-modal.js +141 -121
  480. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  481. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs +2 -0
  482. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs.map +1 -0
  483. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +7 -0
  484. package/dist/components/features/mcp-page/save-as-secret-toggle.js +50 -0
  485. package/dist/components/features/mcp-page/save-as-secret-toggle.js.map +1 -0
  486. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -2
  487. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +1 -1
  488. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +2 -1
  489. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +19 -10
  490. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  491. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +5 -0
  492. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
  493. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  494. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  495. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  496. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  497. package/dist/components/features/skills/extensions-navigation.js +1 -1
  498. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  499. package/dist/components/shared/buttons/back-nav-button.cjs +2 -0
  500. package/dist/components/shared/buttons/back-nav-button.cjs.map +1 -0
  501. package/dist/components/shared/buttons/back-nav-button.d.ts +17 -0
  502. package/dist/components/shared/buttons/back-nav-button.js +33 -0
  503. package/dist/components/shared/buttons/back-nav-button.js.map +1 -0
  504. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  505. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +5 -5
  506. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  507. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  508. package/dist/components/shared/filters/enum-filter-dropdown.js +32 -31
  509. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  510. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
  511. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
  512. package/dist/components/shared/modals/confirmation-modals/base-modal.js +14 -13
  513. package/dist/components/shared/modals/confirmation-modals/base-modal.js.map +1 -1
  514. package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
  515. package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
  516. package/dist/components/shared/modals/settings/settings-modal.js +17 -16
  517. package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
  518. package/dist/components/shared/text-shimmer.cjs +2 -0
  519. package/dist/components/shared/text-shimmer.cjs.map +1 -0
  520. package/dist/components/shared/text-shimmer.d.ts +11 -0
  521. package/dist/components/shared/text-shimmer.js +43 -0
  522. package/dist/components/shared/text-shimmer.js.map +1 -0
  523. package/dist/constants/acp-providers.cjs +1 -1
  524. package/dist/constants/acp-providers.cjs.map +1 -1
  525. package/dist/constants/acp-providers.d.ts +16 -3
  526. package/dist/constants/acp-providers.js +0 -1
  527. package/dist/constants/acp-providers.js.map +1 -1
  528. package/dist/contexts/active-backend-context.cjs +1 -1
  529. package/dist/contexts/active-backend-context.cjs.map +1 -1
  530. package/dist/contexts/active-backend-context.js +32 -32
  531. package/dist/contexts/active-backend-context.js.map +1 -1
  532. package/dist/hooks/chat/use-chat-input-logic.cjs +1 -1
  533. package/dist/hooks/chat/use-chat-input-logic.cjs.map +1 -1
  534. package/dist/hooks/chat/use-chat-input-logic.js +13 -6
  535. package/dist/hooks/chat/use-chat-input-logic.js.map +1 -1
  536. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs +2 -0
  537. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs.map +1 -0
  538. package/dist/hooks/mutation/use-save-fields-as-secrets.d.ts +9 -0
  539. package/dist/hooks/mutation/use-save-fields-as-secrets.js +24 -0
  540. package/dist/hooks/mutation/use-save-fields-as-secrets.js.map +1 -0
  541. package/dist/hooks/mutation/use-unified-start-conversation.cjs +1 -1
  542. package/dist/hooks/mutation/use-unified-start-conversation.js +8 -8
  543. package/dist/hooks/mutation/use-unified-stop-conversation.cjs +1 -1
  544. package/dist/hooks/mutation/use-unified-stop-conversation.js +15 -15
  545. package/dist/hooks/query/use-acp-auth-status.d.ts +36 -0
  546. package/dist/hooks/query/use-agent-settings-schema.cjs +1 -1
  547. package/dist/hooks/query/use-agent-settings-schema.cjs.map +1 -1
  548. package/dist/hooks/query/use-agent-settings-schema.js +26 -16
  549. package/dist/hooks/query/use-agent-settings-schema.js.map +1 -1
  550. package/dist/hooks/query/use-backends-health.cjs +1 -1
  551. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  552. package/dist/hooks/query/use-backends-health.d.ts +2 -0
  553. package/dist/hooks/query/use-backends-health.js +31 -21
  554. package/dist/hooks/query/use-backends-health.js.map +1 -1
  555. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  556. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  557. package/dist/hooks/query/use-paginated-conversations.js +15 -14
  558. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  559. package/dist/hooks/query/use-settings.cjs +1 -1
  560. package/dist/hooks/query/use-settings.cjs.map +1 -1
  561. package/dist/hooks/query/use-settings.js +65 -52
  562. package/dist/hooks/query/use-settings.js.map +1 -1
  563. package/dist/hooks/query/use-user-conversation.cjs +1 -1
  564. package/dist/hooks/query/use-user-conversation.cjs.map +1 -1
  565. package/dist/hooks/query/use-user-conversation.js +20 -11
  566. package/dist/hooks/query/use-user-conversation.js.map +1 -1
  567. package/dist/hooks/use-agent-state.cjs +1 -1
  568. package/dist/hooks/use-agent-state.js +13 -13
  569. package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
  570. package/dist/hooks/use-conversation-name-context-menu.js +10 -10
  571. package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
  572. package/dist/hooks/use-llm-configured.d.ts +25 -0
  573. package/dist/hooks/use-runtime-is-ready.cjs +1 -1
  574. package/dist/hooks/use-runtime-is-ready.js +5 -5
  575. package/dist/i18n/declaration.cjs +1 -1
  576. package/dist/i18n/declaration.cjs.map +1 -1
  577. package/dist/i18n/declaration.d.ts +19 -1
  578. package/dist/i18n/declaration.js +1 -1
  579. package/dist/i18n/declaration.js.map +1 -1
  580. package/dist/i18n/translation.cjs +3 -3
  581. package/dist/i18n/translation.cjs.map +1 -1
  582. package/dist/i18n/translation.js +321 -15
  583. package/dist/i18n/translation.js.map +1 -1
  584. package/dist/icons/stop-circle.cjs +1 -1
  585. package/dist/icons/stop-circle.cjs.map +1 -1
  586. package/dist/icons/stop-circle.js +7 -10
  587. package/dist/icons/stop-circle.js.map +1 -1
  588. package/dist/locales/ar/openhands.json +20 -2
  589. package/dist/locales/ca/openhands.json +20 -2
  590. package/dist/locales/de/openhands.json +20 -2
  591. package/dist/locales/en/openhands.json +20 -2
  592. package/dist/locales/es/openhands.json +20 -2
  593. package/dist/locales/fr/openhands.json +20 -2
  594. package/dist/locales/it/openhands.json +20 -2
  595. package/dist/locales/ja/openhands.json +20 -2
  596. package/dist/locales/ko-KR/openhands.json +20 -2
  597. package/dist/locales/no/openhands.json +20 -2
  598. package/dist/locales/pt/openhands.json +20 -2
  599. package/dist/locales/tr/openhands.json +20 -2
  600. package/dist/locales/uk/openhands.json +20 -2
  601. package/dist/locales/zh-CN/openhands.json +20 -2
  602. package/dist/locales/zh-TW/openhands.json +20 -2
  603. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs +2 -0
  604. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs.map +1 -0
  605. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  606. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  607. package/dist/package.cjs +1 -1
  608. package/dist/package.cjs.map +1 -1
  609. package/dist/package.js +1 -1
  610. package/dist/package.js.map +1 -1
  611. package/dist/routes/conversation.cjs +1 -1
  612. package/dist/routes/conversation.cjs.map +1 -1
  613. package/dist/routes/conversation.js +1 -1
  614. package/dist/routes/conversation.js.map +1 -1
  615. package/dist/routes/llm-settings.cjs +1 -1
  616. package/dist/routes/llm-settings.cjs.map +1 -1
  617. package/dist/routes/llm-settings.js +55 -54
  618. package/dist/routes/llm-settings.js.map +1 -1
  619. package/dist/routes/secrets-settings.cjs +1 -1
  620. package/dist/routes/secrets-settings.cjs.map +1 -1
  621. package/dist/routes/secrets-settings.js +19 -27
  622. package/dist/routes/secrets-settings.js.map +1 -1
  623. package/dist/stores/conversation-store.cjs +1 -1
  624. package/dist/stores/conversation-store.cjs.map +1 -1
  625. package/dist/stores/conversation-store.d.ts +4 -0
  626. package/dist/stores/conversation-store.js +6 -0
  627. package/dist/stores/conversation-store.js.map +1 -1
  628. package/dist/types/agent-server/core/events/acp-tool-call-event.d.ts +6 -4
  629. package/dist/types/agent-server/core/events/system-event.d.ts +5 -0
  630. package/dist/types/automation.d.ts +15 -0
  631. package/dist/types/settings.d.ts +3 -1
  632. package/dist/ui/combobox-caret.cjs +1 -1
  633. package/dist/ui/combobox-caret.cjs.map +1 -1
  634. package/dist/ui/combobox-caret.d.ts +1 -1
  635. package/dist/ui/combobox-caret.js +9 -8
  636. package/dist/ui/combobox-caret.js.map +1 -1
  637. package/dist/ui/context-menu.cjs +1 -1
  638. package/dist/ui/context-menu.cjs.map +1 -1
  639. package/dist/ui/context-menu.js +9 -8
  640. package/dist/ui/context-menu.js.map +1 -1
  641. package/dist/ui/dropdown/dropdown-menu.cjs +1 -1
  642. package/dist/ui/dropdown/dropdown-menu.cjs.map +1 -1
  643. package/dist/ui/dropdown/dropdown-menu.js +21 -17
  644. package/dist/ui/dropdown/dropdown-menu.js.map +1 -1
  645. package/dist/ui/dropdown/dropdown.cjs +1 -1
  646. package/dist/ui/dropdown/dropdown.cjs.map +1 -1
  647. package/dist/ui/dropdown/dropdown.js +2 -2
  648. package/dist/ui/dropdown/dropdown.js.map +1 -1
  649. package/dist/utils/automation-schedule.d.ts +1 -0
  650. package/dist/utils/dropdown-classes.cjs +2 -0
  651. package/dist/utils/dropdown-classes.cjs.map +1 -0
  652. package/dist/utils/dropdown-classes.d.ts +32 -0
  653. package/dist/utils/dropdown-classes.js +8 -0
  654. package/dist/utils/dropdown-classes.js.map +1 -0
  655. package/dist/utils/form-control-classes.cjs +1 -1
  656. package/dist/utils/form-control-classes.cjs.map +1 -1
  657. package/dist/utils/form-control-classes.d.ts +18 -2
  658. package/dist/utils/form-control-classes.js +4 -3
  659. package/dist/utils/form-control-classes.js.map +1 -1
  660. package/dist/utils/git-control-bar-classes.cjs +2 -0
  661. package/dist/utils/git-control-bar-classes.cjs.map +1 -0
  662. package/dist/utils/git-control-bar-classes.d.ts +4 -0
  663. package/dist/utils/git-control-bar-classes.js +14 -0
  664. package/dist/utils/git-control-bar-classes.js.map +1 -0
  665. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  666. package/dist/utils/handle-event-for-ui.d.ts +6 -3
  667. package/dist/utils/handle-event-for-ui.js.map +1 -1
  668. package/dist/utils/mobile-top-bar-icon-button-classes.cjs +1 -1
  669. package/dist/utils/mobile-top-bar-icon-button-classes.cjs.map +1 -1
  670. package/dist/utils/mobile-top-bar-icon-button-classes.js +3 -3
  671. package/dist/utils/mobile-top-bar-icon-button-classes.js.map +1 -1
  672. package/dist/utils/modal-classes.cjs +2 -0
  673. package/dist/utils/modal-classes.cjs.map +1 -0
  674. package/dist/utils/modal-classes.d.ts +8 -0
  675. package/dist/utils/modal-classes.js +7 -0
  676. package/dist/utils/modal-classes.js.map +1 -0
  677. package/dist/utils/openhands-llm.cjs +2 -0
  678. package/dist/utils/openhands-llm.cjs.map +1 -0
  679. package/dist/utils/openhands-llm.d.ts +2 -0
  680. package/dist/utils/openhands-llm.js +9 -0
  681. package/dist/utils/openhands-llm.js.map +1 -0
  682. package/dist/utils/redact-custom-secrets.cjs +2 -0
  683. package/dist/utils/redact-custom-secrets.cjs.map +1 -0
  684. package/dist/utils/redact-custom-secrets.d.ts +6 -0
  685. package/dist/utils/redact-custom-secrets.js +10 -0
  686. package/dist/utils/redact-custom-secrets.js.map +1 -0
  687. package/dist/utils/status.cjs +1 -1
  688. package/dist/utils/status.cjs.map +1 -1
  689. package/dist/utils/status.d.ts +2 -1
  690. package/dist/utils/status.js +9 -8
  691. package/dist/utils/status.js.map +1 -1
  692. package/dist/utils/system-message-adapter.cjs +1 -1
  693. package/dist/utils/system-message-adapter.cjs.map +1 -1
  694. package/dist/utils/system-message-adapter.js +10 -7
  695. package/dist/utils/system-message-adapter.js.map +1 -1
  696. package/dist/utils/utils.cjs +1 -1
  697. package/dist/utils/utils.cjs.map +1 -1
  698. package/dist/utils/utils.d.ts +2 -1
  699. package/dist/utils/utils.js +21 -20
  700. package/dist/utils/utils.js.map +1 -1
  701. package/package.json +1 -1
  702. package/scripts/dev-safe.mjs +3 -1
  703. package/scripts/dev-static.mjs +2 -2
  704. package/scripts/dev-with-automation.mjs +283 -108
  705. package/scripts/static-build.mjs +20 -19
  706. package/scripts/static-server.mjs +50 -3
  707. package/build/assets/acp-providers-CbiRekh9.js +0 -1
  708. package/build/assets/active-backend-context-cCM1vYYZ.js +0 -1
  709. package/build/assets/add-backend-modal-DIUQzMPa.js +0 -1
  710. package/build/assets/agent-server-client-options-Bc5ZorQZ.js +0 -1
  711. package/build/assets/agent-server-compatibility-BlkUsrX2.js +0 -1
  712. package/build/assets/agent-server-conversation-service.api-C2V5SlHu.js +0 -5
  713. package/build/assets/api-key-entry-screen-B2gynaCp.js +0 -1
  714. package/build/assets/automation-detail-DJvbVSYK.js +0 -1
  715. package/build/assets/automations-list-6FDbI5dc.js +0 -1
  716. package/build/assets/backend-form-modal-Dnk33xA_.js +0 -1
  717. package/build/assets/base-modal-_dYTw1ri.js +0 -1
  718. package/build/assets/brand-button-Br7f0kZJ.js +0 -1
  719. package/build/assets/browser-store-Couc4S5D.js +0 -1
  720. package/build/assets/clock-BRjCgHTc.js +0 -1
  721. package/build/assets/combobox-caret-to1O8irE.js +0 -1
  722. package/build/assets/context-menu-list-item-CWNFpuiC.js +0 -1
  723. package/build/assets/conversation-DVrKU0oz.js +0 -19
  724. package/build/assets/conversation-Dlys-D5A.js +0 -1
  725. package/build/assets/conversation-panel-iF09WjZ4.js +0 -1
  726. package/build/assets/conversation-service.api-CCfztilW.js +0 -1
  727. package/build/assets/conversation-state-store-u5jepov0.js +0 -1
  728. package/build/assets/conversation-store-Z5iMCRpc.js +0 -1
  729. package/build/assets/conversation-websocket-context-DhJhqUna.js +0 -3
  730. package/build/assets/declaration-BNMqORFE.js +0 -1
  731. package/build/assets/dist-BxBP7tFD.js +0 -1
  732. package/build/assets/edit-automation-modal-BGzR3nfZ.js +0 -1
  733. package/build/assets/ellipsis-button-ZyLMPURn.js +0 -1
  734. package/build/assets/entry.client-1VMHpktY.js +0 -2
  735. package/build/assets/enum-filter-dropdown-CEgCdu4A.js +0 -1
  736. package/build/assets/extensions-hub-C651jsVh.js +0 -1
  737. package/build/assets/files-tab-R5z0lLdY.js +0 -1
  738. package/build/assets/files-tab-store-CDyVTXNT.js +0 -1
  739. package/build/assets/git-control-bar-branch-button-COdRAYHb.js +0 -27
  740. package/build/assets/git-provider-icon-BzLbc0yC.js +0 -1
  741. package/build/assets/home-e-egNUXZ.js +0 -1
  742. package/build/assets/install-server-modal-DHlbgqVH.js +0 -1
  743. package/build/assets/launch-CshDse3e.js +0 -1
  744. package/build/assets/link-external-D2POYx4c.js +0 -1
  745. package/build/assets/llm-settings-Bql-vydt.js +0 -1
  746. package/build/assets/llm-settings-C_tal6Ds.js +0 -1
  747. package/build/assets/manage-backends-modal-l7RkKfwX.js +0 -1
  748. package/build/assets/manage-workspaces-modal-DhKF_8z3.js +0 -1
  749. package/build/assets/manifest-3bf30d69.js +0 -1
  750. package/build/assets/mcp-ByeBfdfU.js +0 -9
  751. package/build/assets/messages-D0rWot7s.js +0 -36
  752. package/build/assets/proxy-CxydCnis.js +0 -1
  753. package/build/assets/root-DHeCXo9N.css +0 -1
  754. package/build/assets/root-layout-Czo9Ma6Q.js +0 -2
  755. package/build/assets/secrets-service-BsnKFc2x.js +0 -1
  756. package/build/assets/secrets-settings-Bz_UohPJ.js +0 -1
  757. package/build/assets/settings-client-C73C7IgV.js +0 -1
  758. package/build/assets/settings-index-Dz0BmdJD.js +0 -1
  759. package/build/assets/settings-list-classes-Bf80tWtc.js +0 -1
  760. package/build/assets/settings-modal-Brzgh5Yw.js +0 -1
  761. package/build/assets/settings-service.api-CZ3uWx4v.js +0 -1
  762. package/build/assets/sidebar-mobile-menu-toggle-Do_aA9Zm.js +0 -1
  763. package/build/assets/skills-settings-DlA5hlXw.js +0 -2
  764. package/build/assets/status-hp6M6E7E.js +0 -1
  765. package/build/assets/use-agent-settings-schema-33Un7UF2.js +0 -1
  766. package/build/assets/use-is-authed-BggE5wPj.js +0 -1
  767. package/build/assets/use-llm-profiles-DDOol3gK.js +0 -1
  768. package/build/assets/use-runtime-is-ready-B7EF4BKU.js +0 -1
  769. package/build/assets/use-settings-DQIZmIov.js +0 -1
  770. package/build/assets/use-user-conversation-C6hrMMtn.js +0 -1
  771. package/build/assets/utils-i18rdUj2.js +0 -1
  772. package/build/assets/vendor~conversation-panel~conversation-a9SyrrhV.js +0 -1
  773. package/build/assets/vendor~conversation-panel~conversation~index-C23ZXO4R.js +0 -1
  774. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-BebWhFNT.js +0 -1
  775. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DzIXV3Ui.js +0 -9
  776. /package/build/assets/{automation-IdgZq6ZK.js → automation-XDPAjiZi.js} +0 -0
  777. /package/build/assets/{color-themes-DSaoIL6A.js → color-themes-B9pm9c-R.js} +0 -0
  778. /package/build/assets/{common-DR1t-EeP.js → common-DqjLSBOt.js} +0 -0
  779. /package/build/assets/{conversation-local-storage-UYl-SX-r.js → conversation-local-storage-YmOVXxxW.js} +0 -0
  780. /package/build/assets/{dist-C6t0EXL7.js → dist-C3NfioQC.js} +0 -0
  781. /package/build/assets/{environment-switch-store-C4ulFJKp.js → environment-switch-store-CiurvTtK.js} +0 -0
  782. /package/build/assets/{health-store-BDC2rM-X.js → health-store-B5f0S2FY.js} +0 -0
  783. /package/build/assets/{map-provider-COBVzZYo.js → map-provider-BJ_8KZKU.js} +0 -0
  784. /package/build/assets/{middleware-BC9EwbB9.js → middleware-CfatjPYZ.js} +0 -0
  785. /package/build/assets/{objectWithoutPropertiesLoose-Du6eBn-V.js → objectWithoutPropertiesLoose-DSQKyRhw.js} +0 -0
  786. /package/build/assets/{react-Do0CT17Y.js → react-Dy05vyj5.js} +0 -0
  787. /package/build/assets/{sdk-settings-field-metadata-CBPmeqYa.js → sdk-settings-field-metadata-DQiaIBie.js} +0 -0
  788. /package/build/assets/{settings-D_H-qsRm.js → settings-DGY6n4J2.js} +0 -0
  789. /package/build/assets/{settings-like-page-layout-classes-I0BDBEoq.js → settings-like-page-layout-classes-D7YjdTd0.js} +0 -0
  790. /package/build/assets/{use-breakpoint-DbJ6FkQ-.js → use-breakpoint-DF_RiQ6s.js} +0 -0
  791. /package/build/assets/{use-click-outside-element-DffgWWoZ.js → use-click-outside-element-DhxCUyWl.js} +0 -0
  792. /package/build/assets/{v4-CNn21NXa.js → v4-khGvL7i2.js} +0 -0
  793. /package/build/assets/{vendor~browser-DDiZgqD3.js → vendor~browser-DisFGEp9.js} +0 -0
  794. /package/build/assets/{vendor~browser-tab-BgwV1mxF.js → vendor~browser-tab-BxhTtM9_.js} +0 -0
  795. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DbvX3OcM.js → vendor~conversation-panel~conversation~alert-banner-w-I2sY6c.js} +0 -0
  796. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-iOsylxCS.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-BClAMeFe.js} +0 -0
  797. /package/build/assets/{vendor~files-tab-BGKayPiK.js → vendor~files-tab-BtkpAiMX.js} +0 -0
  798. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BW6261Sb.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CyZ-3lDQ.js} +0 -0
  799. /package/build/assets/{vendor~home~mcp~automations-list-DoPfwaXj.js → vendor~home~mcp~automations-list-BgV86Sti.js} +0 -0
  800. /package/build/assets/{vendor~launch-vdeRTWFu.js → vendor~launch-BXgl67Re.js} +0 -0
  801. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-D9P8e98a.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-CLlsvdNP.js} +0 -0
  802. /package/build/assets/{vendor~terminal-DUrOWGFE.js → vendor~terminal-DZaJIY8A.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-as-secret-toggle.js","names":[],"sources":["../../../../src/components/features/mcp-page/save-as-secret-toggle.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { I18nKey } from \"#/i18n/declaration\";\n\ninterface SaveAsSecretToggleProps {\n fieldKey: string;\n checked: boolean;\n onToggle: (value: boolean) => void;\n}\n\nexport function SaveAsSecretToggle({\n fieldKey,\n checked,\n onToggle,\n}: SaveAsSecretToggleProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <label\n data-testid={`mcp-install-save-secret-${fieldKey}`}\n className={cn(\n \"flex items-center gap-2 px-3 py-2 mt-0.5 rounded-lg border cursor-pointer transition-colors\",\n checked\n ? \"border-green-500/35 bg-green-500/10\"\n : \"border-[var(--oh-border)] bg-transparent hover:bg-white/[0.03]\",\n )}\n >\n {/* sr-only keeps the real checkbox in the accessibility tree so AT\n users can toggle it without seeing the custom visual track. */}\n <input\n className=\"sr-only\"\n id={`mcp-save-secret-checkbox-${fieldKey}`}\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onToggle(e.target.checked)}\n />\n {/* aria-hidden: purely decorative — the checkbox above is the semantic control. */}\n <span\n aria-hidden=\"true\"\n className={cn(\n \"relative inline-flex h-[22px] w-[40px] shrink-0 items-center rounded-full border transition-colors duration-200\",\n checked\n ? \"border-green-500 bg-green-500\"\n : \"border-[var(--oh-border)] bg-surface-raised\",\n )}\n >\n <span\n className={cn(\n \"inline-block size-4 rounded-full transition-transform duration-200\",\n checked\n ? \"translate-x-[21px] bg-white\"\n : \"translate-x-[2px] bg-[var(--oh-muted)]\",\n )}\n />\n </span>\n <span className=\"text-sm\">{t(I18nKey.MCP$ALSO_SAVE_AS_SECRET)}</span>\n <code\n className={cn(\n \"ml-auto text-[11px] font-mono tracking-tight border rounded px-1.5 py-0.5\",\n checked\n ? \"text-green-500 border-green-500/35 bg-white/[0.04]\"\n : \"text-tertiary-alt border-[var(--oh-border)]\",\n )}\n >\n {fieldKey}\n </code>\n <StyledTooltip\n content={t(I18nKey.MCP$SAVE_AS_SECRET_TOOLTIP)}\n placement=\"top\"\n >\n {/* button so the tooltip is keyboard-reachable; type=button prevents\n accidental form submission when the user presses Enter. */}\n <button\n type=\"button\"\n aria-label={t(I18nKey.MCP$SAVE_AS_SECRET_TOOLTIP)}\n className=\"flex items-center justify-center size-[15px] shrink-0 rounded-full border border-[var(--oh-muted)] text-tertiary-alt text-[9px] font-bold cursor-help\"\n onClick={(e) => e.preventDefault()}\n >\n ?\n </button>\n </StyledTooltip>\n </label>\n );\n}\n"],"mappings":";;;;;;AAWA,SAAgB,EAAmB,EACjC,aACA,YACA,eAC0B;CAC1B,IAAM,EAAE,SAAM,EAAe,YAAY;AAEzC,QACE,kBAAC,SAAD;EACE,eAAa,2BAA2B;EACxC,WAAW,EACT,+FACA,IACI,wCACA,iEACL;YAPH;GAWE,kBAAC,SAAD;IACE,WAAU;IACV,IAAI,4BAA4B;IAChC,MAAK;IACI;IACT,WAAW,MAAM,EAAS,EAAE,OAAO,QAAQ;IAC3C,CAAA;GAEF,kBAAC,QAAD;IACE,eAAY;IACZ,WAAW,EACT,mHACA,IACI,kCACA,8CACL;cAED,kBAAC,QAAD,EACE,WAAW,EACT,sEACA,IACI,gCACA,yCACL,EACD,CAAA;IACG,CAAA;GACP,kBAAC,QAAD;IAAM,WAAU;cAAW,EAAE,EAAQ,wBAAwB;IAAQ,CAAA;GACrE,kBAAC,QAAD;IACE,WAAW,EACT,6EACA,IACI,uDACA,8CACL;cAEA;IACI,CAAA;GACP,kBAAC,GAAD;IACE,SAAS,EAAE,EAAQ,2BAA2B;IAC9C,WAAU;cAIV,kBAAC,UAAD;KACE,MAAK;KACL,cAAY,EAAE,EAAQ,2BAA2B;KACjD,WAAU;KACV,UAAU,MAAM,EAAE,gBAAgB;eACnC;KAEQ,CAAA;IACK,CAAA;GACV"}
@@ -6,8 +6,8 @@ interface OnboardingModalProps {
6
6
  * Top-level onboarding modal for first-time users.
7
7
  *
8
8
  * The flow is a fixed sequence of four steps:
9
- * 0. Choose agent
10
- * 1. Check backend
9
+ * 0. Check backend
10
+ * 1. Choose agent
11
11
  * 2. Set up LLM
12
12
  * 3. Say hello (creates a fresh conversation, then closes)
13
13
  *
@@ -1,5 +1,5 @@
1
1
  interface CheckBackendStepProps {
2
- onBack: () => void;
2
+ onBack?: () => void;
3
3
  onNext: () => void;
4
4
  }
5
5
  /**
@@ -6,7 +6,8 @@ export declare function AgentOptionIcon({ id, muted }: {
6
6
  interface ChooseAgentStepProps {
7
7
  selectedAgentId: OnboardingAgentId;
8
8
  onSelect: (agentId: OnboardingAgentId) => void;
9
+ onBack?: () => void;
9
10
  onNext: () => void;
10
11
  }
11
- export declare function ChooseAgentStep({ selectedAgentId, onSelect, onNext, }: ChooseAgentStepProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function ChooseAgentStep({ selectedAgentId, onSelect, onBack, onNext, }: ChooseAgentStepProps): import("react/jsx-runtime").JSX.Element;
12
13
  export {};
@@ -3,25 +3,34 @@ interface SetupAcpSecretsStepProps {
3
3
  /** ACP provider whose credentials we're collecting (e.g. ``"claude-code"``).
4
4
  * Typed as {@link OnboardingAgentId} — the same type the onboarding modal
5
5
  * tracks — so a mistyped key is a compile error rather than a silently empty
6
- * form. Providers without a credentials entry (``"openhands"``,
7
- * ``"gemini-cli"``) simply yield no fields. */
6
+ * form. Providers without a credentials entry (``"openhands"``) simply yield
7
+ * no fields. */
8
8
  providerKey: OnboardingAgentId;
9
+ /**
10
+ * Whether this is the currently visible onboarding slide. The modal mounts
11
+ * every slide at once, so we only run the (subprocess-spinning) login probe
12
+ * once the user has actually reached this step — by which point the backend
13
+ * is confirmed connected.
14
+ */
15
+ isActive: boolean;
9
16
  onBack: () => void;
10
17
  onNext: () => void;
11
18
  }
12
19
  /**
13
- * Onboarding credentials step for ACP providers that authenticate via an
14
- * env-var API key (Claude Code, Codex). The fields are derived from
20
+ * Onboarding credentials step for ACP providers that expose an env-var API key
21
+ * (Claude Code, Codex, Gemini CLI). The fields are derived from
15
22
  * {@link getAcpProviderSecrets}; each one maps 1:1 to a **global secret**
16
23
  * whose name equals the env var the agent-server exports into the provider
17
24
  * subprocess. Saving here is therefore the same as adding the secret under
18
25
  * Settings → Secrets — it shows up there afterwards.
19
26
  *
20
- * The step is intentionally skippable: a user may authenticate Claude Code via
21
- * a subscription login, or already have the env var set on the backend, so we
22
- * never block "Next" on a value. Empty fields are simply not written; a field
23
- * whose secret already exists shows an "already saved" placeholder and is left
24
- * untouched unless the user types a replacement.
27
+ * The step is intentionally skippable: a user may authenticate via a
28
+ * subscription / OAuth login (a Claude login, or Gemini's Google login), or
29
+ * already have the env var set on the backend, so we never block "Next" on a
30
+ * value and the login probe shows a "you're already signed in" banner when it
31
+ * detects one. Empty fields are simply not written; a field whose secret
32
+ * already exists shows an "already saved" placeholder and is left untouched
33
+ * unless the user types a replacement.
25
34
  */
26
- export declare function SetupAcpSecretsStep({ providerKey, onBack, onNext, }: SetupAcpSecretsStepProps): import("react/jsx-runtime").JSX.Element;
35
+ export declare function SetupAcpSecretsStep({ providerKey, isActive, onBack, onNext, }: SetupAcpSecretsStepProps): import("react/jsx-runtime").JSX.Element;
27
36
  export {};
@@ -1 +1 @@
1
- const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/custom-toast-handlers.cjs`),require(`../../../../api/profiles-service/profiles-service.api.cjs`),require(`../../../../hooks/query/use-llm-profiles.cjs`),require(`../../../../hooks/query/use-settings.cjs`),require(`../../../../ui/typography.cjs`),require(`../brand-button.cjs`),require(`../../../../hooks/query/use-agent-settings-schema.cjs`),require(`./profile-name-input.cjs`),require(`./llm-profiles-manager.cjs`),require(`../../../../hooks/mutation/use-save-llm-profile.cjs`),require(`../../../../contexts/settings-section-header-context.cjs`),require(`../../../../routes/llm-settings.cjs`);let t=require(`react`);t=e.__toESM(t,1),require(`react/jsx-runtime`);
1
+ const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/custom-toast-handlers.cjs`),require(`../../../../api/profiles-service/profiles-service.api.cjs`),require(`../../../../hooks/query/use-llm-profiles.cjs`),require(`../../../../hooks/query/use-settings.cjs`),require(`../../../../ui/typography.cjs`),require(`../brand-button.cjs`),require(`../../../../hooks/query/use-agent-settings-schema.cjs`),require(`./profile-name-input.cjs`),require(`../../../../hooks/mutation/use-activate-llm-profile.cjs`),require(`./llm-profiles-manager.cjs`),require(`../../../../hooks/mutation/use-save-llm-profile.cjs`),require(`../../../shared/buttons/back-nav-button.cjs`),require(`../../../../contexts/settings-section-header-context.cjs`),require(`../../../../routes/llm-settings.cjs`);let t=require(`react`);t=e.__toESM(t,1),require(`react/jsx-runtime`);
@@ -1,3 +1,8 @@
1
+ export declare function shouldReapplyProfileAfterSave({ activeProfileName, originalName, savedName, }: {
2
+ activeProfileName: string | null | undefined;
3
+ originalName: string | null | undefined;
4
+ savedName: string;
5
+ }): boolean;
1
6
  /**
2
7
  * LlmSettingsLocalView provides an integrated view for managing LLM profiles
3
8
  * in local agent-server mode. It supports listing, creating, and editing profiles.
@@ -6,8 +6,10 @@ import "../../../../ui/typography.js";
6
6
  import "../brand-button.js";
7
7
  import "../../../../hooks/query/use-agent-settings-schema.js";
8
8
  import "./profile-name-input.js";
9
+ import "../../../../hooks/mutation/use-activate-llm-profile.js";
9
10
  import "./llm-profiles-manager.js";
10
11
  import "../../../../hooks/mutation/use-save-llm-profile.js";
12
+ import "../../../shared/buttons/back-nav-button.js";
11
13
  import "../../../../contexts/settings-section-header-context.js";
12
14
  import "../../../../routes/llm-settings.js";
13
15
  import "react";
@@ -1 +1 @@
1
- const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/utils.cjs`),require(`../../../../icons/u-check-circle.cjs`),require(`../../../../icons/u-edit.cjs`),require(`../../../../icons/u-delete.cjs`),require(`../../conversation/conversation-name-context-menu-icon-text.cjs`),require(`react`),require(`react/jsx-runtime`);let t=require(`react-dom`);t=e.__toESM(t,1);
1
+ const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/utils.cjs`),require(`../../../../utils/dropdown-classes.cjs`),require(`../../../../icons/u-check-circle.cjs`),require(`../../../../icons/u-edit.cjs`),require(`../../../../icons/u-delete.cjs`),require(`../../conversation/conversation-name-context-menu-icon-text.cjs`),require(`react`),require(`react/jsx-runtime`);let t=require(`react-dom`);t=e.__toESM(t,1);
@@ -1,4 +1,5 @@
1
1
  import "../../../../utils/utils.js";
2
+ import "../../../../utils/dropdown-classes.js";
2
3
  import "../../../../icons/u-check-circle.js";
3
4
  import "../../../../icons/u-edit.js";
4
5
  import "../../../../icons/u-delete.js";
@@ -1,2 +1,2 @@
1
- require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../utils/utils.cjs`),r=require(`../../../constants/acp-providers.cjs`),i=require(`../../shared/buttons/styled-tooltip.cjs`),a=require(`../../../hooks/query/use-settings.cjs`),o=require(`../../shared/navigation-link.cjs`),s=require(`../../../icons/skills.cjs`),c=require(`../../../hooks/use-breakpoint.cjs`),l=require(`../sidebar/sidebar-layout.cjs`),u=require(`../settings/backend-synced-settings-badge.cjs`),d=require(`../../../icons/server-process.cjs`),f=require(`../../../stores/sidebar-store.cjs`);let p=require(`react/jsx-runtime`);var m=[{to:`/skills`,label:`Skills`,icon:(0,p.jsx)(s.default,{width:16,height:16,"aria-hidden":`true`}),end:!0},{to:`/mcp`,label:`MCP Servers`,icon:(0,p.jsx)(d.default,{width:16,height:16}),end:!0,disabledByAcp:!0},{to:`/plugins`,label:`Plugins`,icon:(0,p.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,width:16,height:16,"aria-hidden":`true`,children:[(0,p.jsx)(`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}),(0,p.jsx)(`path`,{d:`m3.3 7 8.7 5 8.7-5`}),(0,p.jsx)(`path`,{d:`M12 22V12`})]}),end:!0,comingSoon:!0}];function h(){let{t:s}=e.useTranslation(`openhands`),{data:d}=a.useSettings(),h=f.useSidebarStore(e=>e.collapsed),g=c.useBreakpoint(1023),_=c.useBreakpoint(767),v=!h&&g&&!_,y=d?.agent_settings?.agent_kind===`acp`,b=typeof d?.agent_settings?.acp_server==`string`?d.agent_settings.acp_server:void 0,x=y?r.ACP_PROVIDERS.find(({key:e})=>e===b)?.display_name??`ACP Agent`:void 0;return v?null:(0,p.jsxs)(`aside`,{"data-testid":`extensions-navbar-desktop`,className:`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start`,children:[(0,p.jsx)(`span`,{className:`px-2 text-sm font-normal text-white`,children:s(t.I18nKey.NAV$EXTENSIONS)}),(0,p.jsx)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:m.map(e=>{let r=!!(y&&e.disabledByAcp),a=(0,p.jsx)(`span`,{className:`shrink-0 flex items-center justify-center`,children:e.icon}),c=(0,p.jsx)(`span`,{className:`truncate`,children:e.label}),u=e.comingSoon&&(0,p.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]`,children:s(t.I18nKey.NAV$COMING_SOON)});return r?(0,p.jsx)(i.StyledTooltip,{content:s(t.I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP,{agentName:x}),placement:`right`,children:(0,p.jsxs)(`span`,{"aria-disabled":`true`,"data-testid":`sidebar-extensions-${e.to}`,className:n.cn(l.sidebarNavRowClassName(),`truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed`),children:[a,c,u]})},e.to):(0,p.jsxs)(o.NavigationLink,{to:e.to,end:e.end,"data-testid":`sidebar-extensions-${e.to}`,className:({isActive:e})=>n.cn(l.sidebarNavRowClassName(),`truncate`,e?l.SIDEBAR_ROW_INTERACTIVE_CLASS.active:l.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[a,c,u]},e.to)})}),(0,p.jsx)(`div`,{className:`px-2 pt-3`,children:(0,p.jsx)(u.BackendSyncedSettingsBadge,{})})]})}exports.ExtensionsNavigation=h;
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../utils/utils.cjs`),r=require(`../../../constants/acp-providers.cjs`),i=require(`../../shared/buttons/styled-tooltip.cjs`),a=require(`../../../hooks/query/use-settings.cjs`),o=require(`../../shared/navigation-link.cjs`),s=require(`../../../icons/skills.cjs`),c=require(`../../../hooks/use-breakpoint.cjs`),l=require(`../sidebar/sidebar-layout.cjs`),u=require(`../settings/backend-synced-settings-badge.cjs`),d=require(`../../../icons/server-process.cjs`),f=require(`../../../stores/sidebar-store.cjs`);let p=require(`react/jsx-runtime`);var m=[{to:`/skills`,label:`Skills`,icon:(0,p.jsx)(s.default,{width:16,height:16,"aria-hidden":`true`}),end:!0},{to:`/mcp`,label:`MCP Servers`,icon:(0,p.jsx)(d.default,{width:16,height:16}),end:!0,disabledByAcp:!0},{to:`/plugins`,label:`Plugins`,icon:(0,p.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,width:16,height:16,"aria-hidden":`true`,children:[(0,p.jsx)(`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}),(0,p.jsx)(`path`,{d:`m3.3 7 8.7 5 8.7-5`}),(0,p.jsx)(`path`,{d:`M12 22V12`})]}),end:!0,comingSoon:!0}];function h(){let{t:s}=e.useTranslation(`openhands`),{data:d}=a.useSettings(),h=f.useSidebarStore(e=>e.collapsed),g=c.useBreakpoint(1023),_=c.useBreakpoint(767),v=!h&&g&&!_,y=d?.agent_settings?.agent_kind===`acp`,b=typeof d?.agent_settings?.acp_server==`string`?d.agent_settings.acp_server:void 0,x=y?r.ACP_PROVIDERS.find(({key:e})=>e===b)?.display_name??`ACP Agent`:void 0;return v?null:(0,p.jsxs)(`aside`,{"data-testid":`extensions-navbar-desktop`,className:`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start`,children:[(0,p.jsx)(`span`,{className:`px-2 text-sm font-normal text-white`,children:s(t.I18nKey.NAV$CUSTOMIZE)}),(0,p.jsx)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:m.map(e=>{let r=!!(y&&e.disabledByAcp),a=(0,p.jsx)(`span`,{className:`shrink-0 flex items-center justify-center`,children:e.icon}),c=(0,p.jsx)(`span`,{className:`truncate`,children:e.label}),u=e.comingSoon&&(0,p.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]`,children:s(t.I18nKey.NAV$COMING_SOON)});return r?(0,p.jsx)(i.StyledTooltip,{content:s(t.I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP,{agentName:x}),placement:`right`,children:(0,p.jsxs)(`span`,{"aria-disabled":`true`,"data-testid":`sidebar-extensions-${e.to}`,className:n.cn(l.sidebarNavRowClassName(),`truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed`),children:[a,c,u]})},e.to):(0,p.jsxs)(o.NavigationLink,{to:e.to,end:e.end,"data-testid":`sidebar-extensions-${e.to}`,className:({isActive:e})=>n.cn(l.sidebarNavRowClassName(),`truncate`,e?l.SIDEBAR_ROW_INTERACTIVE_CLASS.active:l.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[a,c,u]},e.to)})}),(0,p.jsx)(`div`,{className:`px-2 pt-3`,children:(0,p.jsx)(u.BackendSyncedSettingsBadge,{})})]})}exports.ExtensionsNavigation=h;
2
2
  //# sourceMappingURL=extensions-navigation.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions-navigation.cjs","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { ACP_PROVIDERS } from \"#/constants/acp-providers\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n /**\n * When true, this item greys out (and the /route's ``clientLoader``\n * bounces to ``/settings/agent``) while an ACP agent is active.\n * The ACP sub-agent manages its own MCP servers; the SDK rejects\n * ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-\n * side editor would silently no-op against the running subprocess.\n */\n disabledByAcp?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n disabledByAcp: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings } = useSettings();\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n const isAcpAgent = settings?.agent_settings?.agent_kind === \"acp\";\n const acpServerKey =\n typeof settings?.agent_settings?.acp_server === \"string\"\n ? settings.agent_settings.acp_server\n : undefined;\n const acpServerName = isAcpAgent\n ? (ACP_PROVIDERS.find(({ key }) => key === acpServerKey)?.display_name ??\n \"ACP Agent\")\n : undefined;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$EXTENSIONS)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const disabled = !!(isAcpAgent && item.disabledByAcp);\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (disabled) {\n // Render a non-clickable surrogate so the URL and a11y tree\n // both communicate \"you can't go here right now,\" then wrap\n // in StyledTooltip for the why. Mirrors the SettingsNavLink\n // disabled rendering — same flag (``disabledByAcp``), same\n // explanatory tooltip (\"Disabled while {agentName} is the\n // active agent\"), same greyed styles.\n return (\n <StyledTooltip\n key={item.to}\n content={t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: acpServerName,\n })}\n placement=\"right\"\n >\n <span\n aria-disabled=\"true\"\n data-testid={`sidebar-extensions-${item.to}`}\n className={cn(\n sidebarNavRowClassName(),\n \"truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed\",\n )}\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </span>\n </StyledTooltip>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"2tBAiCA,IAAa,EAA2C,CACtD,CACE,GAAI,UACJ,MAAO,SACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,MAAO,GAAI,OAAQ,GAAI,cAAY,OAAS,CAAA,CAC9D,IAAK,GACN,CACD,CACE,GAAI,OACJ,MAAO,cACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAmB,MAAO,GAAI,OAAQ,GAAM,CAAA,CAClD,IAAK,GACL,cAAe,GAChB,CACD,CACE,GAAI,WACJ,MAAO,UACP,MACE,EAAA,EAAA,MAAC,MAAD,CACE,MAAM,6BACN,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,MAAO,GACP,OAAQ,GACR,cAAY,gBAVd,EAYE,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,yHAA2H,CAAA,EACnI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,qBAAuB,CAAA,EAC/B,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,YAAc,CAAA,CAClB,GAER,IAAK,GACL,WAAY,GACb,CACF,CAED,SAAgB,GAAuB,CACrC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,CAAE,KAAM,GAAa,EAAA,aAAa,CAClC,EAAmB,EAAA,gBAAiB,GAAU,EAAM,UAAU,CAI9D,EAAU,EAAA,cAAc,KAAK,CAC7B,EAAU,EAAA,cAAc,IAAI,CAC5B,EAAyB,CAAC,GAAoB,GAAW,CAAC,EAC1D,EAAa,GAAU,gBAAgB,aAAe,MACtD,EACJ,OAAO,GAAU,gBAAgB,YAAe,SAC5C,EAAS,eAAe,WACxB,IAAA,GACA,EAAgB,EACjB,EAAA,cAAc,MAAM,CAAE,SAAU,IAAQ,EAAa,EAAE,cACxD,YACA,IAAA,GAIJ,OAFI,EAA+B,MAGjC,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,4BACZ,UAAU,yGAFZ,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+CACb,EAAE,EAAA,QAAQ,eAAe,CACrB,CAAA,EACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCACZ,EAAqB,IAAK,GAAS,CAClC,IAAM,EAAW,CAAC,EAAE,GAAc,EAAK,eACjC,GACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qDACb,EAAK,KACD,CAAA,CAEH,GAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,MAAa,CAAA,CACtD,EAAkB,EAAK,aAC3B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2IACb,EAAE,EAAA,QAAQ,gBAAgB,CACtB,CAAA,CAkCT,OA/BI,GAQA,EAAA,EAAA,KAAC,EAAA,cAAD,CAEE,QAAS,EAAE,EAAA,QAAQ,gCAAiC,CAClD,UAAW,EACZ,CAAC,CACF,UAAU,kBAEV,EAAA,EAAA,MAAC,OAAD,CACE,gBAAc,OACd,cAAa,sBAAsB,EAAK,KACxC,UAAW,EAAA,GACT,EAAA,wBAAwB,CACxB,gEACD,UANH,CAQG,EACA,EACA,EACI,GACO,CAlBT,EAAK,GAkBI,EAKlB,EAAA,EAAA,MAAC,EAAA,eAAD,CAEE,GAAI,EAAK,GACT,IAAK,EAAK,IACV,cAAa,sBAAsB,EAAK,KACxC,WAAY,CAAE,cACZ,EAAA,GACE,EAAA,wBAAwB,CACxB,WACA,EACI,EAAA,8BAA8B,OAC9B,EAAA,8BAA8B,KACnC,UAZL,CAeG,EACA,EACA,EACc,EAjBV,EAAK,GAiBK,EAEnB,CACE,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,EAA8B,CAAA,CAC1B,CAAA,CACA"}
1
+ {"version":3,"file":"extensions-navigation.cjs","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { ACP_PROVIDERS } from \"#/constants/acp-providers\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n /**\n * When true, this item greys out (and the /route's ``clientLoader``\n * bounces to ``/settings/agent``) while an ACP agent is active.\n * The ACP sub-agent manages its own MCP servers; the SDK rejects\n * ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-\n * side editor would silently no-op against the running subprocess.\n */\n disabledByAcp?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n disabledByAcp: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings } = useSettings();\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n const isAcpAgent = settings?.agent_settings?.agent_kind === \"acp\";\n const acpServerKey =\n typeof settings?.agent_settings?.acp_server === \"string\"\n ? settings.agent_settings.acp_server\n : undefined;\n const acpServerName = isAcpAgent\n ? (ACP_PROVIDERS.find(({ key }) => key === acpServerKey)?.display_name ??\n \"ACP Agent\")\n : undefined;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const disabled = !!(isAcpAgent && item.disabledByAcp);\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (disabled) {\n // Render a non-clickable surrogate so the URL and a11y tree\n // both communicate \"you can't go here right now,\" then wrap\n // in StyledTooltip for the why. Mirrors the SettingsNavLink\n // disabled rendering — same flag (``disabledByAcp``), same\n // explanatory tooltip (\"Disabled while {agentName} is the\n // active agent\"), same greyed styles.\n return (\n <StyledTooltip\n key={item.to}\n content={t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: acpServerName,\n })}\n placement=\"right\"\n >\n <span\n aria-disabled=\"true\"\n data-testid={`sidebar-extensions-${item.to}`}\n className={cn(\n sidebarNavRowClassName(),\n \"truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed\",\n )}\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </span>\n </StyledTooltip>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"2tBAiCA,IAAa,EAA2C,CACtD,CACE,GAAI,UACJ,MAAO,SACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,MAAO,GAAI,OAAQ,GAAI,cAAY,OAAS,CAAA,CAC9D,IAAK,GACN,CACD,CACE,GAAI,OACJ,MAAO,cACP,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAmB,MAAO,GAAI,OAAQ,GAAM,CAAA,CAClD,IAAK,GACL,cAAe,GAChB,CACD,CACE,GAAI,WACJ,MAAO,UACP,MACE,EAAA,EAAA,MAAC,MAAD,CACE,MAAM,6BACN,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,MAAO,GACP,OAAQ,GACR,cAAY,gBAVd,EAYE,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,yHAA2H,CAAA,EACnI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,qBAAuB,CAAA,EAC/B,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,YAAc,CAAA,CAClB,GAER,IAAK,GACL,WAAY,GACb,CACF,CAED,SAAgB,GAAuB,CACrC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,CAAE,KAAM,GAAa,EAAA,aAAa,CAClC,EAAmB,EAAA,gBAAiB,GAAU,EAAM,UAAU,CAI9D,EAAU,EAAA,cAAc,KAAK,CAC7B,EAAU,EAAA,cAAc,IAAI,CAC5B,EAAyB,CAAC,GAAoB,GAAW,CAAC,EAC1D,EAAa,GAAU,gBAAgB,aAAe,MACtD,EACJ,OAAO,GAAU,gBAAgB,YAAe,SAC5C,EAAS,eAAe,WACxB,IAAA,GACA,EAAgB,EACjB,EAAA,cAAc,MAAM,CAAE,SAAU,IAAQ,EAAa,EAAE,cACxD,YACA,IAAA,GAIJ,OAFI,EAA+B,MAGjC,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,4BACZ,UAAU,yGAFZ,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+CACb,EAAE,EAAA,QAAQ,cAAc,CACpB,CAAA,EACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wCACZ,EAAqB,IAAK,GAAS,CAClC,IAAM,EAAW,CAAC,EAAE,GAAc,EAAK,eACjC,GACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qDACb,EAAK,KACD,CAAA,CAEH,GAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAK,MAAa,CAAA,CACtD,EAAkB,EAAK,aAC3B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2IACb,EAAE,EAAA,QAAQ,gBAAgB,CACtB,CAAA,CAkCT,OA/BI,GAQA,EAAA,EAAA,KAAC,EAAA,cAAD,CAEE,QAAS,EAAE,EAAA,QAAQ,gCAAiC,CAClD,UAAW,EACZ,CAAC,CACF,UAAU,kBAEV,EAAA,EAAA,MAAC,OAAD,CACE,gBAAc,OACd,cAAa,sBAAsB,EAAK,KACxC,UAAW,EAAA,GACT,EAAA,wBAAwB,CACxB,gEACD,UANH,CAQG,EACA,EACA,EACI,GACO,CAlBT,EAAK,GAkBI,EAKlB,EAAA,EAAA,MAAC,EAAA,eAAD,CAEE,GAAI,EAAK,GACT,IAAK,EAAK,IACV,cAAa,sBAAsB,EAAK,KACxC,WAAY,CAAE,cACZ,EAAA,GACE,EAAA,wBAAwB,CACxB,WACA,EACI,EAAA,8BAA8B,OAC9B,EAAA,8BAA8B,KACnC,UAZL,CAeG,EACA,EACA,EACc,EAjBV,EAAK,GAiBK,EAEnB,CACE,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,EAA8B,CAAA,CAC1B,CAAA,CACA"}
@@ -66,7 +66,7 @@ function _() {
66
66
  children: [
67
67
  /* @__PURE__ */ m("span", {
68
68
  className: "px-2 text-sm font-normal text-white",
69
- children: s(t.NAV$EXTENSIONS)
69
+ children: s(t.NAV$CUSTOMIZE)
70
70
  }),
71
71
  /* @__PURE__ */ m("div", {
72
72
  className: "flex flex-col gap-0.5 pt-0.5",
@@ -1 +1 @@
1
- {"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { ACP_PROVIDERS } from \"#/constants/acp-providers\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n /**\n * When true, this item greys out (and the /route's ``clientLoader``\n * bounces to ``/settings/agent``) while an ACP agent is active.\n * The ACP sub-agent manages its own MCP servers; the SDK rejects\n * ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-\n * side editor would silently no-op against the running subprocess.\n */\n disabledByAcp?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n disabledByAcp: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings } = useSettings();\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n const isAcpAgent = settings?.agent_settings?.agent_kind === \"acp\";\n const acpServerKey =\n typeof settings?.agent_settings?.acp_server === \"string\"\n ? settings.agent_settings.acp_server\n : undefined;\n const acpServerName = isAcpAgent\n ? (ACP_PROVIDERS.find(({ key }) => key === acpServerKey)?.display_name ??\n \"ACP Agent\")\n : undefined;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$EXTENSIONS)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const disabled = !!(isAcpAgent && item.disabledByAcp);\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (disabled) {\n // Render a non-clickable surrogate so the URL and a11y tree\n // both communicate \"you can't go here right now,\" then wrap\n // in StyledTooltip for the why. Mirrors the SettingsNavLink\n // disabled rendering — same flag (``disabledByAcp``), same\n // explanatory tooltip (\"Disabled while {agentName} is the\n // active agent\"), same greyed styles.\n return (\n <StyledTooltip\n key={item.to}\n content={t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: acpServerName,\n })}\n placement=\"right\"\n >\n <span\n aria-disabled=\"true\"\n data-testid={`sidebar-extensions-${item.to}`}\n className={cn(\n sidebarNavRowClassName(),\n \"truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed\",\n )}\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </span>\n </StyledTooltip>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiCA,IAAa,IAA2C;CACtD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAY,OAAO;GAAI,QAAQ;GAAI,eAAY;GAAS,CAAA;EAC9D,KAAK;EACN;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAmB,OAAO;GAAI,QAAQ;GAAM,CAAA;EAClD,KAAK;EACL,eAAe;EAChB;CACD;EACE,IAAI;EACJ,OAAO;EACP,MACE,kBAAC,OAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAK;GACL,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,OAAO;GACP,QAAQ;GACR,eAAY;aAVd;IAYE,kBAAC,QAAD,EAAM,GAAE,0HAA2H,CAAA;IACnI,kBAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;IAC/B,kBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;IAClB;;EAER,KAAK;EACL,YAAY;EACb;CACF;AAED,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,MAAa,GAAa,EAClC,IAAmB,GAAiB,MAAU,EAAM,UAAU,EAI9D,IAAU,EAAc,KAAK,EAC7B,IAAU,EAAc,IAAI,EAC5B,IAAyB,CAAC,KAAoB,KAAW,CAAC,GAC1D,IAAa,GAAU,gBAAgB,eAAe,OACtD,IACJ,OAAO,GAAU,gBAAgB,cAAe,WAC5C,EAAS,eAAe,aACxB,KAAA,GACA,IAAgB,IACjB,EAAc,MAAM,EAAE,aAAU,MAAQ,EAAa,EAAE,gBACxD,cACA,KAAA;AAIJ,QAFI,IAA+B,OAGjC,kBAAC,SAAD;EACE,eAAY;EACZ,WAAU;YAFZ;GAIE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAE,EAAQ,eAAe;IACrB,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAqB,KAAK,MAAS;KAClC,IAAM,IAAW,CAAC,EAAE,KAAc,EAAK,gBACjC,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK;MACD,CAAA,EAEH,IAAQ,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAK;MAAa,CAAA,EACtD,IAAkB,EAAK,cAC3B,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAQ,gBAAgB;MACtB,CAAA;AAkCT,YA/BI,IAQA,kBAAC,GAAD;MAEE,SAAS,EAAE,EAAQ,iCAAiC,EAClD,WAAW,GACZ,CAAC;MACF,WAAU;gBAEV,kBAAC,QAAD;OACE,iBAAc;OACd,eAAa,sBAAsB,EAAK;OACxC,WAAW,EACT,GAAwB,EACxB,gEACD;iBANH;QAQG;QACA;QACA;QACI;;MACO,EAlBT,EAAK,GAkBI,GAKlB,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,KAAK,EAAK;MACV,eAAa,sBAAsB,EAAK;MACxC,YAAY,EAAE,kBACZ,EACE,GAAwB,EACxB,YACA,IACI,EAA8B,SAC9B,EAA8B,KACnC;gBAZL;OAeG;OACA;OACA;OACc;QAjBV,EAAK,GAiBK;MAEnB;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAA8B,CAAA;IAC1B,CAAA;GACA"}
1
+ {"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { ACP_PROVIDERS } from \"#/constants/acp-providers\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useBreakpoint } from \"#/hooks/use-breakpoint\";\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n /**\n * When true, this item greys out (and the /route's ``clientLoader``\n * bounces to ``/settings/agent``) while an ACP agent is active.\n * The ACP sub-agent manages its own MCP servers; the SDK rejects\n * ``mcp_config`` on ``ACPAgent`` init outright, so the OpenHands-\n * side editor would silently no-op against the running subprocess.\n */\n disabledByAcp?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n disabledByAcp: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n comingSoon: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { data: settings } = useSettings();\n const sidebarCollapsed = useSidebarStore((state) => state.collapsed);\n // At iPad portrait widths (md to <lg) an expanded primary Sidebar (300px)\n // plus this nav (260px) leaves the main content unreadable. Hide ourselves\n // until the user collapses the Sidebar or the viewport reaches `lg`.\n const belowLg = useBreakpoint(1023);\n const belowMd = useBreakpoint(767);\n const hideForExpandedSidebar = !sidebarCollapsed && belowLg && !belowMd;\n const isAcpAgent = settings?.agent_settings?.agent_kind === \"acp\";\n const acpServerKey =\n typeof settings?.agent_settings?.acp_server === \"string\"\n ? settings.agent_settings.acp_server\n : undefined;\n const acpServerName = isAcpAgent\n ? (ACP_PROVIDERS.find(({ key }) => key === acpServerKey)?.display_name ??\n \"ACP Agent\")\n : undefined;\n\n if (hideForExpandedSidebar) return null;\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.map((item) => {\n const disabled = !!(isAcpAgent && item.disabledByAcp);\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = <span className=\"truncate\">{item.label}</span>;\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (disabled) {\n // Render a non-clickable surrogate so the URL and a11y tree\n // both communicate \"you can't go here right now,\" then wrap\n // in StyledTooltip for the why. Mirrors the SettingsNavLink\n // disabled rendering — same flag (``disabledByAcp``), same\n // explanatory tooltip (\"Disabled while {agentName} is the\n // active agent\"), same greyed styles.\n return (\n <StyledTooltip\n key={item.to}\n content={t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: acpServerName,\n })}\n placement=\"right\"\n >\n <span\n aria-disabled=\"true\"\n data-testid={`sidebar-extensions-${item.to}`}\n className={cn(\n sidebarNavRowClassName(),\n \"truncate text-[var(--oh-muted)] opacity-50 cursor-not-allowed\",\n )}\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </span>\n </StyledTooltip>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiCA,IAAa,IAA2C;CACtD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAY,OAAO;GAAI,QAAQ;GAAI,eAAY;GAAS,CAAA;EAC9D,KAAK;EACN;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAmB,OAAO;GAAI,QAAQ;GAAM,CAAA;EAClD,KAAK;EACL,eAAe;EAChB;CACD;EACE,IAAI;EACJ,OAAO;EACP,MACE,kBAAC,OAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAK;GACL,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,OAAO;GACP,QAAQ;GACR,eAAY;aAVd;IAYE,kBAAC,QAAD,EAAM,GAAE,0HAA2H,CAAA;IACnI,kBAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA;IAC/B,kBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;IAClB;;EAER,KAAK;EACL,YAAY;EACb;CACF;AAED,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,MAAM,MAAa,GAAa,EAClC,IAAmB,GAAiB,MAAU,EAAM,UAAU,EAI9D,IAAU,EAAc,KAAK,EAC7B,IAAU,EAAc,IAAI,EAC5B,IAAyB,CAAC,KAAoB,KAAW,CAAC,GAC1D,IAAa,GAAU,gBAAgB,eAAe,OACtD,IACJ,OAAO,GAAU,gBAAgB,cAAe,WAC5C,EAAS,eAAe,aACxB,KAAA,GACA,IAAgB,IACjB,EAAc,MAAM,EAAE,aAAU,MAAQ,EAAa,EAAE,gBACxD,cACA,KAAA;AAIJ,QAFI,IAA+B,OAGjC,kBAAC,SAAD;EACE,eAAY;EACZ,WAAU;YAFZ;GAIE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAE,EAAQ,cAAc;IACpB,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAqB,KAAK,MAAS;KAClC,IAAM,IAAW,CAAC,EAAE,KAAc,EAAK,gBACjC,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK;MACD,CAAA,EAEH,IAAQ,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAK;MAAa,CAAA,EACtD,IAAkB,EAAK,cAC3B,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAQ,gBAAgB;MACtB,CAAA;AAkCT,YA/BI,IAQA,kBAAC,GAAD;MAEE,SAAS,EAAE,EAAQ,iCAAiC,EAClD,WAAW,GACZ,CAAC;MACF,WAAU;gBAEV,kBAAC,QAAD;OACE,iBAAc;OACd,eAAa,sBAAsB,EAAK;OACxC,WAAW,EACT,GAAwB,EACxB,gEACD;iBANH;QAQG;QACA;QACA;QACI;;MACO,EAlBT,EAAK,GAkBI,GAKlB,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,KAAK,EAAK;MACV,eAAa,sBAAsB,EAAK;MACxC,YAAY,EAAE,kBACZ,EACE,GAAwB,EACxB,YACA,IACI,EAA8B,SAC9B,EAA8B,KACnC;gBAZL;OAeG;OACA;OACA;OACc;QAjBV,EAAK,GAiBK;MAEnB;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAA8B,CAAA;IAC1B,CAAA;GACA"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../utils/utils.cjs`),n=require(`../../../node_modules/lucide-react/dist/esm/icons/arrow-left.cjs`),r=require(`../../../utils/form-control-classes.cjs`),i=require(`../navigation-link.cjs`);let a=require(`react`);a=e.__toESM(a,1);let o=require(`react/jsx-runtime`);function s({children:e}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.ArrowLeft,{size:20,"aria-hidden":!0}),e]})}function c(e){let{children:n,testId:a,className:c}=e,l=t.cn(r.formControlBackNavButtonClassName,c);return`to`in e?(0,o.jsx)(i.NavigationLink,{to:e.to,onClick:e.onClick,"data-testid":a,className:l,children:(0,o.jsx)(s,{children:n})}):(0,o.jsx)(`button`,{type:`button`,onClick:e.onClick,"data-testid":a,className:l,children:(0,o.jsx)(s,{children:n})})}exports.BackNavButton=c;
2
+ //# sourceMappingURL=back-nav-button.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"back-nav-button.cjs","names":[],"sources":["../../../../src/components/shared/buttons/back-nav-button.tsx"],"sourcesContent":["import React from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport { formControlBackNavButtonClassName } from \"#/utils/form-control-classes\";\n\ntype BackNavButtonBaseProps = {\n children: React.ReactNode;\n testId?: string;\n className?: string;\n};\n\ntype BackNavButtonAsButtonProps = BackNavButtonBaseProps & {\n onClick: () => void;\n};\n\ntype BackNavButtonAsLinkProps = BackNavButtonBaseProps & {\n to: string;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n};\n\nexport type BackNavButtonProps =\n | BackNavButtonAsButtonProps\n | BackNavButtonAsLinkProps;\n\nfunction BackNavButtonContent({\n children,\n}: Pick<BackNavButtonBaseProps, \"children\">) {\n return (\n <>\n <ArrowLeft size={20} aria-hidden />\n {children}\n </>\n );\n}\n\nexport function BackNavButton(\n props: BackNavButtonAsLinkProps,\n): React.JSX.Element;\nexport function BackNavButton(\n props: BackNavButtonAsButtonProps,\n): React.JSX.Element;\nexport function BackNavButton(props: BackNavButtonProps) {\n const { children, testId, className } = props;\n const classes = cn(formControlBackNavButtonClassName, className);\n\n if (\"to\" in props) {\n return (\n <NavigationLink\n to={props.to}\n onClick={props.onClick}\n data-testid={testId}\n className={classes}\n >\n <BackNavButtonContent>{children}</BackNavButtonContent>\n </NavigationLink>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={props.onClick}\n data-testid={testId}\n className={classes}\n >\n <BackNavButtonContent>{children}</BackNavButtonContent>\n </button>\n );\n}\n"],"mappings":"mVAyBA,SAAS,EAAqB,CAC5B,YAC2C,CAC3C,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,UAAD,CAAW,KAAM,GAAI,cAAA,GAAc,CAAA,CAClC,EACA,CAAA,CAAA,CAUP,SAAgB,EAAc,EAA2B,CACvD,GAAM,CAAE,WAAU,SAAQ,aAAc,EAClC,EAAU,EAAA,GAAG,EAAA,kCAAmC,EAAU,CAehE,MAbI,OAAQ,GAER,EAAA,EAAA,KAAC,EAAA,eAAD,CACE,GAAI,EAAM,GACV,QAAS,EAAM,QACf,cAAa,EACb,UAAW,YAEX,EAAA,EAAA,KAAC,EAAD,CAAuB,WAAgC,CAAA,CACxC,CAAA,EAKnB,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EAAM,QACf,cAAa,EACb,UAAW,YAEX,EAAA,EAAA,KAAC,EAAD,CAAuB,WAAgC,CAAA,CAChD,CAAA"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ type BackNavButtonBaseProps = {
3
+ children: React.ReactNode;
4
+ testId?: string;
5
+ className?: string;
6
+ };
7
+ type BackNavButtonAsButtonProps = BackNavButtonBaseProps & {
8
+ onClick: () => void;
9
+ };
10
+ type BackNavButtonAsLinkProps = BackNavButtonBaseProps & {
11
+ to: string;
12
+ onClick?: React.MouseEventHandler<HTMLAnchorElement>;
13
+ };
14
+ export type BackNavButtonProps = BackNavButtonAsButtonProps | BackNavButtonAsLinkProps;
15
+ export declare function BackNavButton(props: BackNavButtonAsLinkProps): React.JSX.Element;
16
+ export declare function BackNavButton(props: BackNavButtonAsButtonProps): React.JSX.Element;
17
+ export {};
@@ -0,0 +1,33 @@
1
+ import { cn as e } from "../../../utils/utils.js";
2
+ import { ArrowLeft as t } from "../../../node_modules/lucide-react/dist/esm/icons/arrow-left.js";
3
+ import { formControlBackNavButtonClassName as n } from "../../../utils/form-control-classes.js";
4
+ import { NavigationLink as r } from "../navigation-link.js";
5
+ import "react";
6
+ import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ //#region src/components/shared/buttons/back-nav-button.tsx
8
+ function s({ children: e }) {
9
+ return /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a(t, {
10
+ size: 20,
11
+ "aria-hidden": !0
12
+ }), e] });
13
+ }
14
+ function c(t) {
15
+ let { children: i, testId: o, className: c } = t, l = e(n, c);
16
+ return "to" in t ? /* @__PURE__ */ a(r, {
17
+ to: t.to,
18
+ onClick: t.onClick,
19
+ "data-testid": o,
20
+ className: l,
21
+ children: /* @__PURE__ */ a(s, { children: i })
22
+ }) : /* @__PURE__ */ a("button", {
23
+ type: "button",
24
+ onClick: t.onClick,
25
+ "data-testid": o,
26
+ className: l,
27
+ children: /* @__PURE__ */ a(s, { children: i })
28
+ });
29
+ }
30
+ //#endregion
31
+ export { c as BackNavButton };
32
+
33
+ //# sourceMappingURL=back-nav-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"back-nav-button.js","names":[],"sources":["../../../../src/components/shared/buttons/back-nav-button.tsx"],"sourcesContent":["import React from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport { formControlBackNavButtonClassName } from \"#/utils/form-control-classes\";\n\ntype BackNavButtonBaseProps = {\n children: React.ReactNode;\n testId?: string;\n className?: string;\n};\n\ntype BackNavButtonAsButtonProps = BackNavButtonBaseProps & {\n onClick: () => void;\n};\n\ntype BackNavButtonAsLinkProps = BackNavButtonBaseProps & {\n to: string;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n};\n\nexport type BackNavButtonProps =\n | BackNavButtonAsButtonProps\n | BackNavButtonAsLinkProps;\n\nfunction BackNavButtonContent({\n children,\n}: Pick<BackNavButtonBaseProps, \"children\">) {\n return (\n <>\n <ArrowLeft size={20} aria-hidden />\n {children}\n </>\n );\n}\n\nexport function BackNavButton(\n props: BackNavButtonAsLinkProps,\n): React.JSX.Element;\nexport function BackNavButton(\n props: BackNavButtonAsButtonProps,\n): React.JSX.Element;\nexport function BackNavButton(props: BackNavButtonProps) {\n const { children, testId, className } = props;\n const classes = cn(formControlBackNavButtonClassName, className);\n\n if (\"to\" in props) {\n return (\n <NavigationLink\n to={props.to}\n onClick={props.onClick}\n data-testid={testId}\n className={classes}\n >\n <BackNavButtonContent>{children}</BackNavButtonContent>\n </NavigationLink>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={props.onClick}\n data-testid={testId}\n className={classes}\n >\n <BackNavButtonContent>{children}</BackNavButtonContent>\n </button>\n );\n}\n"],"mappings":";;;;;;;AAyBA,SAAS,EAAqB,EAC5B,eAC2C;AAC3C,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EAAW,MAAM;EAAI,eAAA;EAAc,CAAA,EAClC,EACA,EAAA,CAAA;;AAUP,SAAgB,EAAc,GAA2B;CACvD,IAAM,EAAE,aAAU,WAAQ,iBAAc,GAClC,IAAU,EAAG,GAAmC,EAAU;AAehE,QAbI,QAAQ,IAER,kBAAC,GAAD;EACE,IAAI,EAAM;EACV,SAAS,EAAM;EACf,eAAa;EACb,WAAW;YAEX,kBAAC,GAAD,EAAuB,aAAgC,CAAA;EACxC,CAAA,GAKnB,kBAAC,UAAD;EACE,MAAK;EACL,SAAS,EAAM;EACf,eAAa;EACb,WAAW;YAEX,kBAAC,GAAD,EAAuB,aAAgC,CAAA;EAChD,CAAA"}
@@ -1,2 +1,2 @@
1
- require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../types/agent-state.cjs`),r=require(`../../../types/agent-server/type-guards.cjs`),i=require(`../../../stores/use-event-store.cjs`),a=require(`../../../types/agent-server/core/base/common.cjs`),o=require(`../../../hooks/query/use-active-conversation.cjs`),s=require(`../../../hooks/use-agent-state.cjs`),c=require(`../action-tooltip.cjs`),l=require(`../risk-alert.cjs`),u=require(`../../../icons/u-warning.cjs`),d=require(`../../../stores/event-message-store.cjs`),f=require(`../../../hooks/mutation/use-respond-to-confirmation.cjs`);let p=require(`react`),m=require(`react/jsx-runtime`);function h(){let h=d.useEventMessageStore(e=>e.submittedEventIds),g=d.useEventMessageStore(e=>e.addSubmittedEventId),{t:_}=e.useTranslation(`openhands`),{data:v}=o.useActiveConversation(),{curAgentState:y}=s.useAgentState(),{mutate:b}=f.useRespondToConfirmation(),x=i.useEventStore(e=>e.events).slice().reverse().find(e=>e.source===`agent`?y===n.AgentState.AWAITING_USER_CONFIRMATION:!1),S=(0,p.useCallback)(e=>{!x||!v||(g(x.id),b({conversationId:v.id,conversationUrl:v.conversation_url||``,sessionApiKey:v.session_api_key,accept:e}))},[x,v,g,b]);return(0,p.useEffect)(()=>{if(!x)return;let e=e=>{e.shiftKey&&e.metaKey&&e.key===`Backspace`&&(e.preventDefault(),S(!1))},t=e=>{e.metaKey&&e.key===`Enter`&&(e.preventDefault(),S(!0))},n=n=>{e(n),t(n)};return document.addEventListener(`keydown`,n),()=>document.removeEventListener(`keydown`,n)},[x,S]),y!==n.AgentState.AWAITING_USER_CONFIRMATION||!x||h.includes(x.id)?null:(0,m.jsxs)(`div`,{className:`flex flex-col gap-2 pt-4`,children:[(r.isActionEvent(x)?x.security_risk:a.SecurityRisk.UNKNOWN)===a.SecurityRisk.HIGH&&(0,m.jsx)(l.RiskAlert,{content:_(t.I18nKey.CHAT_INTERFACE$HIGH_RISK_WARNING),icon:(0,m.jsx)(u.default,{width:16,height:16,color:`#fff`}),severity:`high`,title:_(t.I18nKey.COMMON$HIGH_RISK)}),(0,m.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,m.jsx)(`p`,{className:`text-sm font-normal text-white`,children:_(t.I18nKey.CHAT_INTERFACE$USER_ASK_CONFIRMATION)}),(0,m.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,m.jsx)(c.ActionTooltip,{type:`reject`,onClick:()=>S(!1)}),(0,m.jsx)(c.ActionTooltip,{type:`confirm`,onClick:()=>S(!0)})]})]})]})}exports.ConversationConfirmationButtons=h;
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../types/agent-state.cjs`),r=require(`../../../types/agent-server/core/base/common.cjs`),i=require(`../../../types/agent-server/type-guards.cjs`),a=require(`../../../stores/use-event-store.cjs`),o=require(`../../../hooks/query/use-active-conversation.cjs`),s=require(`../../../hooks/use-agent-state.cjs`),c=require(`../action-tooltip.cjs`),l=require(`../risk-alert.cjs`),u=require(`../../../icons/u-warning.cjs`),d=require(`../../../stores/event-message-store.cjs`),f=require(`../../../hooks/mutation/use-respond-to-confirmation.cjs`);let p=require(`react`),m=require(`react/jsx-runtime`);function h(){let h=d.useEventMessageStore(e=>e.submittedEventIds),g=d.useEventMessageStore(e=>e.addSubmittedEventId),{t:_}=e.useTranslation(`openhands`),{data:v}=o.useActiveConversation(),{curAgentState:y}=s.useAgentState(),{mutate:b}=f.useRespondToConfirmation(),x=a.useEventStore(e=>e.events).slice().reverse().find(e=>e.source===`agent`?y===n.AgentState.AWAITING_USER_CONFIRMATION:!1),S=(0,p.useCallback)(e=>{!x||!v||(g(x.id),b({conversationId:v.id,conversationUrl:v.conversation_url||``,sessionApiKey:v.session_api_key,accept:e}))},[x,v,g,b]);return(0,p.useEffect)(()=>{if(!x)return;let e=e=>{e.shiftKey&&e.metaKey&&e.key===`Backspace`&&(e.preventDefault(),S(!1))},t=e=>{e.metaKey&&e.key===`Enter`&&(e.preventDefault(),S(!0))},n=n=>{e(n),t(n)};return document.addEventListener(`keydown`,n),()=>document.removeEventListener(`keydown`,n)},[x,S]),y!==n.AgentState.AWAITING_USER_CONFIRMATION||!x||h.includes(x.id)?null:(0,m.jsxs)(`div`,{className:`flex flex-col gap-2 pt-4`,children:[(i.isActionEvent(x)?x.security_risk:r.SecurityRisk.UNKNOWN)===r.SecurityRisk.HIGH&&(0,m.jsx)(l.RiskAlert,{content:_(t.I18nKey.CHAT_INTERFACE$HIGH_RISK_WARNING),icon:(0,m.jsx)(u.default,{width:16,height:16,color:`#fff`}),severity:`high`,title:_(t.I18nKey.COMMON$HIGH_RISK)}),(0,m.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,m.jsx)(`p`,{className:`text-sm font-normal text-white`,children:_(t.I18nKey.CHAT_INTERFACE$USER_ASK_CONFIRMATION)}),(0,m.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,m.jsx)(c.ActionTooltip,{type:`reject`,onClick:()=>S(!1)}),(0,m.jsx)(c.ActionTooltip,{type:`confirm`,onClick:()=>S(!0)})]})]})]})}exports.ConversationConfirmationButtons=h;
2
2
  //# sourceMappingURL=conversation-confirmation-buttons.cjs.map
@@ -1,9 +1,9 @@
1
1
  import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { AgentState as n } from "../../../types/agent-state.js";
4
- import { isActionEvent as r } from "../../../types/agent-server/type-guards.js";
5
- import { useEventStore as i } from "../../../stores/use-event-store.js";
6
- import { SecurityRisk as a } from "../../../types/agent-server/core/base/common.js";
4
+ import { SecurityRisk as r } from "../../../types/agent-server/core/base/common.js";
5
+ import { isActionEvent as i } from "../../../types/agent-server/type-guards.js";
6
+ import { useEventStore as a } from "../../../stores/use-event-store.js";
7
7
  import { useActiveConversation as o } from "../../../hooks/query/use-active-conversation.js";
8
8
  import { useAgentState as s } from "../../../hooks/use-agent-state.js";
9
9
  import { ActionTooltip as c } from "../action-tooltip.js";
@@ -15,7 +15,7 @@ import { useCallback as p, useEffect as m } from "react";
15
15
  import { jsx as h, jsxs as g } from "react/jsx-runtime";
16
16
  //#region src/components/shared/buttons/conversation-confirmation-buttons.tsx
17
17
  function _() {
18
- let _ = d((e) => e.submittedEventIds), v = d((e) => e.addSubmittedEventId), { t: y } = e("openhands"), { data: b } = o(), { curAgentState: x } = s(), { mutate: S } = f(), C = i((e) => e.events).slice().reverse().find((e) => e.source === "agent" ? x === n.AWAITING_USER_CONFIRMATION : !1), w = p((e) => {
18
+ let _ = d((e) => e.submittedEventIds), v = d((e) => e.addSubmittedEventId), { t: y } = e("openhands"), { data: b } = o(), { curAgentState: x } = s(), { mutate: S } = f(), C = a((e) => e.events).slice().reverse().find((e) => e.source === "agent" ? x === n.AWAITING_USER_CONFIRMATION : !1), w = p((e) => {
19
19
  !C || !b || (v(C.id), S({
20
20
  conversationId: b.id,
21
21
  conversationUrl: b.conversation_url || "",
@@ -40,7 +40,7 @@ function _() {
40
40
  return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
41
41
  }, [C, w]), x !== n.AWAITING_USER_CONFIRMATION || !C || _.includes(C.id) ? null : /* @__PURE__ */ g("div", {
42
42
  className: "flex flex-col gap-2 pt-4",
43
- children: [(r(C) ? C.security_risk : a.UNKNOWN) === a.HIGH && /* @__PURE__ */ h(l, {
43
+ children: [(i(C) ? C.security_risk : r.UNKNOWN) === r.HIGH && /* @__PURE__ */ h(l, {
44
44
  content: y(t.CHAT_INTERFACE$HIGH_RISK_WARNING),
45
45
  icon: /* @__PURE__ */ h(u, {
46
46
  width: 16,
@@ -1,2 +1,2 @@
1
- const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../node_modules/lucide-react/dist/esm/icons/check.cjs`),a=require(`../../../node_modules/lucide-react/dist/esm/icons/chevron-down.cjs`),o=require(`../../../hooks/use-click-outside-element.cjs`);let s=require(`react`);s=e.__toESM(s,1);let c=require(`react/jsx-runtime`);function l({testId:e,value:l,onChange:u,options:d,labelKeyByValue:f}){let{t:p}=t.useTranslation(`openhands`),[m,h]=s.default.useState(!1),g=o.useClickOutsideElement(()=>h(!1)),_=d[0],v=p(f[l]);return(0,c.jsxs)(`div`,{ref:g,className:`relative shrink-0 w-auto`,"data-testid":e,children:[(0,c.jsxs)(`button`,{type:`button`,"data-testid":`dropdown-trigger`,"aria-haspopup":`menu`,"aria-expanded":m,"aria-label":p(n.I18nKey.CONVERSATION_PANEL$FILTER_LABEL),onClick:()=>h(e=>!e),className:r.cn(`inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors cursor-pointer`,`border-[var(--oh-border)] bg-base-secondary text-white`,`focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20`,_&&l!==_&&`border-white/60 bg-white/10`),children:[(0,c.jsx)(`span`,{className:`whitespace-nowrap`,children:v}),(0,c.jsx)(a.ChevronDown,{className:r.cn(`h-4 w-4 shrink-0 text-tertiary-alt transition-transform`,m&&`rotate-180`),"aria-hidden":!0})]}),m?(0,c.jsx)(`div`,{role:`menu`,"data-testid":`${e}-menu`,"aria-label":p(n.I18nKey.CONVERSATION_PANEL$FILTER_LABEL),className:r.cn(`absolute right-0 top-full z-50 mt-1 min-w-full w-max`,`max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow`),children:d.map(t=>{let n=t===l;return(0,c.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":n,"data-testid":`${e}-${t}`,onClick:()=>{u(t),h(!1)},className:r.cn(`flex w-full items-center gap-2 rounded px-2 py-2 text-left text-sm text-white`,`hover:bg-[var(--oh-interactive-hover)] cursor-pointer`,n&&`bg-[var(--oh-interactive-selected)]`),children:[(0,c.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:p(f[t])}),n?(0,c.jsx)(i.Check,{className:`h-4 w-4 shrink-0`,"aria-hidden":!0}):null]},t)})}):null]})}exports.EnumFilterDropdown=l;
1
+ const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../node_modules/lucide-react/dist/esm/icons/check.cjs`),a=require(`../../../node_modules/lucide-react/dist/esm/icons/chevron-down.cjs`),o=require(`../../../utils/dropdown-classes.cjs`),s=require(`../../../hooks/use-click-outside-element.cjs`);let c=require(`react`);c=e.__toESM(c,1);let l=require(`react/jsx-runtime`);function u({testId:e,value:u,onChange:d,options:f,labelKeyByValue:p}){let{t:m}=t.useTranslation(`openhands`),[h,g]=c.default.useState(!1),_=s.useClickOutsideElement(()=>g(!1)),v=f[0],y=m(p[u]);return(0,l.jsxs)(`div`,{ref:_,className:`relative shrink-0 w-auto`,"data-testid":e,children:[(0,l.jsxs)(`button`,{type:`button`,"data-testid":`dropdown-trigger`,"aria-haspopup":`menu`,"aria-expanded":h,"aria-label":m(n.I18nKey.CONVERSATION_PANEL$FILTER_LABEL),onClick:()=>g(e=>!e),className:r.cn(o.dropdownFilterTriggerClassName,v&&u!==v&&`border-white/60 bg-white/10`),children:[(0,l.jsx)(`span`,{className:`whitespace-nowrap`,children:y}),(0,l.jsx)(a.ChevronDown,{className:r.cn(`h-4 w-4 shrink-0 text-tertiary-alt transition-transform`,h&&`rotate-180`),"aria-hidden":!0})]}),h?(0,l.jsx)(`div`,{role:`menu`,"data-testid":`${e}-menu`,"aria-label":m(n.I18nKey.CONVERSATION_PANEL$FILTER_LABEL),className:r.cn(`absolute right-0 top-full z-50 mt-1 min-w-full w-max`,`max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow`,o.dropdownMenuListClassName),children:f.map(t=>{let n=t===u;return(0,l.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":n,"data-testid":`${e}-${t}`,onClick:()=>{d(t),g(!1)},className:r.cn(o.dropdownMenuRowClassName,n&&`bg-[var(--oh-interactive-selected)]`),children:[(0,l.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:m(p[t])}),n?(0,l.jsx)(i.Check,{className:`h-4 w-4 shrink-0`,"aria-hidden":!0}):null]},t)})}):null]})}exports.EnumFilterDropdown=u;
2
2
  //# sourceMappingURL=enum-filter-dropdown.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"enum-filter-dropdown.cjs","names":[],"sources":["../../../../src/components/shared/filters/enum-filter-dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { cn } from \"#/utils/utils\";\n\ninterface EnumFilterDropdownProps<T extends string> {\n testId: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n labelKeyByValue: Record<T, I18nKey>;\n}\n\nexport function EnumFilterDropdown<T extends string>({\n testId,\n value,\n onChange,\n options,\n labelKeyByValue,\n}: EnumFilterDropdownProps<T>) {\n const { t } = useTranslation(\"openhands\");\n const [open, setOpen] = React.useState(false);\n const containerRef = useClickOutsideElement<HTMLDivElement>(() =>\n setOpen(false),\n );\n\n const defaultOption = options[0];\n const selectedLabel = t(labelKeyByValue[value]);\n\n return (\n <div\n ref={containerRef}\n className=\"relative shrink-0 w-auto\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n data-testid=\"dropdown-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors cursor-pointer\",\n \"border-[var(--oh-border)] bg-base-secondary text-white\",\n \"focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20\",\n defaultOption &&\n value !== defaultOption &&\n \"border-white/60 bg-white/10\",\n )}\n >\n <span className=\"whitespace-nowrap\">{selectedLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-tertiary-alt transition-transform\",\n open && \"rotate-180\",\n )}\n aria-hidden\n />\n </button>\n\n {open ? (\n <div\n role=\"menu\"\n data-testid={`${testId}-menu`}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-full w-max\",\n \"max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow\",\n )}\n >\n {options.map((option) => {\n const selected = option === value;\n return (\n <button\n key={option}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={selected}\n data-testid={`${testId}-${option}`}\n onClick={() => {\n onChange(option);\n setOpen(false);\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded px-2 py-2 text-left text-sm text-white\",\n \"hover:bg-[var(--oh-interactive-hover)] cursor-pointer\",\n selected && \"bg-[var(--oh-interactive-selected)]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {t(labelKeyByValue[option])}\n </span>\n {selected ? (\n <Check className=\"h-4 w-4 shrink-0\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"sfAeA,SAAgB,EAAqC,CACnD,SACA,QACA,WACA,UACA,mBAC6B,CAC7B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,CAAC,EAAM,GAAW,EAAA,QAAM,SAAS,GAAM,CACvC,EAAe,EAAA,2BACnB,EAAQ,GAAM,CACf,CAEK,EAAgB,EAAQ,GACxB,EAAgB,EAAE,EAAgB,GAAO,CAE/C,OACE,EAAA,EAAA,MAAC,MAAD,CACE,IAAK,EACL,UAAU,2BACV,cAAa,WAHf,EAKE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,cAAY,mBACZ,gBAAc,OACd,gBAAe,EACf,aAAY,EAAE,EAAA,QAAQ,gCAAgC,CACtD,YAAe,EAAS,GAAS,CAAC,EAAK,CACvC,UAAW,EAAA,GACT,oHACA,yDACA,4GACA,GACE,IAAU,GACV,8BACH,UAdH,EAgBE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6BAAqB,EAAqB,CAAA,EAC1D,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,UAAW,EAAA,GACT,0DACA,GAAQ,aACT,CACD,cAAA,GACA,CAAA,CACK,GAER,GACC,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,OACL,cAAa,GAAG,EAAO,OACvB,aAAY,EAAE,EAAA,QAAQ,gCAAgC,CACtD,UAAW,EAAA,GACT,uDACA,+EACD,UAEA,EAAQ,IAAK,GAAW,CACvB,IAAM,EAAW,IAAW,EAC5B,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,KAAK,gBACL,eAAc,EACd,cAAa,GAAG,EAAO,GAAG,IAC1B,YAAe,CACb,EAAS,EAAO,CAChB,EAAQ,GAAM,EAEhB,UAAW,EAAA,GACT,gFACA,wDACA,GAAY,sCACb,UAdH,EAgBE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACb,EAAE,EAAgB,GAAQ,CACtB,CAAA,CACN,GACC,EAAA,EAAA,KAAC,EAAA,MAAD,CAAO,UAAU,mBAAmB,cAAA,GAAc,CAAA,CAChD,KACG,EArBF,EAqBE,EAEX,CACE,CAAA,CACJ,KACA"}
1
+ {"version":3,"file":"enum-filter-dropdown.cjs","names":[],"sources":["../../../../src/components/shared/filters/enum-filter-dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownFilterTriggerClassName,\n dropdownMenuListClassName,\n dropdownMenuRowClassName,\n} from \"#/utils/dropdown-classes\";\n\ninterface EnumFilterDropdownProps<T extends string> {\n testId: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n labelKeyByValue: Record<T, I18nKey>;\n}\n\nexport function EnumFilterDropdown<T extends string>({\n testId,\n value,\n onChange,\n options,\n labelKeyByValue,\n}: EnumFilterDropdownProps<T>) {\n const { t } = useTranslation(\"openhands\");\n const [open, setOpen] = React.useState(false);\n const containerRef = useClickOutsideElement<HTMLDivElement>(() =>\n setOpen(false),\n );\n\n const defaultOption = options[0];\n const selectedLabel = t(labelKeyByValue[value]);\n\n return (\n <div\n ref={containerRef}\n className=\"relative shrink-0 w-auto\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n data-testid=\"dropdown-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n dropdownFilterTriggerClassName,\n defaultOption &&\n value !== defaultOption &&\n \"border-white/60 bg-white/10\",\n )}\n >\n <span className=\"whitespace-nowrap\">{selectedLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-tertiary-alt transition-transform\",\n open && \"rotate-180\",\n )}\n aria-hidden\n />\n </button>\n\n {open ? (\n <div\n role=\"menu\"\n data-testid={`${testId}-menu`}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-full w-max\",\n \"max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow\",\n dropdownMenuListClassName,\n )}\n >\n {options.map((option) => {\n const selected = option === value;\n return (\n <button\n key={option}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={selected}\n data-testid={`${testId}-${option}`}\n onClick={() => {\n onChange(option);\n setOpen(false);\n }}\n className={cn(\n dropdownMenuRowClassName,\n selected && \"bg-[var(--oh-interactive-selected)]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {t(labelKeyByValue[option])}\n </span>\n {selected ? (\n <Check className=\"h-4 w-4 shrink-0\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"uiBAoBA,SAAgB,EAAqC,CACnD,SACA,QACA,WACA,UACA,mBAC6B,CAC7B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,CAAC,EAAM,GAAW,EAAA,QAAM,SAAS,GAAM,CACvC,EAAe,EAAA,2BACnB,EAAQ,GAAM,CACf,CAEK,EAAgB,EAAQ,GACxB,EAAgB,EAAE,EAAgB,GAAO,CAE/C,OACE,EAAA,EAAA,MAAC,MAAD,CACE,IAAK,EACL,UAAU,2BACV,cAAa,WAHf,EAKE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,cAAY,mBACZ,gBAAc,OACd,gBAAe,EACf,aAAY,EAAE,EAAA,QAAQ,gCAAgC,CACtD,YAAe,EAAS,GAAS,CAAC,EAAK,CACvC,UAAW,EAAA,GACT,EAAA,+BACA,GACE,IAAU,GACV,8BACH,UAZH,EAcE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6BAAqB,EAAqB,CAAA,EAC1D,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,UAAW,EAAA,GACT,0DACA,GAAQ,aACT,CACD,cAAA,GACA,CAAA,CACK,GAER,GACC,EAAA,EAAA,KAAC,MAAD,CACE,KAAK,OACL,cAAa,GAAG,EAAO,OACvB,aAAY,EAAE,EAAA,QAAQ,gCAAgC,CACtD,UAAW,EAAA,GACT,uDACA,+EACA,EAAA,0BACD,UAEA,EAAQ,IAAK,GAAW,CACvB,IAAM,EAAW,IAAW,EAC5B,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,KAAK,gBACL,eAAc,EACd,cAAa,GAAG,EAAO,GAAG,IAC1B,YAAe,CACb,EAAS,EAAO,CAChB,EAAQ,GAAM,EAEhB,UAAW,EAAA,GACT,EAAA,yBACA,GAAY,sCACb,UAbH,EAeE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACb,EAAE,EAAgB,GAAQ,CACtB,CAAA,CACN,GACC,EAAA,EAAA,KAAC,EAAA,MAAD,CAAO,UAAU,mBAAmB,cAAA,GAAc,CAAA,CAChD,KACG,EApBF,EAoBE,EAEX,CACE,CAAA,CACJ,KACA"}
@@ -3,51 +3,52 @@ import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { cn as n } from "../../../utils/utils.js";
4
4
  import { Check as r } from "../../../node_modules/lucide-react/dist/esm/icons/check.js";
5
5
  import { ChevronDown as i } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
6
- import { useClickOutsideElement as a } from "../../../hooks/use-click-outside-element.js";
7
- import o from "react";
8
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { dropdownFilterTriggerClassName as a, dropdownMenuListClassName as o, dropdownMenuRowClassName as s } from "../../../utils/dropdown-classes.js";
7
+ import { useClickOutsideElement as c } from "../../../hooks/use-click-outside-element.js";
8
+ import l from "react";
9
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
10
  //#region src/components/shared/filters/enum-filter-dropdown.tsx
10
- function l({ testId: l, value: u, onChange: d, options: f, labelKeyByValue: p }) {
11
- let { t: m } = e("openhands"), [h, g] = o.useState(!1), _ = a(() => g(!1)), v = f[0], y = m(p[u]);
12
- return /* @__PURE__ */ c("div", {
13
- ref: _,
11
+ function f({ testId: f, value: p, onChange: m, options: h, labelKeyByValue: g }) {
12
+ let { t: _ } = e("openhands"), [v, y] = l.useState(!1), b = c(() => y(!1)), x = h[0], S = _(g[p]);
13
+ return /* @__PURE__ */ d("div", {
14
+ ref: b,
14
15
  className: "relative shrink-0 w-auto",
15
- "data-testid": l,
16
- children: [/* @__PURE__ */ c("button", {
16
+ "data-testid": f,
17
+ children: [/* @__PURE__ */ d("button", {
17
18
  type: "button",
18
19
  "data-testid": "dropdown-trigger",
19
20
  "aria-haspopup": "menu",
20
- "aria-expanded": h,
21
- "aria-label": m(t.CONVERSATION_PANEL$FILTER_LABEL),
22
- onClick: () => g((e) => !e),
23
- className: n("inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors cursor-pointer", "border-[var(--oh-border)] bg-base-secondary text-white", "focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20", v && u !== v && "border-white/60 bg-white/10"),
24
- children: [/* @__PURE__ */ s("span", {
21
+ "aria-expanded": v,
22
+ "aria-label": _(t.CONVERSATION_PANEL$FILTER_LABEL),
23
+ onClick: () => y((e) => !e),
24
+ className: n(a, x && p !== x && "border-white/60 bg-white/10"),
25
+ children: [/* @__PURE__ */ u("span", {
25
26
  className: "whitespace-nowrap",
26
- children: y
27
- }), /* @__PURE__ */ s(i, {
28
- className: n("h-4 w-4 shrink-0 text-tertiary-alt transition-transform", h && "rotate-180"),
27
+ children: S
28
+ }), /* @__PURE__ */ u(i, {
29
+ className: n("h-4 w-4 shrink-0 text-tertiary-alt transition-transform", v && "rotate-180"),
29
30
  "aria-hidden": !0
30
31
  })]
31
- }), h ? /* @__PURE__ */ s("div", {
32
+ }), v ? /* @__PURE__ */ u("div", {
32
33
  role: "menu",
33
- "data-testid": `${l}-menu`,
34
- "aria-label": m(t.CONVERSATION_PANEL$FILTER_LABEL),
35
- className: n("absolute right-0 top-full z-50 mt-1 min-w-full w-max", "max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow"),
36
- children: f.map((e) => {
37
- let t = e === u;
38
- return /* @__PURE__ */ c("button", {
34
+ "data-testid": `${f}-menu`,
35
+ "aria-label": _(t.CONVERSATION_PANEL$FILTER_LABEL),
36
+ className: n("absolute right-0 top-full z-50 mt-1 min-w-full w-max", "max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow", o),
37
+ children: h.map((e) => {
38
+ let t = e === p;
39
+ return /* @__PURE__ */ d("button", {
39
40
  type: "button",
40
41
  role: "menuitemradio",
41
42
  "aria-checked": t,
42
- "data-testid": `${l}-${e}`,
43
+ "data-testid": `${f}-${e}`,
43
44
  onClick: () => {
44
- d(e), g(!1);
45
+ m(e), y(!1);
45
46
  },
46
- className: n("flex w-full items-center gap-2 rounded px-2 py-2 text-left text-sm text-white", "hover:bg-[var(--oh-interactive-hover)] cursor-pointer", t && "bg-[var(--oh-interactive-selected)]"),
47
- children: [/* @__PURE__ */ s("span", {
47
+ className: n(s, t && "bg-[var(--oh-interactive-selected)]"),
48
+ children: [/* @__PURE__ */ u("span", {
48
49
  className: "min-w-0 flex-1 truncate",
49
- children: m(p[e])
50
- }), t ? /* @__PURE__ */ s(r, {
50
+ children: _(g[e])
51
+ }), t ? /* @__PURE__ */ u(r, {
51
52
  className: "h-4 w-4 shrink-0",
52
53
  "aria-hidden": !0
53
54
  }) : null]
@@ -57,6 +58,6 @@ function l({ testId: l, value: u, onChange: d, options: f, labelKeyByValue: p })
57
58
  });
58
59
  }
59
60
  //#endregion
60
- export { l as EnumFilterDropdown };
61
+ export { f as EnumFilterDropdown };
61
62
 
62
63
  //# sourceMappingURL=enum-filter-dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enum-filter-dropdown.js","names":[],"sources":["../../../../src/components/shared/filters/enum-filter-dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { cn } from \"#/utils/utils\";\n\ninterface EnumFilterDropdownProps<T extends string> {\n testId: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n labelKeyByValue: Record<T, I18nKey>;\n}\n\nexport function EnumFilterDropdown<T extends string>({\n testId,\n value,\n onChange,\n options,\n labelKeyByValue,\n}: EnumFilterDropdownProps<T>) {\n const { t } = useTranslation(\"openhands\");\n const [open, setOpen] = React.useState(false);\n const containerRef = useClickOutsideElement<HTMLDivElement>(() =>\n setOpen(false),\n );\n\n const defaultOption = options[0];\n const selectedLabel = t(labelKeyByValue[value]);\n\n return (\n <div\n ref={containerRef}\n className=\"relative shrink-0 w-auto\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n data-testid=\"dropdown-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium transition-colors cursor-pointer\",\n \"border-[var(--oh-border)] bg-base-secondary text-white\",\n \"focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20\",\n defaultOption &&\n value !== defaultOption &&\n \"border-white/60 bg-white/10\",\n )}\n >\n <span className=\"whitespace-nowrap\">{selectedLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-tertiary-alt transition-transform\",\n open && \"rotate-180\",\n )}\n aria-hidden\n />\n </button>\n\n {open ? (\n <div\n role=\"menu\"\n data-testid={`${testId}-menu`}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-full w-max\",\n \"max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow\",\n )}\n >\n {options.map((option) => {\n const selected = option === value;\n return (\n <button\n key={option}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={selected}\n data-testid={`${testId}-${option}`}\n onClick={() => {\n onChange(option);\n setOpen(false);\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded px-2 py-2 text-left text-sm text-white\",\n \"hover:bg-[var(--oh-interactive-hover)] cursor-pointer\",\n selected && \"bg-[var(--oh-interactive-selected)]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {t(labelKeyByValue[option])}\n </span>\n {selected ? (\n <Check className=\"h-4 w-4 shrink-0\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,EAAqC,EACnD,WACA,UACA,aACA,YACA,sBAC6B;CAC7B,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,CAAC,GAAM,KAAW,EAAM,SAAS,GAAM,EACvC,IAAe,QACnB,EAAQ,GAAM,CACf,EAEK,IAAgB,EAAQ,IACxB,IAAgB,EAAE,EAAgB,GAAO;AAE/C,QACE,kBAAC,OAAD;EACE,KAAK;EACL,WAAU;EACV,eAAa;YAHf,CAKE,kBAAC,UAAD;GACE,MAAK;GACL,eAAY;GACZ,iBAAc;GACd,iBAAe;GACf,cAAY,EAAE,EAAQ,gCAAgC;GACtD,eAAe,GAAS,MAAS,CAAC,EAAK;GACvC,WAAW,EACT,qHACA,0DACA,6GACA,KACE,MAAU,KACV,8BACH;aAdH,CAgBE,kBAAC,QAAD;IAAM,WAAU;cAAqB;IAAqB,CAAA,EAC1D,kBAAC,GAAD;IACE,WAAW,EACT,2DACA,KAAQ,aACT;IACD,eAAA;IACA,CAAA,CACK;MAER,IACC,kBAAC,OAAD;GACE,MAAK;GACL,eAAa,GAAG,EAAO;GACvB,cAAY,EAAE,EAAQ,gCAAgC;GACtD,WAAW,EACT,wDACA,+EACD;aAEA,EAAQ,KAAK,MAAW;IACvB,IAAM,IAAW,MAAW;AAC5B,WACE,kBAAC,UAAD;KAEE,MAAK;KACL,MAAK;KACL,gBAAc;KACd,eAAa,GAAG,EAAO,GAAG;KAC1B,eAAe;AAEb,MADA,EAAS,EAAO,EAChB,EAAQ,GAAM;;KAEhB,WAAW,EACT,iFACA,yDACA,KAAY,sCACb;eAdH,CAgBE,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAgB,GAAQ;MACtB,CAAA,EACN,IACC,kBAAC,GAAD;MAAO,WAAU;MAAmB,eAAA;MAAc,CAAA,GAChD,KACG;OArBF,EAqBE;KAEX;GACE,CAAA,GACJ,KACA"}
1
+ {"version":3,"file":"enum-filter-dropdown.js","names":[],"sources":["../../../../src/components/shared/filters/enum-filter-dropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownFilterTriggerClassName,\n dropdownMenuListClassName,\n dropdownMenuRowClassName,\n} from \"#/utils/dropdown-classes\";\n\ninterface EnumFilterDropdownProps<T extends string> {\n testId: string;\n value: T;\n onChange: (value: T) => void;\n options: readonly T[];\n labelKeyByValue: Record<T, I18nKey>;\n}\n\nexport function EnumFilterDropdown<T extends string>({\n testId,\n value,\n onChange,\n options,\n labelKeyByValue,\n}: EnumFilterDropdownProps<T>) {\n const { t } = useTranslation(\"openhands\");\n const [open, setOpen] = React.useState(false);\n const containerRef = useClickOutsideElement<HTMLDivElement>(() =>\n setOpen(false),\n );\n\n const defaultOption = options[0];\n const selectedLabel = t(labelKeyByValue[value]);\n\n return (\n <div\n ref={containerRef}\n className=\"relative shrink-0 w-auto\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n data-testid=\"dropdown-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n onClick={() => setOpen((prev) => !prev)}\n className={cn(\n dropdownFilterTriggerClassName,\n defaultOption &&\n value !== defaultOption &&\n \"border-white/60 bg-white/10\",\n )}\n >\n <span className=\"whitespace-nowrap\">{selectedLabel}</span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-tertiary-alt transition-transform\",\n open && \"rotate-180\",\n )}\n aria-hidden\n />\n </button>\n\n {open ? (\n <div\n role=\"menu\"\n data-testid={`${testId}-menu`}\n aria-label={t(I18nKey.CONVERSATION_PANEL$FILTER_LABEL)}\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-full w-max\",\n \"max-h-60 overflow-auto rounded-[6px] bg-tertiary p-1 context-menu-box-shadow\",\n dropdownMenuListClassName,\n )}\n >\n {options.map((option) => {\n const selected = option === value;\n return (\n <button\n key={option}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={selected}\n data-testid={`${testId}-${option}`}\n onClick={() => {\n onChange(option);\n setOpen(false);\n }}\n className={cn(\n dropdownMenuRowClassName,\n selected && \"bg-[var(--oh-interactive-selected)]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {t(labelKeyByValue[option])}\n </span>\n {selected ? (\n <Check className=\"h-4 w-4 shrink-0\" aria-hidden />\n ) : null}\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAgB,EAAqC,EACnD,WACA,UACA,aACA,YACA,sBAC6B;CAC7B,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,CAAC,GAAM,KAAW,EAAM,SAAS,GAAM,EACvC,IAAe,QACnB,EAAQ,GAAM,CACf,EAEK,IAAgB,EAAQ,IACxB,IAAgB,EAAE,EAAgB,GAAO;AAE/C,QACE,kBAAC,OAAD;EACE,KAAK;EACL,WAAU;EACV,eAAa;YAHf,CAKE,kBAAC,UAAD;GACE,MAAK;GACL,eAAY;GACZ,iBAAc;GACd,iBAAe;GACf,cAAY,EAAE,EAAQ,gCAAgC;GACtD,eAAe,GAAS,MAAS,CAAC,EAAK;GACvC,WAAW,EACT,GACA,KACE,MAAU,KACV,8BACH;aAZH,CAcE,kBAAC,QAAD;IAAM,WAAU;cAAqB;IAAqB,CAAA,EAC1D,kBAAC,GAAD;IACE,WAAW,EACT,2DACA,KAAQ,aACT;IACD,eAAA;IACA,CAAA,CACK;MAER,IACC,kBAAC,OAAD;GACE,MAAK;GACL,eAAa,GAAG,EAAO;GACvB,cAAY,EAAE,EAAQ,gCAAgC;GACtD,WAAW,EACT,wDACA,gFACA,EACD;aAEA,EAAQ,KAAK,MAAW;IACvB,IAAM,IAAW,MAAW;AAC5B,WACE,kBAAC,UAAD;KAEE,MAAK;KACL,MAAK;KACL,gBAAc;KACd,eAAa,GAAG,EAAO,GAAG;KAC1B,eAAe;AAEb,MADA,EAAS,EAAO,EAChB,EAAQ,GAAM;;KAEhB,WAAW,EACT,GACA,KAAY,sCACb;eAbH,CAeE,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAgB,GAAQ;MACtB,CAAA,EACN,IACC,kBAAC,GAAD;MAAO,WAAU;MAAmB,eAAA;MAAc,CAAA,GAChD,KACG;OApBF,EAoBE;KAEX;GACE,CAAA,GACJ,KACA"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../../utils/utils.cjs`),n=require(`../modal-body.cjs`),r=require(`../../buttons/modal-button.cjs`);let i=require(`react`);i=e.__toESM(i,1);let a=require(`react/jsx-runtime`);function o({title:e,id:n,className:r}){return(0,a.jsx)(`span`,{id:n,className:t.cn(`text-xl leading-6 -tracking-[0.01em] font-medium text-content-2`,r),children:e})}function s({description:e,children:t}){return(0,a.jsx)(`span`,{className:`text-xs text-modal-muted`,children:t||e})}function c({testId:e,title:t,description:i,buttons:c}){return(0,a.jsxs)(n.ModalBody,{testID:e,children:[(0,a.jsxs)(`div`,{className:`flex flex-col gap-2 self-start`,children:[(0,a.jsx)(o,{title:t}),(0,a.jsx)(s,{description:i})]}),(0,a.jsx)(`div`,{className:`flex flex-col gap-2 w-full`,children:c.map((e,t)=>(0,a.jsx)(r.ModalButton,{onClick:e.onClick,text:e.text,className:e.className},t))})]})}exports.BaseModal=c,exports.BaseModalDescription=s,exports.BaseModalTitle=o;
1
+ const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../../utils/utils.cjs`),n=require(`../modal-body.cjs`),r=require(`../../buttons/modal-button.cjs`),i=require(`../../../../utils/modal-classes.cjs`);let a=require(`react`);a=e.__toESM(a,1);let o=require(`react/jsx-runtime`);function s({title:e,id:n,className:r}){return(0,o.jsx)(`span`,{id:n,className:t.cn(i.modalTitleClassName,r),children:e})}function c({description:e,children:t}){return(0,o.jsx)(`span`,{className:`text-xs text-modal-muted`,children:t||e})}function l({testId:e,title:t,description:i,buttons:a}){return(0,o.jsxs)(n.ModalBody,{testID:e,children:[(0,o.jsxs)(`div`,{className:`flex flex-col gap-2 self-start`,children:[(0,o.jsx)(s,{title:t}),(0,o.jsx)(c,{description:i})]}),(0,o.jsx)(`div`,{className:`flex flex-col gap-2 w-full`,children:a.map((e,t)=>(0,o.jsx)(r.ModalButton,{onClick:e.onClick,text:e.text,className:e.className},t))})]})}exports.BaseModal=l,exports.BaseModalDescription=c,exports.BaseModalTitle=s;
2
2
  //# sourceMappingURL=base-modal.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-modal.cjs","names":[],"sources":["../../../../../src/components/shared/modals/confirmation-modals/base-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { ModalBody } from \"../modal-body\";\nimport { ModalButton } from \"../../buttons/modal-button\";\nimport { cn } from \"#/utils/utils\";\n\ninterface ButtonConfig {\n text: string;\n onClick: () => void;\n className: React.HTMLProps<HTMLButtonElement>[\"className\"];\n}\n\ninterface BaseModalTitleProps {\n title: React.ReactNode;\n id?: string;\n className?: string;\n}\n\nexport function BaseModalTitle({ title, id, className }: BaseModalTitleProps) {\n return (\n <span\n id={id}\n className={cn(\n \"text-xl leading-6 -tracking-[0.01em] font-medium text-content-2\",\n className,\n )}\n >\n {title}\n </span>\n );\n}\n\ninterface BaseModalDescriptionProps {\n description?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nexport function BaseModalDescription({\n description,\n children,\n}: BaseModalDescriptionProps) {\n return (\n <span className=\"text-xs text-modal-muted\">{children || description}</span>\n );\n}\n\ninterface BaseModalProps {\n testId?: string;\n title: string;\n description: string;\n buttons: ButtonConfig[];\n}\n\nexport function BaseModal({\n testId,\n title,\n description,\n buttons,\n}: BaseModalProps) {\n return (\n <ModalBody testID={testId}>\n <div className=\"flex flex-col gap-2 self-start\">\n <BaseModalTitle title={title} />\n <BaseModalDescription description={description} />\n </div>\n\n <div className=\"flex flex-col gap-2 w-full\">\n {buttons.map((button, index) => (\n <ModalButton\n key={index}\n onClick={button.onClick}\n text={button.text}\n className={button.className}\n />\n ))}\n </div>\n </ModalBody>\n );\n}\n"],"mappings":"6PAiBA,SAAgB,EAAe,CAAE,QAAO,KAAI,aAAkC,CAC5E,OACE,EAAA,EAAA,KAAC,OAAD,CACM,KACJ,UAAW,EAAA,GACT,kEACA,EACD,UAEA,EACI,CAAA,CASX,SAAgB,EAAqB,CACnC,cACA,YAC4B,CAC5B,OACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAA4B,GAAY,EAAmB,CAAA,CAW/E,SAAgB,EAAU,CACxB,SACA,QACA,cACA,WACiB,CACjB,OACE,EAAA,EAAA,MAAC,EAAA,UAAD,CAAW,OAAQ,WAAnB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAuB,QAAS,CAAA,EAChC,EAAA,EAAA,KAAC,EAAD,CAAmC,cAAe,CAAA,CAC9C,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sCACZ,EAAQ,KAAK,EAAQ,KACpB,EAAA,EAAA,KAAC,EAAA,YAAD,CAEE,QAAS,EAAO,QAChB,KAAM,EAAO,KACb,UAAW,EAAO,UAClB,CAJK,EAIL,CACF,CACE,CAAA,CACI"}
1
+ {"version":3,"file":"base-modal.cjs","names":[],"sources":["../../../../../src/components/shared/modals/confirmation-modals/base-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { ModalBody } from \"../modal-body\";\nimport { ModalButton } from \"../../buttons/modal-button\";\nimport { cn } from \"#/utils/utils\";\nimport { modalTitleClassName } from \"#/utils/modal-classes\";\n\ninterface ButtonConfig {\n text: string;\n onClick: () => void;\n className: React.HTMLProps<HTMLButtonElement>[\"className\"];\n}\n\ninterface BaseModalTitleProps {\n title: React.ReactNode;\n id?: string;\n className?: string;\n}\n\nexport function BaseModalTitle({ title, id, className }: BaseModalTitleProps) {\n return (\n <span id={id} className={cn(modalTitleClassName, className)}>\n {title}\n </span>\n );\n}\n\ninterface BaseModalDescriptionProps {\n description?: React.ReactNode;\n children?: React.ReactNode;\n}\n\nexport function BaseModalDescription({\n description,\n children,\n}: BaseModalDescriptionProps) {\n return (\n <span className=\"text-xs text-modal-muted\">{children || description}</span>\n );\n}\n\ninterface BaseModalProps {\n testId?: string;\n title: string;\n description: string;\n buttons: ButtonConfig[];\n}\n\nexport function BaseModal({\n testId,\n title,\n description,\n buttons,\n}: BaseModalProps) {\n return (\n <ModalBody testID={testId}>\n <div className=\"flex flex-col gap-2 self-start\">\n <BaseModalTitle title={title} />\n <BaseModalDescription description={description} />\n </div>\n\n <div className=\"flex flex-col gap-2 w-full\">\n {buttons.map((button, index) => (\n <ModalButton\n key={index}\n onClick={button.onClick}\n text={button.text}\n className={button.className}\n />\n ))}\n </div>\n </ModalBody>\n );\n}\n"],"mappings":"8SAkBA,SAAgB,EAAe,CAAE,QAAO,KAAI,aAAkC,CAC5E,OACE,EAAA,EAAA,KAAC,OAAD,CAAU,KAAI,UAAW,EAAA,GAAG,EAAA,oBAAqB,EAAU,UACxD,EACI,CAAA,CASX,SAAgB,EAAqB,CACnC,cACA,YAC4B,CAC5B,OACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAA4B,GAAY,EAAmB,CAAA,CAW/E,SAAgB,EAAU,CACxB,SACA,QACA,cACA,WACiB,CACjB,OACE,EAAA,EAAA,MAAC,EAAA,UAAD,CAAW,OAAQ,WAAnB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAuB,QAAS,CAAA,EAChC,EAAA,EAAA,KAAC,EAAD,CAAmC,cAAe,CAAA,CAC9C,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sCACZ,EAAQ,KAAK,EAAQ,KACpB,EAAA,EAAA,KAAC,EAAA,YAAD,CAEE,QAAS,EAAO,QAChB,KAAM,EAAO,KACb,UAAW,EAAO,UAClB,CAJK,EAIL,CACF,CACE,CAAA,CACI"}