@openhands/agent-canvas 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-DLe_gVDY.js → acp-providers-BkL3HWa3.js} +1 -1
  4. package/build/assets/{active-backend-context-B0wI7OzM.js → active-backend-context-B_bg5h9O.js} +1 -1
  5. package/build/assets/{agent-context-settings-CaQtdNA-.js → agent-context-settings-CzWS1DgR.js} +1 -1
  6. package/build/assets/{agent-profiles-settings-CvuErjp6.js → agent-profiles-settings-hd2cAIZM.js} +1 -1
  7. package/build/assets/agent-server-conversation-service.api-BheU4HX3.js +86 -0
  8. package/build/assets/{agent-settings-UE-U4Xii.js → agent-settings-D2J1dKVd.js} +1 -1
  9. package/build/assets/agent-settings-D_SVrWhI.js +1 -0
  10. package/build/assets/{alert-banner-BMaOtTCG.js → alert-banner-lrK-2_0Y.js} +1 -1
  11. package/build/assets/{api-key-entry-screen-Cy66vT4D.js → api-key-entry-screen-D70oJj2c.js} +1 -1
  12. package/build/assets/app-settings-D0OKHB3M.js +1 -0
  13. package/build/assets/{automation-detail-fuITm6i3.js → automation-detail-C0SxWTnQ.js} +3 -3
  14. package/build/assets/{automation-export-CRq40mux.js → automation-export-BjQa_fT6.js} +1 -1
  15. package/build/assets/{automation-setup-route-EXDazOHW.js → automation-setup-route-BzCNpljP.js} +1 -1
  16. package/build/assets/{automation-templates-BArZsaxP.js → automation-templates-D9gs6ihu.js} +1 -1
  17. package/build/assets/{automations-list-CG4HKOTn.js → automations-list-dZg8zOCl.js} +1 -1
  18. package/build/assets/{back-nav-button-BZB6H7xz.js → back-nav-button-B3pYwmUJ.js} +1 -1
  19. package/build/assets/{backend-form-modal-B_lXjOGa.js → backend-form-modal-HwclKrUS.js} +1 -1
  20. package/build/assets/{backend-synced-settings-badge-B_NXJ3u1.js → backend-synced-settings-badge-YI3k09Wr.js} +1 -1
  21. package/build/assets/{badge-C64c-7PO.js → badge-Dpn3-LTV.js} +1 -1
  22. package/build/assets/{base-modal-C0RQPug5.js → base-modal-3NmIOKDm.js} +1 -1
  23. package/build/assets/{brand-button-DJmFCyMK.js → brand-button-CJcwjnfb.js} +1 -1
  24. package/build/assets/{browser-D3gd2n83.js → browser--eoQOo4M.js} +1 -1
  25. package/build/assets/{browser-tab-BicAWuJ1.js → browser-tab-4CPdj3J3.js} +1 -1
  26. package/build/assets/{chat-send-button-CCrH1E8u.js → chat-send-button-B8n6-DQA.js} +1 -1
  27. package/build/assets/{circle-plus-check-toggle-CB_sNERY.js → circle-plus-check-toggle-BVzv5EkZ.js} +1 -1
  28. package/build/assets/{cloud-funnel-analytics-XynamQGU.js → cloud-funnel-analytics-CcSez21r.js} +1 -1
  29. package/build/assets/{combobox-caret-Bwiifgjs.js → combobox-caret-BlmRwiM8.js} +1 -1
  30. package/build/assets/command-menu-BKOLj-TC.js +1 -0
  31. package/build/assets/{condenser-settings-cNGy75gq.js → condenser-settings-DLQogFnB.js} +1 -1
  32. package/build/assets/{confirmation-modal-BATFmFyP.js → confirmation-modal-DAH0XtOp.js} +1 -1
  33. package/build/assets/{context-menu-list-item-DhJCcBA0.js → context-menu-list-item-BQhmFVEK.js} +1 -1
  34. package/build/assets/{conversation-Csdxh9Xt.js → conversation-Cmyw9bFh.js} +4 -4
  35. package/build/assets/conversation-CvoGZ5vC.js +1 -0
  36. package/build/assets/conversation-panel-CvoGZ5vC.js +1 -0
  37. package/build/assets/{conversation-state-store-C2QzhPaK.js → conversation-state-store-CtgILxWF.js} +1 -1
  38. package/build/assets/{conversation-tab-empty-state-D3fb5xIA.js → conversation-tab-empty-state-C9sfDOlt.js} +1 -1
  39. package/build/assets/{copy-to-clipboard-button-c4MQwKGj.js → copy-to-clipboard-button-DatoElj8.js} +1 -1
  40. package/build/assets/{device-verify-oFpQoLgm.js → device-verify-BIjXeW9N.js} +1 -1
  41. package/build/assets/{dropdown-classes-f91ARMV1.js → dropdown-classes-zFW7qPSK.js} +1 -1
  42. package/build/assets/{entry.client-BCzY2Bf3.js → entry.client-EBn3ZtNP.js} +2 -2
  43. package/build/assets/{enum-filter-dropdown-HG3q3rkV.js → enum-filter-dropdown-CctILg5t.js} +1 -1
  44. package/build/assets/{environment-switch-overlay-CquZXolz.js → environment-switch-overlay-Cvmo6clk.js} +1 -1
  45. package/build/assets/{extensions-hub-BeweE0PW.js → extensions-hub-BZ3HYztk.js} +1 -1
  46. package/build/assets/{extensions-navigation-Dd58NlUF.js → extensions-navigation-Bnx32WAb.js} +1 -1
  47. package/build/assets/{files-tab-CLLG55-q.js → files-tab-D5zuU5TY.js} +1 -1
  48. package/build/assets/{form-control-classes-pHtZUI6K.js → form-control-classes-DLN3Qgub.js} +1 -1
  49. package/build/assets/format-model-name-BN_rx1Y3.js +1 -0
  50. package/build/assets/{format-relative-time-6-3uvOXe.js → format-relative-time-BerVamGl.js} +1 -1
  51. package/build/assets/{git-provider-icon-wg7ShB98.js → git-provider-icon-zuKz2cwo.js} +1 -1
  52. package/build/assets/{git-repo-dropdown-CWnaUyxL.js → git-repo-dropdown-B5VnMftu.js} +1 -1
  53. package/build/assets/git-repo-dropdown-Bo7ciSNX.js +1 -0
  54. package/build/assets/{highlighted-source-view-DBtI3por.js → highlighted-source-view-CgJfD5VT.js} +1 -1
  55. package/build/assets/home-DqyeeFA_.js +1 -0
  56. package/build/assets/{home-BpZQkDWM.js → home-Y0aDou-a.js} +1 -1
  57. package/build/assets/{home-store-DM4qw1lF.js → home-store-Cubdq0uP.js} +1 -1
  58. package/build/assets/index-home-DqyeeFA_.js +1 -0
  59. package/build/assets/install-server-modal-DW6dSyGr.js +1 -0
  60. package/build/assets/{kebab-menu-item-content-By16Tm_0.js → kebab-menu-item-content-CKydZrbH.js} +1 -1
  61. package/build/assets/{launch-C9uijypN.js → launch-c4GEP8oo.js} +1 -1
  62. package/build/assets/llm-not-configured-banner-DCE_0B4I.js +27 -0
  63. package/build/assets/llm-settings-8eWBF3Ij.js +1 -0
  64. package/build/assets/llm-settings-D9ko42Pi.js +1 -0
  65. package/build/assets/{llm-subscription-service-DwjJ8-_X.js → llm-subscription-service-B3K-97lP.js} +1 -1
  66. package/build/assets/{loading-spinner-6Yj-YyoS.js → loading-spinner-CN3riY7k.js} +1 -1
  67. package/build/assets/{manage-backends-modal-DrwErS0N.js → manage-backends-modal-DTCME_Pu.js} +1 -1
  68. package/build/assets/manifest-e1c3bc3b.js +1 -0
  69. package/build/assets/{manifest-subpage-layout-CtqVwIvJ.js → manifest-subpage-layout-Ds7G5GZ8.js} +1 -1
  70. package/build/assets/map-provider-7Bp2aih5.js +1 -0
  71. package/build/assets/markdown-renderer-DzvgdZey.js +8 -0
  72. package/build/assets/mcp-Da7wFU7A.js +9 -0
  73. package/build/assets/{mcp-marketplace-utils-BMnYz0Gc.js → mcp-marketplace-utils-DSLou4n7.js} +1 -1
  74. package/build/assets/messages-B2l0qLVk.js +40 -0
  75. package/build/assets/{modal-body-BHGCSAtj.js → modal-body-duRaxj_K.js} +1 -1
  76. package/build/assets/{modal-classes-DSTLuxkA.js → modal-classes-CLEXO6dj.js} +1 -1
  77. package/build/assets/{modal-close-button-dheWZ2ys.js → modal-close-button-D0aT02hs.js} +1 -1
  78. package/build/assets/npm-Cswluf6-.js +1 -0
  79. package/build/assets/{onboarding-5CZvRBbh.js → onboarding-BKbTYlW1.js} +1 -1
  80. package/build/assets/{onboarding-modal-CD2ehuxt.js → onboarding-modal-DrrGlEQq.js} +1 -1
  81. package/build/assets/{organization-service.api-Dsuoep0g.js → organization-service.api-DK8csGvK.js} +1 -1
  82. package/build/assets/{planner-tab-DeO7Thb0.js → planner-tab-D-mZ1I7n.js} +1 -1
  83. package/build/assets/{plugins-management-service-C9f75R6X.js → plugins-management-service-CywqyfLK.js} +1 -1
  84. package/build/assets/{profiles-service.api-Dl20_2IM.js → profiles-service.api-vcE_jJCe.js} +1 -1
  85. package/build/assets/{providers-CeuhK46N.js → providers-CdrPPm0z.js} +1 -1
  86. package/build/assets/{proxy-CIGI9zQC.js → proxy-b4aqL4SX.js} +1 -1
  87. package/build/assets/recommended-automations-launcher-DIYgUdMm.js +1 -0
  88. package/build/assets/{root-BQPNqNvD.js → root-CBBi6IAe.js} +2 -2
  89. package/build/assets/root-CRK9fOFd.css +1 -0
  90. package/build/assets/root-layout-BFN2rCOy.js +2 -0
  91. package/build/assets/{schema-field-z2vSLuLo.js → schema-field-Z-rMg9ti.js} +1 -1
  92. package/build/assets/{sdk-section-page-BnCXAytf.js → sdk-section-page-m_cjygxR.js} +1 -1
  93. package/build/assets/{secrets-service-DGUNlwQd.js → secrets-service-BHF4fxML.js} +1 -1
  94. package/build/assets/{secrets-settings-DUmML_dK.js → secrets-settings-aBGXtQhX.js} +1 -1
  95. package/build/assets/{segmented-toggle-eSofF7gn.js → segmented-toggle-SmvsR3jW.js} +1 -1
  96. package/build/assets/settings-CZPGNens.js +1 -0
  97. package/build/assets/{settings-dropdown-input-Cx4g7Xfl.js → settings-dropdown-input-TWIeiG02.js} +1 -1
  98. package/build/assets/{settings-index-BECdgecg.js → settings-index-Dtlegd6s.js} +1 -1
  99. package/build/assets/{settings-input-BQY115xH.js → settings-input-D61Vzp9e.js} +1 -1
  100. package/build/assets/{settings-list-classes-C9cLrrcc.js → settings-list-classes-sE0ASr1s.js} +1 -1
  101. package/build/assets/{settings-modal-ChBJNTdd.js → settings-modal-CalzJP2l.js} +1 -1
  102. package/build/assets/{settings-service.api-Dz9cZyvx.js → settings-service.api-DfPYaxZJ.js} +1 -1
  103. package/build/assets/{settings-switch-BIodMVz9.js → settings-switch-Drt-rF5s.js} +1 -1
  104. package/build/assets/{settings-utils-BL_Z9uIe.js → settings-utils-gw2ppAvw.js} +1 -1
  105. package/build/assets/{shared-conversation-CSF0aTuE.js → shared-conversation-BIAcuORk.js} +1 -1
  106. package/build/assets/{wrench-DRitTfwe.js → shield-check-D2cpEpv3.js} +1 -1
  107. package/build/assets/{sidebar-layout-DEycoFd_.js → sidebar-layout-Dxg6zc2K.js} +1 -1
  108. package/build/assets/{sidebar-mobile-menu-toggle-DeRvTupV.js → sidebar-mobile-menu-toggle-C6HpQ55l.js} +1 -1
  109. package/build/assets/{sidebar-nav-link-BjpQ-NVc.js → sidebar-nav-link-CxLoG-dG.js} +1 -1
  110. package/build/assets/sidebar-store-BJeYY-E9.js +1 -0
  111. package/build/assets/{skill-card-pill-row-BH6fPGba.js → skill-card-pill-row-B_BYBONu.js} +1 -1
  112. package/build/assets/{skill-icon-badge-D4uznfjU.js → skill-icon-badge-CN41Hy9l.js} +1 -1
  113. package/build/assets/{skill-scope-DH_AUUUP.js → skill-scope-Dt1V5X2p.js} +1 -1
  114. package/build/assets/{skills-plugins-vfvOk34h.js → skills-plugins-B-H0cCOP.js} +1 -1
  115. package/build/assets/skills-settings-DthdIDUb.js +2 -0
  116. package/build/assets/{styled-tooltip-CQ9JEFiO.js → styled-tooltip-C5C07RQC.js} +1 -1
  117. package/build/assets/{task-list-tab-DeF_uXdw.js → task-list-tab-BTde81Iu.js} +1 -1
  118. package/build/assets/{terminal-DRc4rup7.js → terminal-DRrJo-cR.js} +1 -1
  119. package/build/assets/{toggle-switch--8n8NeV_.js → toggle-switch-CIioisto.js} +1 -1
  120. package/build/assets/{typography-BSbUhJPn.js → typography-D9tiHct7.js} +1 -1
  121. package/build/assets/{use-acp-credential-form-BGKFi1VL.js → use-acp-credential-form-DGyo0QvL.js} +1 -1
  122. package/build/assets/{use-activate-agent-profile-2nvALjC-.js → use-activate-agent-profile-DrPzIKJF.js} +1 -1
  123. package/build/assets/{use-agent-profiles-BlQA67MW.js → use-agent-profiles-B37XWDLq.js} +1 -1
  124. package/build/assets/{use-can-manage-org-profiles-Clw5Dh1s.js → use-can-manage-org-profiles-BzE28H3x.js} +1 -1
  125. package/build/assets/{use-cloud-current-user-id-B8AQSQFM.js → use-cloud-current-user-id-U6HPjy50.js} +1 -1
  126. package/build/assets/{use-config-C3zGuUQI.js → use-config-DapX3pjC.js} +1 -1
  127. package/build/assets/{use-create-conversation-FaP0kUpg.js → use-create-conversation-CRf1dCm5.js} +1 -1
  128. package/build/assets/{use-create-secret-CgQ3pXd6.js → use-create-secret-DcpT3RPw.js} +1 -1
  129. package/build/assets/{use-llm-profiles-C-tDO6UB.js → use-llm-profiles-CHxqoHiN.js} +1 -1
  130. package/build/assets/{use-manifest-capabilities-DLP5wCxp.js → use-manifest-capabilities-zihHDbMW.js} +1 -1
  131. package/build/assets/{use-onboarding-completion-BiCdXvlU.js → use-onboarding-completion-6kWOW3ul.js} +1 -1
  132. package/build/assets/{use-plugins-marketplace-DRFNLBlr.js → use-plugins-marketplace-CqkR8kLE.js} +1 -1
  133. package/build/assets/{use-save-agent-profile-CaGVAudI.js → use-save-agent-profile-CH9_EXQG.js} +1 -1
  134. package/build/assets/{use-save-settings-C9B8Y-h3.js → use-save-settings-DIEurJ3D.js} +1 -1
  135. package/build/assets/{use-settings-3RcgdUuZ.js → use-settings-BmLzQjnC.js} +1 -1
  136. package/build/assets/use-settings-nav-items-DV9qgeu7.js +16 -0
  137. package/build/assets/{use-tracking-CTtkLAmx.js → use-tracking-salbPJxT.js} +1 -1
  138. package/build/assets/{use-user-conversation-Bei82QsZ.js → use-user-conversation-Dt-W6uNw.js} +1 -1
  139. package/build/assets/utils-DPQfkd-7.js +1 -0
  140. package/build/assets/{verification-settings-nD61Ijph.js → verification-settings-oi54wEc1.js} +1 -1
  141. package/build/assets/wrench-B1_H-tL1.js +1 -0
  142. package/build/index.html +4 -4
  143. package/build/locales/ar/openhands.json +39 -2
  144. package/build/locales/ca/openhands.json +39 -2
  145. package/build/locales/de/openhands.json +39 -2
  146. package/build/locales/en/openhands.json +39 -2
  147. package/build/locales/es/openhands.json +39 -2
  148. package/build/locales/fr/openhands.json +39 -2
  149. package/build/locales/it/openhands.json +39 -2
  150. package/build/locales/ja/openhands.json +39 -2
  151. package/build/locales/ko-KR/openhands.json +39 -2
  152. package/build/locales/no/openhands.json +39 -2
  153. package/build/locales/pt/openhands.json +39 -2
  154. package/build/locales/tr/openhands.json +39 -2
  155. package/build/locales/uk/openhands.json +39 -2
  156. package/build/locales/zh-CN/openhands.json +39 -2
  157. package/build/locales/zh-TW/openhands.json +39 -2
  158. package/config/defaults.json +1 -1
  159. package/dist/api/agent-server-adapter.cjs +3 -3
  160. package/dist/api/agent-server-adapter.cjs.map +1 -1
  161. package/dist/api/agent-server-adapter.d.ts +32 -5
  162. package/dist/api/agent-server-adapter.js +120 -91
  163. package/dist/api/agent-server-adapter.js.map +1 -1
  164. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  165. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  166. package/dist/api/cloud/conversation-service.api.d.ts +19 -2
  167. package/dist/api/cloud/conversation-service.api.js +51 -47
  168. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  169. package/dist/api/conversation-file-upload.api.cjs +1 -1
  170. package/dist/api/conversation-file-upload.api.js +10 -10
  171. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  172. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  173. package/dist/api/conversation-service/agent-server-conversation-service.api.js +55 -61
  174. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  175. package/dist/api/event-service/event-service.api.cjs +1 -1
  176. package/dist/api/event-service/event-service.api.js +12 -12
  177. package/dist/api/launch-child-conversation-client-tool.cjs +47 -0
  178. package/dist/api/launch-child-conversation-client-tool.cjs.map +1 -0
  179. package/dist/api/launch-child-conversation-client-tool.d.ts +3 -0
  180. package/dist/api/launch-child-conversation-client-tool.js +93 -0
  181. package/dist/api/launch-child-conversation-client-tool.js.map +1 -0
  182. package/dist/api/open-hands.types.d.ts +1 -1
  183. package/dist/api/workspace-upload-path.cjs +1 -1
  184. package/dist/api/workspace-upload-path.js +8 -8
  185. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +1 -1
  186. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -1
  187. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +24 -18
  188. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -1
  189. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  190. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  191. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +5 -0
  192. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  193. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -2
  194. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  195. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +11 -7
  196. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  197. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
  198. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
  199. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +61 -60
  200. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
  201. package/dist/components/features/chat/model-messages.cjs +1 -1
  202. package/dist/components/features/chat/model-messages.cjs.map +1 -1
  203. package/dist/components/features/chat/model-messages.js +26 -25
  204. package/dist/components/features/chat/model-messages.js.map +1 -1
  205. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -2
  206. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  207. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +2 -8
  208. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +50 -53
  209. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  210. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs +2 -0
  211. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs.map +1 -0
  212. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.d.ts +12 -0
  213. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js +6 -0
  214. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js.map +1 -0
  215. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  216. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  217. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +16 -1
  218. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +95 -78
  219. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  220. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs +1 -1
  221. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs.map +1 -1
  222. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js +40 -38
  223. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js.map +1 -1
  224. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +2 -0
  225. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -0
  226. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +14 -0
  227. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +167 -0
  228. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -0
  229. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +2 -0
  230. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -0
  231. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +63 -0
  232. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +66 -0
  233. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -0
  234. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs +2 -0
  235. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs.map +1 -0
  236. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.d.ts +15 -0
  237. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js +117 -0
  238. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js.map +1 -0
  239. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs +1 -1
  240. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs.map +1 -1
  241. package/dist/components/features/conversation-panel/conversation-card/no-repository.js +30 -19
  242. package/dist/components/features/conversation-panel/conversation-card/no-repository.js.map +1 -1
  243. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  244. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  245. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +7 -2
  246. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +146 -104
  247. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  248. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  249. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  250. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +20 -0
  251. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +53 -27
  252. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  253. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  254. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  255. package/dist/components/features/conversation-panel/conversation-panel.js +226 -213
  256. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  257. package/dist/components/features/settings/agent-canvas-update-card.cjs +1 -1
  258. package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -1
  259. package/dist/components/features/settings/agent-canvas-update-card.d.ts +10 -5
  260. package/dist/components/features/settings/agent-canvas-update-card.js +223 -149
  261. package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -1
  262. package/dist/components/features/settings/agent-canvas-version-modal.cjs +2 -0
  263. package/dist/components/features/settings/agent-canvas-version-modal.cjs.map +1 -0
  264. package/dist/components/features/settings/agent-canvas-version-modal.d.ts +11 -0
  265. package/dist/components/features/settings/agent-canvas-version-modal.js +166 -0
  266. package/dist/components/features/settings/agent-canvas-version-modal.js.map +1 -0
  267. package/dist/components/features/settings/agent-canvas-version-tile.cjs +2 -0
  268. package/dist/components/features/settings/agent-canvas-version-tile.cjs.map +1 -0
  269. package/dist/components/features/settings/agent-canvas-version-tile.d.ts +13 -0
  270. package/dist/components/features/settings/agent-canvas-version-tile.js +60 -0
  271. package/dist/components/features/settings/agent-canvas-version-tile.js.map +1 -0
  272. package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
  273. package/dist/components/features/settings/llm-profiles/profile-row.js +1 -0
  274. package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
  275. package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
  276. package/dist/components/features/settings/settings-desktop-sidebar.js +1 -1
  277. package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
  278. package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
  279. package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
  280. package/dist/components/features/settings/settings-mobile-drawer.js +1 -1
  281. package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
  282. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  283. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  284. package/dist/components/features/sidebar/sidebar-rail-body.js +109 -108
  285. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  286. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  287. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  288. package/dist/components/features/skills/extensions-navigation.js +9 -9
  289. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  290. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  291. package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
  292. package/dist/components/shared/modals/settings/model-selector.js +154 -98
  293. package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
  294. package/dist/config/defaults.cjs +1 -1
  295. package/dist/config/defaults.cjs.map +1 -1
  296. package/dist/config/defaults.js +1 -1
  297. package/dist/config/defaults.js.map +1 -1
  298. package/dist/constants/child-conversation.cjs +2 -0
  299. package/dist/constants/child-conversation.cjs.map +1 -0
  300. package/dist/constants/child-conversation.d.ts +29 -0
  301. package/dist/constants/child-conversation.js +6 -0
  302. package/dist/constants/child-conversation.js.map +1 -0
  303. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  304. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  305. package/dist/contexts/conversation-websocket-context.js +189 -188
  306. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  307. package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
  308. package/dist/hooks/chat/use-model-interceptor.js +6 -6
  309. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  310. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  311. package/dist/hooks/chat/use-slash-command.js +61 -60
  312. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  313. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  314. package/dist/hooks/mutation/use-create-conversation.js +6 -6
  315. package/dist/i18n/declaration.cjs +1 -1
  316. package/dist/i18n/declaration.cjs.map +1 -1
  317. package/dist/i18n/declaration.d.ts +38 -1
  318. package/dist/i18n/declaration.js +1 -1
  319. package/dist/i18n/declaration.js.map +1 -1
  320. package/dist/i18n/translation.cjs +2 -2
  321. package/dist/i18n/translation.cjs.map +1 -1
  322. package/dist/i18n/translation.js +644 -15
  323. package/dist/i18n/translation.js.map +1 -1
  324. package/dist/icons/docker.cjs +2 -0
  325. package/dist/icons/docker.cjs.map +1 -0
  326. package/dist/icons/docker.js +19 -0
  327. package/dist/icons/docker.js.map +1 -0
  328. package/dist/icons/npm.cjs +2 -0
  329. package/dist/icons/npm.cjs.map +1 -0
  330. package/dist/icons/npm.js +19 -0
  331. package/dist/icons/npm.js.map +1 -0
  332. package/dist/locales/ar/openhands.json +39 -2
  333. package/dist/locales/ca/openhands.json +39 -2
  334. package/dist/locales/de/openhands.json +39 -2
  335. package/dist/locales/en/openhands.json +39 -2
  336. package/dist/locales/es/openhands.json +39 -2
  337. package/dist/locales/fr/openhands.json +39 -2
  338. package/dist/locales/it/openhands.json +39 -2
  339. package/dist/locales/ja/openhands.json +39 -2
  340. package/dist/locales/ko-KR/openhands.json +39 -2
  341. package/dist/locales/no/openhands.json +39 -2
  342. package/dist/locales/pt/openhands.json +39 -2
  343. package/dist/locales/tr/openhands.json +39 -2
  344. package/dist/locales/uk/openhands.json +39 -2
  345. package/dist/locales/zh-CN/openhands.json +39 -2
  346. package/dist/locales/zh-TW/openhands.json +39 -2
  347. package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
  348. package/dist/node_modules/@openhands/typescript-client/dist/index.js +1 -1
  349. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs +2 -0
  350. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs.map +1 -0
  351. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +16 -0
  352. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +1 -0
  353. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs +2 -0
  354. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs.map +1 -0
  355. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js +27 -0
  356. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js.map +1 -0
  357. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs +2 -0
  358. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs.map +1 -0
  359. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js +21 -0
  360. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js.map +1 -0
  361. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs +2 -0
  362. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs.map +1 -0
  363. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js +23 -0
  364. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js.map +1 -0
  365. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs +2 -0
  366. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs.map +1 -0
  367. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js +43 -0
  368. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js.map +1 -0
  369. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs +2 -0
  370. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs.map +1 -0
  371. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js +25 -0
  372. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js.map +1 -0
  373. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs +2 -0
  374. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs.map +1 -0
  375. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +9 -0
  376. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
  377. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs +2 -0
  378. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs.map +1 -0
  379. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js +27 -0
  380. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js.map +1 -0
  381. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs +2 -0
  382. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs.map +1 -0
  383. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js +25 -0
  384. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js.map +1 -0
  385. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs +2 -0
  386. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs.map +1 -0
  387. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js +30 -0
  388. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js.map +1 -0
  389. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs +2 -0
  390. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs.map +1 -0
  391. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js +35 -0
  392. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js.map +1 -0
  393. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs +2 -0
  394. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs.map +1 -0
  395. package/dist/node_modules/lucide-react/dist/esm/icons/house.js +12 -0
  396. package/dist/node_modules/lucide-react/dist/esm/icons/house.js.map +1 -0
  397. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs +2 -0
  398. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs.map +1 -0
  399. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js +33 -0
  400. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js.map +1 -0
  401. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs +2 -0
  402. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs.map +1 -0
  403. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +15 -0
  404. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js.map +1 -0
  405. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs +2 -0
  406. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs.map +1 -0
  407. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js +19 -0
  408. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js.map +1 -0
  409. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs +2 -0
  410. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs.map +1 -0
  411. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js +22 -0
  412. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js.map +1 -0
  413. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs +2 -0
  414. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs.map +1 -0
  415. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js +23 -0
  416. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js.map +1 -0
  417. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs +2 -0
  418. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs.map +1 -0
  419. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js +12 -0
  420. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js.map +1 -0
  421. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs +2 -0
  422. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs.map +1 -0
  423. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +23 -0
  424. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js.map +1 -0
  425. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs +2 -0
  426. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs.map +1 -0
  427. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js +27 -0
  428. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js.map +1 -0
  429. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs +2 -0
  430. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs.map +1 -0
  431. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js +23 -0
  432. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js.map +1 -0
  433. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs +2 -0
  434. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs.map +1 -0
  435. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js +21 -0
  436. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js.map +1 -0
  437. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs +2 -0
  438. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs.map +1 -0
  439. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js +43 -0
  440. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js.map +1 -0
  441. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs +2 -0
  442. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs.map +1 -0
  443. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js +19 -0
  444. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js.map +1 -0
  445. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs +2 -0
  446. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs.map +1 -0
  447. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js +27 -0
  448. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js.map +1 -0
  449. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +2 -0
  450. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.map +1 -0
  451. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js +9 -0
  452. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js.map +1 -0
  453. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs +2 -0
  454. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs.map +1 -0
  455. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +9 -0
  456. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
  457. package/dist/package.cjs +1 -1
  458. package/dist/package.cjs.map +1 -1
  459. package/dist/package.js +6 -3
  460. package/dist/package.js.map +1 -1
  461. package/dist/routes/app-settings.cjs +1 -1
  462. package/dist/routes/app-settings.cjs.map +1 -1
  463. package/dist/routes/app-settings.js +94 -93
  464. package/dist/routes/app-settings.js.map +1 -1
  465. package/dist/routes/llm-settings.cjs +1 -1
  466. package/dist/routes/llm-settings.cjs.map +1 -1
  467. package/dist/routes/llm-settings.js +131 -119
  468. package/dist/routes/llm-settings.js.map +1 -1
  469. package/dist/services/child-conversation-launch.cjs +2 -0
  470. package/dist/services/child-conversation-launch.cjs.map +1 -0
  471. package/dist/services/child-conversation-launch.d.ts +41 -0
  472. package/dist/services/child-conversation-launch.js +182 -0
  473. package/dist/services/child-conversation-launch.js.map +1 -0
  474. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  475. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  476. package/dist/stores/conversation-panel-preferences-store.d.ts +5 -1
  477. package/dist/stores/conversation-panel-preferences-store.js +8 -2
  478. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  479. package/dist/types/agent-server/core/base/action.d.ts +17 -1
  480. package/dist/types/agent-server/core/base/base.d.ts +2 -1
  481. package/dist/types/agent-server/type-guards.cjs +1 -1
  482. package/dist/types/agent-server/type-guards.cjs.map +1 -1
  483. package/dist/types/agent-server/type-guards.d.ts +8 -1
  484. package/dist/types/agent-server/type-guards.js +4 -3
  485. package/dist/types/agent-server/type-guards.js.map +1 -1
  486. package/dist/types/automation.d.ts +14 -0
  487. package/dist/utils/custom-toast-handlers.cjs +1 -1
  488. package/dist/utils/custom-toast-handlers.cjs.map +1 -1
  489. package/dist/utils/custom-toast-handlers.js +18 -1
  490. package/dist/utils/custom-toast-handlers.js.map +1 -1
  491. package/dist/utils/format-model-name.cjs +1 -1
  492. package/dist/utils/format-model-name.cjs.map +1 -1
  493. package/dist/utils/format-model-name.d.ts +11 -0
  494. package/dist/utils/format-model-name.js +11 -3
  495. package/dist/utils/format-model-name.js.map +1 -1
  496. package/package.json +6 -3
  497. package/scripts/brand-dev-electron.mjs +244 -0
  498. package/scripts/check-translation-completeness.cjs +4 -0
  499. package/scripts/generate-icons.mjs +109 -0
  500. package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +0 -41
  501. package/build/assets/agent-settings-nmO-KSXr.js +0 -1
  502. package/build/assets/app-settings-9ok42bV6.js +0 -1
  503. package/build/assets/command-menu-CA3IjGNc.js +0 -1
  504. package/build/assets/conversation-B6t6EiVp.js +0 -1
  505. package/build/assets/conversation-panel-B6t6EiVp.js +0 -1
  506. package/build/assets/copy-DaHuDtG4.js +0 -1
  507. package/build/assets/git-repo-dropdown-TzOuG5Ef.js +0 -1
  508. package/build/assets/home-OEx0XtfP.js +0 -1
  509. package/build/assets/index-home-OEx0XtfP.js +0 -1
  510. package/build/assets/install-server-modal-DnjZrJUy.js +0 -1
  511. package/build/assets/list-filter-C86CBRDE.js +0 -1
  512. package/build/assets/llm-not-configured-banner-DrBrhfN0.js +0 -27
  513. package/build/assets/llm-settings-CRsLqxgu.js +0 -1
  514. package/build/assets/llm-settings-RBm_3kNm.js +0 -1
  515. package/build/assets/manifest-c352d453.js +0 -1
  516. package/build/assets/map-provider-CXU6issd.js +0 -1
  517. package/build/assets/markdown-renderer-lsvsp7jn.js +0 -8
  518. package/build/assets/mcp-DD4hPTRE.js +0 -9
  519. package/build/assets/messages-Dt77e0qi.js +0 -40
  520. package/build/assets/recommended-automations-launcher-6xmbf7lh.js +0 -1
  521. package/build/assets/root-BeuHFY2s.css +0 -1
  522. package/build/assets/root-layout-Dl_2CDoq.js +0 -3
  523. package/build/assets/settings-Co-M5bK9.js +0 -1
  524. package/build/assets/sidebar-store-B04sX8aP.js +0 -1
  525. package/build/assets/skills-settings-DnbIu2eO.js +0 -2
  526. package/build/assets/use-settings-nav-items-y-Oyc93G.js +0 -16
  527. package/build/assets/utils-BX9XJ0IE.js +0 -1
  528. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +0 -2
  529. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +0 -1
  530. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -9
  531. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
@@ -0,0 +1,166 @@
1
+ import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
+ import { I18nKey as t } from "../../../i18n/declaration.js";
3
+ import { Check as n } from "../../../node_modules/lucide-react/dist/esm/icons/check.js";
4
+ import { CircleArrowUp as r } from "../../../node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js";
5
+ import { CircleCheck as i } from "../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
6
+ import { Copy as a } from "../../../node_modules/lucide-react/dist/esm/icons/copy.js";
7
+ import { ExternalLink as o } from "../../../node_modules/lucide-react/dist/esm/icons/external-link.js";
8
+ import { RefreshCw as s } from "../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.js";
9
+ import { cn as c } from "../../../utils/utils.js";
10
+ import { ModalBackdrop as l } from "../../shared/modals/modal-backdrop.js";
11
+ import { ModalCloseButton as u } from "../../shared/modals/modal-close-button.js";
12
+ import { AGENT_CANVAS_RELEASE_NOTES_URL as d, AGENT_CANVAS_UPDATE_COMMANDS as f } from "../../../api/agent-canvas-updates.js";
13
+ import p from "../../../icons/docker.js";
14
+ import m from "../../../icons/npm.js";
15
+ import h from "react";
16
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
17
+ //#region src/components/features/settings/agent-canvas-version-modal.tsx
18
+ var y = 2e3, b = ["npm", "docker"];
19
+ function x(e) {
20
+ return e === "npm" ? t.SETTINGS$VERSION_NPM_RECOMMENDED : t.SETTINGS$VERSION_DOCKER;
21
+ }
22
+ function S({ tab: e }) {
23
+ return e === "npm" ? /* @__PURE__ */ _(m, {
24
+ className: "size-4 shrink-0",
25
+ "aria-hidden": !0
26
+ }) : /* @__PURE__ */ _(p, {
27
+ className: "size-5 shrink-0",
28
+ "aria-hidden": !0
29
+ });
30
+ }
31
+ function C({ installedVersion: p, latestVersion: m, updateAvailable: C, isChecking: w, onCheckForUpdates: T, onClose: E }) {
32
+ let { t: D } = e("openhands"), [O, k] = h.useState("npm"), [A, j] = h.useState(!1), M = h.useRef(null), N = O === "npm" ? f.npm : f.docker;
33
+ h.useEffect(() => () => {
34
+ M.current !== null && window.clearTimeout(M.current);
35
+ }, []), h.useEffect(() => {
36
+ j(!1), M.current !== null && (window.clearTimeout(M.current), M.current = null);
37
+ }, [O]);
38
+ let P = h.useCallback(() => {
39
+ navigator.clipboard?.writeText(N), j(!0), M.current !== null && window.clearTimeout(M.current), M.current = window.setTimeout(() => {
40
+ j(!1), M.current = null;
41
+ }, y);
42
+ }, [N]);
43
+ return /* @__PURE__ */ _(l, {
44
+ onClose: E,
45
+ "aria-label": D(t.SETTINGS$VERSION_MODAL_ARIA_LABEL),
46
+ children: /* @__PURE__ */ v("section", {
47
+ className: "relative flex w-[520px] max-w-[90vw] flex-col gap-5 rounded-xl border border-[var(--oh-border)] bg-base-secondary p-6 shadow-xl",
48
+ children: [
49
+ /* @__PURE__ */ _(u, {
50
+ onClose: E,
51
+ testId: "agent-canvas-version-modal-close"
52
+ }),
53
+ /* @__PURE__ */ v("header", {
54
+ className: "flex items-center gap-3 pr-8",
55
+ children: [
56
+ C ? /* @__PURE__ */ _(r, {
57
+ className: "size-7 shrink-0 text-[#3B82F6]",
58
+ "aria-hidden": !0
59
+ }) : /* @__PURE__ */ _(i, {
60
+ className: "size-7 shrink-0 text-[var(--oh-status-success)]",
61
+ "aria-hidden": !0
62
+ }),
63
+ /* @__PURE__ */ _("h2", {
64
+ className: "text-base font-semibold leading-6 text-white",
65
+ children: D(C ? t.SETTINGS$VERSION_UPDATE_AVAILABLE : t.SETTINGS$VERSION_UP_TO_DATE_TITLE)
66
+ }),
67
+ C && m ? /* @__PURE__ */ _("span", {
68
+ className: "rounded-full bg-[#1E3A5F] px-2 py-0.5 text-xs font-semibold text-[#3B82F6]",
69
+ children: m
70
+ }) : null
71
+ ]
72
+ }),
73
+ /* @__PURE__ */ _("div", {
74
+ className: "flex flex-col gap-1",
75
+ children: C && m ? /* @__PURE__ */ v("p", {
76
+ className: "text-sm text-[var(--oh-text)]",
77
+ children: [
78
+ D(t.SETTINGS$VERSION_UPDATE_MESSAGE, {
79
+ installed: p,
80
+ latest: m
81
+ }),
82
+ " ",
83
+ /* @__PURE__ */ v("a", {
84
+ href: d,
85
+ target: "_blank",
86
+ rel: "noopener noreferrer",
87
+ className: "inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]",
88
+ children: [D(t.SETTINGS$VERSION_RELEASE_NOTES), /* @__PURE__ */ _(o, {
89
+ className: "size-4 shrink-0",
90
+ "aria-hidden": !0
91
+ })]
92
+ })
93
+ ]
94
+ }) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _("p", {
95
+ className: "text-sm text-[var(--oh-text)]",
96
+ children: D(t.SETTINGS$VERSION_INSTALLED, { version: p })
97
+ }), m ? /* @__PURE__ */ v("p", {
98
+ className: "whitespace-nowrap text-sm text-[var(--oh-status-success)]",
99
+ children: [
100
+ D(t.SETTINGS$VERSION_LATEST_MESSAGE),
101
+ " ",
102
+ /* @__PURE__ */ v("a", {
103
+ href: d,
104
+ target: "_blank",
105
+ rel: "noopener noreferrer",
106
+ className: "inline-flex items-center gap-1.5 font-medium text-white hover:text-[var(--oh-text)]",
107
+ children: [D(t.SETTINGS$VERSION_RELEASE_NOTES), /* @__PURE__ */ _(o, {
108
+ className: "size-4 shrink-0",
109
+ "aria-hidden": !0
110
+ })]
111
+ })
112
+ ]
113
+ }) : /* @__PURE__ */ _("p", {
114
+ className: "text-sm text-[var(--oh-muted)]",
115
+ children: D(t.SETTINGS$VERSION_CHECK_UNAVAILABLE)
116
+ })] })
117
+ }),
118
+ C ? /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("div", {
119
+ className: "flex justify-center",
120
+ children: b.map((e) => /* @__PURE__ */ v("button", {
121
+ type: "button",
122
+ onClick: () => k(e),
123
+ className: c("inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium", O === e ? "border-b border-white text-white" : "text-[var(--oh-muted)] hover:text-white"),
124
+ children: [/* @__PURE__ */ _(S, { tab: e }), D(x(e))]
125
+ }, e))
126
+ }), /* @__PURE__ */ v("div", {
127
+ className: "flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3",
128
+ children: [/* @__PURE__ */ _("code", {
129
+ className: "min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white",
130
+ children: N
131
+ }), /* @__PURE__ */ _("button", {
132
+ type: "button",
133
+ onClick: P,
134
+ "aria-label": D(A ? t.BUTTON$COPIED : t.SETTINGS$VERSION_COPY_COMMAND),
135
+ disabled: A,
136
+ className: "shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]",
137
+ children: A ? /* @__PURE__ */ _(n, {
138
+ className: "size-4 text-[var(--oh-status-success)]",
139
+ "aria-hidden": !0
140
+ }) : /* @__PURE__ */ _(a, {
141
+ className: "size-4",
142
+ "aria-hidden": !0
143
+ })
144
+ })]
145
+ })] }) : null,
146
+ C ? null : /* @__PURE__ */ _("div", {
147
+ className: "flex flex-wrap gap-x-8 gap-y-3",
148
+ children: /* @__PURE__ */ v("button", {
149
+ type: "button",
150
+ onClick: T,
151
+ className: "inline-flex items-center gap-2 text-sm font-medium text-white hover:text-[var(--oh-text)] disabled:cursor-wait disabled:text-[var(--oh-muted)]",
152
+ disabled: w,
153
+ children: [D(t.SETTINGS$VERSION_CHECK_FOR_UPDATES), /* @__PURE__ */ _(s, {
154
+ className: c("size-4 shrink-0", w && "animate-spin"),
155
+ "aria-hidden": !0
156
+ })]
157
+ })
158
+ })
159
+ ]
160
+ })
161
+ });
162
+ }
163
+ //#endregion
164
+ export { C as AgentCanvasVersionModal };
165
+
166
+ //# sourceMappingURL=agent-canvas-version-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-canvas-version-modal.js","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-version-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ArrowUpCircle,\n Check,\n CheckCircle2,\n Copy,\n ExternalLink,\n RefreshCw,\n} from \"lucide-react\";\nimport {\n AGENT_CANVAS_RELEASE_NOTES_URL,\n AGENT_CANVAS_UPDATE_COMMANDS,\n} from \"#/api/agent-canvas-updates\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalCloseButton } from \"#/components/shared/modals/modal-close-button\";\nimport DockerIcon from \"#/icons/docker.svg?react\";\nimport NpmIcon from \"#/icons/npm.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\nconst COPY_FEEDBACK_MS = 2000;\n\ntype UpdateCommandTab = \"npm\" | \"docker\";\n\nconst UPDATE_COMMAND_TABS: UpdateCommandTab[] = [\"npm\", \"docker\"];\n\ninterface AgentCanvasVersionModalProps {\n installedVersion: string;\n latestVersion: string | null;\n updateAvailable: boolean;\n isChecking: boolean;\n onCheckForUpdates: () => void;\n onClose: () => void;\n}\n\nfunction getUpdateCommandTabLabelKey(tab: UpdateCommandTab): I18nKey {\n return tab === \"npm\"\n ? I18nKey.SETTINGS$VERSION_NPM_RECOMMENDED\n : I18nKey.SETTINGS$VERSION_DOCKER;\n}\n\nfunction UpdateCommandTabIcon({ tab }: { tab: UpdateCommandTab }) {\n if (tab === \"npm\") {\n return <NpmIcon className=\"size-4 shrink-0\" aria-hidden />;\n }\n return <DockerIcon className=\"size-5 shrink-0\" aria-hidden />;\n}\n\nexport function AgentCanvasVersionModal({\n installedVersion,\n latestVersion,\n updateAvailable,\n isChecking,\n onCheckForUpdates,\n onClose,\n}: AgentCanvasVersionModalProps) {\n const { t } = useTranslation(\"openhands\");\n const [selectedTab, setSelectedTab] = React.useState<UpdateCommandTab>(\"npm\");\n const [copied, setCopied] = React.useState(false);\n const copiedTimeoutRef = React.useRef<number | null>(null);\n const command =\n selectedTab === \"npm\"\n ? AGENT_CANVAS_UPDATE_COMMANDS.npm\n : AGENT_CANVAS_UPDATE_COMMANDS.docker;\n\n React.useEffect(\n () => () => {\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n },\n [],\n );\n\n React.useEffect(() => {\n setCopied(false);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = null;\n }\n }, [selectedTab]);\n\n const copyCommand = React.useCallback(() => {\n void navigator.clipboard?.writeText(command);\n setCopied(true);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = window.setTimeout(() => {\n setCopied(false);\n copiedTimeoutRef.current = null;\n }, COPY_FEEDBACK_MS);\n }, [command]);\n\n return (\n <ModalBackdrop\n onClose={onClose}\n aria-label={t(I18nKey.SETTINGS$VERSION_MODAL_ARIA_LABEL)}\n >\n <section className=\"relative flex w-[520px] max-w-[90vw] flex-col gap-5 rounded-xl border border-[var(--oh-border)] bg-base-secondary p-6 shadow-xl\">\n <ModalCloseButton\n onClose={onClose}\n testId=\"agent-canvas-version-modal-close\"\n />\n\n <header className=\"flex items-center gap-3 pr-8\">\n {updateAvailable ? (\n <ArrowUpCircle\n className=\"size-7 shrink-0 text-[#3B82F6]\"\n aria-hidden\n />\n ) : (\n <CheckCircle2\n className=\"size-7 shrink-0 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n )}\n <h2 className=\"text-base font-semibold leading-6 text-white\">\n {t(\n updateAvailable\n ? I18nKey.SETTINGS$VERSION_UPDATE_AVAILABLE\n : I18nKey.SETTINGS$VERSION_UP_TO_DATE_TITLE,\n )}\n </h2>\n {updateAvailable && latestVersion ? (\n <span className=\"rounded-full bg-[#1E3A5F] px-2 py-0.5 text-xs font-semibold text-[#3B82F6]\">\n {latestVersion}\n </span>\n ) : null}\n </header>\n\n <div className=\"flex flex-col gap-1\">\n {updateAvailable && latestVersion ? (\n <p className=\"text-sm text-[var(--oh-text)]\">\n {t(I18nKey.SETTINGS$VERSION_UPDATE_MESSAGE, {\n installed: installedVersion,\n latest: latestVersion,\n })}{\" \"}\n <a\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-4 shrink-0\" aria-hidden />\n </a>\n </p>\n ) : (\n <>\n <p className=\"text-sm text-[var(--oh-text)]\">\n {t(I18nKey.SETTINGS$VERSION_INSTALLED, {\n version: installedVersion,\n })}\n </p>\n {latestVersion ? (\n <p className=\"whitespace-nowrap text-sm text-[var(--oh-status-success)]\">\n {t(I18nKey.SETTINGS$VERSION_LATEST_MESSAGE)}{\" \"}\n <a\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-4 shrink-0\" aria-hidden />\n </a>\n </p>\n ) : (\n <p className=\"text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$VERSION_CHECK_UNAVAILABLE)}\n </p>\n )}\n </>\n )}\n </div>\n\n {updateAvailable ? (\n <div>\n <div className=\"flex justify-center\">\n {UPDATE_COMMAND_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setSelectedTab(tab)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium\",\n selectedTab === tab\n ? \"border-b border-white text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n <UpdateCommandTabIcon tab={tab} />\n {t(getUpdateCommandTabLabelKey(tab))}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3\">\n <code className=\"min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white\">\n {command}\n </code>\n <button\n type=\"button\"\n onClick={copyCommand}\n aria-label={t(\n copied\n ? I18nKey.BUTTON$COPIED\n : I18nKey.SETTINGS$VERSION_COPY_COMMAND,\n )}\n disabled={copied}\n className=\"shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]\"\n >\n {copied ? (\n <Check\n className=\"size-4 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n ) : (\n <Copy className=\"size-4\" aria-hidden />\n )}\n </button>\n </div>\n </div>\n ) : null}\n\n {!updateAvailable ? (\n <div className=\"flex flex-wrap gap-x-8 gap-y-3\">\n <button\n type=\"button\"\n onClick={onCheckForUpdates}\n className=\"inline-flex items-center gap-2 text-sm font-medium text-white hover:text-[var(--oh-text)] disabled:cursor-wait disabled:text-[var(--oh-muted)]\"\n disabled={isChecking}\n >\n {t(I18nKey.SETTINGS$VERSION_CHECK_FOR_UPDATES)}\n <RefreshCw\n className={cn(\"size-4 shrink-0\", isChecking && \"animate-spin\")}\n aria-hidden\n />\n </button>\n </div>\n ) : null}\n </section>\n </ModalBackdrop>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,IAAM,IAAmB,KAInB,IAA0C,CAAC,OAAO,QAAQ;AAWhE,SAAS,EAA4B,GAAgC;CACnE,OAAO,MAAQ,QACX,EAAQ,mCACR,EAAQ;AACd;AAEA,SAAS,EAAqB,EAAE,UAAkC;CAIhE,OAHI,MAAQ,QACH,kBAAC,GAAD;EAAS,WAAU;EAAkB,eAAA;CAAa,CAAA,IAEpD,kBAAC,GAAD;EAAY,WAAU;EAAkB,eAAA;CAAa,CAAA;AAC9D;AAEA,SAAgB,EAAwB,EACtC,qBACA,kBACA,oBACA,eACA,sBACA,cAC+B;CAC/B,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,CAAC,GAAa,KAAkB,EAAM,SAA2B,KAAK,GACtE,CAAC,GAAQ,KAAa,EAAM,SAAS,EAAK,GAC1C,IAAmB,EAAM,OAAsB,IAAI,GACnD,IACJ,MAAgB,QACZ,EAA6B,MAC7B,EAA6B;CAWnC,AATA,EAAM,sBACQ;EACV,AAAI,EAAiB,YAAY,QAC/B,OAAO,aAAa,EAAiB,OAAO;CAEhD,GACA,CAAC,CACH,GAEA,EAAM,gBAAgB;EAEpB,AADA,EAAU,EAAK,GACX,EAAiB,YAAY,SAC/B,OAAO,aAAa,EAAiB,OAAO,GAC5C,EAAiB,UAAU;CAE/B,GAAG,CAAC,CAAW,CAAC;CAEhB,IAAM,IAAc,EAAM,kBAAkB;EAM1C,AALA,UAAe,WAAW,UAAU,CAAO,GAC3C,EAAU,EAAI,GACV,EAAiB,YAAY,QAC/B,OAAO,aAAa,EAAiB,OAAO,GAE9C,EAAiB,UAAU,OAAO,iBAAiB;GAEjD,AADA,EAAU,EAAK,GACf,EAAiB,UAAU;EAC7B,GAAG,CAAgB;CACrB,GAAG,CAAC,CAAO,CAAC;CAEZ,OACE,kBAAC,GAAD;EACW;EACT,cAAY,EAAE,EAAQ,iCAAiC;YAEvD,kBAAC,WAAD;GAAS,WAAU;aAAnB;IACE,kBAAC,GAAD;KACW;KACT,QAAO;IACR,CAAA;IAED,kBAAC,UAAD;KAAQ,WAAU;eAAlB;MACG,IACC,kBAAC,GAAD;OACE,WAAU;OACV,eAAA;MACD,CAAA,IAED,kBAAC,GAAD;OACE,WAAU;OACV,eAAA;MACD,CAAA;MAEH,kBAAC,MAAD;OAAI,WAAU;iBACX,EACC,IACI,EAAQ,oCACR,EAAQ,iCACd;MACE,CAAA;MACH,KAAmB,IAClB,kBAAC,QAAD;OAAM,WAAU;iBACb;MACG,CAAA,IACJ;KACE;;IAER,kBAAC,OAAD;KAAK,WAAU;eACZ,KAAmB,IAClB,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAE,EAAQ,iCAAiC;QAC1C,WAAW;QACX,QAAQ;OACV,CAAC;OAAG;OACJ,kBAAC,KAAD;QACE,MAAM;QACN,QAAO;QACP,KAAI;QACJ,WAAU;kBAJZ,CAMG,EAAE,EAAQ,8BAA8B,GACzC,kBAAC,GAAD;SAAc,WAAU;SAAkB,eAAA;QAAa,CAAA,CACtD;;MACF;UAEH,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAE,EAAQ,4BAA4B,EACrC,SAAS,EACX,CAAC;KACA,CAAA,GACF,IACC,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAE,EAAQ,+BAA+B;OAAG;OAC7C,kBAAC,KAAD;QACE,MAAM;QACN,QAAO;QACP,KAAI;QACJ,WAAU;kBAJZ,CAMG,EAAE,EAAQ,8BAA8B,GACzC,kBAAC,GAAD;SAAc,WAAU;SAAkB,eAAA;QAAa,CAAA,CACtD;;MACF;UAEH,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAE,EAAQ,kCAAkC;KAC5C,CAAA,CAEL,EAAA,CAAA;IAED,CAAA;IAEJ,IACC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAoB,KAAK,MACxB,kBAAC,UAAD;MAEE,MAAK;MACL,eAAe,EAAe,CAAG;MACjC,WAAW,EACT,kEACA,MAAgB,IACZ,qCACA,yCACN;gBATF,CAWE,kBAAC,GAAD,EAA2B,OAAM,CAAA,GAChC,EAAE,EAA4B,CAAG,CAAC,CAC7B;QAZD,CAYC,CACT;IACE,CAAA,GACL,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBACb;KACG,CAAA,GACN,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,cAAY,EACV,IACI,EAAQ,gBACR,EAAQ,6BACd;MACA,UAAU;MACV,WAAU;gBAET,IACC,kBAAC,GAAD;OACE,WAAU;OACV,eAAA;MACD,CAAA,IAED,kBAAC,GAAD;OAAM,WAAU;OAAS,eAAA;MAAa,CAAA;KAElC,CAAA,CACL;MACF,EAAA,CAAA,IACH;IAEF,IAeE,OAdF,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,WAAU;MACV,UAAU;gBAJZ,CAMG,EAAE,EAAQ,kCAAkC,GAC7C,kBAAC,GAAD;OACE,WAAW,EAAG,mBAAmB,KAAc,cAAc;OAC7D,eAAA;MACD,CAAA,CACK;;IACL,CAAA;GAEA;;CACI,CAAA;AAEnB"}
@@ -0,0 +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("../../../node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/circle-check.cjs"),a=require("../../../utils/utils.cjs"),o=require("../../../api/agent-server-config.cjs"),s=require("../../../api/agent-server-compatibility.cjs"),c=require("../../../api/client-source.cjs"),l=require("../../../hooks/query/use-latest-agent-canvas-version.cjs"),u=require("./agent-canvas-version-modal.cjs");let d=require("react");d=e.__toESM(d,1);let f=require("react/jsx-runtime");function p({className:e,hideWhenUpToDate:p=!1}){let{t:m}=t.useTranslation(`openhands`),[h,g]=d.default.useState(!1),_=o.getLockedCloudHost()!==null,v=l.useLatestAgentCanvasVersion({enabled:!_});if(_)return null;let y=c.AGENT_CANVAS_CLIENT_VERSION,b=v.data??null,x=(b===null?null:s.compareAgentServerVersions(b,y))===1;return p&&!x?null:(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`button`,{type:`button`,"data-testid":`agent-canvas-version-tile`,onClick:()=>g(!0),"aria-label":m(n.I18nKey.SETTINGS$VERSION_TILE_ARIA_LABEL),className:a.cn(`flex w-full items-center gap-3 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]`,e),children:[(0,f.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(`span`,{className:`block truncate text-sm font-semibold leading-5 text-white`,children:m(x?n.I18nKey.SETTINGS$VERSION_TILE_NEW_VERSION:n.I18nKey.SETTINGS$VERSION_PRODUCT_NAME)}),(0,f.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 truncate text-xs leading-5`,children:[(0,f.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:m(n.I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}),(0,f.jsx)(`span`,{className:`truncate text-white`,children:x&&b?b:y})]})]}),x?(0,f.jsx)(r.CircleArrowUp,{className:`size-5 shrink-0 text-[#3B82F6]`,"aria-hidden":!0}):(0,f.jsx)(i.CircleCheck,{className:`size-5 shrink-0 text-[var(--oh-status-success)]`,"aria-hidden":!0})]}),h?(0,f.jsx)(u.AgentCanvasVersionModal,{installedVersion:y,latestVersion:b,updateAvailable:x,isChecking:v.isFetching,onCheckForUpdates:()=>{v.refetch()},onClose:()=>g(!1)}):null]})}exports.AgentCanvasVersionTile=p;
2
+ //# sourceMappingURL=agent-canvas-version-tile.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-canvas-version-tile.cjs","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-version-tile.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ArrowUpCircle, CheckCircle2 } from \"lucide-react\";\nimport { compareAgentServerVersions } from \"#/api/agent-server-compatibility\";\nimport { getLockedCloudHost } from \"#/api/agent-server-config\";\nimport { AGENT_CANVAS_CLIENT_VERSION } from \"#/api/client-source\";\nimport { useLatestAgentCanvasVersion } from \"#/hooks/query/use-latest-agent-canvas-version\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { AgentCanvasVersionModal } from \"./agent-canvas-version-modal\";\n\ninterface AgentCanvasVersionTileProps {\n className?: string;\n /** When true, the tile is omitted unless an update is available. */\n hideWhenUpToDate?: boolean;\n}\n\n/**\n * Main-sidebar tile that opens the update-specific version modal.\n * Hidden when the install is already up to date; settings uses\n * AgentCanvasUpdateCard instead.\n */\nexport function AgentCanvasVersionTile({\n className,\n hideWhenUpToDate = false,\n}: AgentCanvasVersionTileProps) {\n const { t } = useTranslation(\"openhands\");\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const isLockedToCloud = getLockedCloudHost() !== null;\n const latestVersionQuery = useLatestAgentCanvasVersion({\n enabled: !isLockedToCloud,\n });\n\n if (isLockedToCloud) return null;\n\n const installedVersion = AGENT_CANVAS_CLIENT_VERSION;\n const latestVersion = latestVersionQuery.data ?? null;\n const comparison =\n latestVersion !== null\n ? compareAgentServerVersions(latestVersion, installedVersion)\n : null;\n const updateAvailable = comparison === 1;\n\n if (hideWhenUpToDate && !updateAvailable) return null;\n\n return (\n <>\n <button\n type=\"button\"\n data-testid=\"agent-canvas-version-tile\"\n onClick={() => setIsModalOpen(true)}\n aria-label={t(I18nKey.SETTINGS$VERSION_TILE_ARIA_LABEL)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]\",\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold leading-5 text-white\">\n {updateAvailable\n ? t(I18nKey.SETTINGS$VERSION_TILE_NEW_VERSION)\n : t(I18nKey.SETTINGS$VERSION_PRODUCT_NAME)}\n </span>\n <span className=\"flex min-w-0 items-center gap-1.5 truncate text-xs leading-5\">\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}\n </span>\n <span className=\"truncate text-white\">\n {updateAvailable && latestVersion\n ? latestVersion\n : installedVersion}\n </span>\n </span>\n </span>\n {updateAvailable ? (\n <ArrowUpCircle\n className=\"size-5 shrink-0 text-[#3B82F6]\"\n aria-hidden\n />\n ) : (\n <CheckCircle2\n className=\"size-5 shrink-0 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n )}\n </button>\n\n {isModalOpen ? (\n <AgentCanvasVersionModal\n installedVersion={installedVersion}\n latestVersion={latestVersion}\n updateAvailable={updateAvailable}\n isChecking={latestVersionQuery.isFetching}\n onCheckForUpdates={() => {\n void latestVersionQuery.refetch();\n }}\n onClose={() => setIsModalOpen(false)}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":"itBAsBA,SAAgB,EAAuB,CACrC,YACA,mBAAmB,IACW,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,CAAC,EAAa,GAAkB,EAAA,QAAM,SAAS,EAAK,EACpD,EAAkB,EAAA,mBAAmB,IAAM,KAC3C,EAAqB,EAAA,4BAA4B,CACrD,QAAS,CAAC,CACZ,CAAC,EAED,GAAI,EAAiB,OAAO,KAE5B,IAAM,EAAmB,EAAA,4BACnB,EAAgB,EAAmB,MAAQ,KAK3C,GAHJ,IAAkB,KAEd,KADA,EAAA,2BAA2B,EAAe,CAAgB,KAEzB,EAIvC,OAFI,GAAoB,CAAC,EAAwB,MAG/C,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,cAAY,4BACZ,YAAe,EAAe,EAAI,EAClC,aAAY,EAAE,EAAA,QAAQ,gCAAgC,EACtD,UAAW,EAAA,GACT,uJACA,CACF,WARF,EAUE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,0BAAhB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qEAEV,EADH,EACK,EAAA,QAAQ,kCACR,EAAA,QAAQ,6BAA6B,CACvC,CAAA,GACN,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,wEAAhB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,kCACb,EAAE,EAAA,QAAQ,iCAAiC,CACxC,CAAA,GACN,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+BACb,GAAmB,EAChB,EACA,CACA,CAAA,CACF,GACF,IACL,GACC,EAAA,EAAA,KAAC,EAAA,cAAD,CACE,UAAU,iCACV,cAAA,EACD,CAAA,GAED,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,UAAU,kDACV,cAAA,EACD,CAAA,CAEG,IAEP,GACC,EAAA,EAAA,KAAC,EAAA,wBAAD,CACoB,mBACH,gBACE,kBACjB,WAAY,EAAmB,WAC/B,sBAAyB,CACvB,EAAwB,QAAQ,CAClC,EACA,YAAe,EAAe,EAAK,CACpC,CAAA,EACC,IACJ,CAAA,CAAA,CAEN"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ interface AgentCanvasVersionTileProps {
3
+ className?: string;
4
+ /** When true, the tile is omitted unless an update is available. */
5
+ hideWhenUpToDate?: boolean;
6
+ }
7
+ /**
8
+ * Main-sidebar tile that opens the update-specific version modal.
9
+ * Hidden when the install is already up to date; settings uses
10
+ * AgentCanvasUpdateCard instead.
11
+ */
12
+ export declare function AgentCanvasVersionTile({ className, hideWhenUpToDate, }: AgentCanvasVersionTileProps): React.JSX.Element | null;
13
+ export {};
@@ -0,0 +1,60 @@
1
+ import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
+ import { I18nKey as t } from "../../../i18n/declaration.js";
3
+ import { CircleArrowUp as n } from "../../../node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js";
4
+ import { CircleCheck as r } from "../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
5
+ import { cn as i } from "../../../utils/utils.js";
6
+ import { getLockedCloudHost as a } from "../../../api/agent-server-config.js";
7
+ import { compareAgentServerVersions as o } from "../../../api/agent-server-compatibility.js";
8
+ import { AGENT_CANVAS_CLIENT_VERSION as s } from "../../../api/client-source.js";
9
+ import { useLatestAgentCanvasVersion as c } from "../../../hooks/query/use-latest-agent-canvas-version.js";
10
+ import { AgentCanvasVersionModal as l } from "./agent-canvas-version-modal.js";
11
+ import u from "react";
12
+ import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
13
+ //#region src/components/features/settings/agent-canvas-version-tile.tsx
14
+ function m({ className: m, hideWhenUpToDate: h = !1 }) {
15
+ let { t: g } = e("openhands"), [_, v] = u.useState(!1), y = a() !== null, b = c({ enabled: !y });
16
+ if (y) return null;
17
+ let x = s, S = b.data ?? null, C = (S === null ? null : o(S, x)) === 1;
18
+ return h && !C ? null : /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ p("button", {
19
+ type: "button",
20
+ "data-testid": "agent-canvas-version-tile",
21
+ onClick: () => v(!0),
22
+ "aria-label": g(t.SETTINGS$VERSION_TILE_ARIA_LABEL),
23
+ className: i("flex w-full items-center gap-3 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]", m),
24
+ children: [/* @__PURE__ */ p("span", {
25
+ className: "min-w-0 flex-1",
26
+ children: [/* @__PURE__ */ f("span", {
27
+ className: "block truncate text-sm font-semibold leading-5 text-white",
28
+ children: g(C ? t.SETTINGS$VERSION_TILE_NEW_VERSION : t.SETTINGS$VERSION_PRODUCT_NAME)
29
+ }), /* @__PURE__ */ p("span", {
30
+ className: "flex min-w-0 items-center gap-1.5 truncate text-xs leading-5",
31
+ children: [/* @__PURE__ */ f("span", {
32
+ className: "text-[var(--oh-muted)]",
33
+ children: g(t.SETTINGS$APP_UPDATE_VERSION_LABEL)
34
+ }), /* @__PURE__ */ f("span", {
35
+ className: "truncate text-white",
36
+ children: C && S ? S : x
37
+ })]
38
+ })]
39
+ }), C ? /* @__PURE__ */ f(n, {
40
+ className: "size-5 shrink-0 text-[#3B82F6]",
41
+ "aria-hidden": !0
42
+ }) : /* @__PURE__ */ f(r, {
43
+ className: "size-5 shrink-0 text-[var(--oh-status-success)]",
44
+ "aria-hidden": !0
45
+ })]
46
+ }), _ ? /* @__PURE__ */ f(l, {
47
+ installedVersion: x,
48
+ latestVersion: S,
49
+ updateAvailable: C,
50
+ isChecking: b.isFetching,
51
+ onCheckForUpdates: () => {
52
+ b.refetch();
53
+ },
54
+ onClose: () => v(!1)
55
+ }) : null] });
56
+ }
57
+ //#endregion
58
+ export { m as AgentCanvasVersionTile };
59
+
60
+ //# sourceMappingURL=agent-canvas-version-tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-canvas-version-tile.js","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-version-tile.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ArrowUpCircle, CheckCircle2 } from \"lucide-react\";\nimport { compareAgentServerVersions } from \"#/api/agent-server-compatibility\";\nimport { getLockedCloudHost } from \"#/api/agent-server-config\";\nimport { AGENT_CANVAS_CLIENT_VERSION } from \"#/api/client-source\";\nimport { useLatestAgentCanvasVersion } from \"#/hooks/query/use-latest-agent-canvas-version\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { AgentCanvasVersionModal } from \"./agent-canvas-version-modal\";\n\ninterface AgentCanvasVersionTileProps {\n className?: string;\n /** When true, the tile is omitted unless an update is available. */\n hideWhenUpToDate?: boolean;\n}\n\n/**\n * Main-sidebar tile that opens the update-specific version modal.\n * Hidden when the install is already up to date; settings uses\n * AgentCanvasUpdateCard instead.\n */\nexport function AgentCanvasVersionTile({\n className,\n hideWhenUpToDate = false,\n}: AgentCanvasVersionTileProps) {\n const { t } = useTranslation(\"openhands\");\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const isLockedToCloud = getLockedCloudHost() !== null;\n const latestVersionQuery = useLatestAgentCanvasVersion({\n enabled: !isLockedToCloud,\n });\n\n if (isLockedToCloud) return null;\n\n const installedVersion = AGENT_CANVAS_CLIENT_VERSION;\n const latestVersion = latestVersionQuery.data ?? null;\n const comparison =\n latestVersion !== null\n ? compareAgentServerVersions(latestVersion, installedVersion)\n : null;\n const updateAvailable = comparison === 1;\n\n if (hideWhenUpToDate && !updateAvailable) return null;\n\n return (\n <>\n <button\n type=\"button\"\n data-testid=\"agent-canvas-version-tile\"\n onClick={() => setIsModalOpen(true)}\n aria-label={t(I18nKey.SETTINGS$VERSION_TILE_ARIA_LABEL)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]\",\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold leading-5 text-white\">\n {updateAvailable\n ? t(I18nKey.SETTINGS$VERSION_TILE_NEW_VERSION)\n : t(I18nKey.SETTINGS$VERSION_PRODUCT_NAME)}\n </span>\n <span className=\"flex min-w-0 items-center gap-1.5 truncate text-xs leading-5\">\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}\n </span>\n <span className=\"truncate text-white\">\n {updateAvailable && latestVersion\n ? latestVersion\n : installedVersion}\n </span>\n </span>\n </span>\n {updateAvailable ? (\n <ArrowUpCircle\n className=\"size-5 shrink-0 text-[#3B82F6]\"\n aria-hidden\n />\n ) : (\n <CheckCircle2\n className=\"size-5 shrink-0 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n )}\n </button>\n\n {isModalOpen ? (\n <AgentCanvasVersionModal\n installedVersion={installedVersion}\n latestVersion={latestVersion}\n updateAvailable={updateAvailable}\n isChecking={latestVersionQuery.isFetching}\n onCheckForUpdates={() => {\n void latestVersionQuery.refetch();\n }}\n onClose={() => setIsModalOpen(false)}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,SAAgB,EAAuB,EACrC,cACA,sBAAmB,MACW;CAC9B,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,CAAC,GAAa,KAAkB,EAAM,SAAS,EAAK,GACpD,IAAkB,EAAmB,MAAM,MAC3C,IAAqB,EAA4B,EACrD,SAAS,CAAC,EACZ,CAAC;CAED,IAAI,GAAiB,OAAO;CAE5B,IAAM,IAAmB,GACnB,IAAgB,EAAmB,QAAQ,MAK3C,KAHJ,MAAkB,OAEd,OADA,EAA2B,GAAe,CAAgB,OAEzB;CAIvC,OAFI,KAAoB,CAAC,IAAwB,OAG/C,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAY;EACZ,eAAe,EAAe,EAAI;EAClC,cAAY,EAAE,EAAQ,gCAAgC;EACtD,WAAW,EACT,wJACA,CACF;YARF,CAUE,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACE,kBAAC,QAAD;IAAM,WAAU;cAEV,EADH,IACK,EAAQ,oCACR,EAAQ,6BAA6B;GACvC,CAAA,GACN,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,kBAAC,QAAD;KAAM,WAAU;eACb,EAAE,EAAQ,iCAAiC;IACxC,CAAA,GACN,kBAAC,QAAD;KAAM,WAAU;eACb,KAAmB,IAChB,IACA;IACA,CAAA,CACF;KACF;MACL,IACC,kBAAC,GAAD;GACE,WAAU;GACV,eAAA;EACD,CAAA,IAED,kBAAC,GAAD;GACE,WAAU;GACV,eAAA;EACD,CAAA,CAEG;KAEP,IACC,kBAAC,GAAD;EACoB;EACH;EACE;EACjB,YAAY,EAAmB;EAC/B,yBAAyB;GACvB,EAAwB,QAAQ;EAClC;EACA,eAAe,EAAe,EAAK;CACpC,CAAA,IACC,IACJ,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- require("../../../../_virtual/_rolldown/runtime.cjs"),require("../../../../utils/utils.cjs"),require("../../conversation-panel/ellipsis-button.cjs"),require("./profile-actions-menu.cjs"),require("../../../shared/badge.cjs"),require("../../../../utils/settings-list-classes.cjs"),require("react"),require("react/jsx-runtime");
1
+ require("../../../../_virtual/_rolldown/runtime.cjs"),require("../../../../utils/utils.cjs"),require("../../../../utils/format-model-name.cjs"),require("../../conversation-panel/ellipsis-button.cjs"),require("./profile-actions-menu.cjs"),require("../../../shared/badge.cjs"),require("../../../../utils/settings-list-classes.cjs"),require("react"),require("react/jsx-runtime");
@@ -1,4 +1,5 @@
1
1
  import "../../../../utils/utils.js";
2
+ import "../../../../utils/format-model-name.js";
2
3
  import "../../conversation-panel/ellipsis-button.js";
3
4
  import "./profile-actions-menu.js";
4
5
  import "../../../shared/badge.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("../../../ui/typography.cjs"),i=require("../sidebar/sidebar-nav-link.cjs"),a=require("./agent-canvas-update-card.cjs"),o=require("./backend-synced-settings-badge.cjs"),s=require("./cloud-settings-link.cjs"),c=require("./integrations-settings-link.cjs");let l=require("react/jsx-runtime");function u({navigationItems:u}){let{t:d}=e.useTranslation(`openhands`),f=u.filter(e=>e.type===`item`);return(0,l.jsxs)(`aside`,{"data-testid":`settings-navbar-desktop`,className:n.cn(`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2`,`md:sticky md:top-8 md:self-start md:pl-8`),children:[(0,l.jsx)(r.Typography.Text,{className:`px-2 text-sm font-normal text-white`,children:d(t.I18nKey.SETTINGS$TITLE)}),(0,l.jsxs)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:[f.map(e=>(0,l.jsx)(i.SidebarNavLink,{to:e.item.to,label:d(e.item.text),end:!0,testId:`sidebar-settings-${e.item.to}`,icon:e.item.icon},e.item.to)),(0,l.jsx)(c.IntegrationsSettingsLink,{}),(0,l.jsx)(s.CloudSettingsLink,{})]}),(0,l.jsx)(`div`,{className:`px-2 pt-3`,children:(0,l.jsx)(a.AgentCanvasUpdateCard,{})}),(0,l.jsx)(`div`,{className:`px-2 pt-3`,children:(0,l.jsx)(o.BackendSyncedSettingsBadge,{})})]})}exports.SettingsDesktopSidebar=u;
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("../../../ui/typography.cjs"),i=require("../sidebar/sidebar-nav-link.cjs"),a=require("./agent-canvas-update-card.cjs"),o=require("./backend-synced-settings-badge.cjs"),s=require("./cloud-settings-link.cjs"),c=require("./integrations-settings-link.cjs");let l=require("react/jsx-runtime");function u({navigationItems:u}){let{t:d}=e.useTranslation(`openhands`),f=u.filter(e=>e.type===`item`);return(0,l.jsxs)(`aside`,{"data-testid":`settings-navbar-desktop`,className:n.cn(`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2`,`md:sticky md:top-8 md:self-start md:pl-8`),children:[(0,l.jsx)(r.Typography.Text,{className:`px-2 text-sm font-normal text-white`,children:d(t.I18nKey.SETTINGS$TITLE)}),(0,l.jsxs)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:[f.map(e=>(0,l.jsx)(i.SidebarNavLink,{to:e.item.to,label:d(e.item.text),end:!0,testId:`sidebar-settings-${e.item.to}`,icon:e.item.icon},e.item.to)),(0,l.jsx)(c.IntegrationsSettingsLink,{}),(0,l.jsx)(s.CloudSettingsLink,{})]}),(0,l.jsx)(`div`,{className:`flex flex-col gap-2 px-2 pt-3`,children:(0,l.jsx)(a.AgentCanvasUpdateCard,{})}),(0,l.jsx)(`div`,{className:`px-2 pt-3`,children:(0,l.jsx)(o.BackendSyncedSettingsBadge,{})})]})}exports.SettingsDesktopSidebar=u;
2
2
  //# sourceMappingURL=settings-desktop-sidebar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-desktop-sidebar.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"ggBAoBA,SAAgB,EAAuB,CACrC,mBAC8B,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,EAAkB,EAAgB,OACrC,GACC,EAAK,OAAS,MAClB,EAEA,OACE,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,0BACZ,UAAW,EAAA,GACT,+DACA,0CACF,WALF,EAOE,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,+CACxB,EAAE,EAAA,QAAQ,cAAc,CACV,CAAA,GACjB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wCAAf,CACG,EAAgB,IAAK,IACpB,EAAA,EAAA,KAAC,EAAA,eAAD,CAEE,GAAI,EAAa,KAAK,GACtB,MAAO,EAAE,EAAa,KAAK,IAAe,EAC1C,IAAA,GACA,OAAQ,oBAAoB,EAAa,KAAK,KAC9C,KAAM,EAAa,KAAK,IACzB,EANM,EAAa,KAAK,EAMxB,CACF,GACD,EAAA,EAAA,KAAC,EAAA,yBAAD,CAA2B,CAAA,GAC3B,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAoB,CAAA,CACjB,KACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAwB,CAAA,CACrB,CAAA,GACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,CAA6B,CAAA,CAC1B,CAAA,CACA,GAEX"}
1
+ {"version":3,"file":"settings-desktop-sidebar.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"flex flex-col gap-2 px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"ggBAoBA,SAAgB,EAAuB,CACrC,mBAC8B,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,EAAkB,EAAgB,OACrC,GACC,EAAK,OAAS,MAClB,EAEA,OACE,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,0BACZ,UAAW,EAAA,GACT,+DACA,0CACF,WALF,EAOE,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,+CACxB,EAAE,EAAA,QAAQ,cAAc,CACV,CAAA,GACjB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wCAAf,CACG,EAAgB,IAAK,IACpB,EAAA,EAAA,KAAC,EAAA,eAAD,CAEE,GAAI,EAAa,KAAK,GACtB,MAAO,EAAE,EAAa,KAAK,IAAe,EAC1C,IAAA,GACA,OAAQ,oBAAoB,EAAa,KAAK,KAC9C,KAAM,EAAa,KAAK,IACzB,EANM,EAAa,KAAK,EAMxB,CACF,GACD,EAAA,EAAA,KAAC,EAAA,yBAAD,CAA2B,CAAA,GAC3B,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAoB,CAAA,CACjB,KACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACb,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAwB,CAAA,CACrB,CAAA,GACL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,CAA6B,CAAA,CAC1B,CAAA,CACA,GAEX"}
@@ -34,7 +34,7 @@ function d({ navigationItems: d }) {
34
34
  ]
35
35
  }),
36
36
  /* @__PURE__ */ l("div", {
37
- className: "px-2 pt-3",
37
+ className: "flex flex-col gap-2 px-2 pt-3",
38
38
  children: /* @__PURE__ */ l(a, {})
39
39
  }),
40
40
  /* @__PURE__ */ l("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-desktop-sidebar.js","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAgB,EAAuB,EACrC,sBAC8B;CAC9B,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAkB,EAAgB,QACrC,MACC,EAAK,SAAS,MAClB;CAEA,OACE,kBAAC,SAAD;EACE,eAAY;EACZ,WAAW,EACT,gEACA,0CACF;YALF;GAOE,kBAAC,EAAW,MAAZ;IAAiB,WAAU;cACxB,EAAE,EAAQ,cAAc;GACV,CAAA;GACjB,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAgB,KAAK,MACpB,kBAAC,GAAD;MAEE,IAAI,EAAa,KAAK;MACtB,OAAO,EAAE,EAAa,KAAK,IAAe;MAC1C,KAAA;MACA,QAAQ,oBAAoB,EAAa,KAAK;MAC9C,MAAM,EAAa,KAAK;KACzB,GANM,EAAa,KAAK,EAMxB,CACF;KACD,kBAAC,GAAD,CAA2B,CAAA;KAC3B,kBAAC,GAAD,CAAoB,CAAA;IACjB;;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAAwB,CAAA;GACrB,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAA6B,CAAA;GAC1B,CAAA;EACA;;AAEX"}
1
+ {"version":3,"file":"settings-desktop-sidebar.js","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"flex flex-col gap-2 px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAgB,EAAuB,EACrC,sBAC8B;CAC9B,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,IAAkB,EAAgB,QACrC,MACC,EAAK,SAAS,MAClB;CAEA,OACE,kBAAC,SAAD;EACE,eAAY;EACZ,WAAW,EACT,gEACA,0CACF;YALF;GAOE,kBAAC,EAAW,MAAZ;IAAiB,WAAU;cACxB,EAAE,EAAQ,cAAc;GACV,CAAA;GACjB,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAgB,KAAK,MACpB,kBAAC,GAAD;MAEE,IAAI,EAAa,KAAK;MACtB,OAAO,EAAE,EAAa,KAAK,IAAe;MAC1C,KAAA;MACA,QAAQ,oBAAoB,EAAa,KAAK;MAC9C,MAAM,EAAa,KAAK;KACzB,GANM,EAAa,KAAK,EAMxB,CACF;KACD,kBAAC,GAAD,CAA2B,CAAA;KAC3B,kBAAC,GAAD,CAAoB,CAAA;IACjB;;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAAwB,CAAA;GACrB,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAA6B,CAAA;GAC1B,CAAA;EACA;;AAEX"}
@@ -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("../../../ui/typography.cjs"),i=require("../../../icons/settings-gear.cjs"),a=require("../../../icons/close.cjs"),o=require("../sidebar/sidebar-layout.cjs"),s=require("./agent-canvas-update-card.cjs"),c=require("./backend-synced-settings-badge.cjs"),l=require("./cloud-settings-link.cjs"),u=require("./integrations-settings-link.cjs"),d=require("./settings-nav-header.cjs"),f=require("./settings-nav-divider.cjs"),p=require("./settings-nav-link.cjs");let m=require("react/jsx-runtime");function h({isMobileMenuOpen:h,onCloseMobileMenu:g,navigationItems:_}){let{t:v}=e.useTranslation(`openhands`);return(0,m.jsxs)(m.Fragment,{children:[h&&(0,m.jsx)(`div`,{className:`fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden`,onClick:g}),(0,m.jsxs)(`nav`,{"data-testid":`settings-navbar`,className:n.cn(`flex flex-col gap-6 transition-transform duration-300 ease-in-out`,`fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden`,h?`translate-x-0`:`-translate-x-full`),children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,m.jsxs)(`div`,{className:`ml-1 flex items-center gap-2 sm:ml-4.5`,children:[(0,m.jsx)(i.default,{width:16,height:16}),(0,m.jsx)(r.Typography.H2,{children:v(t.I18nKey.SETTINGS$TITLE)})]}),(0,m.jsx)(`button`,{type:`button`,onClick:g,className:n.cn(`cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden`,o.navInteractiveTransitionClassName),"aria-label":v(t.I18nKey.SIDEBAR$CLOSE_MENU),children:(0,m.jsx)(a.default,{width:32,height:32})})]}),(0,m.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[_.map((e,t)=>e.type===`header`?(0,m.jsx)(d.SettingsNavHeader,{text:e.text},`header-${e.text}`):e.type===`divider`?(0,m.jsx)(f.SettingsNavDivider,{},`divider-${t}`):(0,m.jsx)(p.SettingsNavLink,{item:e.item,onClick:g},e.item.to)),(0,m.jsx)(u.IntegrationsSettingsLink,{}),(0,m.jsx)(l.CloudSettingsLink,{})]}),(0,m.jsx)(`div`,{className:`px-2 pt-3`,children:(0,m.jsx)(s.AgentCanvasUpdateCard,{})}),(0,m.jsx)(`div`,{className:`px-2 pt-3`,children:(0,m.jsx)(c.BackendSyncedSettingsBadge,{})})]})]})}exports.SettingsMobileDrawer=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("../../../ui/typography.cjs"),i=require("../../../icons/settings-gear.cjs"),a=require("../../../icons/close.cjs"),o=require("../sidebar/sidebar-layout.cjs"),s=require("./agent-canvas-update-card.cjs"),c=require("./backend-synced-settings-badge.cjs"),l=require("./cloud-settings-link.cjs"),u=require("./integrations-settings-link.cjs"),d=require("./settings-nav-header.cjs"),f=require("./settings-nav-divider.cjs"),p=require("./settings-nav-link.cjs");let m=require("react/jsx-runtime");function h({isMobileMenuOpen:h,onCloseMobileMenu:g,navigationItems:_}){let{t:v}=e.useTranslation(`openhands`);return(0,m.jsxs)(m.Fragment,{children:[h&&(0,m.jsx)(`div`,{className:`fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden`,onClick:g}),(0,m.jsxs)(`nav`,{"data-testid":`settings-navbar`,className:n.cn(`flex flex-col gap-6 transition-transform duration-300 ease-in-out`,`fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden`,h?`translate-x-0`:`-translate-x-full`),children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,m.jsxs)(`div`,{className:`ml-1 flex items-center gap-2 sm:ml-4.5`,children:[(0,m.jsx)(i.default,{width:16,height:16}),(0,m.jsx)(r.Typography.H2,{children:v(t.I18nKey.SETTINGS$TITLE)})]}),(0,m.jsx)(`button`,{type:`button`,onClick:g,className:n.cn(`cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden`,o.navInteractiveTransitionClassName),"aria-label":v(t.I18nKey.SIDEBAR$CLOSE_MENU),children:(0,m.jsx)(a.default,{width:32,height:32})})]}),(0,m.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[_.map((e,t)=>e.type===`header`?(0,m.jsx)(d.SettingsNavHeader,{text:e.text},`header-${e.text}`):e.type===`divider`?(0,m.jsx)(f.SettingsNavDivider,{},`divider-${t}`):(0,m.jsx)(p.SettingsNavLink,{item:e.item,onClick:g},e.item.to)),(0,m.jsx)(u.IntegrationsSettingsLink,{}),(0,m.jsx)(l.CloudSettingsLink,{})]}),(0,m.jsx)(`div`,{className:`flex flex-col gap-2 px-2 pt-3`,children:(0,m.jsx)(s.AgentCanvasUpdateCard,{})}),(0,m.jsx)(`div`,{className:`px-2 pt-3`,children:(0,m.jsx)(c.BackendSyncedSettingsBadge,{})})]})]})}exports.SettingsMobileDrawer=h;
2
2
  //# sourceMappingURL=settings-mobile-drawer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-mobile-drawer.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n />\n );\n })}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":"ssBA0BA,SAAgB,EAAqB,CACnC,mBACA,oBACA,mBAC4B,CAC5B,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAExC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,sDACV,QAAS,CACV,CAAA,GAEH,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,kBACZ,UAAW,EAAA,GACT,oEACA,gFACA,EAAmB,gBAAkB,mBACvC,WANF,EAQE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kDAAf,EACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAc,MAAO,GAAI,OAAQ,EAAK,CAAA,GACtC,EAAA,EAAA,KAAC,EAAA,WAAW,GAAZ,CAAA,SAAgB,EAAE,EAAA,QAAQ,cAAc,CAAiB,CAAA,CACtD,KACL,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EACT,UAAW,EAAA,GACT,8DACA,EAAA,iCACF,EACA,aAAY,EAAE,EAAA,QAAQ,kBAAkB,YAExC,EAAA,EAAA,KAAC,EAAA,QAAD,CAAW,MAAO,GAAI,OAAQ,EAAK,CAAA,CAC7B,CAAA,CACL,KAEL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,CACG,EAAgB,KAAK,EAAc,IAC9B,EAAa,OAAS,UAEtB,EAAA,EAAA,KAAC,EAAA,kBAAD,CAEE,KAAM,EAAa,IACpB,EAFM,UAAU,EAAa,MAE7B,EAID,EAAa,OAAS,WACjB,EAAA,EAAA,KAAC,EAAA,mBAAD,CAA8C,EAArB,WAAW,GAAU,GAIrD,EAAA,EAAA,KAAC,EAAA,gBAAD,CAEE,KAAM,EAAa,KACnB,QAAS,CACV,EAHM,EAAa,KAAK,EAGxB,CAEJ,GACD,EAAA,EAAA,KAAC,EAAA,yBAAD,CAA2B,CAAA,GAC3B,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAoB,CAAA,CACjB,KAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAwB,CAAA,CACrB,CAAA,GAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,CAA6B,CAAA,CAC1B,CAAA,CACF,GACL,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"settings-mobile-drawer.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n />\n );\n })}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n\n <div className=\"flex flex-col gap-2 px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":"ssBA0BA,SAAgB,EAAqB,CACnC,mBACA,oBACA,mBAC4B,CAC5B,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAExC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,sDACV,QAAS,CACV,CAAA,GAEH,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,kBACZ,UAAW,EAAA,GACT,oEACA,gFACA,EAAmB,gBAAkB,mBACvC,WANF,EAQE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kDAAf,EACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAc,MAAO,GAAI,OAAQ,EAAK,CAAA,GACtC,EAAA,EAAA,KAAC,EAAA,WAAW,GAAZ,CAAA,SAAgB,EAAE,EAAA,QAAQ,cAAc,CAAiB,CAAA,CACtD,KACL,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EACT,UAAW,EAAA,GACT,8DACA,EAAA,iCACF,EACA,aAAY,EAAE,EAAA,QAAQ,kBAAkB,YAExC,EAAA,EAAA,KAAC,EAAA,QAAD,CAAW,MAAO,GAAI,OAAQ,EAAK,CAAA,CAC7B,CAAA,CACL,KAEL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,CACG,EAAgB,KAAK,EAAc,IAC9B,EAAa,OAAS,UAEtB,EAAA,EAAA,KAAC,EAAA,kBAAD,CAEE,KAAM,EAAa,IACpB,EAFM,UAAU,EAAa,MAE7B,EAID,EAAa,OAAS,WACjB,EAAA,EAAA,KAAC,EAAA,mBAAD,CAA8C,EAArB,WAAW,GAAU,GAIrD,EAAA,EAAA,KAAC,EAAA,gBAAD,CAEE,KAAM,EAAa,KACnB,QAAS,CACV,EAHM,EAAa,KAAK,EAGxB,CAEJ,GACD,EAAA,EAAA,KAAC,EAAA,yBAAD,CAA2B,CAAA,GAC3B,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAoB,CAAA,CACjB,KAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACb,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAwB,CAAA,CACrB,CAAA,GAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,CAA6B,CAAA,CAC1B,CAAA,CACF,GACL,CAAA,CAAA,CAEN"}
@@ -54,7 +54,7 @@ function _({ isMobileMenuOpen: _, onCloseMobileMenu: v, navigationItems: y }) {
54
54
  ]
55
55
  }),
56
56
  /* @__PURE__ */ h("div", {
57
- className: "px-2 pt-3",
57
+ className: "flex flex-col gap-2 px-2 pt-3",
58
58
  children: /* @__PURE__ */ h(s, {})
59
59
  }),
60
60
  /* @__PURE__ */ h("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-mobile-drawer.js","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n />\n );\n })}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0BA,SAAgB,EAAqB,EACnC,qBACA,sBACA,sBAC4B;CAC5B,IAAM,EAAE,SAAM,EAAe,WAAW;CAExC,OACE,kBAAA,GAAA,EAAA,UAAA,CACG,KACC,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;CACV,CAAA,GAEH,kBAAC,OAAD;EACE,eAAY;EACZ,WAAW,EACT,qEACA,iFACA,IAAmB,kBAAkB,mBACvC;YANF;GAQE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAc,OAAO;MAAI,QAAQ;KAAK,CAAA,GACtC,kBAAC,EAAW,IAAZ,EAAA,UAAgB,EAAE,EAAQ,cAAc,EAAiB,CAAA,CACtD;QACL,kBAAC,UAAD;KACE,MAAK;KACL,SAAS;KACT,WAAW,EACT,+DACA,CACF;KACA,cAAY,EAAE,EAAQ,kBAAkB;eAExC,kBAAC,GAAD;MAAW,OAAO;MAAI,QAAQ;KAAK,CAAA;IAC7B,CAAA,CACL;;GAEL,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAgB,KAAK,GAAc,MAC9B,EAAa,SAAS,WAEtB,kBAAC,GAAD,EAEE,MAAM,EAAa,KACpB,GAFM,UAAU,EAAa,MAE7B,IAID,EAAa,SAAS,YACjB,kBAAC,GAAD,CAA8C,GAArB,WAAW,GAAU,IAIrD,kBAAC,GAAD;MAEE,MAAM,EAAa;MACnB,SAAS;KACV,GAHM,EAAa,KAAK,EAGxB,CAEJ;KACD,kBAAC,GAAD,CAA2B,CAAA;KAC3B,kBAAC,GAAD,CAAoB,CAAA;IACjB;;GAEL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAAwB,CAAA;GACrB,CAAA;GAEL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAA6B,CAAA;GAC1B,CAAA;EACF;GACL,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"settings-mobile-drawer.js","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n />\n );\n })}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n\n <div className=\"flex flex-col gap-2 px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0BA,SAAgB,EAAqB,EACnC,qBACA,sBACA,sBAC4B;CAC5B,IAAM,EAAE,SAAM,EAAe,WAAW;CAExC,OACE,kBAAA,GAAA,EAAA,UAAA,CACG,KACC,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;CACV,CAAA,GAEH,kBAAC,OAAD;EACE,eAAY;EACZ,WAAW,EACT,qEACA,iFACA,IAAmB,kBAAkB,mBACvC;YANF;GAQE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAc,OAAO;MAAI,QAAQ;KAAK,CAAA,GACtC,kBAAC,EAAW,IAAZ,EAAA,UAAgB,EAAE,EAAQ,cAAc,EAAiB,CAAA,CACtD;QACL,kBAAC,UAAD;KACE,MAAK;KACL,SAAS;KACT,WAAW,EACT,+DACA,CACF;KACA,cAAY,EAAE,EAAQ,kBAAkB;eAExC,kBAAC,GAAD;MAAW,OAAO;MAAI,QAAQ;KAAK,CAAA;IAC7B,CAAA,CACL;;GAEL,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAgB,KAAK,GAAc,MAC9B,EAAa,SAAS,WAEtB,kBAAC,GAAD,EAEE,MAAM,EAAa,KACpB,GAFM,UAAU,EAAa,MAE7B,IAID,EAAa,SAAS,YACjB,kBAAC,GAAD,CAA8C,GAArB,WAAW,GAAU,IAIrD,kBAAC,GAAD;MAEE,MAAM,EAAa;MACnB,SAAS;KACV,GAHM,EAAa,KAAK,EAGxB,CAEJ;KACD,kBAAC,GAAD,CAA2B,CAAA;KAC3B,kBAAC,GAAD,CAAoB,CAAA;IACjB;;GAEL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAAwB,CAAA;GACrB,CAAA;GAEL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAA6B,CAAA;GAC1B,CAAA;EACF;GACL,EAAA,CAAA;AAEN"}
@@ -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("../../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),a=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),o=require("../../../node_modules/lucide-react/dist/esm/icons/server.cjs"),s=require("../../../node_modules/lucide-react/dist/esm/icons/settings.cjs"),c=require("../../../utils/utils.cjs"),l=require("../../../manifests/automation-interface.cjs"),u=require("../../shared/buttons/styled-tooltip.cjs"),d=require("../../shared/navigation-link.cjs"),f=require("./sidebar-layout.cjs"),p=require("./sidebar-collapsed-icon-slot.cjs"),m=require("./sidebar-nav-link.cjs"),h=require("../../shared/buttons/openhands-logo-button.cjs"),g=require("../backends/backend-status-dot.cjs"),_=require("../backends/backend-selector.cjs"),v=require("../command-menu/command-menu-trigger.cjs"),y=require("./sidebar-conversation-list.cjs"),b=require("../../../icons/automations.cjs");let x=require("react");x=e.__toESM(x,1);let S=require("react/jsx-runtime");var C=18,w=34,T=Math.round(w*30/46);function E({collapsed:e,showCollapseToggle:x,showMobileCloseButton:E=!1,onCloseMobile:D,collapseToggleLabel:O,onCollapse:k,onExpand:A,showCollapsedExpandButton:j,isExtensionsActive:M,currentPath:N,activeBackendHealth:P,collapsedBackendPopoverOpen:F,setCollapsedBackendPopoverOpen:I,collapsedBackendPopoverRef:L,collapsedBackendCloseTimer:R,onOpenAddBackend:z,onOpenManageBackends:B}){let{t:V}=t.useTranslation(`openhands`),H=R;return(0,S.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,S.jsxs)(`div`,{className:f.sidebarHeaderRowClassName(e),children:[(0,S.jsxs)(`div`,{className:c.cn(e&&x?f.SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS:`flex min-w-0 shrink-0 items-center`),children:[(0,S.jsx)(`div`,{className:c.cn(e&&x&&`flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150`,e&&j&&`opacity-0`),children:(0,S.jsx)(h.OpenHandsLogoButton,{logoWidth:w,logoHeight:T,logoClassName:`max-w-none`,className:c.cn(f.SIDEBAR_ICON_SLOT_CLASS,`overflow-visible`)})}),e&&x?(0,S.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":O,onClick:A,className:c.cn(f.SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,j?`opacity-100 pointer-events-auto`:`opacity-0 pointer-events-none`),children:(0,S.jsx)(i.ChevronRight,{width:14,height:14})}):null]}),!e&&x?(0,S.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":O,onClick:k,className:c.cn(`hidden md:inline-flex ml-auto`,f.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,S.jsx)(r.ChevronLeft,{width:14,height:14})}):null,!e&&E?(0,S.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-drawer-close`,onClick:D,"aria-label":V(n.I18nKey.SIDEBAR$CLOSE_MENU),className:c.cn(`inline-flex ml-auto`,f.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,S.jsx)(r.ChevronLeft,{width:14,height:14})}):null]}),(0,S.jsxs)(`nav`,{className:f.sidebarNavListClassName(e),children:[(0,S.jsx)(v.CommandMenuTrigger,{collapsed:e}),(0,S.jsx)(m.SidebarNavLink,{to:`/conversations`,end:!0,label:V(n.I18nKey.SIDEBAR$NEW_CHAT),testId:`sidebar-conversations-link`,collapsed:e,icon:(0,S.jsx)(a.Plus,{width:C,height:C})}),(0,S.jsx)(m.SidebarNavLink,{to:`/customize`,label:V(n.I18nKey.NAV$CUSTOMIZE),testId:`sidebar-skills-link`,collapsed:e,forceActive:M,icon:(0,S.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:C,height:C,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,S.jsx)(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`}),(0,S.jsx)(`path`,{d:`m7 16.5-4.74-2.85`}),(0,S.jsx)(`path`,{d:`m7 16.5 5-3`}),(0,S.jsx)(`path`,{d:`M7 16.5v5.17`}),(0,S.jsx)(`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`}),(0,S.jsx)(`path`,{d:`m17 16.5-5-3`}),(0,S.jsx)(`path`,{d:`m17 16.5 4.74-2.85`}),(0,S.jsx)(`path`,{d:`m17 16.5v5.17`}),(0,S.jsx)(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`}),(0,S.jsx)(`path`,{d:`M12 8 7.26 5.15`}),(0,S.jsx)(`path`,{d:`m12 8 4.74-2.85`}),(0,S.jsx)(`path`,{d:`M12 13.5V8`})]})}),(0,S.jsx)(m.SidebarNavLink,{to:l.automationListPath(),label:l.getInterfaceCopy().sidebarLabel??V(n.I18nKey.SIDEBAR$AUTOMATIONS),testId:`sidebar-automations-link`,collapsed:e,icon:(0,S.jsx)(b.default,{width:C,height:C})})]}),(0,S.jsx)(y.SidebarConversationList,{collapsed:e}),e&&x?(0,S.jsxs)(`nav`,{className:c.cn(f.sidebarNavListClassName(e),`mt-auto pb-2 cursor-pointer`),children:[(0,S.jsx)(u.StyledTooltip,{content:V(n.I18nKey.SIDEBAR$SETTINGS),placement:`right`,children:(0,S.jsxs)(d.NavigationLink,{to:`/settings`,"data-testid":`collapsed-settings-link`,"aria-label":V(n.I18nKey.SIDEBAR$SETTINGS),className:f.sidebarNavRowClassName({collapsed:!0}),children:[(0,S.jsx)(p.SidebarCollapsedIconSlot,{active:N.startsWith(`/settings`),children:(0,S.jsx)(s.Settings,{width:C,height:C})}),(0,S.jsx)(`span`,{className:f.sidebarNavLabelClassName(!0),children:V(n.I18nKey.SIDEBAR$SETTINGS)})]})}),(0,S.jsxs)(`div`,{className:`relative`,ref:L,onMouseEnter:()=>{H.current&&=(clearTimeout(H.current),null),I(!0)},onMouseLeave:()=>{H.current=setTimeout(()=>I(!1),150)},children:[(0,S.jsxs)(`button`,{type:`button`,"data-testid":`collapsed-backend-selector-link`,"aria-label":V(n.I18nKey.BACKEND$MANAGE),"aria-expanded":F,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onMouseUp:e=>e.stopPropagation(),className:c.cn(f.sidebarNavRowClassName({collapsed:!0}),`relative`),children:[(0,S.jsx)(p.SidebarCollapsedIconSlot,{active:F,children:(0,S.jsxs)(`span`,{className:`relative inline-flex size-[18px] shrink-0 items-center justify-center`,children:[(0,S.jsx)(g.BackendStatusDot,{isConnected:P?.isConnected??null,className:`absolute -left-0.5 -top-0.5 z-[1] pointer-events-none`}),(0,S.jsx)(o.Server,{width:C,height:C})]})}),(0,S.jsx)(`span`,{className:f.sidebarNavLabelClassName(!0),children:V(n.I18nKey.BACKEND$MANAGE)})]}),F?(0,S.jsx)(`div`,{className:`absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]`,onClick:e=>e.stopPropagation(),children:(0,S.jsx)(_.BackendSelector,{sidebarCollapsed:e,hideTrigger:!0,defaultOpen:!0,openUpward:!0,onSelectOption:()=>I(!1),onOpenAddBackend:z,onOpenManageBackends:B})}):null]})]}):null,e?null:(0,S.jsx)(`div`,{className:c.cn(`flex flex-col items-stretch max-w-none box-border shrink-0`,`-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5`),children:(0,S.jsx)(_.BackendSelector,{sidebarCollapsed:e,openUpward:!0})})]})}exports.SidebarRailBody=E;
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("../../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),a=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),o=require("../../../node_modules/lucide-react/dist/esm/icons/server.cjs"),s=require("../../../node_modules/lucide-react/dist/esm/icons/settings.cjs"),c=require("../../../utils/utils.cjs"),l=require("../../../manifests/automation-interface.cjs"),u=require("../../shared/buttons/styled-tooltip.cjs"),d=require("../../shared/navigation-link.cjs"),f=require("./sidebar-layout.cjs"),p=require("./sidebar-collapsed-icon-slot.cjs"),m=require("./sidebar-nav-link.cjs"),h=require("../../shared/buttons/openhands-logo-button.cjs"),g=require("../backends/backend-status-dot.cjs"),_=require("../backends/backend-selector.cjs"),v=require("../command-menu/command-menu-trigger.cjs"),y=require("../settings/agent-canvas-version-tile.cjs"),b=require("./sidebar-conversation-list.cjs"),x=require("../../../icons/automations.cjs");let S=require("react");S=e.__toESM(S,1);let C=require("react/jsx-runtime");var w=18,T=34,E=Math.round(T*30/46);function D({collapsed:e,showCollapseToggle:S,showMobileCloseButton:D=!1,onCloseMobile:O,collapseToggleLabel:k,onCollapse:A,onExpand:j,showCollapsedExpandButton:M,isExtensionsActive:N,currentPath:P,activeBackendHealth:F,collapsedBackendPopoverOpen:I,setCollapsedBackendPopoverOpen:L,collapsedBackendPopoverRef:R,collapsedBackendCloseTimer:z,onOpenAddBackend:B,onOpenManageBackends:V}){let{t:H}=t.useTranslation(`openhands`),U=z;return(0,C.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,C.jsxs)(`div`,{className:f.sidebarHeaderRowClassName(e),children:[(0,C.jsxs)(`div`,{className:c.cn(e&&S?f.SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS:`flex min-w-0 shrink-0 items-center`),children:[(0,C.jsx)(`div`,{className:c.cn(e&&S&&`flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150`,e&&M&&`opacity-0`),children:(0,C.jsx)(h.OpenHandsLogoButton,{logoWidth:T,logoHeight:E,logoClassName:`max-w-none`,className:c.cn(f.SIDEBAR_ICON_SLOT_CLASS,`overflow-visible`)})}),e&&S?(0,C.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":k,onClick:j,className:c.cn(f.SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,M?`opacity-100 pointer-events-auto`:`opacity-0 pointer-events-none`),children:(0,C.jsx)(i.ChevronRight,{width:14,height:14})}):null]}),!e&&S?(0,C.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":k,onClick:A,className:c.cn(`hidden md:inline-flex ml-auto`,f.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,C.jsx)(r.ChevronLeft,{width:14,height:14})}):null,!e&&D?(0,C.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-drawer-close`,onClick:O,"aria-label":H(n.I18nKey.SIDEBAR$CLOSE_MENU),className:c.cn(`inline-flex ml-auto`,f.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,C.jsx)(r.ChevronLeft,{width:14,height:14})}):null]}),(0,C.jsxs)(`nav`,{className:f.sidebarNavListClassName(e),children:[(0,C.jsx)(v.CommandMenuTrigger,{collapsed:e}),(0,C.jsx)(m.SidebarNavLink,{to:`/conversations`,end:!0,label:H(n.I18nKey.SIDEBAR$NEW_CHAT),testId:`sidebar-conversations-link`,collapsed:e,icon:(0,C.jsx)(a.Plus,{width:w,height:w})}),(0,C.jsx)(m.SidebarNavLink,{to:`/customize`,label:H(n.I18nKey.NAV$CUSTOMIZE),testId:`sidebar-skills-link`,collapsed:e,forceActive:N,icon:(0,C.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:w,height:w,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,C.jsx)(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`}),(0,C.jsx)(`path`,{d:`m7 16.5-4.74-2.85`}),(0,C.jsx)(`path`,{d:`m7 16.5 5-3`}),(0,C.jsx)(`path`,{d:`M7 16.5v5.17`}),(0,C.jsx)(`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`}),(0,C.jsx)(`path`,{d:`m17 16.5-5-3`}),(0,C.jsx)(`path`,{d:`m17 16.5 4.74-2.85`}),(0,C.jsx)(`path`,{d:`m17 16.5v5.17`}),(0,C.jsx)(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`}),(0,C.jsx)(`path`,{d:`M12 8 7.26 5.15`}),(0,C.jsx)(`path`,{d:`m12 8 4.74-2.85`}),(0,C.jsx)(`path`,{d:`M12 13.5V8`})]})}),(0,C.jsx)(m.SidebarNavLink,{to:l.automationListPath(),label:l.getInterfaceCopy().sidebarLabel??H(n.I18nKey.SIDEBAR$AUTOMATIONS),testId:`sidebar-automations-link`,collapsed:e,icon:(0,C.jsx)(x.default,{width:w,height:w})})]}),(0,C.jsx)(b.SidebarConversationList,{collapsed:e}),e&&S?(0,C.jsxs)(`nav`,{className:c.cn(f.sidebarNavListClassName(e),`mt-auto pb-2 cursor-pointer`),children:[(0,C.jsx)(u.StyledTooltip,{content:H(n.I18nKey.SIDEBAR$SETTINGS),placement:`right`,children:(0,C.jsxs)(d.NavigationLink,{to:`/settings`,"data-testid":`collapsed-settings-link`,"aria-label":H(n.I18nKey.SIDEBAR$SETTINGS),className:f.sidebarNavRowClassName({collapsed:!0}),children:[(0,C.jsx)(p.SidebarCollapsedIconSlot,{active:P.startsWith(`/settings`),children:(0,C.jsx)(s.Settings,{width:w,height:w})}),(0,C.jsx)(`span`,{className:f.sidebarNavLabelClassName(!0),children:H(n.I18nKey.SIDEBAR$SETTINGS)})]})}),(0,C.jsxs)(`div`,{className:`relative`,ref:R,onMouseEnter:()=>{U.current&&=(clearTimeout(U.current),null),L(!0)},onMouseLeave:()=>{U.current=setTimeout(()=>L(!1),150)},children:[(0,C.jsxs)(`button`,{type:`button`,"data-testid":`collapsed-backend-selector-link`,"aria-label":H(n.I18nKey.BACKEND$MANAGE),"aria-expanded":I,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onMouseUp:e=>e.stopPropagation(),className:c.cn(f.sidebarNavRowClassName({collapsed:!0}),`relative`),children:[(0,C.jsx)(p.SidebarCollapsedIconSlot,{active:I,children:(0,C.jsxs)(`span`,{className:`relative inline-flex size-[18px] shrink-0 items-center justify-center`,children:[(0,C.jsx)(g.BackendStatusDot,{isConnected:F?.isConnected??null,className:`absolute -left-0.5 -top-0.5 z-[1] pointer-events-none`}),(0,C.jsx)(o.Server,{width:w,height:w})]})}),(0,C.jsx)(`span`,{className:f.sidebarNavLabelClassName(!0),children:H(n.I18nKey.BACKEND$MANAGE)})]}),I?(0,C.jsx)(`div`,{className:`absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]`,onClick:e=>e.stopPropagation(),children:(0,C.jsx)(_.BackendSelector,{sidebarCollapsed:e,hideTrigger:!0,defaultOpen:!0,openUpward:!0,onSelectOption:()=>L(!1),onOpenAddBackend:B,onOpenManageBackends:V})}):null]})]}):null,e?null:(0,C.jsxs)(`div`,{className:c.cn(`flex flex-col items-stretch max-w-none box-border shrink-0 gap-2`,`-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5`),children:[(0,C.jsx)(y.AgentCanvasVersionTile,{hideWhenUpToDate:!0}),(0,C.jsx)(_.BackendSelector,{sidebarCollapsed:e,openUpward:!0})]})]})}exports.SidebarRailBody=D;
2
2
  //# sourceMappingURL=sidebar-rail-body.cjs.map