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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (879) hide show
  1. package/README.md +24 -7
  2. package/README.windows.md +27 -0
  3. package/bin/agent-canvas.mjs +26 -3
  4. package/build/assets/{QueryClientProvider-CkGuhXg-.js → QueryClientProvider-Cnr-Yl3j.js} +1 -1
  5. package/build/assets/{Trans-Cvm_-SMi.js → Trans-4jmk54WC.js} +1 -1
  6. package/build/assets/acp-providers-CPdgcp13.js +1 -0
  7. package/build/assets/{acp-route-guard-B2yoBZ_4.js → acp-route-guard-BoVmCn0e.js} +1 -1
  8. package/build/assets/active-backend-context-Beu-LZL-.js +1 -0
  9. package/build/assets/add-backend-modal-BheqYXHK.js +1 -0
  10. package/build/assets/agent-server-client-options-HEOwGVIU.js +1 -0
  11. package/build/assets/agent-server-compatibility-CdI3N7dr.js +1 -0
  12. package/build/assets/agent-server-conversation-service.api-CORdqJZg.js +5 -0
  13. package/build/assets/{agent-settings-CnGSCmK8.js → agent-settings-UFvcGjoI.js} +1 -1
  14. package/build/assets/{alert-banner-DtzAX654.js → alert-banner-DFnn_lC6.js} +1 -1
  15. package/build/assets/{analytics-consent-form-modal-CHZ3I37v.js → analytics-consent-form-modal-CVNugqzu.js} +1 -1
  16. package/build/assets/api-key-entry-screen-M6su2VSf.js +1 -0
  17. package/build/assets/{app-settings-Db9ITeJH.js → app-settings-BlvBhBdc.js} +1 -1
  18. package/build/assets/automation-detail-BWrQk4Oa.js +1 -0
  19. package/build/assets/automations-list-ux9KvYsU.js +1 -0
  20. package/build/assets/back-nav-button-7dQJ2k3O.js +1 -0
  21. package/build/assets/backend-form-modal-CDnEYjaU.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-Dc6c7GT4.js → backend-synced-settings-badge-BTIj-Ffq.js} +1 -1
  23. package/build/assets/base-modal-C2oy2EBG.js +1 -0
  24. package/build/assets/brand-button-DJ_S16rO.js +1 -0
  25. package/build/assets/{browser-D810xUYt.js → browser-CGM-k-sH.js} +2 -2
  26. package/build/assets/browser-store-DAsixKdU.js +1 -0
  27. package/build/assets/{browser-tab-B-aIqXRl.js → browser-tab-dvSPdvkm.js} +1 -1
  28. package/build/assets/{checkmark-DL7acQA7.js → checkmark-Dus0b6jt.js} +1 -1
  29. package/build/assets/{chevron-left-small-CVWf8TI6.js → chevron-left-small-_uvG7RVM.js} +1 -1
  30. package/build/assets/{circle-plus-check-toggle-P7ZZToV4.js → circle-plus-check-toggle-DKS8MAVV.js} +1 -1
  31. package/build/assets/{close-B5LROHR3.js → close-BU5iTc66.js} +1 -1
  32. package/build/assets/code-tag-BzyqOtPD.js +1 -0
  33. package/build/assets/combobox-caret-BJC7XJsz.js +1 -0
  34. package/build/assets/{command-store-DFN_17p1.js → command-store-CE1weJy8.js} +1 -1
  35. package/build/assets/{condenser-settings-wnEKhBof.js → condenser-settings-BolbDvm5.js} +1 -1
  36. package/build/assets/{confirmation-modal-Dau3w_sa.js → confirmation-modal-B5Ca6qFE.js} +1 -1
  37. package/build/assets/context-menu-list-item-7tAcm2c3.js +1 -0
  38. package/build/assets/conversation-D0N4dw_p.js +19 -0
  39. package/build/assets/conversation-DhRJuZLG.js +1 -0
  40. package/build/assets/conversation-panel-CNqHbS_Z.js +1 -0
  41. package/build/assets/conversation-service.api-BsJy6uuL.js +1 -0
  42. package/build/assets/conversation-state-store-D-w0uurj.js +1 -0
  43. package/build/assets/conversation-store-CC-isCnP.js +1 -0
  44. package/build/assets/{conversation-tab-empty-state-DyssnnWa.js → conversation-tab-empty-state-CStQLPVW.js} +1 -1
  45. package/build/assets/conversation-websocket-context-DvHgx_FE.js +3 -0
  46. package/build/assets/{copy-DYgmUdIw.js → copy-Chg-sFu3.js} +1 -1
  47. package/build/assets/{custom-toast-handlers-C-SZFmto.js → custom-toast-handlers-ufGJ6_Rc.js} +1 -1
  48. package/build/assets/declaration-CR6HMp29.js +1 -0
  49. package/build/assets/{device-verify-DqDlphsG.js → device-verify-C6mj28zv.js} +1 -1
  50. package/build/assets/dist-DNeWJ2bh.js +1 -0
  51. package/build/assets/dropdown-classes-BsVmxlNG.js +1 -0
  52. package/build/assets/edit-automation-modal-BpX-t-HD.js +1 -0
  53. package/build/assets/ellipsis-button-Vh5MvRZa.js +1 -0
  54. package/build/assets/entry.client-Ck9rQCg-.js +2 -0
  55. package/build/assets/enum-filter-dropdown-5JeF2RLb.js +1 -0
  56. package/build/assets/{environment-switch-overlay-XL8yCGP6.js → environment-switch-overlay-Tf_BIfeR.js} +1 -1
  57. package/build/assets/extensions-hub-CE9QOb5n.js +1 -0
  58. package/build/assets/{extensions-navigation-BYR8Giqq.js → extensions-navigation-DSLGNGbS.js} +1 -1
  59. package/build/assets/file-BTY6Gyy9.js +1 -0
  60. package/build/assets/files-tab-cL668j1I.js +1 -0
  61. package/build/assets/files-tab-store-m0ARqX_E.js +1 -0
  62. package/build/assets/{folder-ZZJVGgd7.js → folder-D1T2W1cj.js} +1 -1
  63. package/build/assets/git-control-bar-branch-button-DtIrOrie.js +27 -0
  64. package/build/assets/git-provider-icon-CHdGBdU2.js +1 -0
  65. package/build/assets/globe-Bzj_0oXT.js +1 -0
  66. package/build/assets/home-Cz2Veg56.js +1 -0
  67. package/build/assets/{i18n-CTohRuoO.js → i18n-DET2iOyh.js} +1 -1
  68. package/build/assets/install-server-modal-B9nXCS3u.js +1 -0
  69. package/build/assets/launch-CWz0dm4o.js +1 -0
  70. package/build/assets/{lesson-plan-dH5Bj0pN.js → lesson-plan-duSsqWVs.js} +1 -1
  71. package/build/assets/link-external-DGxVm4Ps.js +1 -0
  72. package/build/assets/{llm-client-DaH1TuyR.js → llm-client-CYEaUjGx.js} +1 -1
  73. package/build/assets/llm-settings-DFkXHuvT.js +1 -0
  74. package/build/assets/llm-settings-DhrdCXqX.js +1 -0
  75. package/build/assets/{loading-spinner-BPtYORNK.js → loading-spinner-5GT9q1xy.js} +1 -1
  76. package/build/assets/manage-backends-modal-DpBD_vR9.js +1 -0
  77. package/build/assets/manage-workspaces-modal-CtRbxREx.js +1 -0
  78. package/build/assets/manifest-eed90ff5.js +1 -0
  79. package/build/assets/{markdown-renderer-DMzf2i4x.js → markdown-renderer-B3IAVfv4.js} +1 -1
  80. package/build/assets/mcp-BUe7kiYM.js +9 -0
  81. package/build/assets/messages-dqp_KYyl.js +36 -0
  82. package/build/assets/{modal-backdrop-BAbgYsqB.js → modal-backdrop-RfNCrSpK.js} +1 -1
  83. package/build/assets/{modal-body-BI6Ru2Qr.js → modal-body-aoa2fx5W.js} +1 -1
  84. package/build/assets/modal-classes-6YqcqA6y.js +1 -0
  85. package/build/assets/{modal-close-button-t1Gh3qmL.js → modal-close-button-CtWOUMmw.js} +1 -1
  86. package/build/assets/{model-selector-SM9IUz-q.js → model-selector-BvSTrkhT.js} +1 -1
  87. package/build/assets/{navigation-context-D0YWpT8d.js → navigation-context-BdKYH32C.js} +1 -1
  88. package/build/assets/{navigation-link-Cn7KP3c5.js → navigation-link-U4vY9i_C.js} +1 -1
  89. package/build/assets/{openhands-logo-CnrF6LKb.js → openhands-logo-CCo0wJZX.js} +1 -1
  90. package/build/assets/{option-service.api-KvY_mZMY.js → option-service.api-DmNVxAvS.js} +1 -1
  91. package/build/assets/{organization-service.api-DzYTHTYC.js → organization-service.api-DbnougaQ.js} +1 -1
  92. package/build/assets/{path-utils-C3bQf6lJ.js → path-utils-onx24uF5.js} +1 -1
  93. package/build/assets/{plan-components-atxXCF0R.js → plan-components-CRDMQzsS.js} +1 -1
  94. package/build/assets/{planner-tab-BlrCpv-7.js → planner-tab-CmIjLz7q.js} +1 -1
  95. package/build/assets/{profiles-client-D6IkTJof.js → profiles-client-fEmgWkCW.js} +1 -1
  96. package/build/assets/{providers-Bx6EfrzZ.js → providers-CbD7fiic.js} +1 -1
  97. package/build/assets/proxy-BAdHH8QB.js +1 -0
  98. package/build/assets/{query-client-config-B7u9asM0.js → query-client-config-CRnGSujB.js} +1 -1
  99. package/build/assets/{recommended-automations-launcher-BQChv2rc.js → recommended-automations-launcher-uTyODuzB.js} +3 -3
  100. package/build/assets/{root-BgEbw3S0.js → root-DmjpFpTu.js} +2 -2
  101. package/build/assets/root-Z2VHU4R3.css +1 -0
  102. package/build/assets/root-layout-DejMsKhy.js +2 -0
  103. package/build/assets/{sdk-section-page-DOIKvwSL.js → sdk-section-page-BgDlMhcq.js} +1 -1
  104. package/build/assets/{sdk-settings-schema-DsUf9wu1.js → sdk-settings-schema-CLmJ9sho.js} +1 -1
  105. package/build/assets/{search-27Owlc3A.js → search-SuJctqNJ.js} +1 -1
  106. package/build/assets/secrets-service-B7CxNinp.js +1 -0
  107. package/build/assets/secrets-settings-yK7CqIpm.js +1 -0
  108. package/build/assets/{server-client-DyAQ3NZ_.js → server-client-Kh4QSwDJ.js} +1 -1
  109. package/build/assets/{settings-BYkVX7vW.js → settings-DN5PpgRD.js} +1 -1
  110. package/build/assets/{settings-dropdown-input-BJYvGdg-.js → settings-dropdown-input-BtoovFre.js} +1 -1
  111. package/build/assets/{settings-gear-C77PgE_O.js → settings-gear-Dd8K2_8B.js} +1 -1
  112. package/build/assets/settings-index-DKC8IY1P.js +1 -0
  113. package/build/assets/{settings-input-Bn7F5C75.js → settings-input-CehsXnb3.js} +1 -1
  114. package/build/assets/settings-list-classes-E3v_f6QG.js +1 -0
  115. package/build/assets/settings-modal-DJ4kGzUx.js +1 -0
  116. package/build/assets/{settings-section-header-context-BgZe5YkE.js → settings-section-header-context-DewwJ0-F.js} +1 -1
  117. package/build/assets/settings-service.api-C3rxTtPj.js +1 -0
  118. package/build/assets/{settings-switch-BeIKrWms.js → settings-switch-BiBuS3xa.js} +1 -1
  119. package/build/assets/{settings-utils-B6Nl07io.js → settings-utils-DY04tWG1.js} +1 -1
  120. package/build/assets/{shared-conversation-AMyqXvpk.js → shared-conversation-h9YnBtCU.js} +1 -1
  121. package/build/assets/sidebar-mobile-menu-toggle-D0-AvsnT.js +1 -0
  122. package/build/assets/{sidebar-nav-link-BGjiJq-4.js → sidebar-nav-link-OhIeFyna.js} +1 -1
  123. package/build/assets/{sidebar-store-Uy3v0AOV.js → sidebar-store-DnQAJAE5.js} +1 -1
  124. package/build/assets/{skill-card-pill-row-DF1axQCG.js → skill-card-pill-row-BW9qvhoK.js} +1 -1
  125. package/build/assets/{skills-ChIKZPK4.js → skills-0GRKX5Xj.js} +1 -1
  126. package/build/assets/{skills-plugins-CcI_19lM.js → skills-plugins-DNcsNF88.js} +1 -1
  127. package/build/assets/skills-settings-7liFiSY6.js +2 -0
  128. package/build/assets/{styled-tooltip-CBzrri6o.js → styled-tooltip-hdfMXPQC.js} +1 -1
  129. package/build/assets/{switch-skeleton-DnC9wLp7.js → switch-skeleton-DSKqSx2A.js} +1 -1
  130. package/build/assets/{task-list-tab-DUJn1sgz.js → task-list-tab-DT6_zfUs.js} +1 -1
  131. package/build/assets/{terminal-DgQk1Ay6.js → terminal-CDhQGDua.js} +2 -2
  132. package/build/assets/{terminal-RmuaSdhJ.js → terminal-CPYWdo4j.js} +1 -1
  133. package/build/assets/{toggle-switch-Pvyp2RAN.js → toggle-switch-T2v6sJ6l.js} +1 -1
  134. package/build/assets/{typography-gpuWmrQO.js → typography-BDgnT7Yp.js} +1 -1
  135. package/build/assets/{u-check-circle-IUIfACQQ.js → u-check-circle-DOauqQKb.js} +1 -1
  136. package/build/assets/{u-check-circle-half-C1YxB6py.js → u-check-circle-half-steSK_JB.js} +1 -1
  137. package/build/assets/{u-circuit-BmVikJHu.js → u-circuit-x3ExjBbU.js} +1 -1
  138. package/build/assets/{u-edit-CFvXHqZk.js → u-edit-BbrptMCa.js} +1 -1
  139. package/build/assets/{use-active-conversation-BEFNwnFk.js → use-active-conversation-DHGcmjCK.js} +1 -1
  140. package/build/assets/use-agent-settings-schema-CLoTOSJI.js +1 -0
  141. package/build/assets/{use-agent-state-Bkrd1FZq.js → use-agent-state-PKrUPMJ3.js} +1 -1
  142. package/build/assets/{use-cloud-current-user-id-CvkXFnTT.js → use-cloud-current-user-id-Ddr75hEz.js} +1 -1
  143. package/build/assets/{use-config-Co1O8-Ey.js → use-config-OIMQLQ2s.js} +1 -1
  144. package/build/assets/{use-create-conversation-CEgXpkfH.js → use-create-conversation-Bszyp13O.js} +1 -1
  145. package/build/assets/{use-event-store-BT_gV3ut.js → use-event-store-BomO7ywK.js} +1 -1
  146. package/build/assets/{use-get-secrets-DuhdIA59.js → use-get-secrets-8Jby8ele.js} +1 -1
  147. package/build/assets/{use-handle-plan-click-Ckkm5eIY.js → use-handle-plan-click-CohJPvvW.js} +1 -1
  148. package/build/assets/use-is-authed-dw2026rR.js +1 -0
  149. package/build/assets/{use-is-creating-conversation-BZ5hB_Bg.js → use-is-creating-conversation-DX2qSlfL.js} +1 -1
  150. package/build/assets/{use-launch-skill-in-chat-fNN_xGZG.js → use-launch-skill-in-chat-sQNEOLGD.js} +1 -1
  151. package/build/assets/use-llm-profiles-C861aFAq.js +1 -0
  152. package/build/assets/use-runtime-is-ready-Do2h_hRl.js +1 -0
  153. package/build/assets/{use-save-settings-VUrj_QNG.js → use-save-settings-DkAOEfD9.js} +1 -1
  154. package/build/assets/use-settings-D5hbTS9t.js +1 -0
  155. package/build/assets/{use-settings-nav-items-1ZvovKSr.js → use-settings-nav-items-BcSbo02d.js} +1 -1
  156. package/build/assets/{use-skills-DAMLFjKU.js → use-skills-D7PS0fH0.js} +1 -1
  157. package/build/assets/{use-task-list-CLJbuJgM.js → use-task-list-CsT10CBb.js} +1 -1
  158. package/build/assets/{use-unified-vscode-url-DdSRw-6P.js → use-unified-vscode-url-DEoe-NRI.js} +1 -1
  159. package/build/assets/use-user-conversation-Cs5H1pUF.js +1 -0
  160. package/build/assets/{useMutation-DqrumCWD.js → useMutation-GSSKKebK.js} +1 -1
  161. package/build/assets/{useTranslation-DCOdSSMl.js → useTranslation-B6voJV4y.js} +1 -1
  162. package/build/assets/utils-DCVfKFRt.js +1 -0
  163. package/build/assets/{vendor~browser-BNjNhjFU.js → vendor~browser-BrOJLj3y.js} +1 -1
  164. package/build/assets/vendor~conversation-panel~conversation-C9o-K1hW.js +1 -0
  165. package/build/assets/vendor~conversation-panel~conversation~index-RXYdJYxU.js +1 -0
  166. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-VnmIZrq3.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-DJS-rJdI.js} +1 -1
  167. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DpAdkv8m.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-6ByzelMS.js} +1 -1
  168. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B92czPCF.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BED5W_c4.js} +1 -1
  169. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-By5W2oHN.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CCbqAFiI.js} +1 -1
  170. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BbFOrAjI.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CG96FCly.js} +1 -1
  171. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-smY2r837.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-E4d6IEfI.js} +1 -1
  172. package/build/assets/vendor~home~mcp~automations-list-CZSK-lT2.js +1 -0
  173. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-Z3nsiNNq.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-CjJdFLoM.js} +1 -1
  174. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DbfELDJu.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-m8dOii0J.js} +2 -2
  175. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DjAjXS5J.js → vendor~root-layout~home~conversation-panel~conversation-B5WNMnt4.js} +1 -1
  176. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-CbAhtEMv.js +1 -0
  177. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-6Rm8U_Sr.js +9 -0
  178. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BkQGKpye.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-tTR8C6m0.js} +1 -1
  179. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-Bbs7UJ5U.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-BJbu9kpL.js} +2 -2
  180. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-DTwbEEcX.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-hTzSytKK.js} +1 -1
  181. package/build/assets/{vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-CDXvdvb2.js → vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-DYXOLEck.js} +1 -1
  182. package/build/assets/{verification-settings-CsbvQcYS.js → verification-settings-Dlt8pINd.js} +1 -1
  183. package/build/assets/{vscode-tab-DjNArCgY.js → vscode-tab-DgepcYtF.js} +1 -1
  184. package/build/assets/{waiting-for-runtime-message-CntjExbU.js → waiting-for-runtime-message-CdK3btDZ.js} +1 -1
  185. package/build/assets/{x-mark-CrpjscNc.js → x-mark-BrkSPIiT.js} +1 -1
  186. package/build/index.html +4 -4
  187. package/build/locales/ar/openhands.json +20 -2
  188. package/build/locales/ca/openhands.json +20 -2
  189. package/build/locales/de/openhands.json +20 -2
  190. package/build/locales/en/openhands.json +20 -2
  191. package/build/locales/es/openhands.json +20 -2
  192. package/build/locales/fr/openhands.json +20 -2
  193. package/build/locales/it/openhands.json +20 -2
  194. package/build/locales/ja/openhands.json +20 -2
  195. package/build/locales/ko-KR/openhands.json +20 -2
  196. package/build/locales/no/openhands.json +20 -2
  197. package/build/locales/pt/openhands.json +20 -2
  198. package/build/locales/tr/openhands.json +20 -2
  199. package/build/locales/uk/openhands.json +20 -2
  200. package/build/locales/zh-CN/openhands.json +20 -2
  201. package/build/locales/zh-TW/openhands.json +20 -2
  202. package/dist/api/acp-service/acp-service.api.d.ts +18 -0
  203. package/dist/api/agent-server-adapter.cjs +3 -3
  204. package/dist/api/agent-server-adapter.cjs.map +1 -1
  205. package/dist/api/agent-server-adapter.js +54 -55
  206. package/dist/api/agent-server-adapter.js.map +1 -1
  207. package/dist/api/agent-server-client-options.cjs +1 -1
  208. package/dist/api/agent-server-client-options.cjs.map +1 -1
  209. package/dist/api/agent-server-client-options.d.ts +4 -0
  210. package/dist/api/agent-server-client-options.js +18 -12
  211. package/dist/api/agent-server-client-options.js.map +1 -1
  212. package/dist/api/agent-server-compatibility.cjs +1 -1
  213. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  214. package/dist/api/agent-server-compatibility.d.ts +1 -1
  215. package/dist/api/agent-server-compatibility.js +30 -25
  216. package/dist/api/agent-server-compatibility.js.map +1 -1
  217. package/dist/api/agent-server-config.cjs +1 -1
  218. package/dist/api/agent-server-config.cjs.map +1 -1
  219. package/dist/api/agent-server-config.d.ts +1 -51
  220. package/dist/api/agent-server-config.js +20 -70
  221. package/dist/api/agent-server-config.js.map +1 -1
  222. package/dist/api/backend-registry/active-store.cjs +1 -1
  223. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  224. package/dist/api/backend-registry/active-store.d.ts +11 -5
  225. package/dist/api/backend-registry/active-store.js +36 -27
  226. package/dist/api/backend-registry/active-store.js.map +1 -1
  227. package/dist/api/backend-registry/auth.cjs +1 -1
  228. package/dist/api/backend-registry/auth.cjs.map +1 -1
  229. package/dist/api/backend-registry/auth.js +3 -9
  230. package/dist/api/backend-registry/auth.js.map +1 -1
  231. package/dist/api/backend-registry/default-backend.cjs +1 -1
  232. package/dist/api/backend-registry/default-backend.cjs.map +1 -1
  233. package/dist/api/backend-registry/default-backend.d.ts +9 -16
  234. package/dist/api/backend-registry/default-backend.js +5 -4
  235. package/dist/api/backend-registry/default-backend.js.map +1 -1
  236. package/dist/api/backend-registry/storage.cjs +1 -1
  237. package/dist/api/backend-registry/storage.cjs.map +1 -1
  238. package/dist/api/backend-registry/storage.js +67 -34
  239. package/dist/api/backend-registry/storage.js.map +1 -1
  240. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  241. package/dist/api/cloud/conversation-service.api.d.ts +8 -13
  242. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +1 -2
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/proxy.cjs +1 -1
  247. package/dist/api/cloud/proxy.cjs.map +1 -1
  248. package/dist/api/cloud/proxy.d.ts +6 -6
  249. package/dist/api/cloud/proxy.js +33 -24
  250. package/dist/api/cloud/proxy.js.map +1 -1
  251. package/dist/api/cloud/sandbox-service.api.cjs.map +1 -1
  252. package/dist/api/cloud/sandbox-service.api.d.ts +3 -3
  253. package/dist/api/cloud/sandbox-service.api.js.map +1 -1
  254. package/dist/api/cloud/secrets-service.api.cjs.map +1 -1
  255. package/dist/api/cloud/secrets-service.api.d.ts +3 -4
  256. package/dist/api/cloud/secrets-service.api.js.map +1 -1
  257. package/dist/api/cloud/settings-service.api.cjs +1 -1
  258. package/dist/api/cloud/settings-service.api.cjs.map +1 -1
  259. package/dist/api/cloud/settings-service.api.js +5 -1
  260. package/dist/api/cloud/settings-service.api.js.map +1 -1
  261. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  262. package/dist/api/cloud/skills-service.api.d.ts +5 -5
  263. package/dist/api/cloud/skills-service.api.js.map +1 -1
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  265. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.js +115 -108
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  268. package/dist/api/device-flow-client.cjs +1 -1
  269. package/dist/api/device-flow-client.cjs.map +1 -1
  270. package/dist/api/device-flow-client.d.ts +3 -5
  271. package/dist/api/device-flow-client.js +55 -66
  272. package/dist/api/device-flow-client.js.map +1 -1
  273. package/dist/api/event-service/event-service.api.cjs +1 -1
  274. package/dist/api/event-service/event-service.api.cjs.map +1 -1
  275. package/dist/api/event-service/event-service.api.d.ts +3 -3
  276. package/dist/api/event-service/event-service.api.js +17 -17
  277. package/dist/api/event-service/event-service.api.js.map +1 -1
  278. package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
  279. package/dist/api/git-service/agent-server-git-service.api.js +11 -11
  280. package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
  281. package/dist/api/runtime-service/agent-server-runtime-service.js +6 -6
  282. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.cjs +2 -2
  283. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.js +10 -10
  284. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.cjs.map +1 -1
  285. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.d.ts +5 -5
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.js.map +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  289. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +1 -1
  290. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  291. package/dist/components/features/automations/automation-action-button-classes.d.ts +2 -2
  292. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  293. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  294. package/dist/components/features/backends/backend-form-modal.d.ts +1 -0
  295. package/dist/components/features/backends/backend-form-modal.js +203 -140
  296. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  297. package/dist/components/features/backends/backend-selector.cjs +1 -1
  298. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  299. package/dist/components/features/backends/backend-selector.js +117 -105
  300. package/dist/components/features/backends/backend-selector.js.map +1 -1
  301. package/dist/components/features/backends/backend-status-dot.cjs +1 -1
  302. package/dist/components/features/backends/backend-status-dot.cjs.map +1 -1
  303. package/dist/components/features/backends/backend-status-dot.d.ts +1 -1
  304. package/dist/components/features/backends/backend-status-dot.js +1 -1
  305. package/dist/components/features/backends/backend-status-dot.js.map +1 -1
  306. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  307. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  308. package/dist/components/features/backends/manage-backends-modal.js +81 -70
  309. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  310. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  311. package/dist/components/features/chat/change-agent-button.cjs.map +1 -1
  312. package/dist/components/features/chat/change-agent-button.js +59 -57
  313. package/dist/components/features/chat/change-agent-button.js.map +1 -1
  314. package/dist/components/features/chat/change-agent-context-menu.cjs +1 -1
  315. package/dist/components/features/chat/change-agent-context-menu.cjs.map +1 -1
  316. package/dist/components/features/chat/change-agent-context-menu.d.ts +3 -1
  317. package/dist/components/features/chat/change-agent-context-menu.js +30 -25
  318. package/dist/components/features/chat/change-agent-context-menu.js.map +1 -1
  319. package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
  320. package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
  321. package/dist/components/features/chat/chat-add-file-button.js +39 -38
  322. package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
  323. package/dist/components/features/chat/chat-message.cjs +1 -1
  324. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  325. package/dist/components/features/chat/chat-message.d.ts +2 -1
  326. package/dist/components/features/chat/chat-message.js +185 -57
  327. package/dist/components/features/chat/chat-message.js.map +1 -1
  328. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  329. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  330. package/dist/components/features/chat/components/chat-input-actions.js +113 -113
  331. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  332. package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
  333. package/dist/components/features/chat/components/chat-input-model.cjs.map +1 -1
  334. package/dist/components/features/chat/components/chat-input-model.js +52 -51
  335. package/dist/components/features/chat/components/chat-input-model.js.map +1 -1
  336. package/dist/components/features/chat/components/slash-command-menu.cjs +2 -2
  337. package/dist/components/features/chat/components/slash-command-menu.cjs.map +1 -1
  338. package/dist/components/features/chat/components/slash-command-menu.js +38 -34
  339. package/dist/components/features/chat/components/slash-command-menu.js.map +1 -1
  340. package/dist/components/features/chat/git-control-bar-pr-button.cjs +1 -1
  341. package/dist/components/features/chat/git-control-bar-pr-button.cjs.map +1 -1
  342. package/dist/components/features/chat/git-control-bar-pr-button.js +16 -15
  343. package/dist/components/features/chat/git-control-bar-pr-button.js.map +1 -1
  344. package/dist/components/features/chat/git-control-bar-pull-button.cjs +1 -1
  345. package/dist/components/features/chat/git-control-bar-pull-button.cjs.map +1 -1
  346. package/dist/components/features/chat/git-control-bar-pull-button.js +16 -15
  347. package/dist/components/features/chat/git-control-bar-pull-button.js.map +1 -1
  348. package/dist/components/features/chat/git-control-bar-push-button.cjs +1 -1
  349. package/dist/components/features/chat/git-control-bar-push-button.cjs.map +1 -1
  350. package/dist/components/features/chat/git-control-bar-push-button.js +16 -15
  351. package/dist/components/features/chat/git-control-bar-push-button.js.map +1 -1
  352. package/dist/components/features/chat/git-control-bar.cjs +1 -1
  353. package/dist/components/features/chat/git-control-bar.cjs.map +1 -1
  354. package/dist/components/features/chat/git-control-bar.js +63 -62
  355. package/dist/components/features/chat/git-control-bar.js.map +1 -1
  356. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  357. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  358. package/dist/components/features/chat/pending-user-messages.js +27 -23
  359. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  360. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  361. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  362. package/dist/components/features/chat/switch-profile-button.js +26 -25
  363. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  364. package/dist/components/features/chat/switch-profile-context-menu.cjs +1 -1
  365. package/dist/components/features/chat/switch-profile-context-menu.cjs.map +1 -1
  366. package/dist/components/features/chat/switch-profile-context-menu.js +77 -67
  367. package/dist/components/features/chat/switch-profile-context-menu.js.map +1 -1
  368. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs +1 -1
  369. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs.map +1 -1
  370. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +2 -1
  371. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js +3 -2
  372. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js.map +1 -1
  373. package/dist/components/features/context-menu/context-menu-icon-text.cjs +1 -1
  374. package/dist/components/features/context-menu/context-menu-icon-text.cjs.map +1 -1
  375. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +2 -1
  376. package/dist/components/features/context-menu/context-menu-icon-text.js +20 -10
  377. package/dist/components/features/context-menu/context-menu-icon-text.js.map +1 -1
  378. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  379. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  380. package/dist/components/features/context-menu/context-menu-list-item.js +10 -9
  381. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  382. package/dist/components/features/controls/agent-status.cjs +1 -1
  383. package/dist/components/features/controls/agent-status.js +12 -12
  384. package/dist/components/features/controls/git-tools-submenu.cjs +1 -1
  385. package/dist/components/features/controls/git-tools-submenu.cjs.map +1 -1
  386. package/dist/components/features/controls/git-tools-submenu.js +1 -1
  387. package/dist/components/features/controls/git-tools-submenu.js.map +1 -1
  388. package/dist/components/features/controls/macros-submenu.cjs +1 -1
  389. package/dist/components/features/controls/macros-submenu.cjs.map +1 -1
  390. package/dist/components/features/controls/macros-submenu.js +1 -1
  391. package/dist/components/features/controls/macros-submenu.js.map +1 -1
  392. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs +1 -1
  393. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs.map +1 -1
  394. package/dist/components/features/controls/server-status-context-menu-icon-text.js +14 -15
  395. package/dist/components/features/controls/server-status-context-menu-icon-text.js.map +1 -1
  396. package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
  397. package/dist/components/features/controls/server-status-context-menu.js +4 -4
  398. package/dist/components/features/controls/server-status.cjs +1 -1
  399. package/dist/components/features/controls/server-status.js +7 -7
  400. package/dist/components/features/controls/tools-context-menu-icon-text.cjs +1 -1
  401. package/dist/components/features/controls/tools-context-menu-icon-text.cjs.map +1 -1
  402. package/dist/components/features/controls/tools-context-menu-icon-text.js +16 -16
  403. package/dist/components/features/controls/tools-context-menu-icon-text.js.map +1 -1
  404. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs +1 -1
  405. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs.map +1 -1
  406. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js +11 -11
  407. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js.map +1 -1
  408. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  409. package/dist/components/features/conversation/conversation-name-with-status.js +11 -11
  410. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  411. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  412. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +60 -47
  413. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  414. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
  415. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
  416. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +86 -82
  417. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +4 -4
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +9 -9
  422. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  423. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  424. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +93 -93
  425. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  426. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  427. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  428. package/dist/components/features/conversation-panel/conversation-panel.js +177 -177
  429. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  430. package/dist/components/features/conversation-panel/ellipsis-button.cjs +1 -1
  431. package/dist/components/features/conversation-panel/ellipsis-button.cjs.map +1 -1
  432. package/dist/components/features/conversation-panel/ellipsis-button.js +13 -13
  433. package/dist/components/features/conversation-panel/ellipsis-button.js.map +1 -1
  434. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  435. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  436. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +57 -53
  437. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  438. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs +1 -1
  439. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js +3 -2
  441. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js.map +1 -1
  442. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs +1 -1
  443. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs.map +1 -1
  444. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js +11 -8
  445. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js.map +1 -1
  446. package/dist/components/features/conversation-panel/system-message-modal/tab-content.cjs.map +1 -1
  447. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +2 -5
  448. package/dist/components/features/conversation-panel/system-message-modal/tab-content.js.map +1 -1
  449. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  450. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  451. package/dist/components/features/files-tab/file-content-viewer.js +45 -42
  452. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  453. package/dist/components/features/home/llm-not-configured-banner.d.ts +11 -0
  454. package/dist/components/features/home/shared/dropdown-item.cjs +1 -1
  455. package/dist/components/features/home/shared/dropdown-item.cjs.map +1 -1
  456. package/dist/components/features/home/shared/dropdown-item.js +20 -16
  457. package/dist/components/features/home/shared/dropdown-item.js.map +1 -1
  458. package/dist/components/features/home/shared/generic-dropdown-menu.cjs +1 -1
  459. package/dist/components/features/home/shared/generic-dropdown-menu.cjs.map +1 -1
  460. package/dist/components/features/home/shared/generic-dropdown-menu.js +23 -22
  461. package/dist/components/features/home/shared/generic-dropdown-menu.js.map +1 -1
  462. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  463. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs.map +1 -1
  464. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +103 -102
  465. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js.map +1 -1
  466. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  467. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs.map +1 -1
  468. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +68 -67
  469. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js.map +1 -1
  470. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  471. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  472. package/dist/components/features/mcp-page/custom-server-editor.js +62 -60
  473. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  474. package/dist/components/features/mcp-page/index.cjs +1 -1
  475. package/dist/components/features/mcp-page/index.d.ts +1 -0
  476. package/dist/components/features/mcp-page/index.js +1 -0
  477. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  478. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  479. package/dist/components/features/mcp-page/install-server-modal.js +150 -119
  480. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  481. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs +2 -0
  482. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs.map +1 -0
  483. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +7 -0
  484. package/dist/components/features/mcp-page/save-as-secret-toggle.js +50 -0
  485. package/dist/components/features/mcp-page/save-as-secret-toggle.js.map +1 -0
  486. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -2
  487. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +1 -1
  488. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +2 -1
  489. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +19 -10
  490. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  491. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +5 -0
  492. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
  493. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  494. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  495. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  496. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  497. package/dist/components/features/skills/extensions-navigation.js +1 -1
  498. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  499. package/dist/components/shared/buttons/back-nav-button.cjs +2 -0
  500. package/dist/components/shared/buttons/back-nav-button.cjs.map +1 -0
  501. package/dist/components/shared/buttons/back-nav-button.d.ts +17 -0
  502. package/dist/components/shared/buttons/back-nav-button.js +33 -0
  503. package/dist/components/shared/buttons/back-nav-button.js.map +1 -0
  504. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  505. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +5 -5
  506. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  507. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  508. package/dist/components/shared/filters/enum-filter-dropdown.js +32 -31
  509. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  510. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
  511. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
  512. package/dist/components/shared/modals/confirmation-modals/base-modal.js +14 -13
  513. package/dist/components/shared/modals/confirmation-modals/base-modal.js.map +1 -1
  514. package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
  515. package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
  516. package/dist/components/shared/modals/settings/settings-modal.js +17 -16
  517. package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
  518. package/dist/components/shared/text-shimmer.cjs +2 -0
  519. package/dist/components/shared/text-shimmer.cjs.map +1 -0
  520. package/dist/components/shared/text-shimmer.d.ts +11 -0
  521. package/dist/components/shared/text-shimmer.js +43 -0
  522. package/dist/components/shared/text-shimmer.js.map +1 -0
  523. package/dist/constants/acp-providers.cjs +1 -1
  524. package/dist/constants/acp-providers.cjs.map +1 -1
  525. package/dist/constants/acp-providers.d.ts +16 -3
  526. package/dist/constants/acp-providers.js +0 -1
  527. package/dist/constants/acp-providers.js.map +1 -1
  528. package/dist/contexts/active-backend-context.cjs +1 -1
  529. package/dist/contexts/active-backend-context.cjs.map +1 -1
  530. package/dist/contexts/active-backend-context.js +32 -32
  531. package/dist/contexts/active-backend-context.js.map +1 -1
  532. package/dist/hooks/chat/use-chat-input-logic.cjs +1 -1
  533. package/dist/hooks/chat/use-chat-input-logic.cjs.map +1 -1
  534. package/dist/hooks/chat/use-chat-input-logic.js +13 -6
  535. package/dist/hooks/chat/use-chat-input-logic.js.map +1 -1
  536. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs +2 -0
  537. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs.map +1 -0
  538. package/dist/hooks/mutation/use-save-fields-as-secrets.d.ts +9 -0
  539. package/dist/hooks/mutation/use-save-fields-as-secrets.js +24 -0
  540. package/dist/hooks/mutation/use-save-fields-as-secrets.js.map +1 -0
  541. package/dist/hooks/mutation/use-unified-start-conversation.cjs +1 -1
  542. package/dist/hooks/mutation/use-unified-start-conversation.js +8 -8
  543. package/dist/hooks/mutation/use-unified-stop-conversation.cjs +1 -1
  544. package/dist/hooks/mutation/use-unified-stop-conversation.js +15 -15
  545. package/dist/hooks/query/use-acp-auth-status.d.ts +36 -0
  546. package/dist/hooks/query/use-agent-settings-schema.cjs +1 -1
  547. package/dist/hooks/query/use-agent-settings-schema.cjs.map +1 -1
  548. package/dist/hooks/query/use-agent-settings-schema.js +26 -16
  549. package/dist/hooks/query/use-agent-settings-schema.js.map +1 -1
  550. package/dist/hooks/query/use-backends-health.cjs +1 -1
  551. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  552. package/dist/hooks/query/use-backends-health.d.ts +2 -0
  553. package/dist/hooks/query/use-backends-health.js +31 -21
  554. package/dist/hooks/query/use-backends-health.js.map +1 -1
  555. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  556. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  557. package/dist/hooks/query/use-paginated-conversations.js +15 -14
  558. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  559. package/dist/hooks/query/use-settings.cjs +1 -1
  560. package/dist/hooks/query/use-settings.cjs.map +1 -1
  561. package/dist/hooks/query/use-settings.js +65 -52
  562. package/dist/hooks/query/use-settings.js.map +1 -1
  563. package/dist/hooks/query/use-user-conversation.cjs +1 -1
  564. package/dist/hooks/query/use-user-conversation.cjs.map +1 -1
  565. package/dist/hooks/query/use-user-conversation.js +20 -11
  566. package/dist/hooks/query/use-user-conversation.js.map +1 -1
  567. package/dist/hooks/use-agent-state.cjs +1 -1
  568. package/dist/hooks/use-agent-state.js +13 -13
  569. package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
  570. package/dist/hooks/use-conversation-name-context-menu.js +10 -10
  571. package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
  572. package/dist/hooks/use-llm-configured.d.ts +25 -0
  573. package/dist/hooks/use-runtime-is-ready.cjs +1 -1
  574. package/dist/hooks/use-runtime-is-ready.js +5 -5
  575. package/dist/i18n/declaration.cjs +1 -1
  576. package/dist/i18n/declaration.cjs.map +1 -1
  577. package/dist/i18n/declaration.d.ts +19 -1
  578. package/dist/i18n/declaration.js +1 -1
  579. package/dist/i18n/declaration.js.map +1 -1
  580. package/dist/i18n/translation.cjs +3 -3
  581. package/dist/i18n/translation.cjs.map +1 -1
  582. package/dist/i18n/translation.js +321 -15
  583. package/dist/i18n/translation.js.map +1 -1
  584. package/dist/icons/stop-circle.cjs +1 -1
  585. package/dist/icons/stop-circle.cjs.map +1 -1
  586. package/dist/icons/stop-circle.js +7 -10
  587. package/dist/icons/stop-circle.js.map +1 -1
  588. package/dist/locales/ar/openhands.json +20 -2
  589. package/dist/locales/ca/openhands.json +20 -2
  590. package/dist/locales/de/openhands.json +20 -2
  591. package/dist/locales/en/openhands.json +20 -2
  592. package/dist/locales/es/openhands.json +20 -2
  593. package/dist/locales/fr/openhands.json +20 -2
  594. package/dist/locales/it/openhands.json +20 -2
  595. package/dist/locales/ja/openhands.json +20 -2
  596. package/dist/locales/ko-KR/openhands.json +20 -2
  597. package/dist/locales/no/openhands.json +20 -2
  598. package/dist/locales/pt/openhands.json +20 -2
  599. package/dist/locales/tr/openhands.json +20 -2
  600. package/dist/locales/uk/openhands.json +20 -2
  601. package/dist/locales/zh-CN/openhands.json +20 -2
  602. package/dist/locales/zh-TW/openhands.json +20 -2
  603. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs +1 -1
  604. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs.map +1 -1
  605. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js +3 -1
  606. package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js.map +1 -1
  607. package/dist/node_modules/@openhands/extensions/integrations/catalog/apify.cjs +1 -1
  608. package/dist/node_modules/@openhands/extensions/integrations/catalog/apify.cjs.map +1 -1
  609. package/dist/node_modules/@openhands/extensions/integrations/catalog/apify.js +3 -1
  610. package/dist/node_modules/@openhands/extensions/integrations/catalog/apify.js.map +1 -1
  611. package/dist/node_modules/@openhands/extensions/integrations/catalog/brave-search.cjs +1 -1
  612. package/dist/node_modules/@openhands/extensions/integrations/catalog/brave-search.cjs.map +1 -1
  613. package/dist/node_modules/@openhands/extensions/integrations/catalog/brave-search.js +3 -1
  614. package/dist/node_modules/@openhands/extensions/integrations/catalog/brave-search.js.map +1 -1
  615. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickhouse.cjs +1 -1
  616. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickhouse.cjs.map +1 -1
  617. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickhouse.js +3 -1
  618. package/dist/node_modules/@openhands/extensions/integrations/catalog/clickhouse.js.map +1 -1
  619. package/dist/node_modules/@openhands/extensions/integrations/catalog/elevenlabs.cjs +1 -1
  620. package/dist/node_modules/@openhands/extensions/integrations/catalog/elevenlabs.cjs.map +1 -1
  621. package/dist/node_modules/@openhands/extensions/integrations/catalog/elevenlabs.js +3 -1
  622. package/dist/node_modules/@openhands/extensions/integrations/catalog/elevenlabs.js.map +1 -1
  623. package/dist/node_modules/@openhands/extensions/integrations/catalog/exa.cjs +1 -1
  624. package/dist/node_modules/@openhands/extensions/integrations/catalog/exa.cjs.map +1 -1
  625. package/dist/node_modules/@openhands/extensions/integrations/catalog/exa.js +3 -1
  626. package/dist/node_modules/@openhands/extensions/integrations/catalog/exa.js.map +1 -1
  627. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs +1 -1
  628. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs.map +1 -1
  629. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js +3 -1
  630. package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js.map +1 -1
  631. package/dist/node_modules/@openhands/extensions/integrations/catalog/firecrawl.cjs +1 -1
  632. package/dist/node_modules/@openhands/extensions/integrations/catalog/firecrawl.cjs.map +1 -1
  633. package/dist/node_modules/@openhands/extensions/integrations/catalog/firecrawl.js +3 -1
  634. package/dist/node_modules/@openhands/extensions/integrations/catalog/firecrawl.js.map +1 -1
  635. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
  636. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
  637. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +3 -1
  638. package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
  639. package/dist/node_modules/@openhands/extensions/integrations/catalog/kagi.cjs +1 -1
  640. package/dist/node_modules/@openhands/extensions/integrations/catalog/kagi.cjs.map +1 -1
  641. package/dist/node_modules/@openhands/extensions/integrations/catalog/kagi.js +3 -1
  642. package/dist/node_modules/@openhands/extensions/integrations/catalog/kagi.js.map +1 -1
  643. package/dist/node_modules/@openhands/extensions/integrations/catalog/mongodb.cjs +1 -1
  644. package/dist/node_modules/@openhands/extensions/integrations/catalog/mongodb.cjs.map +1 -1
  645. package/dist/node_modules/@openhands/extensions/integrations/catalog/mongodb.js +3 -1
  646. package/dist/node_modules/@openhands/extensions/integrations/catalog/mongodb.js.map +1 -1
  647. package/dist/node_modules/@openhands/extensions/integrations/catalog/neon.cjs +1 -1
  648. package/dist/node_modules/@openhands/extensions/integrations/catalog/neon.cjs.map +1 -1
  649. package/dist/node_modules/@openhands/extensions/integrations/catalog/neon.js +3 -1
  650. package/dist/node_modules/@openhands/extensions/integrations/catalog/neon.js.map +1 -1
  651. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
  652. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
  653. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +3 -1
  654. package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
  655. package/dist/node_modules/@openhands/extensions/integrations/catalog/obsidian.cjs +1 -1
  656. package/dist/node_modules/@openhands/extensions/integrations/catalog/obsidian.cjs.map +1 -1
  657. package/dist/node_modules/@openhands/extensions/integrations/catalog/obsidian.js +2 -1
  658. package/dist/node_modules/@openhands/extensions/integrations/catalog/obsidian.js.map +1 -1
  659. package/dist/node_modules/@openhands/extensions/integrations/catalog/redis.cjs +1 -1
  660. package/dist/node_modules/@openhands/extensions/integrations/catalog/redis.cjs.map +1 -1
  661. package/dist/node_modules/@openhands/extensions/integrations/catalog/redis.js +2 -1
  662. package/dist/node_modules/@openhands/extensions/integrations/catalog/redis.js.map +1 -1
  663. package/dist/node_modules/@openhands/extensions/integrations/catalog/resend.cjs +1 -1
  664. package/dist/node_modules/@openhands/extensions/integrations/catalog/resend.cjs.map +1 -1
  665. package/dist/node_modules/@openhands/extensions/integrations/catalog/resend.js +3 -1
  666. package/dist/node_modules/@openhands/extensions/integrations/catalog/resend.js.map +1 -1
  667. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
  668. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
  669. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +8 -7
  670. package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
  671. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs +1 -1
  672. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs.map +1 -1
  673. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js +2 -1
  674. package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js.map +1 -1
  675. package/dist/node_modules/@openhands/extensions/integrations/catalog/tavily.cjs +1 -1
  676. package/dist/node_modules/@openhands/extensions/integrations/catalog/tavily.cjs.map +1 -1
  677. package/dist/node_modules/@openhands/extensions/integrations/catalog/tavily.js +4 -2
  678. package/dist/node_modules/@openhands/extensions/integrations/catalog/tavily.js.map +1 -1
  679. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs +2 -0
  680. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs.map +1 -0
  681. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  682. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  683. package/dist/package.cjs +1 -1
  684. package/dist/package.cjs.map +1 -1
  685. package/dist/package.js +2 -2
  686. package/dist/package.js.map +1 -1
  687. package/dist/routes/conversation.cjs +1 -1
  688. package/dist/routes/conversation.cjs.map +1 -1
  689. package/dist/routes/conversation.js +1 -1
  690. package/dist/routes/conversation.js.map +1 -1
  691. package/dist/routes/llm-settings.cjs +1 -1
  692. package/dist/routes/llm-settings.cjs.map +1 -1
  693. package/dist/routes/llm-settings.js +55 -54
  694. package/dist/routes/llm-settings.js.map +1 -1
  695. package/dist/routes/secrets-settings.cjs +1 -1
  696. package/dist/routes/secrets-settings.cjs.map +1 -1
  697. package/dist/routes/secrets-settings.js +19 -27
  698. package/dist/routes/secrets-settings.js.map +1 -1
  699. package/dist/stores/conversation-store.cjs +1 -1
  700. package/dist/stores/conversation-store.cjs.map +1 -1
  701. package/dist/stores/conversation-store.d.ts +4 -0
  702. package/dist/stores/conversation-store.js +6 -0
  703. package/dist/stores/conversation-store.js.map +1 -1
  704. package/dist/types/agent-server/core/events/acp-tool-call-event.d.ts +6 -4
  705. package/dist/types/agent-server/core/events/system-event.d.ts +5 -0
  706. package/dist/types/automation.d.ts +15 -0
  707. package/dist/types/settings.d.ts +3 -1
  708. package/dist/ui/combobox-caret.cjs +1 -1
  709. package/dist/ui/combobox-caret.cjs.map +1 -1
  710. package/dist/ui/combobox-caret.d.ts +1 -1
  711. package/dist/ui/combobox-caret.js +9 -8
  712. package/dist/ui/combobox-caret.js.map +1 -1
  713. package/dist/ui/context-menu.cjs +1 -1
  714. package/dist/ui/context-menu.cjs.map +1 -1
  715. package/dist/ui/context-menu.js +9 -8
  716. package/dist/ui/context-menu.js.map +1 -1
  717. package/dist/ui/dropdown/dropdown-menu.cjs +1 -1
  718. package/dist/ui/dropdown/dropdown-menu.cjs.map +1 -1
  719. package/dist/ui/dropdown/dropdown-menu.js +21 -17
  720. package/dist/ui/dropdown/dropdown-menu.js.map +1 -1
  721. package/dist/ui/dropdown/dropdown.cjs +1 -1
  722. package/dist/ui/dropdown/dropdown.cjs.map +1 -1
  723. package/dist/ui/dropdown/dropdown.js +2 -2
  724. package/dist/ui/dropdown/dropdown.js.map +1 -1
  725. package/dist/utils/automation-schedule.d.ts +1 -0
  726. package/dist/utils/dropdown-classes.cjs +2 -0
  727. package/dist/utils/dropdown-classes.cjs.map +1 -0
  728. package/dist/utils/dropdown-classes.d.ts +32 -0
  729. package/dist/utils/dropdown-classes.js +8 -0
  730. package/dist/utils/dropdown-classes.js.map +1 -0
  731. package/dist/utils/form-control-classes.cjs +1 -1
  732. package/dist/utils/form-control-classes.cjs.map +1 -1
  733. package/dist/utils/form-control-classes.d.ts +18 -2
  734. package/dist/utils/form-control-classes.js +4 -3
  735. package/dist/utils/form-control-classes.js.map +1 -1
  736. package/dist/utils/git-control-bar-classes.cjs +2 -0
  737. package/dist/utils/git-control-bar-classes.cjs.map +1 -0
  738. package/dist/utils/git-control-bar-classes.d.ts +4 -0
  739. package/dist/utils/git-control-bar-classes.js +14 -0
  740. package/dist/utils/git-control-bar-classes.js.map +1 -0
  741. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  742. package/dist/utils/handle-event-for-ui.d.ts +6 -3
  743. package/dist/utils/handle-event-for-ui.js.map +1 -1
  744. package/dist/utils/mobile-top-bar-icon-button-classes.cjs +1 -1
  745. package/dist/utils/mobile-top-bar-icon-button-classes.cjs.map +1 -1
  746. package/dist/utils/mobile-top-bar-icon-button-classes.js +3 -3
  747. package/dist/utils/mobile-top-bar-icon-button-classes.js.map +1 -1
  748. package/dist/utils/modal-classes.cjs +2 -0
  749. package/dist/utils/modal-classes.cjs.map +1 -0
  750. package/dist/utils/modal-classes.d.ts +8 -0
  751. package/dist/utils/modal-classes.js +7 -0
  752. package/dist/utils/modal-classes.js.map +1 -0
  753. package/dist/utils/openhands-llm.cjs +2 -0
  754. package/dist/utils/openhands-llm.cjs.map +1 -0
  755. package/dist/utils/openhands-llm.d.ts +2 -0
  756. package/dist/utils/openhands-llm.js +9 -0
  757. package/dist/utils/openhands-llm.js.map +1 -0
  758. package/dist/utils/redact-custom-secrets.cjs +2 -0
  759. package/dist/utils/redact-custom-secrets.cjs.map +1 -0
  760. package/dist/utils/redact-custom-secrets.d.ts +6 -0
  761. package/dist/utils/redact-custom-secrets.js +10 -0
  762. package/dist/utils/redact-custom-secrets.js.map +1 -0
  763. package/dist/utils/status.cjs +1 -1
  764. package/dist/utils/status.cjs.map +1 -1
  765. package/dist/utils/status.d.ts +2 -1
  766. package/dist/utils/status.js +9 -8
  767. package/dist/utils/status.js.map +1 -1
  768. package/dist/utils/system-message-adapter.cjs +1 -1
  769. package/dist/utils/system-message-adapter.cjs.map +1 -1
  770. package/dist/utils/system-message-adapter.js +10 -7
  771. package/dist/utils/system-message-adapter.js.map +1 -1
  772. package/dist/utils/utils.cjs +1 -1
  773. package/dist/utils/utils.cjs.map +1 -1
  774. package/dist/utils/utils.d.ts +2 -1
  775. package/dist/utils/utils.js +21 -20
  776. package/dist/utils/utils.js.map +1 -1
  777. package/package.json +2 -2
  778. package/scripts/dev-safe.mjs +3 -1
  779. package/scripts/dev-static.mjs +2 -2
  780. package/scripts/dev-with-automation.mjs +283 -108
  781. package/scripts/static-build.mjs +20 -19
  782. package/scripts/static-server.mjs +50 -3
  783. package/build/assets/acp-providers-CbiRekh9.js +0 -1
  784. package/build/assets/active-backend-context-cCM1vYYZ.js +0 -1
  785. package/build/assets/add-backend-modal-DIUQzMPa.js +0 -1
  786. package/build/assets/agent-server-client-options-Bc5ZorQZ.js +0 -1
  787. package/build/assets/agent-server-compatibility-BlkUsrX2.js +0 -1
  788. package/build/assets/agent-server-conversation-service.api-C2V5SlHu.js +0 -5
  789. package/build/assets/api-key-entry-screen-B2gynaCp.js +0 -1
  790. package/build/assets/automation-detail-DJvbVSYK.js +0 -1
  791. package/build/assets/automations-list-rMki-8au.js +0 -1
  792. package/build/assets/backend-form-modal-Dnk33xA_.js +0 -1
  793. package/build/assets/base-modal-_dYTw1ri.js +0 -1
  794. package/build/assets/brand-button-Br7f0kZJ.js +0 -1
  795. package/build/assets/browser-store-Couc4S5D.js +0 -1
  796. package/build/assets/clock-BRjCgHTc.js +0 -1
  797. package/build/assets/combobox-caret-to1O8irE.js +0 -1
  798. package/build/assets/context-menu-list-item-CWNFpuiC.js +0 -1
  799. package/build/assets/conversation-DVrKU0oz.js +0 -19
  800. package/build/assets/conversation-Dlys-D5A.js +0 -1
  801. package/build/assets/conversation-panel-iF09WjZ4.js +0 -1
  802. package/build/assets/conversation-service.api-CCfztilW.js +0 -1
  803. package/build/assets/conversation-state-store-u5jepov0.js +0 -1
  804. package/build/assets/conversation-store-Z5iMCRpc.js +0 -1
  805. package/build/assets/conversation-websocket-context-DhJhqUna.js +0 -3
  806. package/build/assets/declaration-BNMqORFE.js +0 -1
  807. package/build/assets/dist-BxBP7tFD.js +0 -1
  808. package/build/assets/edit-automation-modal-BGzR3nfZ.js +0 -1
  809. package/build/assets/ellipsis-button-ZyLMPURn.js +0 -1
  810. package/build/assets/entry.client-1VMHpktY.js +0 -2
  811. package/build/assets/enum-filter-dropdown-CEgCdu4A.js +0 -1
  812. package/build/assets/extensions-hub-C651jsVh.js +0 -1
  813. package/build/assets/files-tab-R5z0lLdY.js +0 -1
  814. package/build/assets/files-tab-store-CDyVTXNT.js +0 -1
  815. package/build/assets/git-control-bar-branch-button-COdRAYHb.js +0 -27
  816. package/build/assets/git-provider-icon-BzLbc0yC.js +0 -1
  817. package/build/assets/home-XxBpNOVq.js +0 -1
  818. package/build/assets/install-server-modal-f31_CLrW.js +0 -1
  819. package/build/assets/launch-CshDse3e.js +0 -1
  820. package/build/assets/link-external-D2POYx4c.js +0 -1
  821. package/build/assets/llm-settings-Bql-vydt.js +0 -1
  822. package/build/assets/llm-settings-C_tal6Ds.js +0 -1
  823. package/build/assets/manage-backends-modal-l7RkKfwX.js +0 -1
  824. package/build/assets/manage-workspaces-modal-DhKF_8z3.js +0 -1
  825. package/build/assets/manifest-d9077852.js +0 -1
  826. package/build/assets/mcp-D2onbwVk.js +0 -9
  827. package/build/assets/messages-D0rWot7s.js +0 -36
  828. package/build/assets/proxy-CxydCnis.js +0 -1
  829. package/build/assets/root-DHeCXo9N.css +0 -1
  830. package/build/assets/root-layout-Czo9Ma6Q.js +0 -2
  831. package/build/assets/secrets-service-BsnKFc2x.js +0 -1
  832. package/build/assets/secrets-settings-Bz_UohPJ.js +0 -1
  833. package/build/assets/settings-client-C73C7IgV.js +0 -1
  834. package/build/assets/settings-index-Dz0BmdJD.js +0 -1
  835. package/build/assets/settings-list-classes-Bf80tWtc.js +0 -1
  836. package/build/assets/settings-modal-Brzgh5Yw.js +0 -1
  837. package/build/assets/settings-service.api-CZ3uWx4v.js +0 -1
  838. package/build/assets/sidebar-mobile-menu-toggle-Do_aA9Zm.js +0 -1
  839. package/build/assets/skills-settings-DlA5hlXw.js +0 -2
  840. package/build/assets/status-hp6M6E7E.js +0 -1
  841. package/build/assets/use-agent-settings-schema-33Un7UF2.js +0 -1
  842. package/build/assets/use-is-authed-BggE5wPj.js +0 -1
  843. package/build/assets/use-llm-profiles-DDOol3gK.js +0 -1
  844. package/build/assets/use-runtime-is-ready-B7EF4BKU.js +0 -1
  845. package/build/assets/use-settings-DQIZmIov.js +0 -1
  846. package/build/assets/use-user-conversation-C6hrMMtn.js +0 -1
  847. package/build/assets/utils-i18rdUj2.js +0 -1
  848. package/build/assets/vendor~conversation-panel~conversation-a9SyrrhV.js +0 -1
  849. package/build/assets/vendor~conversation-panel~conversation~index-C23ZXO4R.js +0 -1
  850. package/build/assets/vendor~home~mcp~automations-list-Ccy2I0KU.js +0 -1
  851. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-BebWhFNT.js +0 -1
  852. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DzIXV3Ui.js +0 -9
  853. /package/build/assets/{automation-IdgZq6ZK.js → automation-XDPAjiZi.js} +0 -0
  854. /package/build/assets/{color-themes-DSaoIL6A.js → color-themes-B9pm9c-R.js} +0 -0
  855. /package/build/assets/{common-DR1t-EeP.js → common-DqjLSBOt.js} +0 -0
  856. /package/build/assets/{conversation-local-storage-UYl-SX-r.js → conversation-local-storage-YmOVXxxW.js} +0 -0
  857. /package/build/assets/{dist-C6t0EXL7.js → dist-C3NfioQC.js} +0 -0
  858. /package/build/assets/{environment-switch-store-C4ulFJKp.js → environment-switch-store-CiurvTtK.js} +0 -0
  859. /package/build/assets/{health-store-BDC2rM-X.js → health-store-B5f0S2FY.js} +0 -0
  860. /package/build/assets/{map-provider-COBVzZYo.js → map-provider-BJ_8KZKU.js} +0 -0
  861. /package/build/assets/{middleware-BC9EwbB9.js → middleware-CfatjPYZ.js} +0 -0
  862. /package/build/assets/{objectWithoutPropertiesLoose-Du6eBn-V.js → objectWithoutPropertiesLoose-DSQKyRhw.js} +0 -0
  863. /package/build/assets/{react-Do0CT17Y.js → react-Dy05vyj5.js} +0 -0
  864. /package/build/assets/{sdk-settings-field-metadata-CBPmeqYa.js → sdk-settings-field-metadata-DQiaIBie.js} +0 -0
  865. /package/build/assets/{settings-D_H-qsRm.js → settings-DGY6n4J2.js} +0 -0
  866. /package/build/assets/{settings-like-page-layout-classes-I0BDBEoq.js → settings-like-page-layout-classes-D7YjdTd0.js} +0 -0
  867. /package/build/assets/{use-breakpoint-DbJ6FkQ-.js → use-breakpoint-DF_RiQ6s.js} +0 -0
  868. /package/build/assets/{use-click-outside-element-DffgWWoZ.js → use-click-outside-element-DhxCUyWl.js} +0 -0
  869. /package/build/assets/{v4-CNn21NXa.js → v4-khGvL7i2.js} +0 -0
  870. /package/build/assets/{vendor~browser-DDiZgqD3.js → vendor~browser-DisFGEp9.js} +0 -0
  871. /package/build/assets/{vendor~browser-tab-BgwV1mxF.js → vendor~browser-tab-BxhTtM9_.js} +0 -0
  872. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DbvX3OcM.js → vendor~conversation-panel~conversation~alert-banner-w-I2sY6c.js} +0 -0
  873. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-iOsylxCS.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-BClAMeFe.js} +0 -0
  874. /package/build/assets/{vendor~files-tab-BGKayPiK.js → vendor~files-tab-BtkpAiMX.js} +0 -0
  875. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BW6261Sb.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CyZ-3lDQ.js} +0 -0
  876. /package/build/assets/{vendor~home~mcp~automations-list-DoPfwaXj.js → vendor~home~mcp~automations-list-BgV86Sti.js} +0 -0
  877. /package/build/assets/{vendor~launch-vdeRTWFu.js → vendor~launch-BXgl67Re.js} +0 -0
  878. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-D9P8e98a.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-CLlsvdNP.js} +0 -0
  879. /package/build/assets/{vendor~terminal-DUrOWGFE.js → vendor~terminal-DZaJIY8A.js} +0 -0
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/utils.cjs`);let t=require(`react/jsx-runtime`);function n({className:e}){return(0,t.jsx)(`svg`,{"aria-hidden":!0,fill:`none`,focusable:`false`,height:`1em`,role:`presentation`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:1.5,viewBox:`0 0 24 24`,width:`1em`,className:e,children:(0,t.jsx)(`path`,{d:`m6 9 6 6 6-6`})})}var r=`inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none transition-[transform] duration-150 ease motion-reduce:transition-none`,i=e.cn(r,`!rounded-none !bg-transparent data-[hover=true]:!bg-transparent`);function a({isOpen:r,className:i}){return(0,t.jsx)(n,{className:e.cn(`shrink-0 transition-[transform] duration-150 ease motion-reduce:transition-none`,r&&`rotate-180`,i)})}exports.ComboboxCaretIcon=n,exports.ComboboxCaretInline=a,exports.comboboxCaretButtonClassName=r,exports.heroUiAutocompleteSelectorButtonClassName=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/utils.cjs`),t=require(`../utils/form-control-classes.cjs`);let n=require(`react/jsx-runtime`);function r({className:e}){return(0,n.jsx)(`svg`,{"aria-hidden":!0,fill:`none`,focusable:`false`,height:`1em`,role:`presentation`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:1.5,viewBox:`0 0 24 24`,width:`1em`,className:e,children:(0,n.jsx)(`path`,{d:`m6 9 6 6 6-6`})})}var i=e.cn(`inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none`,t.formControlTransformTransitionClassName),a=e.cn(i,`!rounded-none !bg-transparent data-[hover=true]:!bg-transparent`);function o({isOpen:i,className:a}){return(0,n.jsx)(r,{className:e.cn(`shrink-0`,t.formControlTransformTransitionClassName,i&&`rotate-180`,a)})}exports.ComboboxCaretIcon=r,exports.ComboboxCaretInline=o,exports.comboboxCaretButtonClassName=i,exports.heroUiAutocompleteSelectorButtonClassName=a;
2
2
  //# sourceMappingURL=combobox-caret.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-caret.cjs","names":[],"sources":["../../src/ui/combobox-caret.tsx"],"sourcesContent":["import { cn } from \"#/utils/utils\";\n\nexport function ComboboxCaretIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden\n fill=\"none\"\n focusable=\"false\"\n height=\"1em\"\n role=\"presentation\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** Matches HeroUI Autocomplete selectorButton styling. */\nexport const comboboxCaretButtonClassName =\n \"inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none transition-[transform] duration-150 ease motion-reduce:transition-none\";\n\n/** HeroUI Autocomplete selectorButton slot — keep only chevron rotation animated. */\nexport const heroUiAutocompleteSelectorButtonClassName = cn(\n comboboxCaretButtonClassName,\n \"!rounded-none !bg-transparent data-[hover=true]:!bg-transparent\",\n);\n\ninterface ComboboxCaretButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isOpen?: boolean;\n}\n\nexport function ComboboxCaretButton({\n isOpen,\n className,\n disabled,\n children,\n ...props\n}: ComboboxCaretButtonProps) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n comboboxCaretButtonClassName,\n isOpen && \"rotate-180\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children ?? <ComboboxCaretIcon />}\n </button>\n );\n}\n\n/** Inline caret for buttons where only the icon rotates, not the whole control. */\nexport function ComboboxCaretInline({\n isOpen,\n className,\n}: {\n isOpen?: boolean;\n className?: string;\n}) {\n return (\n <ComboboxCaretIcon\n className={cn(\n \"shrink-0 transition-[transform] duration-150 ease motion-reduce:transition-none\",\n isOpen && \"rotate-180\",\n className,\n )}\n />\n );\n}\n"],"mappings":"sHAEA,SAAgB,EAAkB,CAAE,aAAqC,CACvE,OACE,EAAA,EAAA,KAAC,MAAD,CACE,cAAA,GACA,KAAK,OACL,UAAU,QACV,OAAO,MACP,KAAK,eACL,OAAO,eACP,cAAc,QACd,eAAe,QACf,YAAa,IACb,QAAQ,YACR,MAAM,MACK,sBAEX,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,eAAiB,CAAA,CACrB,CAAA,CAKV,IAAa,EACX,yNAGW,EAA4C,EAAA,GACvD,EACA,kEACD,CA+BD,SAAgB,EAAoB,CAClC,SACA,aAIC,CACD,OACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAA,GACT,kFACA,GAAU,aACV,EACD,CACD,CAAA"}
1
+ {"version":3,"file":"combobox-caret.cjs","names":[],"sources":["../../src/ui/combobox-caret.tsx"],"sourcesContent":["import { cn } from \"#/utils/utils\";\nimport { formControlTransformTransitionClassName } from \"#/utils/form-control-classes\";\n\nexport function ComboboxCaretIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden\n fill=\"none\"\n focusable=\"false\"\n height=\"1em\"\n role=\"presentation\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** Matches HeroUI Autocomplete selectorButton styling. */\nexport const comboboxCaretButtonClassName = cn(\n \"inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none\",\n formControlTransformTransitionClassName,\n);\n\n/** HeroUI Autocomplete selectorButton slot — keep only chevron rotation animated. */\nexport const heroUiAutocompleteSelectorButtonClassName = cn(\n comboboxCaretButtonClassName,\n \"!rounded-none !bg-transparent data-[hover=true]:!bg-transparent\",\n);\n\ninterface ComboboxCaretButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isOpen?: boolean;\n}\n\nexport function ComboboxCaretButton({\n isOpen,\n className,\n disabled,\n children,\n ...props\n}: ComboboxCaretButtonProps) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n comboboxCaretButtonClassName,\n isOpen && \"rotate-180\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children ?? <ComboboxCaretIcon />}\n </button>\n );\n}\n\n/** Inline caret for buttons where only the icon rotates, not the whole control. */\nexport function ComboboxCaretInline({\n isOpen,\n className,\n}: {\n isOpen?: boolean;\n className?: string;\n}) {\n return (\n <ComboboxCaretIcon\n className={cn(\n \"shrink-0\",\n formControlTransformTransitionClassName,\n isOpen && \"rotate-180\",\n className,\n )}\n />\n );\n}\n"],"mappings":"qKAGA,SAAgB,EAAkB,CAAE,aAAqC,CACvE,OACE,EAAA,EAAA,KAAC,MAAD,CACE,cAAA,GACA,KAAK,OACL,UAAU,QACV,OAAO,MACP,KAAK,eACL,OAAO,eACP,cAAc,QACd,eAAe,QACf,YAAa,IACb,QAAQ,YACR,MAAM,MACK,sBAEX,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,eAAiB,CAAA,CACrB,CAAA,CAKV,IAAa,EAA+B,EAAA,GAC1C,kJACA,EAAA,wCACD,CAGY,EAA4C,EAAA,GACvD,EACA,kEACD,CA+BD,SAAgB,EAAoB,CAClC,SACA,aAIC,CACD,OACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,EAAA,GACT,WACA,EAAA,wCACA,GAAU,aACV,EACD,CACD,CAAA"}
@@ -2,7 +2,7 @@ export declare function ComboboxCaretIcon({ className }: {
2
2
  className?: string;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
4
  /** Matches HeroUI Autocomplete selectorButton styling. */
5
- export declare const comboboxCaretButtonClassName = "inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none transition-[transform] duration-150 ease motion-reduce:transition-none";
5
+ export declare const comboboxCaretButtonClassName: string;
6
6
  /** HeroUI Autocomplete selectorButton slot — keep only chevron rotation animated. */
7
7
  export declare const heroUiAutocompleteSelectorButtonClassName: string;
8
8
  interface ComboboxCaretButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -1,8 +1,9 @@
1
1
  import { cn as e } from "../utils/utils.js";
2
- import { jsx as t } from "react/jsx-runtime";
2
+ import { formControlTransformTransitionClassName as t } from "../utils/form-control-classes.js";
3
+ import { jsx as n } from "react/jsx-runtime";
3
4
  //#region src/ui/combobox-caret.tsx
4
- function n({ className: e }) {
5
- return /* @__PURE__ */ t("svg", {
5
+ function r({ className: e }) {
6
+ return /* @__PURE__ */ n("svg", {
6
7
  "aria-hidden": !0,
7
8
  fill: "none",
8
9
  focusable: "false",
@@ -15,14 +16,14 @@ function n({ className: e }) {
15
16
  viewBox: "0 0 24 24",
16
17
  width: "1em",
17
18
  className: e,
18
- children: /* @__PURE__ */ t("path", { d: "m6 9 6 6 6-6" })
19
+ children: /* @__PURE__ */ n("path", { d: "m6 9 6 6 6-6" })
19
20
  });
20
21
  }
21
- var r = "inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none transition-[transform] duration-150 ease motion-reduce:transition-none", i = e(r, "!rounded-none !bg-transparent data-[hover=true]:!bg-transparent");
22
- function a({ isOpen: r, className: i }) {
23
- return /* @__PURE__ */ t(n, { className: e("shrink-0 transition-[transform] duration-150 ease motion-reduce:transition-none", r && "rotate-180", i) });
22
+ var i = e("inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none", t), a = e(i, "!rounded-none !bg-transparent data-[hover=true]:!bg-transparent");
23
+ function o({ isOpen: i, className: a }) {
24
+ return /* @__PURE__ */ n(r, { className: e("shrink-0", t, i && "rotate-180", a) });
24
25
  }
25
26
  //#endregion
26
- export { n as ComboboxCaretIcon, a as ComboboxCaretInline, r as comboboxCaretButtonClassName, i as heroUiAutocompleteSelectorButtonClassName };
27
+ export { r as ComboboxCaretIcon, o as ComboboxCaretInline, i as comboboxCaretButtonClassName, a as heroUiAutocompleteSelectorButtonClassName };
27
28
 
28
29
  //# sourceMappingURL=combobox-caret.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-caret.js","names":[],"sources":["../../src/ui/combobox-caret.tsx"],"sourcesContent":["import { cn } from \"#/utils/utils\";\n\nexport function ComboboxCaretIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden\n fill=\"none\"\n focusable=\"false\"\n height=\"1em\"\n role=\"presentation\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** Matches HeroUI Autocomplete selectorButton styling. */\nexport const comboboxCaretButtonClassName =\n \"inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none transition-[transform] duration-150 ease motion-reduce:transition-none\";\n\n/** HeroUI Autocomplete selectorButton slot — keep only chevron rotation animated. */\nexport const heroUiAutocompleteSelectorButtonClassName = cn(\n comboboxCaretButtonClassName,\n \"!rounded-none !bg-transparent data-[hover=true]:!bg-transparent\",\n);\n\ninterface ComboboxCaretButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isOpen?: boolean;\n}\n\nexport function ComboboxCaretButton({\n isOpen,\n className,\n disabled,\n children,\n ...props\n}: ComboboxCaretButtonProps) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n comboboxCaretButtonClassName,\n isOpen && \"rotate-180\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children ?? <ComboboxCaretIcon />}\n </button>\n );\n}\n\n/** Inline caret for buttons where only the icon rotates, not the whole control. */\nexport function ComboboxCaretInline({\n isOpen,\n className,\n}: {\n isOpen?: boolean;\n className?: string;\n}) {\n return (\n <ComboboxCaretIcon\n className={cn(\n \"shrink-0 transition-[transform] duration-150 ease motion-reduce:transition-none\",\n isOpen && \"rotate-180\",\n className,\n )}\n />\n );\n}\n"],"mappings":";;;AAEA,SAAgB,EAAkB,EAAE,gBAAqC;AACvE,QACE,kBAAC,OAAD;EACE,eAAA;EACA,MAAK;EACL,WAAU;EACV,QAAO;EACP,MAAK;EACL,QAAO;EACP,eAAc;EACd,gBAAe;EACf,aAAa;EACb,SAAQ;EACR,OAAM;EACK;YAEX,kBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;EACrB,CAAA;;AAKV,IAAa,IACX,0NAGW,IAA4C,EACvD,GACA,kEACD;AA+BD,SAAgB,EAAoB,EAClC,WACA,gBAIC;AACD,QACE,kBAAC,GAAD,EACE,WAAW,EACT,mFACA,KAAU,cACV,EACD,EACD,CAAA"}
1
+ {"version":3,"file":"combobox-caret.js","names":[],"sources":["../../src/ui/combobox-caret.tsx"],"sourcesContent":["import { cn } from \"#/utils/utils\";\nimport { formControlTransformTransitionClassName } from \"#/utils/form-control-classes\";\n\nexport function ComboboxCaretIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden\n fill=\"none\"\n focusable=\"false\"\n height=\"1em\"\n role=\"presentation\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** Matches HeroUI Autocomplete selectorButton styling. */\nexport const comboboxCaretButtonClassName = cn(\n \"inline-flex items-center justify-center shrink-0 rounded-none bg-transparent px-1 min-w-0 w-auto h-auto text-medium cursor-pointer outline-none\",\n formControlTransformTransitionClassName,\n);\n\n/** HeroUI Autocomplete selectorButton slot — keep only chevron rotation animated. */\nexport const heroUiAutocompleteSelectorButtonClassName = cn(\n comboboxCaretButtonClassName,\n \"!rounded-none !bg-transparent data-[hover=true]:!bg-transparent\",\n);\n\ninterface ComboboxCaretButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isOpen?: boolean;\n}\n\nexport function ComboboxCaretButton({\n isOpen,\n className,\n disabled,\n children,\n ...props\n}: ComboboxCaretButtonProps) {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n comboboxCaretButtonClassName,\n isOpen && \"rotate-180\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children ?? <ComboboxCaretIcon />}\n </button>\n );\n}\n\n/** Inline caret for buttons where only the icon rotates, not the whole control. */\nexport function ComboboxCaretInline({\n isOpen,\n className,\n}: {\n isOpen?: boolean;\n className?: string;\n}) {\n return (\n <ComboboxCaretIcon\n className={cn(\n \"shrink-0\",\n formControlTransformTransitionClassName,\n isOpen && \"rotate-180\",\n className,\n )}\n />\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,EAAkB,EAAE,gBAAqC;AACvE,QACE,kBAAC,OAAD;EACE,eAAA;EACA,MAAK;EACL,WAAU;EACV,QAAO;EACP,MAAK;EACL,QAAO;EACP,eAAc;EACd,gBAAe;EACf,aAAa;EACb,SAAQ;EACR,OAAM;EACK;YAEX,kBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;EACrB,CAAA;;AAKV,IAAa,IAA+B,EAC1C,mJACA,EACD,EAGY,IAA4C,EACvD,GACA,kEACD;AA+BD,SAAgB,EAAoB,EAClC,WACA,gBAIC;AACD,QACE,kBAAC,GAAD,EACE,WAAW,EACT,YACA,GACA,KAAU,cACV,EACD,EACD,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../utils/utils.cjs`),n=require(`../node_modules/class-variance-authority/dist/index.cjs`);let r=require(`react`);r=e.__toESM(r,1);let i=require(`react/jsx-runtime`);var a=n.cva(`z-50 overflow-hidden text-[var(--oh-foreground)]`,{variants:{theme:{default:`absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`,naked:`relative`,popover:`relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`},size:{compact:`py-1 px-1`,default:``},layout:{vertical:`flex flex-col gap-0`},position:{top:`bottom-full`,bottom:`top-full`,none:``},spacing:{default:`mt-2`,none:``},alignment:{left:`left-0`,right:`right-0`,none:``}},compoundVariants:[{theme:`naked`,className:`shadow-none`}],defaultVariants:{theme:`default`,size:`default`,layout:`vertical`,spacing:`default`}});function o({testId:e,children:n,className:r,style:o,ref:s,theme:c,size:l,layout:u,position:d,spacing:f,alignment:p}){return(0,i.jsx)(`ul`,{"data-testid":e,"data-position":d,ref:s,style:o,className:t.cn(a({theme:c,size:l,layout:u,position:d,spacing:f,alignment:p}),r),children:n})}exports.ContextMenu=o;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../utils/utils.cjs`),n=require(`../node_modules/class-variance-authority/dist/index.cjs`),r=require(`../utils/dropdown-classes.cjs`);let i=require(`react`);i=e.__toESM(i,1);let a=require(`react/jsx-runtime`);var o=n.cva(`z-50 overflow-hidden text-[var(--oh-foreground)]`,{variants:{theme:{default:`absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`,naked:`relative`,popover:`relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg`},size:{compact:`py-1 px-1`,default:``},layout:{vertical:t.cn(`flex flex-col`,r.dropdownMenuListGapClassName)},position:{top:`bottom-full`,bottom:`top-full`,none:``},spacing:{default:`mt-2`,none:``},alignment:{left:`left-0`,right:`right-0`,none:``}},compoundVariants:[{theme:`naked`,className:`shadow-none`}],defaultVariants:{theme:`default`,size:`default`,layout:`vertical`,spacing:`default`}});function s({testId:e,children:n,className:r,style:i,ref:s,theme:c,size:l,layout:u,position:d,spacing:f,alignment:p}){return(0,a.jsx)(`ul`,{"data-testid":e,"data-position":d,ref:s,style:i,className:t.cn(o({theme:c,size:l,layout:u,position:d,spacing:f,alignment:p}),r),children:n})}exports.ContextMenu=s;
2
2
  //# sourceMappingURL=context-menu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.cjs","names":[],"sources":["../../src/ui/context-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"#/utils/utils\";\n\nconst contextMenuVariants = cva(\n \"z-50 overflow-hidden text-[var(--oh-foreground)]\",\n {\n variants: {\n theme: {\n default:\n \"absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n naked: \"relative\",\n /** In document-body portal; coordinates come from inline `style`. */\n popover:\n \"relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n },\n size: {\n compact: \"py-1 px-1\",\n default: \"\",\n },\n layout: {\n vertical: \"flex flex-col gap-0\",\n },\n position: {\n top: \"bottom-full\",\n bottom: \"top-full\",\n none: \"\",\n },\n spacing: {\n default: \"mt-2\",\n none: \"\",\n },\n alignment: {\n left: \"left-0\",\n right: \"right-0\",\n none: \"\",\n },\n },\n compoundVariants: [\n {\n theme: \"naked\",\n className: \"shadow-none\",\n },\n ],\n defaultVariants: {\n theme: \"default\",\n size: \"default\",\n layout: \"vertical\",\n spacing: \"default\",\n },\n },\n);\n\ninterface ContextMenuProps {\n ref?: React.RefObject<HTMLUListElement | null>;\n testId?: string;\n children: React.ReactNode;\n className?: React.HTMLAttributes<HTMLUListElement>[\"className\"];\n style?: React.CSSProperties;\n theme?: VariantProps<typeof contextMenuVariants>[\"theme\"];\n size?: VariantProps<typeof contextMenuVariants>[\"size\"];\n layout?: VariantProps<typeof contextMenuVariants>[\"layout\"];\n position?: VariantProps<typeof contextMenuVariants>[\"position\"];\n spacing?: VariantProps<typeof contextMenuVariants>[\"spacing\"];\n alignment?: VariantProps<typeof contextMenuVariants>[\"alignment\"];\n}\n\nexport function ContextMenu({\n testId,\n children,\n className,\n style,\n ref,\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n}: ContextMenuProps) {\n return (\n <ul\n data-testid={testId}\n data-position={position}\n ref={ref}\n style={style}\n className={cn(\n contextMenuVariants({\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n }),\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n"],"mappings":"qOAIA,IAAM,EAAsB,EAAA,IAC1B,mDACA,CACE,SAAU,CACR,MAAO,CACL,QACE,8FACF,MAAO,WAEP,QACE,8FACH,CACD,KAAM,CACJ,QAAS,YACT,QAAS,GACV,CACD,OAAQ,CACN,SAAU,sBACX,CACD,SAAU,CACR,IAAK,cACL,OAAQ,WACR,KAAM,GACP,CACD,QAAS,CACP,QAAS,OACT,KAAM,GACP,CACD,UAAW,CACT,KAAM,SACN,MAAO,UACP,KAAM,GACP,CACF,CACD,iBAAkB,CAChB,CACE,MAAO,QACP,UAAW,cACZ,CACF,CACD,gBAAiB,CACf,MAAO,UACP,KAAM,UACN,OAAQ,WACR,QAAS,UACV,CACF,CACF,CAgBD,SAAgB,EAAY,CAC1B,SACA,WACA,YACA,QACA,MACA,QACA,OACA,SACA,WACA,UACA,aACmB,CACnB,OACE,EAAA,EAAA,KAAC,KAAD,CACE,cAAa,EACb,gBAAe,EACV,MACE,QACP,UAAW,EAAA,GACT,EAAoB,CAClB,QACA,OACA,SACA,WACA,UACA,YACD,CAAC,CACF,EACD,CAEA,WACE,CAAA"}
1
+ {"version":3,"file":"context-menu.cjs","names":[],"sources":["../../src/ui/context-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"#/utils/utils\";\nimport { dropdownMenuListGapClassName } from \"#/utils/dropdown-classes\";\n\nconst contextMenuVariants = cva(\n \"z-50 overflow-hidden text-[var(--oh-foreground)]\",\n {\n variants: {\n theme: {\n default:\n \"absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n naked: \"relative\",\n /** In document-body portal; coordinates come from inline `style`. */\n popover:\n \"relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n },\n size: {\n compact: \"py-1 px-1\",\n default: \"\",\n },\n layout: {\n vertical: cn(\"flex flex-col\", dropdownMenuListGapClassName),\n },\n position: {\n top: \"bottom-full\",\n bottom: \"top-full\",\n none: \"\",\n },\n spacing: {\n default: \"mt-2\",\n none: \"\",\n },\n alignment: {\n left: \"left-0\",\n right: \"right-0\",\n none: \"\",\n },\n },\n compoundVariants: [\n {\n theme: \"naked\",\n className: \"shadow-none\",\n },\n ],\n defaultVariants: {\n theme: \"default\",\n size: \"default\",\n layout: \"vertical\",\n spacing: \"default\",\n },\n },\n);\n\ninterface ContextMenuProps {\n ref?: React.RefObject<HTMLUListElement | null>;\n testId?: string;\n children: React.ReactNode;\n className?: React.HTMLAttributes<HTMLUListElement>[\"className\"];\n style?: React.CSSProperties;\n theme?: VariantProps<typeof contextMenuVariants>[\"theme\"];\n size?: VariantProps<typeof contextMenuVariants>[\"size\"];\n layout?: VariantProps<typeof contextMenuVariants>[\"layout\"];\n position?: VariantProps<typeof contextMenuVariants>[\"position\"];\n spacing?: VariantProps<typeof contextMenuVariants>[\"spacing\"];\n alignment?: VariantProps<typeof contextMenuVariants>[\"alignment\"];\n}\n\nexport function ContextMenu({\n testId,\n children,\n className,\n style,\n ref,\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n}: ContextMenuProps) {\n return (\n <ul\n data-testid={testId}\n data-position={position}\n ref={ref}\n style={style}\n className={cn(\n contextMenuVariants({\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n }),\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n"],"mappings":"gRAKA,IAAM,EAAsB,EAAA,IAC1B,mDACA,CACE,SAAU,CACR,MAAO,CACL,QACE,8FACF,MAAO,WAEP,QACE,8FACH,CACD,KAAM,CACJ,QAAS,YACT,QAAS,GACV,CACD,OAAQ,CACN,SAAU,EAAA,GAAG,gBAAiB,EAAA,6BAA6B,CAC5D,CACD,SAAU,CACR,IAAK,cACL,OAAQ,WACR,KAAM,GACP,CACD,QAAS,CACP,QAAS,OACT,KAAM,GACP,CACD,UAAW,CACT,KAAM,SACN,MAAO,UACP,KAAM,GACP,CACF,CACD,iBAAkB,CAChB,CACE,MAAO,QACP,UAAW,cACZ,CACF,CACD,gBAAiB,CACf,MAAO,UACP,KAAM,UACN,OAAQ,WACR,QAAS,UACV,CACF,CACF,CAgBD,SAAgB,EAAY,CAC1B,SACA,WACA,YACA,QACA,MACA,QACA,OACA,SACA,WACA,UACA,aACmB,CACnB,OACE,EAAA,EAAA,KAAC,KAAD,CACE,cAAa,EACb,gBAAe,EACV,MACE,QACP,UAAW,EAAA,GACT,EAAoB,CAClB,QACA,OACA,SACA,WACA,UACA,YACD,CAAC,CACF,EACD,CAEA,WACE,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import { cn as e } from "../utils/utils.js";
2
2
  import { cva as t } from "../node_modules/class-variance-authority/dist/index.js";
3
+ import { dropdownMenuListGapClassName as n } from "../utils/dropdown-classes.js";
3
4
  import "react";
4
- import { jsx as n } from "react/jsx-runtime";
5
+ import { jsx as r } from "react/jsx-runtime";
5
6
  //#region src/ui/context-menu.tsx
6
- var r = t("z-50 overflow-hidden text-[var(--oh-foreground)]", {
7
+ var i = t("z-50 overflow-hidden text-[var(--oh-foreground)]", {
7
8
  variants: {
8
9
  theme: {
9
10
  default: "absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg",
@@ -14,7 +15,7 @@ var r = t("z-50 overflow-hidden text-[var(--oh-foreground)]", {
14
15
  compact: "py-1 px-1",
15
16
  default: ""
16
17
  },
17
- layout: { vertical: "flex flex-col gap-0" },
18
+ layout: { vertical: e("flex flex-col", n) },
18
19
  position: {
19
20
  top: "bottom-full",
20
21
  bottom: "top-full",
@@ -41,13 +42,13 @@ var r = t("z-50 overflow-hidden text-[var(--oh-foreground)]", {
41
42
  spacing: "default"
42
43
  }
43
44
  });
44
- function i({ testId: t, children: i, className: a, style: o, ref: s, theme: c, size: l, layout: u, position: d, spacing: f, alignment: p }) {
45
- return /* @__PURE__ */ n("ul", {
45
+ function a({ testId: t, children: n, className: a, style: o, ref: s, theme: c, size: l, layout: u, position: d, spacing: f, alignment: p }) {
46
+ return /* @__PURE__ */ r("ul", {
46
47
  "data-testid": t,
47
48
  "data-position": d,
48
49
  ref: s,
49
50
  style: o,
50
- className: e(r({
51
+ className: e(i({
51
52
  theme: c,
52
53
  size: l,
53
54
  layout: u,
@@ -55,10 +56,10 @@ function i({ testId: t, children: i, className: a, style: o, ref: s, theme: c, s
55
56
  spacing: f,
56
57
  alignment: p
57
58
  }), a),
58
- children: i
59
+ children: n
59
60
  });
60
61
  }
61
62
  //#endregion
62
- export { i as ContextMenu };
63
+ export { a as ContextMenu };
63
64
 
64
65
  //# sourceMappingURL=context-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","names":[],"sources":["../../src/ui/context-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"#/utils/utils\";\n\nconst contextMenuVariants = cva(\n \"z-50 overflow-hidden text-[var(--oh-foreground)]\",\n {\n variants: {\n theme: {\n default:\n \"absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n naked: \"relative\",\n /** In document-body portal; coordinates come from inline `style`. */\n popover:\n \"relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n },\n size: {\n compact: \"py-1 px-1\",\n default: \"\",\n },\n layout: {\n vertical: \"flex flex-col gap-0\",\n },\n position: {\n top: \"bottom-full\",\n bottom: \"top-full\",\n none: \"\",\n },\n spacing: {\n default: \"mt-2\",\n none: \"\",\n },\n alignment: {\n left: \"left-0\",\n right: \"right-0\",\n none: \"\",\n },\n },\n compoundVariants: [\n {\n theme: \"naked\",\n className: \"shadow-none\",\n },\n ],\n defaultVariants: {\n theme: \"default\",\n size: \"default\",\n layout: \"vertical\",\n spacing: \"default\",\n },\n },\n);\n\ninterface ContextMenuProps {\n ref?: React.RefObject<HTMLUListElement | null>;\n testId?: string;\n children: React.ReactNode;\n className?: React.HTMLAttributes<HTMLUListElement>[\"className\"];\n style?: React.CSSProperties;\n theme?: VariantProps<typeof contextMenuVariants>[\"theme\"];\n size?: VariantProps<typeof contextMenuVariants>[\"size\"];\n layout?: VariantProps<typeof contextMenuVariants>[\"layout\"];\n position?: VariantProps<typeof contextMenuVariants>[\"position\"];\n spacing?: VariantProps<typeof contextMenuVariants>[\"spacing\"];\n alignment?: VariantProps<typeof contextMenuVariants>[\"alignment\"];\n}\n\nexport function ContextMenu({\n testId,\n children,\n className,\n style,\n ref,\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n}: ContextMenuProps) {\n return (\n <ul\n data-testid={testId}\n data-position={position}\n ref={ref}\n style={style}\n className={cn(\n contextMenuVariants({\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n }),\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n"],"mappings":";;;;;AAIA,IAAM,IAAsB,EAC1B,oDACA;CACE,UAAU;EACR,OAAO;GACL,SACE;GACF,OAAO;GAEP,SACE;GACH;EACD,MAAM;GACJ,SAAS;GACT,SAAS;GACV;EACD,QAAQ,EACN,UAAU,uBACX;EACD,UAAU;GACR,KAAK;GACL,QAAQ;GACR,MAAM;GACP;EACD,SAAS;GACP,SAAS;GACT,MAAM;GACP;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACF;CACD,kBAAkB,CAChB;EACE,OAAO;EACP,WAAW;EACZ,CACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACV;CACF,CACF;AAgBD,SAAgB,EAAY,EAC1B,WACA,aACA,cACA,UACA,QACA,UACA,SACA,WACA,aACA,YACA,gBACmB;AACnB,QACE,kBAAC,MAAD;EACE,eAAa;EACb,iBAAe;EACV;EACE;EACP,WAAW,EACT,EAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EACF,EACD;EAEA;EACE,CAAA"}
1
+ {"version":3,"file":"context-menu.js","names":[],"sources":["../../src/ui/context-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"#/utils/utils\";\nimport { dropdownMenuListGapClassName } from \"#/utils/dropdown-classes\";\n\nconst contextMenuVariants = cva(\n \"z-50 overflow-hidden text-[var(--oh-foreground)]\",\n {\n variants: {\n theme: {\n default:\n \"absolute rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n naked: \"relative\",\n /** In document-body portal; coordinates come from inline `style`. */\n popover:\n \"relative rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 shadow-lg\",\n },\n size: {\n compact: \"py-1 px-1\",\n default: \"\",\n },\n layout: {\n vertical: cn(\"flex flex-col\", dropdownMenuListGapClassName),\n },\n position: {\n top: \"bottom-full\",\n bottom: \"top-full\",\n none: \"\",\n },\n spacing: {\n default: \"mt-2\",\n none: \"\",\n },\n alignment: {\n left: \"left-0\",\n right: \"right-0\",\n none: \"\",\n },\n },\n compoundVariants: [\n {\n theme: \"naked\",\n className: \"shadow-none\",\n },\n ],\n defaultVariants: {\n theme: \"default\",\n size: \"default\",\n layout: \"vertical\",\n spacing: \"default\",\n },\n },\n);\n\ninterface ContextMenuProps {\n ref?: React.RefObject<HTMLUListElement | null>;\n testId?: string;\n children: React.ReactNode;\n className?: React.HTMLAttributes<HTMLUListElement>[\"className\"];\n style?: React.CSSProperties;\n theme?: VariantProps<typeof contextMenuVariants>[\"theme\"];\n size?: VariantProps<typeof contextMenuVariants>[\"size\"];\n layout?: VariantProps<typeof contextMenuVariants>[\"layout\"];\n position?: VariantProps<typeof contextMenuVariants>[\"position\"];\n spacing?: VariantProps<typeof contextMenuVariants>[\"spacing\"];\n alignment?: VariantProps<typeof contextMenuVariants>[\"alignment\"];\n}\n\nexport function ContextMenu({\n testId,\n children,\n className,\n style,\n ref,\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n}: ContextMenuProps) {\n return (\n <ul\n data-testid={testId}\n data-position={position}\n ref={ref}\n style={style}\n className={cn(\n contextMenuVariants({\n theme,\n size,\n layout,\n position,\n spacing,\n alignment,\n }),\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAM,IAAsB,EAC1B,oDACA;CACE,UAAU;EACR,OAAO;GACL,SACE;GACF,OAAO;GAEP,SACE;GACH;EACD,MAAM;GACJ,SAAS;GACT,SAAS;GACV;EACD,QAAQ,EACN,UAAU,EAAG,iBAAiB,EAA6B,EAC5D;EACD,UAAU;GACR,KAAK;GACL,QAAQ;GACR,MAAM;GACP;EACD,SAAS;GACP,SAAS;GACT,MAAM;GACP;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACF;CACD,kBAAkB,CAChB;EACE,OAAO;EACP,WAAW;EACZ,CACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACV;CACF,CACF;AAgBD,SAAgB,EAAY,EAC1B,WACA,aACA,cACA,UACA,QACA,UACA,SACA,WACA,aACA,YACA,gBACmB;AACnB,QACE,kBAAC,MAAD;EACE,eAAa;EACb,iBAAe;EACV;EACE;EACP,WAAW,EACT,EAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,EACF,EACD;EAEA;EACE,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../utils/utils.cjs`),n=require(`../divider.cjs`);let r=require(`react`);r=e.__toESM(r,1);let i=require(`react/jsx-runtime`);function a({isOpen:e,filteredOptions:r,selectedItem:a,emptyMessage:o,getMenuProps:s,getItemProps:c,footer:l,openUpward:u=!1,fitContent:d=!1}){return(0,i.jsxs)(`div`,{className:t.cn(`absolute z-50 overflow-hidden text-white`,d?`min-w-full w-max`:`w-full`,u?`bottom-full mb-1`:`mt-1`,`bg-tertiary rounded-[6px] context-menu-box-shadow p-1`,`max-h-60 overflow-auto`,!e&&`hidden`),children:[(0,i.jsxs)(`ul`,{...s({className:`p-0`}),children:[e&&r.length===0&&(0,i.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,children:o}),e&&r.map((e,n)=>(0,i.jsxs)(`li`,{...c({item:e,index:n,className:t.cn(`px-2 py-2 cursor-pointer text-sm rounded`,`text-white focus:outline-none font-normal`,`flex items-center gap-2`,a?.value===e.value?`bg-[var(--oh-interactive-selected)] text-white`:`hover:bg-[var(--oh-interactive-hover)]`)}),children:[e.prefix,(0,i.jsx)(`span`,{className:`min-w-0 truncate`,children:e.label})]},e.value))]}),e&&l?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.Divider,{inset:`menu`}),(0,i.jsx)(`div`,{className:`p-0`,children:l})]}):null]})}exports.DropdownMenu=a;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../utils/utils.cjs`),n=require(`../../utils/dropdown-classes.cjs`),r=require(`../divider.cjs`);let i=require(`react`);i=e.__toESM(i,1);let a=require(`react/jsx-runtime`);function o({isOpen:e,filteredOptions:i,selectedItem:o,emptyMessage:s,getMenuProps:c,getItemProps:l,footer:u,openUpward:d=!1,fitContent:f=!1}){return(0,a.jsxs)(`div`,{className:t.cn(`absolute z-50 overflow-hidden text-white`,f?`min-w-full w-max`:`w-full`,d?`bottom-full mb-1`:`mt-1`,`bg-tertiary rounded-[6px] context-menu-box-shadow p-1`,`max-h-60 overflow-auto`,!e&&`hidden`),children:[(0,a.jsxs)(`ul`,{...c({className:t.cn(`p-0`,n.dropdownMenuListClassName)}),children:[e&&i.length===0&&(0,a.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,children:s}),e&&i.map((e,r)=>(0,a.jsxs)(`li`,{...l({item:e,index:r,className:t.cn(n.dropdownMenuRowClassName,`focus:outline-none`,o?.value===e.value&&`bg-[var(--oh-interactive-selected)] text-white`)}),children:[e.prefix?(0,a.jsx)(`span`,{className:n.dropdownMenuRowIconWrapperClassName,children:e.prefix}):null,(0,a.jsx)(`span`,{className:`min-w-0 truncate`,children:e.label})]},e.value))]}),e&&u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.Divider,{inset:`menu`}),(0,a.jsx)(`div`,{className:`p-0`,children:u})]}):null]})}exports.DropdownMenu=o;
2
2
  //# sourceMappingURL=dropdown-menu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu.cjs","names":[],"sources":["../../../src/ui/dropdown/dropdown-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Divider } from \"#/ui/divider\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\n\ninterface DropdownMenuProps {\n isOpen: boolean;\n filteredOptions: DropdownOption[];\n selectedItem: DropdownOption | null;\n emptyMessage: string;\n getMenuProps: (props?: object) => object;\n getItemProps: (props: {\n item: DropdownOption;\n index: number;\n className?: string;\n }) => object;\n footer?: React.ReactNode;\n openUpward?: boolean;\n fitContent?: boolean;\n}\n\nexport function DropdownMenu({\n isOpen,\n filteredOptions,\n selectedItem,\n emptyMessage,\n getMenuProps,\n getItemProps,\n footer,\n openUpward = false,\n fitContent = false,\n}: DropdownMenuProps) {\n return (\n <div\n className={cn(\n \"absolute z-50 overflow-hidden text-white\",\n fitContent ? \"min-w-full w-max\" : \"w-full\",\n openUpward ? \"bottom-full mb-1\" : \"mt-1\",\n \"bg-tertiary rounded-[6px] context-menu-box-shadow p-1\",\n \"max-h-60 overflow-auto\",\n !isOpen && \"hidden\",\n )}\n >\n <ul {...getMenuProps({ className: \"p-0\" })}>\n {isOpen && filteredOptions.length === 0 && (\n <li className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\">\n {emptyMessage}\n </li>\n )}\n {isOpen &&\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n \"px-2 py-2 cursor-pointer text-sm rounded\",\n \"text-white focus:outline-none font-normal\",\n \"flex items-center gap-2\",\n selectedItem?.value === option.value\n ? \"bg-[var(--oh-interactive-selected)] text-white\"\n : \"hover:bg-[var(--oh-interactive-hover)]\",\n ),\n })}\n >\n {option.prefix}\n <span className=\"min-w-0 truncate\">{option.label}</span>\n </li>\n ))}\n </ul>\n {isOpen && footer ? (\n <>\n <Divider inset=\"menu\" />\n <div className=\"p-0\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":"kMAqBA,SAAgB,EAAa,CAC3B,SACA,kBACA,eACA,eACA,eACA,eACA,SACA,aAAa,GACb,aAAa,IACO,CACpB,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,2CACA,EAAa,mBAAqB,SAClC,EAAa,mBAAqB,OAClC,wDACA,yBACA,CAAC,GAAU,SACZ,UARH,EAUE,EAAA,EAAA,MAAC,KAAD,CAAI,GAAI,EAAa,CAAE,UAAW,MAAO,CAAC,UAA1C,CACG,GAAU,EAAgB,SAAW,IACpC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,2DACX,EACE,CAAA,CAEN,GACC,EAAgB,KAAK,EAAQ,KAC3B,EAAA,EAAA,MAAC,KAAD,CAEE,GAAI,EAAa,CACf,KAAM,EACN,QACA,UAAW,EAAA,GACT,2CACA,4CACA,0BACA,GAAc,QAAU,EAAO,MAC3B,iDACA,yCACL,CACF,CAAC,UAbJ,CAeG,EAAO,QACR,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,4BAAoB,EAAO,MAAa,CAAA,CACrD,EAhBE,EAAO,MAgBT,CACL,CACD,GACJ,GAAU,GACT,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAS,MAAM,OAAS,CAAA,EACxB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,eAAO,EAAa,CAAA,CAClC,CAAA,CAAA,CACD,KACA"}
1
+ {"version":3,"file":"dropdown-menu.cjs","names":[],"sources":["../../../src/ui/dropdown/dropdown-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Divider } from \"#/ui/divider\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport {\n dropdownMenuListClassName,\n dropdownMenuRowClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\n\ninterface DropdownMenuProps {\n isOpen: boolean;\n filteredOptions: DropdownOption[];\n selectedItem: DropdownOption | null;\n emptyMessage: string;\n getMenuProps: (props?: object) => object;\n getItemProps: (props: {\n item: DropdownOption;\n index: number;\n className?: string;\n }) => object;\n footer?: React.ReactNode;\n openUpward?: boolean;\n fitContent?: boolean;\n}\n\nexport function DropdownMenu({\n isOpen,\n filteredOptions,\n selectedItem,\n emptyMessage,\n getMenuProps,\n getItemProps,\n footer,\n openUpward = false,\n fitContent = false,\n}: DropdownMenuProps) {\n return (\n <div\n className={cn(\n \"absolute z-50 overflow-hidden text-white\",\n fitContent ? \"min-w-full w-max\" : \"w-full\",\n openUpward ? \"bottom-full mb-1\" : \"mt-1\",\n \"bg-tertiary rounded-[6px] context-menu-box-shadow p-1\",\n \"max-h-60 overflow-auto\",\n !isOpen && \"hidden\",\n )}\n >\n <ul\n {...getMenuProps({ className: cn(\"p-0\", dropdownMenuListClassName) })}\n >\n {isOpen && filteredOptions.length === 0 && (\n <li className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\">\n {emptyMessage}\n </li>\n )}\n {isOpen &&\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n dropdownMenuRowClassName,\n \"focus:outline-none\",\n selectedItem?.value === option.value &&\n \"bg-[var(--oh-interactive-selected)] text-white\",\n ),\n })}\n >\n {option.prefix ? (\n <span className={dropdownMenuRowIconWrapperClassName}>\n {option.prefix}\n </span>\n ) : null}\n <span className=\"min-w-0 truncate\">{option.label}</span>\n </li>\n ))}\n </ul>\n {isOpen && footer ? (\n <>\n <Divider inset=\"menu\" />\n <div className=\"p-0\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":"gPA0BA,SAAgB,EAAa,CAC3B,SACA,kBACA,eACA,eACA,eACA,eACA,SACA,aAAa,GACb,aAAa,IACO,CACpB,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,2CACA,EAAa,mBAAqB,SAClC,EAAa,mBAAqB,OAClC,wDACA,yBACA,CAAC,GAAU,SACZ,UARH,EAUE,EAAA,EAAA,MAAC,KAAD,CACE,GAAI,EAAa,CAAE,UAAW,EAAA,GAAG,MAAO,EAAA,0BAA0B,CAAE,CAAC,UADvE,CAGG,GAAU,EAAgB,SAAW,IACpC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,2DACX,EACE,CAAA,CAEN,GACC,EAAgB,KAAK,EAAQ,KAC3B,EAAA,EAAA,MAAC,KAAD,CAEE,GAAI,EAAa,CACf,KAAM,EACN,QACA,UAAW,EAAA,GACT,EAAA,yBACA,qBACA,GAAc,QAAU,EAAO,OAC7B,iDACH,CACF,CAAC,UAXJ,CAaG,EAAO,QACN,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,6CACd,EAAO,OACH,CAAA,CACL,MACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,4BAAoB,EAAO,MAAa,CAAA,CACrD,EAlBE,EAAO,MAkBT,CACL,CACD,GACJ,GAAU,GACT,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAS,MAAM,OAAS,CAAA,EACxB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,eAAO,EAAa,CAAA,CAClC,CAAA,CAAA,CACD,KACA"}
@@ -1,34 +1,38 @@
1
1
  import { cn as e } from "../../utils/utils.js";
2
- import { Divider as t } from "../divider.js";
2
+ import { dropdownMenuListClassName as t, dropdownMenuRowClassName as n, dropdownMenuRowIconWrapperClassName as r } from "../../utils/dropdown-classes.js";
3
+ import { Divider as i } from "../divider.js";
3
4
  import "react";
4
- import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
5
6
  //#region src/ui/dropdown/dropdown-menu.tsx
6
- function a({ isOpen: a, filteredOptions: o, selectedItem: s, emptyMessage: c, getMenuProps: l, getItemProps: u, footer: d, openUpward: f = !1, fitContent: p = !1 }) {
7
- return /* @__PURE__ */ i("div", {
8
- className: e("absolute z-50 overflow-hidden text-white", p ? "min-w-full w-max" : "w-full", f ? "bottom-full mb-1" : "mt-1", "bg-tertiary rounded-[6px] context-menu-box-shadow p-1", "max-h-60 overflow-auto", !a && "hidden"),
9
- children: [/* @__PURE__ */ i("ul", {
10
- ...l({ className: "p-0" }),
11
- children: [a && o.length === 0 && /* @__PURE__ */ r("li", {
7
+ function c({ isOpen: c, filteredOptions: l, selectedItem: u, emptyMessage: d, getMenuProps: f, getItemProps: p, footer: m, openUpward: h = !1, fitContent: g = !1 }) {
8
+ return /* @__PURE__ */ s("div", {
9
+ className: e("absolute z-50 overflow-hidden text-white", g ? "min-w-full w-max" : "w-full", h ? "bottom-full mb-1" : "mt-1", "bg-tertiary rounded-[6px] context-menu-box-shadow p-1", "max-h-60 overflow-auto", !c && "hidden"),
10
+ children: [/* @__PURE__ */ s("ul", {
11
+ ...f({ className: e("p-0", t) }),
12
+ children: [c && l.length === 0 && /* @__PURE__ */ o("li", {
12
13
  className: "px-2 py-2 text-sm text-[var(--oh-muted)] italic",
13
- children: c
14
- }), a && o.map((t, n) => /* @__PURE__ */ i("li", {
15
- ...u({
14
+ children: d
15
+ }), c && l.map((t, i) => /* @__PURE__ */ s("li", {
16
+ ...p({
16
17
  item: t,
17
- index: n,
18
- className: e("px-2 py-2 cursor-pointer text-sm rounded", "text-white focus:outline-none font-normal", "flex items-center gap-2", s?.value === t.value ? "bg-[var(--oh-interactive-selected)] text-white" : "hover:bg-[var(--oh-interactive-hover)]")
18
+ index: i,
19
+ className: e(n, "focus:outline-none", u?.value === t.value && "bg-[var(--oh-interactive-selected)] text-white")
19
20
  }),
20
- children: [t.prefix, /* @__PURE__ */ r("span", {
21
+ children: [t.prefix ? /* @__PURE__ */ o("span", {
22
+ className: r,
23
+ children: t.prefix
24
+ }) : null, /* @__PURE__ */ o("span", {
21
25
  className: "min-w-0 truncate",
22
26
  children: t.label
23
27
  })]
24
28
  }, t.value))]
25
- }), a && d ? /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ r(t, { inset: "menu" }), /* @__PURE__ */ r("div", {
29
+ }), c && m ? /* @__PURE__ */ s(a, { children: [/* @__PURE__ */ o(i, { inset: "menu" }), /* @__PURE__ */ o("div", {
26
30
  className: "p-0",
27
- children: d
31
+ children: m
28
32
  })] }) : null]
29
33
  });
30
34
  }
31
35
  //#endregion
32
- export { a as DropdownMenu };
36
+ export { c as DropdownMenu };
33
37
 
34
38
  //# sourceMappingURL=dropdown-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../../src/ui/dropdown/dropdown-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Divider } from \"#/ui/divider\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\n\ninterface DropdownMenuProps {\n isOpen: boolean;\n filteredOptions: DropdownOption[];\n selectedItem: DropdownOption | null;\n emptyMessage: string;\n getMenuProps: (props?: object) => object;\n getItemProps: (props: {\n item: DropdownOption;\n index: number;\n className?: string;\n }) => object;\n footer?: React.ReactNode;\n openUpward?: boolean;\n fitContent?: boolean;\n}\n\nexport function DropdownMenu({\n isOpen,\n filteredOptions,\n selectedItem,\n emptyMessage,\n getMenuProps,\n getItemProps,\n footer,\n openUpward = false,\n fitContent = false,\n}: DropdownMenuProps) {\n return (\n <div\n className={cn(\n \"absolute z-50 overflow-hidden text-white\",\n fitContent ? \"min-w-full w-max\" : \"w-full\",\n openUpward ? \"bottom-full mb-1\" : \"mt-1\",\n \"bg-tertiary rounded-[6px] context-menu-box-shadow p-1\",\n \"max-h-60 overflow-auto\",\n !isOpen && \"hidden\",\n )}\n >\n <ul {...getMenuProps({ className: \"p-0\" })}>\n {isOpen && filteredOptions.length === 0 && (\n <li className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\">\n {emptyMessage}\n </li>\n )}\n {isOpen &&\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n \"px-2 py-2 cursor-pointer text-sm rounded\",\n \"text-white focus:outline-none font-normal\",\n \"flex items-center gap-2\",\n selectedItem?.value === option.value\n ? \"bg-[var(--oh-interactive-selected)] text-white\"\n : \"hover:bg-[var(--oh-interactive-hover)]\",\n ),\n })}\n >\n {option.prefix}\n <span className=\"min-w-0 truncate\">{option.label}</span>\n </li>\n ))}\n </ul>\n {isOpen && footer ? (\n <>\n <Divider inset=\"menu\" />\n <div className=\"p-0\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;AAqBA,SAAgB,EAAa,EAC3B,WACA,oBACA,iBACA,iBACA,iBACA,iBACA,WACA,gBAAa,IACb,gBAAa,MACO;AACpB,QACE,kBAAC,OAAD;EACE,WAAW,EACT,4CACA,IAAa,qBAAqB,UAClC,IAAa,qBAAqB,QAClC,yDACA,0BACA,CAAC,KAAU,SACZ;YARH,CAUE,kBAAC,MAAD;GAAI,GAAI,EAAa,EAAE,WAAW,OAAO,CAAC;aAA1C,CACG,KAAU,EAAgB,WAAW,KACpC,kBAAC,MAAD;IAAI,WAAU;cACX;IACE,CAAA,EAEN,KACC,EAAgB,KAAK,GAAQ,MAC3B,kBAAC,MAAD;IAEE,GAAI,EAAa;KACf,MAAM;KACN;KACA,WAAW,EACT,4CACA,6CACA,2BACA,GAAc,UAAU,EAAO,QAC3B,mDACA,yCACL;KACF,CAAC;cAbJ,CAeG,EAAO,QACR,kBAAC,QAAD;KAAM,WAAU;eAAoB,EAAO;KAAa,CAAA,CACrD;MAhBE,EAAO,MAgBT,CACL,CACD;MACJ,KAAU,IACT,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAS,OAAM,QAAS,CAAA,EACxB,kBAAC,OAAD;GAAK,WAAU;aAAO;GAAa,CAAA,CAClC,EAAA,CAAA,GACD,KACA"}
1
+ {"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../../src/ui/dropdown/dropdown-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Divider } from \"#/ui/divider\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport {\n dropdownMenuListClassName,\n dropdownMenuRowClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\n\ninterface DropdownMenuProps {\n isOpen: boolean;\n filteredOptions: DropdownOption[];\n selectedItem: DropdownOption | null;\n emptyMessage: string;\n getMenuProps: (props?: object) => object;\n getItemProps: (props: {\n item: DropdownOption;\n index: number;\n className?: string;\n }) => object;\n footer?: React.ReactNode;\n openUpward?: boolean;\n fitContent?: boolean;\n}\n\nexport function DropdownMenu({\n isOpen,\n filteredOptions,\n selectedItem,\n emptyMessage,\n getMenuProps,\n getItemProps,\n footer,\n openUpward = false,\n fitContent = false,\n}: DropdownMenuProps) {\n return (\n <div\n className={cn(\n \"absolute z-50 overflow-hidden text-white\",\n fitContent ? \"min-w-full w-max\" : \"w-full\",\n openUpward ? \"bottom-full mb-1\" : \"mt-1\",\n \"bg-tertiary rounded-[6px] context-menu-box-shadow p-1\",\n \"max-h-60 overflow-auto\",\n !isOpen && \"hidden\",\n )}\n >\n <ul\n {...getMenuProps({ className: cn(\"p-0\", dropdownMenuListClassName) })}\n >\n {isOpen && filteredOptions.length === 0 && (\n <li className=\"px-2 py-2 text-sm text-[var(--oh-muted)] italic\">\n {emptyMessage}\n </li>\n )}\n {isOpen &&\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n dropdownMenuRowClassName,\n \"focus:outline-none\",\n selectedItem?.value === option.value &&\n \"bg-[var(--oh-interactive-selected)] text-white\",\n ),\n })}\n >\n {option.prefix ? (\n <span className={dropdownMenuRowIconWrapperClassName}>\n {option.prefix}\n </span>\n ) : null}\n <span className=\"min-w-0 truncate\">{option.label}</span>\n </li>\n ))}\n </ul>\n {isOpen && footer ? (\n <>\n <Divider inset=\"menu\" />\n <div className=\"p-0\">{footer}</div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;AA0BA,SAAgB,EAAa,EAC3B,WACA,oBACA,iBACA,iBACA,iBACA,iBACA,WACA,gBAAa,IACb,gBAAa,MACO;AACpB,QACE,kBAAC,OAAD;EACE,WAAW,EACT,4CACA,IAAa,qBAAqB,UAClC,IAAa,qBAAqB,QAClC,yDACA,0BACA,CAAC,KAAU,SACZ;YARH,CAUE,kBAAC,MAAD;GACE,GAAI,EAAa,EAAE,WAAW,EAAG,OAAO,EAA0B,EAAE,CAAC;aADvE,CAGG,KAAU,EAAgB,WAAW,KACpC,kBAAC,MAAD;IAAI,WAAU;cACX;IACE,CAAA,EAEN,KACC,EAAgB,KAAK,GAAQ,MAC3B,kBAAC,MAAD;IAEE,GAAI,EAAa;KACf,MAAM;KACN;KACA,WAAW,EACT,GACA,sBACA,GAAc,UAAU,EAAO,SAC7B,iDACH;KACF,CAAC;cAXJ,CAaG,EAAO,SACN,kBAAC,QAAD;KAAM,WAAW;eACd,EAAO;KACH,CAAA,GACL,MACJ,kBAAC,QAAD;KAAM,WAAU;eAAoB,EAAO;KAAa,CAAA,CACrD;MAlBE,EAAO,MAkBT,CACL,CACD;MACJ,KAAU,IACT,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAS,OAAM,QAAS,CAAA,EACxB,kBAAC,OAAD;GAAK,WAAU;aAAO;GAAa,CAAA,CAClC,EAAA,CAAA,GACD,KACA"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../utils/utils.cjs`),n=require(`../../utils/form-control-classes.cjs`),r=require(`../../node_modules/downshift/dist/downshift.esm.cjs`),i=require(`./loading-spinner.cjs`),a=require(`./clear-button.cjs`),o=require(`./toggle-button.cjs`),s=require(`./dropdown-menu.cjs`),c=require(`./dropdown-input.cjs`);let l=require(`react`);l=e.__toESM(l,1);let u=require(`react/jsx-runtime`);var d={position:`absolute`,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,border:0};function f({options:e,emptyMessage:f=`No options`,clearable:p=!1,loading:m=!1,disabled:h=!1,placeholder:g,defaultValue:_,onChange:v,testId:y,className:b,footer:x,openUpward:S=!1,hideTrigger:C=!1,defaultOpen:w=!1,openOnHover:T=!1,italicPlaceholder:E=!0,fitContent:D=!1}){let O=l.default.useRef(null),[k,A]=(0,l.useState)(_?.label??``),[j,M]=(0,l.useState)(``),N=e.filter(e=>e.label.toLowerCase().includes(j.toLowerCase())),{isOpen:P,selectedItem:F,selectItem:I,openMenu:L,closeMenu:R,getToggleButtonProps:z,getMenuProps:B,getItemProps:V,getInputProps:H}=r.useCombobox({items:N,itemToString:e=>e?.label??``,inputValue:k,stateReducer:(e,t)=>t.type===r.useCombobox.stateChangeTypes.InputClick&&e.isOpen?{...t.changes,isOpen:!0}:t.changes,initialIsOpen:w,onInputValueChange:({inputValue:e})=>{A(e??``),M(e??``)},defaultSelectedItem:_,onSelectedItemChange:({selectedItem:e})=>{v?.(e??null)},onIsOpenChange:({isOpen:e,selectedItem:t})=>{e?(A(``),M(``)):(A(t?.label??``),M(``))}}),U=m||h,W=F?e.find(e=>e.value===F.value)??F:null,G=e=>H({...e,onChange:e=>{A(e.target.value),M(e.target.value)}});return(0,u.jsxs)(`div`,{className:t.cn(`relative`,D?`inline-block w-auto`:`w-full`),"data-testid":y,onMouseEnter:T?()=>{O.current&&=(clearTimeout(O.current),null),L()}:void 0,onMouseLeave:T?()=>{O.current=setTimeout(()=>R(),150)}:void 0,children:[C?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`input`,{...G({"aria-label":g??`Filter options`,tabIndex:-1}),style:d}),(0,u.jsx)(`button`,{type:`button`,...z({tabIndex:-1}),style:d,"aria-hidden":!0})]}):(0,u.jsxs)(`div`,{className:t.cn(`bg-tertiary border border-[var(--oh-border-input)] rounded p-2`,`flex items-center gap-2`,D?`w-auto`:`w-full`,n.formControlShellClassName,`group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white`,U&&`cursor-not-allowed opacity-60`,b),children:[W?.prefix?(0,u.jsx)(`span`,{className:`flex items-center shrink-0`,children:W.prefix}):null,(0,u.jsx)(c.DropdownInput,{placeholder:g,isDisabled:U,getInputProps:G,italicPlaceholder:E,fitContent:D}),m&&(0,u.jsx)(i.LoadingSpinner,{}),p&&F&&(0,u.jsx)(a.ClearButton,{onClear:()=>I(null)}),(0,u.jsx)(o.ToggleButton,{isOpen:P,isDisabled:U,getToggleButtonProps:z})]}),(0,u.jsx)(s.DropdownMenu,{isOpen:P,filteredOptions:N,selectedItem:F,emptyMessage:f,getMenuProps:B,getItemProps:V,footer:x,openUpward:S,fitContent:D})]})}exports.Dropdown=f;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../utils/utils.cjs`),n=require(`../../utils/dropdown-classes.cjs`),r=require(`../../node_modules/downshift/dist/downshift.esm.cjs`),i=require(`./loading-spinner.cjs`),a=require(`./clear-button.cjs`),o=require(`./toggle-button.cjs`),s=require(`./dropdown-menu.cjs`),c=require(`./dropdown-input.cjs`);let l=require(`react`);l=e.__toESM(l,1);let u=require(`react/jsx-runtime`);var d={position:`absolute`,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,border:0};function f({options:e,emptyMessage:f=`No options`,clearable:p=!1,loading:m=!1,disabled:h=!1,placeholder:g,defaultValue:_,onChange:v,testId:y,className:b,footer:x,openUpward:S=!1,hideTrigger:C=!1,defaultOpen:w=!1,openOnHover:T=!1,italicPlaceholder:E=!0,fitContent:D=!1}){let O=l.default.useRef(null),[k,A]=(0,l.useState)(_?.label??``),[j,M]=(0,l.useState)(``),N=e.filter(e=>e.label.toLowerCase().includes(j.toLowerCase())),{isOpen:P,selectedItem:F,selectItem:I,openMenu:L,closeMenu:R,getToggleButtonProps:z,getMenuProps:B,getItemProps:V,getInputProps:H}=r.useCombobox({items:N,itemToString:e=>e?.label??``,inputValue:k,stateReducer:(e,t)=>t.type===r.useCombobox.stateChangeTypes.InputClick&&e.isOpen?{...t.changes,isOpen:!0}:t.changes,initialIsOpen:w,onInputValueChange:({inputValue:e})=>{A(e??``),M(e??``)},defaultSelectedItem:_,onSelectedItemChange:({selectedItem:e})=>{v?.(e??null)},onIsOpenChange:({isOpen:e,selectedItem:t})=>{e?(A(``),M(``)):(A(t?.label??``),M(``))}}),U=m||h,W=F?e.find(e=>e.value===F.value)??F:null,G=e=>H({...e,onChange:e=>{A(e.target.value),M(e.target.value)}});return(0,u.jsxs)(`div`,{className:t.cn(`relative`,D?`inline-block w-auto`:`w-full`),"data-testid":y,onMouseEnter:T?()=>{O.current&&=(clearTimeout(O.current),null),L()}:void 0,onMouseLeave:T?()=>{O.current=setTimeout(()=>R(),150)}:void 0,children:[C?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`input`,{...G({"aria-label":g??`Filter options`,tabIndex:-1}),style:d}),(0,u.jsx)(`button`,{type:`button`,...z({tabIndex:-1}),style:d,"aria-hidden":!0})]}):(0,u.jsxs)(`div`,{className:t.cn(n.dropdownTriggerShellClassName,D?`w-auto`:`w-full`,U&&`cursor-not-allowed opacity-60`,b),children:[W?.prefix?(0,u.jsx)(`span`,{className:`flex items-center shrink-0`,children:W.prefix}):null,(0,u.jsx)(c.DropdownInput,{placeholder:g,isDisabled:U,getInputProps:G,italicPlaceholder:E,fitContent:D}),m&&(0,u.jsx)(i.LoadingSpinner,{}),p&&F&&(0,u.jsx)(a.ClearButton,{onClear:()=>I(null)}),(0,u.jsx)(o.ToggleButton,{isOpen:P,isDisabled:U,getToggleButtonProps:z})]}),(0,u.jsx)(s.DropdownMenu,{isOpen:P,filteredOptions:N,selectedItem:F,emptyMessage:f,getMenuProps:B,getItemProps:V,footer:x,openUpward:S,fitContent:D})]})}exports.Dropdown=f;
2
2
  //# sourceMappingURL=dropdown.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.cjs","names":[],"sources":["../../../src/ui/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport { formControlShellClassName } from \"#/utils/form-control-classes\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { ClearButton } from \"./clear-button\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { DropdownMenu } from \"./dropdown-menu\";\nimport { DropdownInput } from \"./dropdown-input\";\n\n// Equivalent to Tailwind's `sr-only`, inlined so we don't depend on the\n// utility class being preserved by the host project's CSS pipeline.\nconst visuallyHiddenStyle: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\ninterface DropdownProps {\n options: DropdownOption[];\n emptyMessage?: string;\n clearable?: boolean;\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n defaultValue?: DropdownOption;\n onChange?: (item: DropdownOption | null) => void;\n testId?: string;\n className?: string;\n footer?: React.ReactNode;\n openUpward?: boolean;\n hideTrigger?: boolean;\n defaultOpen?: boolean;\n /** Open the dropdown menu on hover instead of requiring a click. */\n openOnHover?: boolean;\n /** When false, the combobox placeholder uses normal (non-italic) type. */\n italicPlaceholder?: boolean;\n /** Size the trigger to its label instead of stretching to the container width. */\n fitContent?: boolean;\n}\n\nexport function Dropdown({\n options,\n emptyMessage = \"No options\",\n clearable = false,\n loading = false,\n disabled = false,\n placeholder,\n defaultValue,\n onChange,\n testId,\n className,\n footer,\n openUpward = false,\n hideTrigger = false,\n defaultOpen = false,\n openOnHover = false,\n italicPlaceholder = true,\n fitContent = false,\n}: DropdownProps) {\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const [inputValue, setInputValue] = useState(defaultValue?.label ?? \"\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const filteredOptions = options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\n );\n\n const {\n isOpen,\n selectedItem,\n selectItem,\n openMenu,\n closeMenu,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n getInputProps,\n } = useCombobox({\n items: filteredOptions,\n itemToString: (item) => item?.label ?? \"\",\n inputValue,\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n initialIsOpen: defaultOpen,\n onInputValueChange: ({ inputValue: newValue }) => {\n setInputValue(newValue ?? \"\");\n setSearchTerm(newValue ?? \"\");\n },\n defaultSelectedItem: defaultValue,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n onChange?.(newSelectedItem ?? null);\n },\n onIsOpenChange: ({\n isOpen: newIsOpen,\n selectedItem: currentSelectedItem,\n }) => {\n if (newIsOpen) {\n // Clear the input on open so the user sees an empty search box\n // (with the placeholder reminding them of the current value)\n // and the full options list. Otherwise the active label would\n // appear both in the trigger AND as the highlighted menu row.\n setInputValue(\"\");\n setSearchTerm(\"\");\n } else {\n setInputValue(currentSelectedItem?.label ?? \"\");\n setSearchTerm(\"\");\n }\n },\n });\n\n const isDisabled = loading || disabled;\n\n // `selectedItem` is downshift's internal state, frozen to whatever\n // initialized it. Resolve the currently selected option against the\n // live `options` array so per-option fields like `prefix` (e.g. a\n // status indicator that re-renders on a timer) update on the trigger\n // without remounting the dropdown.\n const liveSelectedOption = selectedItem\n ? (options.find((o) => o.value === selectedItem.value) ?? selectedItem)\n : null;\n\n // Wrap getInputProps to inject a direct onChange handler that preserves\n // cursor position. Downshift's default onInputValueChange resets cursor\n // to end of input on every keystroke; reading from e.target.value keeps\n // the browser's native cursor position intact.\n const getInputPropsWithCursorFix = (props?: object) =>\n getInputProps({\n ...props,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n setSearchTerm(e.target.value);\n },\n });\n\n return (\n <div\n className={cn(\"relative\", fitContent ? \"inline-block w-auto\" : \"w-full\")}\n data-testid={testId}\n onMouseEnter={\n openOnHover\n ? () => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n openMenu();\n }\n : undefined\n }\n onMouseLeave={\n openOnHover\n ? () => {\n closeTimerRef.current = setTimeout(() => closeMenu(), 150);\n }\n : undefined\n }\n >\n {!hideTrigger ? (\n <div\n className={cn(\n \"bg-tertiary border border-[var(--oh-border-input)] rounded p-2\",\n \"flex items-center gap-2\",\n fitContent ? \"w-auto\" : \"w-full\",\n formControlShellClassName,\n \"group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white\",\n isDisabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {liveSelectedOption?.prefix ? (\n <span className=\"flex items-center shrink-0\">\n {liveSelectedOption.prefix}\n </span>\n ) : null}\n <DropdownInput\n placeholder={placeholder}\n isDisabled={isDisabled}\n getInputProps={getInputPropsWithCursorFix}\n italicPlaceholder={italicPlaceholder}\n fitContent={fitContent}\n />\n {loading && <LoadingSpinner />}\n {clearable && selectedItem && (\n <ClearButton onClear={() => selectItem(null)} />\n )}\n <ToggleButton\n isOpen={isOpen}\n isDisabled={isDisabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n ) : (\n // downshift's useCombobox always expects getInputProps() (and the\n // toggle button) to be wired up. When the trigger is hidden (e.g.\n // collapsed-sidebar popover) we still need to mount a real input\n // so it stops warning every render. Keep it visually hidden but\n // present in the DOM for accessibility.\n <>\n <input\n {...getInputPropsWithCursorFix({\n \"aria-label\": placeholder ?? \"Filter options\",\n tabIndex: -1,\n })}\n style={visuallyHiddenStyle}\n />\n <button\n type=\"button\"\n {...getToggleButtonProps({ tabIndex: -1 })}\n style={visuallyHiddenStyle}\n aria-hidden\n />\n </>\n )}\n <DropdownMenu\n isOpen={isOpen}\n filteredOptions={filteredOptions}\n selectedItem={selectedItem}\n emptyMessage={emptyMessage}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n footer={footer}\n openUpward={openUpward}\n fitContent={fitContent}\n />\n </div>\n );\n}\n"],"mappings":"gcAaA,IAAM,EAA2C,CAC/C,SAAU,WACV,MAAO,EACP,OAAQ,EACR,QAAS,EACT,OAAQ,GACR,SAAU,SACV,KAAM,mBACN,WAAY,SACZ,OAAQ,EACT,CAyBD,SAAgB,EAAS,CACvB,UACA,eAAe,aACf,YAAY,GACZ,UAAU,GACV,WAAW,GACX,cACA,eACA,WACA,SACA,YACA,SACA,aAAa,GACb,cAAc,GACd,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,aAAa,IACG,CAChB,IAAM,EAAgB,EAAA,QAAM,OAC1B,KACD,CACK,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,GAAc,OAAS,GAAG,CACjE,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,GAAG,CAE1C,EAAkB,EAAQ,OAAQ,GACtC,EAAO,MAAM,aAAa,CAAC,SAAS,EAAW,aAAa,CAAC,CAC9D,CAEK,CACJ,SACA,eACA,aACA,WACA,YACA,uBACA,eACA,eACA,iBACE,EAAA,YAAY,CACd,MAAO,EACP,aAAe,GAAS,GAAM,OAAS,GACvC,aACA,cAAe,EAAO,IACpB,EAAiB,OAAS,EAAA,YAAY,iBAAiB,YACvD,EAAM,OACF,CAAE,GAAG,EAAiB,QAAS,OAAQ,GAAM,CAC7C,EAAiB,QACvB,cAAe,EACf,oBAAqB,CAAE,WAAY,KAAe,CAChD,EAAc,GAAY,GAAG,CAC7B,EAAc,GAAY,GAAG,EAE/B,oBAAqB,EACrB,sBAAuB,CAAE,aAAc,KAAsB,CAC3D,IAAW,GAAmB,KAAK,EAErC,gBAAiB,CACf,OAAQ,EACR,aAAc,KACV,CACA,GAKF,EAAc,GAAG,CACjB,EAAc,GAAG,GAEjB,EAAc,GAAqB,OAAS,GAAG,CAC/C,EAAc,GAAG,GAGtB,CAAC,CAEI,EAAa,GAAW,EAOxB,EAAqB,EACtB,EAAQ,KAAM,GAAM,EAAE,QAAU,EAAa,MAAM,EAAI,EACxD,KAME,EAA8B,GAClC,EAAc,CACZ,GAAG,EACH,SAAW,GAA2C,CACpD,EAAc,EAAE,OAAO,MAAM,CAC7B,EAAc,EAAE,OAAO,MAAM,EAEhC,CAAC,CAEJ,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GAAG,WAAY,EAAa,sBAAwB,SAAS,CACxE,cAAa,EACb,aACE,MACU,CACJ,AAEE,EAAc,WADd,aAAa,EAAc,QAAQ,CACX,MAE1B,GAAU,EAEZ,IAAA,GAEN,aACE,MACU,CACJ,EAAc,QAAU,eAAiB,GAAW,CAAE,IAAI,EAE5D,IAAA,YAnBR,CAsBI,GAwCA,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,QAAD,CACE,GAAI,EAA2B,CAC7B,aAAc,GAAe,iBAC7B,SAAU,GACX,CAAC,CACF,MAAO,EACP,CAAA,EACF,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,GAAI,EAAqB,CAAE,SAAU,GAAI,CAAC,CAC1C,MAAO,EACP,cAAA,GACA,CAAA,CACD,CAAA,CAAA,EArDH,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,iEACA,0BACA,EAAa,SAAW,SACxB,EAAA,0BACA,kEACA,GAAc,gCACd,EACD,UATH,CAWG,GAAoB,QACnB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sCACb,EAAmB,OACf,CAAA,CACL,MACJ,EAAA,EAAA,KAAC,EAAA,cAAD,CACe,cACD,aACZ,cAAe,EACI,oBACP,aACZ,CAAA,CACD,IAAW,EAAA,EAAA,KAAC,EAAA,eAAD,EAAkB,CAAA,CAC7B,GAAa,IACZ,EAAA,EAAA,KAAC,EAAA,YAAD,CAAa,YAAe,EAAW,KAAK,CAAI,CAAA,EAElD,EAAA,EAAA,KAAC,EAAA,aAAD,CACU,SACI,aACU,uBACtB,CAAA,CACE,IAuBR,EAAA,EAAA,KAAC,EAAA,aAAD,CACU,SACS,kBACH,eACA,eACA,eACA,eACN,SACI,aACA,aACZ,CAAA,CACE"}
1
+ {"version":3,"file":"dropdown.cjs","names":[],"sources":["../../../src/ui/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport { dropdownTriggerShellClassName } from \"#/utils/dropdown-classes\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { ClearButton } from \"./clear-button\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { DropdownMenu } from \"./dropdown-menu\";\nimport { DropdownInput } from \"./dropdown-input\";\n\n// Equivalent to Tailwind's `sr-only`, inlined so we don't depend on the\n// utility class being preserved by the host project's CSS pipeline.\nconst visuallyHiddenStyle: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\ninterface DropdownProps {\n options: DropdownOption[];\n emptyMessage?: string;\n clearable?: boolean;\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n defaultValue?: DropdownOption;\n onChange?: (item: DropdownOption | null) => void;\n testId?: string;\n className?: string;\n footer?: React.ReactNode;\n openUpward?: boolean;\n hideTrigger?: boolean;\n defaultOpen?: boolean;\n /** Open the dropdown menu on hover instead of requiring a click. */\n openOnHover?: boolean;\n /** When false, the combobox placeholder uses normal (non-italic) type. */\n italicPlaceholder?: boolean;\n /** Size the trigger to its label instead of stretching to the container width. */\n fitContent?: boolean;\n}\n\nexport function Dropdown({\n options,\n emptyMessage = \"No options\",\n clearable = false,\n loading = false,\n disabled = false,\n placeholder,\n defaultValue,\n onChange,\n testId,\n className,\n footer,\n openUpward = false,\n hideTrigger = false,\n defaultOpen = false,\n openOnHover = false,\n italicPlaceholder = true,\n fitContent = false,\n}: DropdownProps) {\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const [inputValue, setInputValue] = useState(defaultValue?.label ?? \"\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const filteredOptions = options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\n );\n\n const {\n isOpen,\n selectedItem,\n selectItem,\n openMenu,\n closeMenu,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n getInputProps,\n } = useCombobox({\n items: filteredOptions,\n itemToString: (item) => item?.label ?? \"\",\n inputValue,\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n initialIsOpen: defaultOpen,\n onInputValueChange: ({ inputValue: newValue }) => {\n setInputValue(newValue ?? \"\");\n setSearchTerm(newValue ?? \"\");\n },\n defaultSelectedItem: defaultValue,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n onChange?.(newSelectedItem ?? null);\n },\n onIsOpenChange: ({\n isOpen: newIsOpen,\n selectedItem: currentSelectedItem,\n }) => {\n if (newIsOpen) {\n // Clear the input on open so the user sees an empty search box\n // (with the placeholder reminding them of the current value)\n // and the full options list. Otherwise the active label would\n // appear both in the trigger AND as the highlighted menu row.\n setInputValue(\"\");\n setSearchTerm(\"\");\n } else {\n setInputValue(currentSelectedItem?.label ?? \"\");\n setSearchTerm(\"\");\n }\n },\n });\n\n const isDisabled = loading || disabled;\n\n // `selectedItem` is downshift's internal state, frozen to whatever\n // initialized it. Resolve the currently selected option against the\n // live `options` array so per-option fields like `prefix` (e.g. a\n // status indicator that re-renders on a timer) update on the trigger\n // without remounting the dropdown.\n const liveSelectedOption = selectedItem\n ? (options.find((o) => o.value === selectedItem.value) ?? selectedItem)\n : null;\n\n // Wrap getInputProps to inject a direct onChange handler that preserves\n // cursor position. Downshift's default onInputValueChange resets cursor\n // to end of input on every keystroke; reading from e.target.value keeps\n // the browser's native cursor position intact.\n const getInputPropsWithCursorFix = (props?: object) =>\n getInputProps({\n ...props,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n setSearchTerm(e.target.value);\n },\n });\n\n return (\n <div\n className={cn(\"relative\", fitContent ? \"inline-block w-auto\" : \"w-full\")}\n data-testid={testId}\n onMouseEnter={\n openOnHover\n ? () => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n openMenu();\n }\n : undefined\n }\n onMouseLeave={\n openOnHover\n ? () => {\n closeTimerRef.current = setTimeout(() => closeMenu(), 150);\n }\n : undefined\n }\n >\n {!hideTrigger ? (\n <div\n className={cn(\n dropdownTriggerShellClassName,\n fitContent ? \"w-auto\" : \"w-full\",\n isDisabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {liveSelectedOption?.prefix ? (\n <span className=\"flex items-center shrink-0\">\n {liveSelectedOption.prefix}\n </span>\n ) : null}\n <DropdownInput\n placeholder={placeholder}\n isDisabled={isDisabled}\n getInputProps={getInputPropsWithCursorFix}\n italicPlaceholder={italicPlaceholder}\n fitContent={fitContent}\n />\n {loading && <LoadingSpinner />}\n {clearable && selectedItem && (\n <ClearButton onClear={() => selectItem(null)} />\n )}\n <ToggleButton\n isOpen={isOpen}\n isDisabled={isDisabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n ) : (\n // downshift's useCombobox always expects getInputProps() (and the\n // toggle button) to be wired up. When the trigger is hidden (e.g.\n // collapsed-sidebar popover) we still need to mount a real input\n // so it stops warning every render. Keep it visually hidden but\n // present in the DOM for accessibility.\n <>\n <input\n {...getInputPropsWithCursorFix({\n \"aria-label\": placeholder ?? \"Filter options\",\n tabIndex: -1,\n })}\n style={visuallyHiddenStyle}\n />\n <button\n type=\"button\"\n {...getToggleButtonProps({ tabIndex: -1 })}\n style={visuallyHiddenStyle}\n aria-hidden\n />\n </>\n )}\n <DropdownMenu\n isOpen={isOpen}\n filteredOptions={filteredOptions}\n selectedItem={selectedItem}\n emptyMessage={emptyMessage}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n footer={footer}\n openUpward={openUpward}\n fitContent={fitContent}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { cn as e } from "../../utils/utils.js";
2
- import { formControlShellClassName as t } from "../../utils/form-control-classes.js";
2
+ import { dropdownTriggerShellClassName as t } from "../../utils/dropdown-classes.js";
3
3
  import { useCombobox as n } from "../../node_modules/downshift/dist/downshift.esm.js";
4
4
  import { LoadingSpinner as r } from "./loading-spinner.js";
5
5
  import { ClearButton as i } from "./clear-button.js";
@@ -67,7 +67,7 @@ function m({ options: m, emptyMessage: h = "No options", clearable: g = !1, load
67
67
  style: p,
68
68
  "aria-hidden": !0
69
69
  })] }) : /* @__PURE__ */ f("div", {
70
- className: e("bg-tertiary border border-[var(--oh-border-input)] rounded p-2", "flex items-center gap-2", A ? "w-auto" : "w-full", t, "group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white", K && "cursor-not-allowed opacity-60", C),
70
+ className: e(t, A ? "w-auto" : "w-full", K && "cursor-not-allowed opacity-60", C),
71
71
  children: [
72
72
  q?.prefix ? /* @__PURE__ */ d("span", {
73
73
  className: "flex items-center shrink-0",
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","names":[],"sources":["../../../src/ui/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport { formControlShellClassName } from \"#/utils/form-control-classes\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { ClearButton } from \"./clear-button\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { DropdownMenu } from \"./dropdown-menu\";\nimport { DropdownInput } from \"./dropdown-input\";\n\n// Equivalent to Tailwind's `sr-only`, inlined so we don't depend on the\n// utility class being preserved by the host project's CSS pipeline.\nconst visuallyHiddenStyle: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\ninterface DropdownProps {\n options: DropdownOption[];\n emptyMessage?: string;\n clearable?: boolean;\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n defaultValue?: DropdownOption;\n onChange?: (item: DropdownOption | null) => void;\n testId?: string;\n className?: string;\n footer?: React.ReactNode;\n openUpward?: boolean;\n hideTrigger?: boolean;\n defaultOpen?: boolean;\n /** Open the dropdown menu on hover instead of requiring a click. */\n openOnHover?: boolean;\n /** When false, the combobox placeholder uses normal (non-italic) type. */\n italicPlaceholder?: boolean;\n /** Size the trigger to its label instead of stretching to the container width. */\n fitContent?: boolean;\n}\n\nexport function Dropdown({\n options,\n emptyMessage = \"No options\",\n clearable = false,\n loading = false,\n disabled = false,\n placeholder,\n defaultValue,\n onChange,\n testId,\n className,\n footer,\n openUpward = false,\n hideTrigger = false,\n defaultOpen = false,\n openOnHover = false,\n italicPlaceholder = true,\n fitContent = false,\n}: DropdownProps) {\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const [inputValue, setInputValue] = useState(defaultValue?.label ?? \"\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const filteredOptions = options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\n );\n\n const {\n isOpen,\n selectedItem,\n selectItem,\n openMenu,\n closeMenu,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n getInputProps,\n } = useCombobox({\n items: filteredOptions,\n itemToString: (item) => item?.label ?? \"\",\n inputValue,\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n initialIsOpen: defaultOpen,\n onInputValueChange: ({ inputValue: newValue }) => {\n setInputValue(newValue ?? \"\");\n setSearchTerm(newValue ?? \"\");\n },\n defaultSelectedItem: defaultValue,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n onChange?.(newSelectedItem ?? null);\n },\n onIsOpenChange: ({\n isOpen: newIsOpen,\n selectedItem: currentSelectedItem,\n }) => {\n if (newIsOpen) {\n // Clear the input on open so the user sees an empty search box\n // (with the placeholder reminding them of the current value)\n // and the full options list. Otherwise the active label would\n // appear both in the trigger AND as the highlighted menu row.\n setInputValue(\"\");\n setSearchTerm(\"\");\n } else {\n setInputValue(currentSelectedItem?.label ?? \"\");\n setSearchTerm(\"\");\n }\n },\n });\n\n const isDisabled = loading || disabled;\n\n // `selectedItem` is downshift's internal state, frozen to whatever\n // initialized it. Resolve the currently selected option against the\n // live `options` array so per-option fields like `prefix` (e.g. a\n // status indicator that re-renders on a timer) update on the trigger\n // without remounting the dropdown.\n const liveSelectedOption = selectedItem\n ? (options.find((o) => o.value === selectedItem.value) ?? selectedItem)\n : null;\n\n // Wrap getInputProps to inject a direct onChange handler that preserves\n // cursor position. Downshift's default onInputValueChange resets cursor\n // to end of input on every keystroke; reading from e.target.value keeps\n // the browser's native cursor position intact.\n const getInputPropsWithCursorFix = (props?: object) =>\n getInputProps({\n ...props,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n setSearchTerm(e.target.value);\n },\n });\n\n return (\n <div\n className={cn(\"relative\", fitContent ? \"inline-block w-auto\" : \"w-full\")}\n data-testid={testId}\n onMouseEnter={\n openOnHover\n ? () => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n openMenu();\n }\n : undefined\n }\n onMouseLeave={\n openOnHover\n ? () => {\n closeTimerRef.current = setTimeout(() => closeMenu(), 150);\n }\n : undefined\n }\n >\n {!hideTrigger ? (\n <div\n className={cn(\n \"bg-tertiary border border-[var(--oh-border-input)] rounded p-2\",\n \"flex items-center gap-2\",\n fitContent ? \"w-auto\" : \"w-full\",\n formControlShellClassName,\n \"group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white\",\n isDisabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {liveSelectedOption?.prefix ? (\n <span className=\"flex items-center shrink-0\">\n {liveSelectedOption.prefix}\n </span>\n ) : null}\n <DropdownInput\n placeholder={placeholder}\n isDisabled={isDisabled}\n getInputProps={getInputPropsWithCursorFix}\n italicPlaceholder={italicPlaceholder}\n fitContent={fitContent}\n />\n {loading && <LoadingSpinner />}\n {clearable && selectedItem && (\n <ClearButton onClear={() => selectItem(null)} />\n )}\n <ToggleButton\n isOpen={isOpen}\n isDisabled={isDisabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n ) : (\n // downshift's useCombobox always expects getInputProps() (and the\n // toggle button) to be wired up. When the trigger is hidden (e.g.\n // collapsed-sidebar popover) we still need to mount a real input\n // so it stops warning every render. Keep it visually hidden but\n // present in the DOM for accessibility.\n <>\n <input\n {...getInputPropsWithCursorFix({\n \"aria-label\": placeholder ?? \"Filter options\",\n tabIndex: -1,\n })}\n style={visuallyHiddenStyle}\n />\n <button\n type=\"button\"\n {...getToggleButtonProps({ tabIndex: -1 })}\n style={visuallyHiddenStyle}\n aria-hidden\n />\n </>\n )}\n <DropdownMenu\n isOpen={isOpen}\n filteredOptions={filteredOptions}\n selectedItem={selectedItem}\n emptyMessage={emptyMessage}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n footer={footer}\n openUpward={openUpward}\n fitContent={fitContent}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown.js","names":[],"sources":["../../../src/ui/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { cn } from \"#/utils/utils\";\nimport { DropdownOption } from \"./types\";\nimport { dropdownTriggerShellClassName } from \"#/utils/dropdown-classes\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { ClearButton } from \"./clear-button\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { DropdownMenu } from \"./dropdown-menu\";\nimport { DropdownInput } from \"./dropdown-input\";\n\n// Equivalent to Tailwind's `sr-only`, inlined so we don't depend on the\n// utility class being preserved by the host project's CSS pipeline.\nconst visuallyHiddenStyle: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\ninterface DropdownProps {\n options: DropdownOption[];\n emptyMessage?: string;\n clearable?: boolean;\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n defaultValue?: DropdownOption;\n onChange?: (item: DropdownOption | null) => void;\n testId?: string;\n className?: string;\n footer?: React.ReactNode;\n openUpward?: boolean;\n hideTrigger?: boolean;\n defaultOpen?: boolean;\n /** Open the dropdown menu on hover instead of requiring a click. */\n openOnHover?: boolean;\n /** When false, the combobox placeholder uses normal (non-italic) type. */\n italicPlaceholder?: boolean;\n /** Size the trigger to its label instead of stretching to the container width. */\n fitContent?: boolean;\n}\n\nexport function Dropdown({\n options,\n emptyMessage = \"No options\",\n clearable = false,\n loading = false,\n disabled = false,\n placeholder,\n defaultValue,\n onChange,\n testId,\n className,\n footer,\n openUpward = false,\n hideTrigger = false,\n defaultOpen = false,\n openOnHover = false,\n italicPlaceholder = true,\n fitContent = false,\n}: DropdownProps) {\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const [inputValue, setInputValue] = useState(defaultValue?.label ?? \"\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const filteredOptions = options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase()),\n );\n\n const {\n isOpen,\n selectedItem,\n selectItem,\n openMenu,\n closeMenu,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n getInputProps,\n } = useCombobox({\n items: filteredOptions,\n itemToString: (item) => item?.label ?? \"\",\n inputValue,\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n initialIsOpen: defaultOpen,\n onInputValueChange: ({ inputValue: newValue }) => {\n setInputValue(newValue ?? \"\");\n setSearchTerm(newValue ?? \"\");\n },\n defaultSelectedItem: defaultValue,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n onChange?.(newSelectedItem ?? null);\n },\n onIsOpenChange: ({\n isOpen: newIsOpen,\n selectedItem: currentSelectedItem,\n }) => {\n if (newIsOpen) {\n // Clear the input on open so the user sees an empty search box\n // (with the placeholder reminding them of the current value)\n // and the full options list. Otherwise the active label would\n // appear both in the trigger AND as the highlighted menu row.\n setInputValue(\"\");\n setSearchTerm(\"\");\n } else {\n setInputValue(currentSelectedItem?.label ?? \"\");\n setSearchTerm(\"\");\n }\n },\n });\n\n const isDisabled = loading || disabled;\n\n // `selectedItem` is downshift's internal state, frozen to whatever\n // initialized it. Resolve the currently selected option against the\n // live `options` array so per-option fields like `prefix` (e.g. a\n // status indicator that re-renders on a timer) update on the trigger\n // without remounting the dropdown.\n const liveSelectedOption = selectedItem\n ? (options.find((o) => o.value === selectedItem.value) ?? selectedItem)\n : null;\n\n // Wrap getInputProps to inject a direct onChange handler that preserves\n // cursor position. Downshift's default onInputValueChange resets cursor\n // to end of input on every keystroke; reading from e.target.value keeps\n // the browser's native cursor position intact.\n const getInputPropsWithCursorFix = (props?: object) =>\n getInputProps({\n ...props,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n setSearchTerm(e.target.value);\n },\n });\n\n return (\n <div\n className={cn(\"relative\", fitContent ? \"inline-block w-auto\" : \"w-full\")}\n data-testid={testId}\n onMouseEnter={\n openOnHover\n ? () => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n openMenu();\n }\n : undefined\n }\n onMouseLeave={\n openOnHover\n ? () => {\n closeTimerRef.current = setTimeout(() => closeMenu(), 150);\n }\n : undefined\n }\n >\n {!hideTrigger ? (\n <div\n className={cn(\n dropdownTriggerShellClassName,\n fitContent ? \"w-auto\" : \"w-full\",\n isDisabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {liveSelectedOption?.prefix ? (\n <span className=\"flex items-center shrink-0\">\n {liveSelectedOption.prefix}\n </span>\n ) : null}\n <DropdownInput\n placeholder={placeholder}\n isDisabled={isDisabled}\n getInputProps={getInputPropsWithCursorFix}\n italicPlaceholder={italicPlaceholder}\n fitContent={fitContent}\n />\n {loading && <LoadingSpinner />}\n {clearable && selectedItem && (\n <ClearButton onClear={() => selectItem(null)} />\n )}\n <ToggleButton\n isOpen={isOpen}\n isDisabled={isDisabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n ) : (\n // downshift's useCombobox always expects getInputProps() (and the\n // toggle button) to be wired up. When the trigger is hidden (e.g.\n // collapsed-sidebar popover) we still need to mount a real input\n // so it stops warning every render. Keep it visually hidden but\n // present in the DOM for accessibility.\n <>\n <input\n {...getInputPropsWithCursorFix({\n \"aria-label\": placeholder ?? \"Filter options\",\n tabIndex: -1,\n })}\n style={visuallyHiddenStyle}\n />\n <button\n type=\"button\"\n {...getToggleButtonProps({ tabIndex: -1 })}\n style={visuallyHiddenStyle}\n aria-hidden\n />\n </>\n )}\n <DropdownMenu\n isOpen={isOpen}\n filteredOptions={filteredOptions}\n selectedItem={selectedItem}\n emptyMessage={emptyMessage}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n footer={footer}\n openUpward={openUpward}\n fitContent={fitContent}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAaA,IAAM,IAA2C;CAC/C,UAAU;CACV,OAAO;CACP,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,UAAU;CACV,MAAM;CACN,YAAY;CACZ,QAAQ;CACT;AAyBD,SAAgB,EAAS,EACvB,YACA,kBAAe,cACf,eAAY,IACZ,aAAU,IACV,cAAW,IACX,gBACA,iBACA,aACA,WACA,cACA,WACA,gBAAa,IACb,iBAAc,IACd,iBAAc,IACd,iBAAc,IACd,uBAAoB,IACpB,gBAAa,MACG;CAChB,IAAM,IAAgB,EAAM,OAC1B,KACD,EACK,CAAC,GAAY,KAAiB,EAAS,GAAc,SAAS,GAAG,EACjE,CAAC,GAAY,KAAiB,EAAS,GAAG,EAE1C,IAAkB,EAAQ,QAAQ,MACtC,EAAO,MAAM,aAAa,CAAC,SAAS,EAAW,aAAa,CAAC,CAC9D,EAEK,EACJ,WACA,iBACA,eACA,aACA,cACA,yBACA,iBACA,iBACA,qBACE,EAAY;EACd,OAAO;EACP,eAAe,MAAS,GAAM,SAAS;EACvC;EACA,eAAe,GAAO,MACpB,EAAiB,SAAS,EAAY,iBAAiB,cACvD,EAAM,SACF;GAAE,GAAG,EAAiB;GAAS,QAAQ;GAAM,GAC7C,EAAiB;EACvB,eAAe;EACf,qBAAqB,EAAE,YAAY,QAAe;AAEhD,GADA,EAAc,KAAY,GAAG,EAC7B,EAAc,KAAY,GAAG;;EAE/B,qBAAqB;EACrB,uBAAuB,EAAE,cAAc,QAAsB;AAC3D,OAAW,KAAmB,KAAK;;EAErC,iBAAiB,EACf,QAAQ,GACR,cAAc,QACV;AACJ,GAAI,KAKF,EAAc,GAAG,EACjB,EAAc,GAAG,KAEjB,EAAc,GAAqB,SAAS,GAAG,EAC/C,EAAc,GAAG;;EAGtB,CAAC,EAEI,IAAa,KAAW,GAOxB,IAAqB,IACtB,EAAQ,MAAM,MAAM,EAAE,UAAU,EAAa,MAAM,IAAI,IACxD,MAME,KAA8B,MAClC,EAAc;EACZ,GAAG;EACH,WAAW,MAA2C;AAEpD,GADA,EAAc,EAAE,OAAO,MAAM,EAC7B,EAAc,EAAE,OAAO,MAAM;;EAEhC,CAAC;AAEJ,QACE,kBAAC,OAAD;EACE,WAAW,EAAG,YAAY,IAAa,wBAAwB,SAAS;EACxE,eAAa;EACb,cACE,UACU;AAKJ,GAJA,AAEE,EAAc,aADd,aAAa,EAAc,QAAQ,EACX,OAE1B,GAAU;MAEZ,KAAA;EAEN,cACE,UACU;AACJ,KAAc,UAAU,iBAAiB,GAAW,EAAE,IAAI;MAE5D,KAAA;YAnBR,CAsBI,IAqCA,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,SAAD;GACE,GAAI,EAA2B;IAC7B,cAAc,KAAe;IAC7B,UAAU;IACX,CAAC;GACF,OAAO;GACP,CAAA,EACF,kBAAC,UAAD;GACE,MAAK;GACL,GAAI,EAAqB,EAAE,UAAU,IAAI,CAAC;GAC1C,OAAO;GACP,eAAA;GACA,CAAA,CACD,EAAA,CAAA,GAlDH,kBAAC,OAAD;GACE,WAAW,EACT,GACA,IAAa,WAAW,UACxB,KAAc,iCACd,EACD;aANH;IAQG,GAAoB,SACnB,kBAAC,QAAD;KAAM,WAAU;eACb,EAAmB;KACf,CAAA,GACL;IACJ,kBAAC,GAAD;KACe;KACD;KACZ,eAAe;KACI;KACP;KACZ,CAAA;IACD,KAAW,kBAAC,GAAD,EAAkB,CAAA;IAC7B,KAAa,KACZ,kBAAC,GAAD,EAAa,eAAe,EAAW,KAAK,EAAI,CAAA;IAElD,kBAAC,GAAD;KACU;KACI;KACU;KACtB,CAAA;IACE;MAuBR,kBAAC,GAAD;GACU;GACS;GACH;GACA;GACA;GACA;GACN;GACI;GACA;GACZ,CAAA,CACE"}
@@ -19,3 +19,4 @@ export declare function parseTimeOfDay(value: string): {
19
19
  hour: number;
20
20
  minute: number;
21
21
  } | null;
22
+ export declare function formatEventOn(on: string | string[] | undefined): string;
@@ -0,0 +1,2 @@
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils.cjs`),t=require(`./form-control-classes.cjs`);var n=`transition-none`,r=`gap-0.5`,i=`gap-2`,a=e.cn(`flex flex-col`,r),o=e.cn(`bg-tertiary border border-[var(--oh-border-input)] rounded p-2`,`flex items-center gap-2`,t.formControlShellClassName,n,`group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white`),s=e.cn(`group flex w-full cursor-pointer items-center rounded px-2 py-2 text-left text-sm font-normal text-white`,i,`hover:bg-[var(--oh-interactive-hover)] disabled:cursor-not-allowed disabled:opacity-60`,n),c=e.cn(`group flex w-full cursor-pointer items-center rounded px-2 py-2 text-start text-sm font-normal`,i,`text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]`,`disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent`,n),l=e.cn(`shrink-0 text-[var(--oh-muted)] group-hover:text-white group-focus-visible:text-white`,n),u=e.cn(`flex size-4 shrink-0 items-center justify-center [&_svg]:text-current`,l),d=e.cn(`inline-flex cursor-pointer items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium`,`border-[var(--oh-border)] bg-base-secondary text-white`,`focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20`,n),f=e.cn(a,`overflow-y-auto custom-scrollbar-always`,`max-h-[13.875rem]`),p=e.cn(`overflow-y-auto custom-scrollbar`,`max-h-[min(60vh,calc(100dvh-5rem))]`),m=e.cn(`group flex w-full items-center rounded-md px-2 py-2 text-sm font-normal text-white`,i,`hover:bg-[var(--oh-interactive-hover)]`,n);exports.dropdownFilterTriggerClassName=d,exports.dropdownFooterActionClassName=m,exports.dropdownInstantColorClassName=n,exports.dropdownMenuListClassName=a,exports.dropdownMenuListGapClassName=r,exports.dropdownMenuRowClassName=s,exports.dropdownMenuRowForegroundClassName=c,exports.dropdownMenuRowGapClassName=i,exports.dropdownMenuRowIconClassName=l,exports.dropdownMenuRowIconWrapperClassName=u,exports.dropdownMenuViewportScrollClassName=p,exports.dropdownTriggerShellClassName=o,exports.switchProfileMenuListScrollClassName=f;
2
+ //# sourceMappingURL=dropdown-classes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-classes.cjs","names":[],"sources":["../../src/utils/dropdown-classes.ts"],"sourcesContent":["import { cn } from \"#/utils/utils\";\nimport { formControlShellClassName } from \"#/utils/form-control-classes\";\n\n/** Snap hover colors instantly — no transition-colors delay on menus/dropdowns. */\nexport const dropdownInstantColorClassName = \"transition-none\";\n\n/** 2px vertical gap between rows in a dropdown/context menu list. */\nexport const dropdownMenuListGapClassName = \"gap-0.5\";\n\n/** Standard horizontal gap between a row icon and its label. */\nexport const dropdownMenuRowGapClassName = \"gap-2\";\n\n/** Flex column shell for a dropdown menu item list. */\nexport const dropdownMenuListClassName = cn(\n \"flex flex-col\",\n dropdownMenuListGapClassName,\n);\n\n/** Combobox/select trigger shell with instant hover colors. */\nexport const dropdownTriggerShellClassName = cn(\n \"bg-tertiary border border-[var(--oh-border-input)] rounded p-2\",\n \"flex items-center gap-2\",\n formControlShellClassName,\n dropdownInstantColorClassName,\n \"group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white\",\n);\n\n/** Standard white-label menu row. */\nexport const dropdownMenuRowClassName = cn(\n \"group flex w-full cursor-pointer items-center rounded px-2 py-2 text-left text-sm font-normal text-white\",\n dropdownMenuRowGapClassName,\n \"hover:bg-[var(--oh-interactive-hover)] disabled:cursor-not-allowed disabled:opacity-60\",\n dropdownInstantColorClassName,\n);\n\n/** Menu row using foreground token (context menus). */\nexport const dropdownMenuRowForegroundClassName = cn(\n \"group flex w-full cursor-pointer items-center rounded px-2 py-2 text-start text-sm font-normal\",\n dropdownMenuRowGapClassName,\n \"text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\",\n dropdownInstantColorClassName,\n);\n\n/** Icon inside a menu row — muted until row hover/focus. */\nexport const dropdownMenuRowIconClassName = cn(\n \"shrink-0 text-[var(--oh-muted)] group-hover:text-white group-focus-visible:text-white\",\n dropdownInstantColorClassName,\n);\n\n/** Wrapper for SVG/React icon nodes inside a menu row. */\nexport const dropdownMenuRowIconWrapperClassName = cn(\n \"flex size-4 shrink-0 items-center justify-center [&_svg]:text-current\",\n dropdownMenuRowIconClassName,\n);\n\n/** Enum/filter dropdown trigger chip. */\nexport const dropdownFilterTriggerClassName = cn(\n \"inline-flex cursor-pointer items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium\",\n \"border-[var(--oh-border)] bg-base-secondary text-white\",\n \"focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20\",\n dropdownInstantColorClassName,\n);\n\n/**\n * Scroll cap for the switch-profile menu: four two-line rows\n * (p-2 + leading-5 title + gap-0.5 + leading-4 subtitle) plus list gaps.\n */\nexport const switchProfileMenuListScrollClassName = cn(\n dropdownMenuListClassName,\n \"overflow-y-auto custom-scrollbar-always\",\n \"max-h-[13.875rem]\",\n);\n\n/**\n * Tall sidebar/context menus: cap height to the viewport and scroll with the\n * custom scrollbar when content overflows (no scrollbar when everything fits).\n */\nexport const dropdownMenuViewportScrollClassName = cn(\n \"overflow-y-auto custom-scrollbar\",\n \"max-h-[min(60vh,calc(100dvh-5rem))]\",\n);\n\n/** Footer action row inside a dropdown panel. */\nexport const dropdownFooterActionClassName = cn(\n \"group flex w-full items-center rounded-md px-2 py-2 text-sm font-normal text-white\",\n dropdownMenuRowGapClassName,\n \"hover:bg-[var(--oh-interactive-hover)]\",\n dropdownInstantColorClassName,\n);\n"],"mappings":"oHAIA,IAAa,EAAgC,kBAGhC,EAA+B,UAG/B,EAA8B,QAG9B,EAA4B,EAAA,GACvC,gBACA,EACD,CAGY,EAAgC,EAAA,GAC3C,iEACA,0BACA,EAAA,0BACA,EACA,kEACD,CAGY,EAA2B,EAAA,GACtC,2GACA,EACA,yFACA,EACD,CAGY,EAAqC,EAAA,GAChD,iGACA,EACA,qEACA,gFACA,EACD,CAGY,EAA+B,EAAA,GAC1C,wFACA,EACD,CAGY,EAAsC,EAAA,GACjD,wEACA,EACD,CAGY,EAAiC,EAAA,GAC5C,kGACA,yDACA,4GACA,EACD,CAMY,EAAuC,EAAA,GAClD,EACA,0CACA,oBACD,CAMY,EAAsC,EAAA,GACjD,mCACA,sCACD,CAGY,EAAgC,EAAA,GAC3C,qFACA,EACA,yCACA,EACD"}
@@ -0,0 +1,32 @@
1
+ /** Snap hover colors instantly — no transition-colors delay on menus/dropdowns. */
2
+ export declare const dropdownInstantColorClassName = "transition-none";
3
+ /** 2px vertical gap between rows in a dropdown/context menu list. */
4
+ export declare const dropdownMenuListGapClassName = "gap-0.5";
5
+ /** Standard horizontal gap between a row icon and its label. */
6
+ export declare const dropdownMenuRowGapClassName = "gap-2";
7
+ /** Flex column shell for a dropdown menu item list. */
8
+ export declare const dropdownMenuListClassName: string;
9
+ /** Combobox/select trigger shell with instant hover colors. */
10
+ export declare const dropdownTriggerShellClassName: string;
11
+ /** Standard white-label menu row. */
12
+ export declare const dropdownMenuRowClassName: string;
13
+ /** Menu row using foreground token (context menus). */
14
+ export declare const dropdownMenuRowForegroundClassName: string;
15
+ /** Icon inside a menu row — muted until row hover/focus. */
16
+ export declare const dropdownMenuRowIconClassName: string;
17
+ /** Wrapper for SVG/React icon nodes inside a menu row. */
18
+ export declare const dropdownMenuRowIconWrapperClassName: string;
19
+ /** Enum/filter dropdown trigger chip. */
20
+ export declare const dropdownFilterTriggerClassName: string;
21
+ /**
22
+ * Scroll cap for the switch-profile menu: four two-line rows
23
+ * (p-2 + leading-5 title + gap-0.5 + leading-4 subtitle) plus list gaps.
24
+ */
25
+ export declare const switchProfileMenuListScrollClassName: string;
26
+ /**
27
+ * Tall sidebar/context menus: cap height to the viewport and scroll with the
28
+ * custom scrollbar when content overflows (no scrollbar when everything fits).
29
+ */
30
+ export declare const dropdownMenuViewportScrollClassName: string;
31
+ /** Footer action row inside a dropdown panel. */
32
+ export declare const dropdownFooterActionClassName: string;
@@ -0,0 +1,8 @@
1
+ import { cn as e } from "./utils.js";
2
+ import { formControlShellClassName as t } from "./form-control-classes.js";
3
+ //#region src/utils/dropdown-classes.ts
4
+ var n = "transition-none", r = "gap-0.5", i = "gap-2", a = e("flex flex-col", r), o = e("bg-tertiary border border-[var(--oh-border-input)] rounded p-2", "flex items-center gap-2", t, n, "group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white"), s = e("group flex w-full cursor-pointer items-center rounded px-2 py-2 text-left text-sm font-normal text-white", i, "hover:bg-[var(--oh-interactive-hover)] disabled:cursor-not-allowed disabled:opacity-60", n), c = e("group flex w-full cursor-pointer items-center rounded px-2 py-2 text-start text-sm font-normal", i, "text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]", "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent", n), l = e("shrink-0 text-[var(--oh-muted)] group-hover:text-white group-focus-visible:text-white", n), u = e("flex size-4 shrink-0 items-center justify-center [&_svg]:text-current", l), d = e("inline-flex cursor-pointer items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium", "border-[var(--oh-border)] bg-base-secondary text-white", "focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20", n), f = e(a, "overflow-y-auto custom-scrollbar-always", "max-h-[13.875rem]"), p = e("overflow-y-auto custom-scrollbar", "max-h-[min(60vh,calc(100dvh-5rem))]"), m = e("group flex w-full items-center rounded-md px-2 py-2 text-sm font-normal text-white", i, "hover:bg-[var(--oh-interactive-hover)]", n);
5
+ //#endregion
6
+ export { d as dropdownFilterTriggerClassName, m as dropdownFooterActionClassName, n as dropdownInstantColorClassName, a as dropdownMenuListClassName, r as dropdownMenuListGapClassName, s as dropdownMenuRowClassName, c as dropdownMenuRowForegroundClassName, i as dropdownMenuRowGapClassName, l as dropdownMenuRowIconClassName, u as dropdownMenuRowIconWrapperClassName, p as dropdownMenuViewportScrollClassName, o as dropdownTriggerShellClassName, f as switchProfileMenuListScrollClassName };
7
+
8
+ //# sourceMappingURL=dropdown-classes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-classes.js","names":[],"sources":["../../src/utils/dropdown-classes.ts"],"sourcesContent":["import { cn } from \"#/utils/utils\";\nimport { formControlShellClassName } from \"#/utils/form-control-classes\";\n\n/** Snap hover colors instantly — no transition-colors delay on menus/dropdowns. */\nexport const dropdownInstantColorClassName = \"transition-none\";\n\n/** 2px vertical gap between rows in a dropdown/context menu list. */\nexport const dropdownMenuListGapClassName = \"gap-0.5\";\n\n/** Standard horizontal gap between a row icon and its label. */\nexport const dropdownMenuRowGapClassName = \"gap-2\";\n\n/** Flex column shell for a dropdown menu item list. */\nexport const dropdownMenuListClassName = cn(\n \"flex flex-col\",\n dropdownMenuListGapClassName,\n);\n\n/** Combobox/select trigger shell with instant hover colors. */\nexport const dropdownTriggerShellClassName = cn(\n \"bg-tertiary border border-[var(--oh-border-input)] rounded p-2\",\n \"flex items-center gap-2\",\n formControlShellClassName,\n dropdownInstantColorClassName,\n \"group w-full gap-2 px-3 text-[var(--oh-muted)] hover:text-white\",\n);\n\n/** Standard white-label menu row. */\nexport const dropdownMenuRowClassName = cn(\n \"group flex w-full cursor-pointer items-center rounded px-2 py-2 text-left text-sm font-normal text-white\",\n dropdownMenuRowGapClassName,\n \"hover:bg-[var(--oh-interactive-hover)] disabled:cursor-not-allowed disabled:opacity-60\",\n dropdownInstantColorClassName,\n);\n\n/** Menu row using foreground token (context menus). */\nexport const dropdownMenuRowForegroundClassName = cn(\n \"group flex w-full cursor-pointer items-center rounded px-2 py-2 text-start text-sm font-normal\",\n dropdownMenuRowGapClassName,\n \"text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\",\n dropdownInstantColorClassName,\n);\n\n/** Icon inside a menu row — muted until row hover/focus. */\nexport const dropdownMenuRowIconClassName = cn(\n \"shrink-0 text-[var(--oh-muted)] group-hover:text-white group-focus-visible:text-white\",\n dropdownInstantColorClassName,\n);\n\n/** Wrapper for SVG/React icon nodes inside a menu row. */\nexport const dropdownMenuRowIconWrapperClassName = cn(\n \"flex size-4 shrink-0 items-center justify-center [&_svg]:text-current\",\n dropdownMenuRowIconClassName,\n);\n\n/** Enum/filter dropdown trigger chip. */\nexport const dropdownFilterTriggerClassName = cn(\n \"inline-flex cursor-pointer items-center gap-1.5 rounded-lg border px-3 py-2 text-sm font-medium\",\n \"border-[var(--oh-border)] bg-base-secondary text-white\",\n \"focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20\",\n dropdownInstantColorClassName,\n);\n\n/**\n * Scroll cap for the switch-profile menu: four two-line rows\n * (p-2 + leading-5 title + gap-0.5 + leading-4 subtitle) plus list gaps.\n */\nexport const switchProfileMenuListScrollClassName = cn(\n dropdownMenuListClassName,\n \"overflow-y-auto custom-scrollbar-always\",\n \"max-h-[13.875rem]\",\n);\n\n/**\n * Tall sidebar/context menus: cap height to the viewport and scroll with the\n * custom scrollbar when content overflows (no scrollbar when everything fits).\n */\nexport const dropdownMenuViewportScrollClassName = cn(\n \"overflow-y-auto custom-scrollbar\",\n \"max-h-[min(60vh,calc(100dvh-5rem))]\",\n);\n\n/** Footer action row inside a dropdown panel. */\nexport const dropdownFooterActionClassName = cn(\n \"group flex w-full items-center rounded-md px-2 py-2 text-sm font-normal text-white\",\n dropdownMenuRowGapClassName,\n \"hover:bg-[var(--oh-interactive-hover)]\",\n dropdownInstantColorClassName,\n);\n"],"mappings":";;;AAIA,IAAa,IAAgC,mBAGhC,IAA+B,WAG/B,IAA8B,SAG9B,IAA4B,EACvC,iBACA,EACD,EAGY,IAAgC,EAC3C,kEACA,2BACA,GACA,GACA,kEACD,EAGY,IAA2B,EACtC,4GACA,GACA,0FACA,EACD,EAGY,IAAqC,EAChD,kGACA,GACA,sEACA,iFACA,EACD,EAGY,IAA+B,EAC1C,yFACA,EACD,EAGY,IAAsC,EACjD,yEACA,EACD,EAGY,IAAiC,EAC5C,mGACA,0DACA,6GACA,EACD,EAMY,IAAuC,EAClD,GACA,2CACA,oBACD,EAMY,IAAsC,EACjD,oCACA,sCACD,EAGY,IAAgC,EAC3C,sFACA,GACA,0CACA,EACD"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils.cjs`);var t=`h-9 min-h-9`,n=`rounded-lg`,r=`border border-[var(--oh-border)]`,i=`bg-base-secondary`,a=`transition-[background-color,border-color,box-shadow,opacity] duration-150 motion-reduce:transition-none`,o=`!transition-[background-color,border-color,box-shadow,opacity] !duration-150 motion-reduce:transition-none`,s=`focus:border-white/40 focus:ring-1 focus:ring-white/20 focus:outline-none`,c=`focus-within:border-white/40 focus-within:ring-1 focus-within:ring-white/20`,l=`disabled:cursor-not-allowed disabled:opacity-60`,u=e.cn(t,n,r,i,a,s,l,`w-full min-w-0 px-3 text-sm text-white placeholder:text-tertiary-alt`),d=e.cn(u,`placeholder:italic`,o),f=e.cn(n,r,i,a,s,l,`w-full min-w-0 px-3 py-2 text-sm text-white placeholder:text-tertiary-alt`),p=e.cn(t,`relative flex min-w-0 items-center`,n,r,i,a,c),m=e.cn(`min-w-0 flex-1 border-0 bg-transparent px-3 text-sm outline-none`,`placeholder:text-tertiary-alt`,`[&::-webkit-search-cancel-button]:hidden`),h=e.cn(t,`inline-flex w-fit cursor-pointer items-center justify-center gap-2 px-3`,n,a,`text-sm font-normal disabled:cursor-not-allowed disabled:opacity-30`),g=`pl-12`;e.cn(h,r,i,`shrink-0 text-white`),exports.formControlBorderClassName=r,exports.formControlButtonClassName=h,exports.formControlFieldClassName=u,exports.formControlInlineInputClassName=m,exports.formControlMultilineFieldClassName=f,exports.formControlRadiusClassName=n,exports.formControlSettingsFieldClassName=d,exports.formControlShellClassName=p,exports.formControlSurfaceClassName=i,exports.formControlSwitchDescriptionClassName=g,exports.formControlTransitionClassName=a;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils.cjs`);var t=`h-9 min-h-9`,n=`rounded-lg`,r=`border border-[var(--oh-border)]`,i=`bg-base-secondary`,a=`duration-75`,o=`!duration-75`,s=`motion-reduce:transition-none`,c=e.cn(`transition-[background-color,border-color,box-shadow,opacity]`,a,s),l=e.cn(`!transition-[background-color,border-color,box-shadow,opacity]`,o,s),u=e.cn(`transition-[transform] ease`,a,s),d=`hover:text-white hover:bg-white/10`,f=e.cn(`inline-flex items-center gap-1 rounded-[100px] border border-transparent px-1.5`,`text-sm font-normal leading-5 text-[var(--oh-muted)] whitespace-nowrap min-w-0 cursor-pointer`,c,d),p=e.cn(`flex items-center justify-center rounded-full text-[var(--oh-muted)] cursor-pointer`,c,d),m=`focus:border-white/40 focus:ring-1 focus:ring-white/20 focus:outline-none`,h=`focus-within:border-white/40 focus-within:ring-1 focus-within:ring-white/20`,g=`disabled:cursor-not-allowed disabled:opacity-60`,_=e.cn(t,n,r,i,c,m,g,`w-full min-w-0 px-3 text-sm text-white placeholder:text-tertiary-alt`),v=e.cn(_,`placeholder:italic`,l),y=e.cn(n,r,i,c,m,g,`w-full min-w-0 px-3 py-2 text-sm text-white placeholder:text-tertiary-alt`),b=e.cn(t,`relative flex min-w-0 items-center`,n,r,i,c,h),x=e.cn(`min-w-0 flex-1 border-0 bg-transparent px-3 text-sm outline-none`,`placeholder:text-tertiary-alt`,`[&::-webkit-search-cancel-button]:hidden`),S=e.cn(t,`inline-flex w-fit cursor-pointer items-center justify-center gap-2 px-3`,n,c,`text-sm font-normal disabled:cursor-not-allowed disabled:opacity-30`),C=`pl-12`;e.cn(S,r,i,`shrink-0 text-white`);var w=e.cn(`inline-flex items-center gap-2 self-start rounded-lg p-2`,`text-sm font-normal leading-5 text-[var(--oh-muted)] cursor-pointer`,c,`hover:bg-tertiary hover:text-white`);exports.chatInputIconButtonClassName=p,exports.chatInputPillButtonClassName=f,exports.formControlBackNavButtonClassName=w,exports.formControlBorderClassName=r,exports.formControlButtonClassName=S,exports.formControlFieldClassName=_,exports.formControlInlineInputClassName=x,exports.formControlMultilineFieldClassName=y,exports.formControlMutedHoverClassName=d,exports.formControlRadiusClassName=n,exports.formControlSettingsFieldClassName=v,exports.formControlShellClassName=b,exports.formControlSurfaceClassName=i,exports.formControlSwitchDescriptionClassName=C,exports.formControlTransformTransitionClassName=u,exports.formControlTransitionClassName=c;
2
2
  //# sourceMappingURL=form-control-classes.cjs.map