@alfadocs/ui-kit-debug 0.30.5 → 0.31.2
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.
- package/dist/_chunks/{accordion-CNcodXuO.js → accordion-bSU21uTV.js} +3 -3
- package/dist/_chunks/{accordion-CNcodXuO.js.map → accordion-bSU21uTV.js.map} +1 -1
- package/dist/_chunks/{agenda-card-DO9_yogb.js → agenda-card-UJA6Arbs.js} +3 -3
- package/dist/_chunks/{agenda-card-DO9_yogb.js.map → agenda-card-UJA6Arbs.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-WLbfMip6.js → agenda-tray-1fAxNOMz.js} +4 -4
- package/dist/_chunks/{agenda-tray-WLbfMip6.js.map → agenda-tray-1fAxNOMz.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-BXlwNnWe.js → ai-prompt-input-C6sCr1Vi.js} +11 -10
- package/dist/_chunks/ai-prompt-input-C6sCr1Vi.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-C-232sD7.js → alia-sidebar-BEoMl6UL.js} +9 -9
- package/dist/_chunks/{alia-sidebar-C-232sD7.js.map → alia-sidebar-BEoMl6UL.js.map} +1 -1
- package/dist/_chunks/ar-CEpIJtcO.js +399 -0
- package/dist/_chunks/ar-CEpIJtcO.js.map +1 -0
- package/dist/_chunks/{audio-recorder-DL800PE_.js → audio-recorder-C1rhKhSN.js} +114 -114
- package/dist/_chunks/audio-recorder-C1rhKhSN.js.map +1 -0
- package/dist/_chunks/audio-visualiser-l6zPd0AG.js +162 -0
- package/dist/_chunks/audio-visualiser-l6zPd0AG.js.map +1 -0
- package/dist/_chunks/{autocomplete-CUh0f7Dj.js → autocomplete-DIgdhCGJ.js} +2 -2
- package/dist/_chunks/{autocomplete-CUh0f7Dj.js.map → autocomplete-DIgdhCGJ.js.map} +1 -1
- package/dist/_chunks/{avatar-D_H4emLo.js → avatar-BNQNhoyL.js} +19 -18
- package/dist/_chunks/avatar-BNQNhoyL.js.map +1 -0
- package/dist/_chunks/{badge-CIjQ1Us1.js → badge-CptERaHx.js} +2 -2
- package/dist/_chunks/{badge-CIjQ1Us1.js.map → badge-CptERaHx.js.map} +1 -1
- package/dist/_chunks/{booking-Cw92aqo3.js → booking-BIZ9GSer.js} +149 -160
- package/dist/_chunks/booking-BIZ9GSer.js.map +1 -0
- package/dist/_chunks/{breadcrumb--YI7lcHA.js → breadcrumb-CLlhx7qo.js} +2 -2
- package/dist/_chunks/{breadcrumb--YI7lcHA.js.map → breadcrumb-CLlhx7qo.js.map} +1 -1
- package/dist/_chunks/{button-group-Bh2g_Ng-.js → button-group-Ciq6J4IW.js} +15 -14
- package/dist/_chunks/button-group-Ciq6J4IW.js.map +1 -0
- package/dist/_chunks/{calendar-WWNx448i.js → calendar-YHFknAGv.js} +22 -22
- package/dist/_chunks/{calendar-WWNx448i.js.map → calendar-YHFknAGv.js.map} +1 -1
- package/dist/_chunks/calendar-clock-CYkcqdwl.js +19 -0
- package/dist/_chunks/calendar-clock-CYkcqdwl.js.map +1 -0
- package/dist/_chunks/{carousel.agent-C2Icc9_T.js → carousel.agent-DrX96W-1.js} +2 -2
- package/dist/_chunks/{carousel.agent-C2Icc9_T.js.map → carousel.agent-DrX96W-1.js.map} +1 -1
- package/dist/_chunks/{chart-BLvFl169.js → chart-DLkVn_ex.js} +2 -2
- package/dist/_chunks/{chart-BLvFl169.js.map → chart-DLkVn_ex.js.map} +1 -1
- package/dist/_chunks/{chat-container-izziXViv.js → chat-container-ogB4OskO.js} +24 -23
- package/dist/_chunks/chat-container-ogB4OskO.js.map +1 -0
- package/dist/_chunks/{chat-input-cyl_y9bh.js → chat-input-CQe7nR_v.js} +132 -118
- package/dist/_chunks/chat-input-CQe7nR_v.js.map +1 -0
- package/dist/_chunks/{chat-message-fg221-yx.js → chat-message-D53_fH2w.js} +2 -2
- package/dist/_chunks/{chat-message-fg221-yx.js.map → chat-message-D53_fH2w.js.map} +1 -1
- package/dist/_chunks/{checkbox-Dgp_cfUr.js → checkbox-DRcOdmXv.js} +3 -3
- package/dist/_chunks/{checkbox-Dgp_cfUr.js.map → checkbox-DRcOdmXv.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-eVowqKcT.js → checkbox-group-CpUwlHug.js} +3 -3
- package/dist/_chunks/{checkbox-group-eVowqKcT.js.map → checkbox-group-CpUwlHug.js.map} +1 -1
- package/dist/_chunks/{collapsible-hHiyZp0b.js → collapsible-CERONory.js} +2 -2
- package/dist/_chunks/{collapsible-hHiyZp0b.js.map → collapsible-CERONory.js.map} +1 -1
- package/dist/_chunks/{color-picker-Bm-gzpsh.js → color-picker-9tL7pz5y.js} +192 -181
- package/dist/_chunks/color-picker-9tL7pz5y.js.map +1 -0
- package/dist/_chunks/{combobox-Da9eq00i.js → combobox-BC-DFx8G.js} +31 -30
- package/dist/_chunks/combobox-BC-DFx8G.js.map +1 -0
- package/dist/_chunks/{command-palette-11BieSNq.js → command-palette-BiPAAno-.js} +125 -123
- package/dist/_chunks/command-palette-BiPAAno-.js.map +1 -0
- package/dist/_chunks/{copy-field-BAF4mt9h.js → copy-field-CCq7j6Zc.js} +2 -2
- package/dist/_chunks/{copy-field-BAF4mt9h.js.map → copy-field-CCq7j6Zc.js.map} +1 -1
- package/dist/_chunks/{date-picker-D0Ry1dMz.js → date-picker-B94HAV4A.js} +4 -4
- package/dist/_chunks/{date-picker-D0Ry1dMz.js.map → date-picker-B94HAV4A.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-DYgHzMOo.js → date-range-picker-D4dgDlLU.js} +73 -73
- package/dist/_chunks/date-range-picker-D4dgDlLU.js.map +1 -0
- package/dist/_chunks/{date-time-picker-CGmGtcyc.js → date-time-picker-D1GEzf8p.js} +5 -5
- package/dist/_chunks/{date-time-picker-CGmGtcyc.js.map → date-time-picker-D1GEzf8p.js.map} +1 -1
- package/dist/_chunks/de-Dfbeau59.js +477 -0
- package/dist/_chunks/de-Dfbeau59.js.map +1 -0
- package/dist/_chunks/{description-list-CWjnaDGn.js → description-list-BEbK2g93.js} +2 -2
- package/dist/_chunks/{description-list-CWjnaDGn.js.map → description-list-BEbK2g93.js.map} +1 -1
- package/dist/_chunks/{dialog-C-lTGVkB.js → dialog-Cee13rHU.js} +3 -3
- package/dist/_chunks/{dialog-C-lTGVkB.js.map → dialog-Cee13rHU.js.map} +1 -1
- package/dist/_chunks/{dropdown-menu-DZxwF23X.js → dropdown-menu-BC5ZdOMo.js} +3 -3
- package/dist/_chunks/{dropdown-menu-DZxwF23X.js.map → dropdown-menu-BC5ZdOMo.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-CztRy_21.js → editable-currency-cell-renderer-BpicmolK.js} +308 -322
- package/dist/_chunks/editable-currency-cell-renderer-BpicmolK.js.map +1 -0
- package/dist/_chunks/el-Dro3J7CP.js +373 -0
- package/dist/_chunks/el-Dro3J7CP.js.map +1 -0
- package/dist/_chunks/{email-input-DvJ_kPKL.js → email-input-lQivsFrw.js} +3 -3
- package/dist/_chunks/{email-input-DvJ_kPKL.js.map → email-input-lQivsFrw.js.map} +1 -1
- package/dist/_chunks/es-Dvg8u70B.js +373 -0
- package/dist/_chunks/es-Dvg8u70B.js.map +1 -0
- package/dist/_chunks/{file-upload-DxAQprcU.js → file-upload-CdozCPct.js} +226 -233
- package/dist/_chunks/file-upload-CdozCPct.js.map +1 -0
- package/dist/_chunks/fr-VOGjBSPP.js +338 -0
- package/dist/_chunks/fr-VOGjBSPP.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-B9c8Ylww.js → freemium-paywall-D1N02Oam.js} +4 -4
- package/dist/_chunks/{freemium-paywall-B9c8Ylww.js.map → freemium-paywall-D1N02Oam.js.map} +1 -1
- package/dist/_chunks/{header-DDj7uGD-.js → header-CTZWX-tm.js} +2 -2
- package/dist/_chunks/{header-DDj7uGD-.js.map → header-CTZWX-tm.js.map} +1 -1
- package/dist/_chunks/hi-BSDxWU_y.js +433 -0
- package/dist/_chunks/hi-BSDxWU_y.js.map +1 -0
- package/dist/_chunks/{icon-button-DPEqBKBQ.js → icon-button-CKEOrN37.js} +2 -2
- package/dist/_chunks/{icon-button-DPEqBKBQ.js.map → icon-button-CKEOrN37.js.map} +1 -1
- package/dist/_chunks/{icon-button-group-DeV3FpNY.js → icon-button-group-C48khLE0.js} +23 -22
- package/dist/_chunks/icon-button-group-C48khLE0.js.map +1 -0
- package/dist/_chunks/{isSameDay-DHG8Xade.js → isSameDay-DUEiAT0G.js} +2 -2
- package/dist/_chunks/{isSameDay-DHG8Xade.js.map → isSameDay-DUEiAT0G.js.map} +1 -1
- package/dist/_chunks/isSameWeek-Dfzu29cW.js +14 -0
- package/dist/_chunks/isSameWeek-Dfzu29cW.js.map +1 -0
- package/dist/_chunks/it-CuonvcI_.js +401 -0
- package/dist/_chunks/it-CuonvcI_.js.map +1 -0
- package/dist/_chunks/ja-DO57gIOT.js +366 -0
- package/dist/_chunks/ja-DO57gIOT.js.map +1 -0
- package/dist/_chunks/{key-value-pair-BvDY3zuc.js → key-value-pair-C8DaR3Xs.js} +2 -2
- package/dist/_chunks/{key-value-pair-BvDY3zuc.js.map → key-value-pair-C8DaR3Xs.js.map} +1 -1
- package/dist/_chunks/{list-BdvDctBz.js → list-BOwqwy03.js} +44 -43
- package/dist/_chunks/list-BOwqwy03.js.map +1 -0
- package/dist/_chunks/{locale-picker-CY89MChR.js → locale-picker-D99UyZVJ.js} +4 -4
- package/dist/_chunks/{locale-picker-CY89MChR.js.map → locale-picker-D99UyZVJ.js.map} +1 -1
- package/dist/_chunks/{map-view-DyB8tr6c.js → map-view-WEWqXzof.js} +569 -557
- package/dist/_chunks/{map-view-DyB8tr6c.js.map → map-view-WEWqXzof.js.map} +1 -1
- package/dist/_chunks/{message-card-D6iyPacd.js → message-card-BbRhZkDI.js} +3 -3
- package/dist/_chunks/{message-card-D6iyPacd.js.map → message-card-BbRhZkDI.js.map} +1 -1
- package/dist/_chunks/{message-tray-Bh-0ra-Y.js → message-tray-B762TKuv.js} +11 -10
- package/dist/_chunks/message-tray-B762TKuv.js.map +1 -0
- package/dist/_chunks/{multi-select-dSe6Xtc4.js → multi-select-DOLO3K_z.js} +26 -25
- package/dist/_chunks/multi-select-DOLO3K_z.js.map +1 -0
- package/dist/_chunks/{navigation-menu-CyS1fBJ7.js → navigation-menu-C6lBYVv9.js} +3 -3
- package/dist/_chunks/{navigation-menu-CyS1fBJ7.js.map → navigation-menu-C6lBYVv9.js.map} +1 -1
- package/dist/_chunks/nl-DjPaaWaW.js +326 -0
- package/dist/_chunks/nl-DjPaaWaW.js.map +1 -0
- package/dist/_chunks/{notification-card-vaMaA7Wa.js → notification-card-DMdO4g54.js} +2 -2
- package/dist/_chunks/{notification-card-vaMaA7Wa.js.map → notification-card-DMdO4g54.js.map} +1 -1
- package/dist/_chunks/{notification-tray-Cnum6LwM.js → notification-tray-Dl3FTleW.js} +17 -16
- package/dist/_chunks/notification-tray-Dl3FTleW.js.map +1 -0
- package/dist/_chunks/{number-input-BZXu6bPY.js → number-input-Dj5L3pXK.js} +2 -2
- package/dist/_chunks/{number-input-BZXu6bPY.js.map → number-input-Dj5L3pXK.js.map} +1 -1
- package/dist/_chunks/{otp-input-BDF_iNpa.js → otp-input-BEg_sn8A.js} +2 -2
- package/dist/_chunks/{otp-input-BDF_iNpa.js.map → otp-input-BEg_sn8A.js.map} +1 -1
- package/dist/_chunks/{pagination-BWaXF7W0.js → pagination-DQOgnxxw.js} +2 -2
- package/dist/_chunks/{pagination-BWaXF7W0.js.map → pagination-DQOgnxxw.js.map} +1 -1
- package/dist/_chunks/{parseISO-Dk4xa7q6.js → parseISO-DEpUNwxZ.js} +2 -2
- package/dist/_chunks/{parseISO-Dk4xa7q6.js.map → parseISO-DEpUNwxZ.js.map} +1 -1
- package/dist/_chunks/{patient-search-ZpHN-pgJ.js → patient-search-hFiYbqcl.js} +8 -8
- package/dist/_chunks/{patient-search-ZpHN-pgJ.js.map → patient-search-hFiYbqcl.js.map} +1 -1
- package/dist/_chunks/{patient-shell-CYaNkbA1.js → patient-shell-CDvMw_Nk.js} +6 -6
- package/dist/_chunks/{patient-shell-CYaNkbA1.js.map → patient-shell-CDvMw_Nk.js.map} +1 -1
- package/dist/_chunks/{payment-form-Ds3rxvad.js → payment-form-D5rgnZu7.js} +2 -2
- package/dist/_chunks/{payment-form-Ds3rxvad.js.map → payment-form-D5rgnZu7.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-CIuaocnq.js → pdf-viewer-DvtEHcEP.js} +347 -320
- package/dist/_chunks/{pdf-viewer-CIuaocnq.js.map → pdf-viewer-DvtEHcEP.js.map} +1 -1
- package/dist/_chunks/{phone-input-DKSHX7NQ.js → phone-input-DfZbPPvh.js} +217 -201
- package/dist/_chunks/phone-input-DfZbPPvh.js.map +1 -0
- package/dist/_chunks/pl-Cl4lOx2N.js +514 -0
- package/dist/_chunks/pl-Cl4lOx2N.js.map +1 -0
- package/dist/_chunks/{popover-BfHSBEKq.js → popover-Devce-tT.js} +3 -3
- package/dist/_chunks/{popover-BfHSBEKq.js.map → popover-Devce-tT.js.map} +1 -1
- package/dist/_chunks/practice-results-JQunxBIg.js +1618 -0
- package/dist/_chunks/practice-results-JQunxBIg.js.map +1 -0
- package/dist/_chunks/{privacy-lock-C6Ra5m3p.js → privacy-lock-DD-wHxBg.js} +3 -3
- package/dist/_chunks/{privacy-lock-C6Ra5m3p.js.map → privacy-lock-DD-wHxBg.js.map} +1 -1
- package/dist/_chunks/{progress-B-PSO5OS.js → progress-kzIRcdaq.js} +11 -10
- package/dist/_chunks/progress-kzIRcdaq.js.map +1 -0
- package/dist/_chunks/pt-D7qO5CzD.js +370 -0
- package/dist/_chunks/pt-D7qO5CzD.js.map +1 -0
- package/dist/_chunks/{public-footer.agent-Bc99tE5Z.js → public-footer.agent-Bh0rnx4i.js} +21 -14
- package/dist/_chunks/public-footer.agent-Bh0rnx4i.js.map +1 -0
- package/dist/_chunks/{public-header.agent-B-B0WDAi.js → public-header.agent-B2dDg2_d.js} +3 -3
- package/dist/_chunks/{public-header.agent-B-B0WDAi.js.map → public-header.agent-B2dDg2_d.js.map} +1 -1
- package/dist/_chunks/{radio-i4ogu3cq.js → radio-TWf9Q-mp.js} +2 -2
- package/dist/_chunks/{radio-i4ogu3cq.js.map → radio-TWf9Q-mp.js.map} +1 -1
- package/dist/_chunks/{radio-group-CTlGc36r.js → radio-group-BcF92GEF.js} +4 -4
- package/dist/_chunks/{radio-group-CTlGc36r.js.map → radio-group-BcF92GEF.js.map} +1 -1
- package/dist/_chunks/{react-day-picker-D3yzgvDB.js → react-day-picker-DsjfS7uI.js} +662 -615
- package/dist/_chunks/{react-day-picker-D3yzgvDB.js.map → react-day-picker-DsjfS7uI.js.map} +1 -1
- package/dist/_chunks/recaptcha-widget-CFYyLSEX.js +221 -0
- package/dist/_chunks/recaptcha-widget-CFYyLSEX.js.map +1 -0
- package/dist/_chunks/refresh-cw-CC8jSKMr.js +17 -0
- package/dist/_chunks/refresh-cw-CC8jSKMr.js.map +1 -0
- package/dist/_chunks/registry-nPAVE19X.js +21 -0
- package/dist/_chunks/registry-nPAVE19X.js.map +1 -0
- package/dist/_chunks/{resizable-COV-cnth.js → resizable-3vzqDlg6.js} +29 -28
- package/dist/_chunks/resizable-3vzqDlg6.js.map +1 -0
- package/dist/_chunks/{reviews-panel-bKEUKSic.js → reviews-panel-yanuBZs-.js} +4 -4
- package/dist/_chunks/{reviews-panel-bKEUKSic.js.map → reviews-panel-yanuBZs-.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-J-wAz9eN.js → rich-text-editor-CHmr9Bz8.js} +2 -2
- package/dist/_chunks/{rich-text-editor-J-wAz9eN.js.map → rich-text-editor-CHmr9Bz8.js.map} +1 -1
- package/dist/_chunks/ro-CP2-VJ_O.js +361 -0
- package/dist/_chunks/ro-CP2-VJ_O.js.map +1 -0
- package/dist/_chunks/ru-RPn9_Lpq.js +561 -0
- package/dist/_chunks/ru-RPn9_Lpq.js.map +1 -0
- package/dist/_chunks/{scroll-area-DEDU-lp-.js → scroll-area-BWqCkEGz.js} +2 -2
- package/dist/_chunks/{scroll-area-DEDU-lp-.js.map → scroll-area-BWqCkEGz.js.map} +1 -1
- package/dist/_chunks/{search-bar-BRMW1-WG.js → search-bar-CP6wUJFY.js} +3 -3
- package/dist/_chunks/{search-bar-BRMW1-WG.js.map → search-bar-CP6wUJFY.js.map} +1 -1
- package/dist/_chunks/{search-input-CIA6pPfn.js → search-input-C1C3jQpD.js} +24 -23
- package/dist/_chunks/search-input-C1C3jQpD.js.map +1 -0
- package/dist/_chunks/{select-C92AT_OZ.js → select-hsCaJSX3.js} +3 -3
- package/dist/_chunks/{select-C92AT_OZ.js.map → select-hsCaJSX3.js.map} +1 -1
- package/dist/_chunks/{sheet-D8Yl0nKR.js → sheet-BV-yuLE2.js} +3 -3
- package/dist/_chunks/{sheet-D8Yl0nKR.js.map → sheet-BV-yuLE2.js.map} +1 -1
- package/dist/_chunks/{sidebar-DkyC6GvS.js → sidebar-BbR8f6oe.js} +3 -3
- package/dist/_chunks/{sidebar-DkyC6GvS.js.map → sidebar-BbR8f6oe.js.map} +1 -1
- package/dist/_chunks/{signature-capture-DjMlFOzS.js → signature-capture-C-fF71xI.js} +213 -205
- package/dist/_chunks/signature-capture-C-fF71xI.js.map +1 -0
- package/dist/_chunks/{slider-CfEzeseL.js → slider-BHWzXdjt.js} +3 -3
- package/dist/_chunks/{slider-CfEzeseL.js.map → slider-BHWzXdjt.js.map} +1 -1
- package/dist/_chunks/{slot-grid-Q94gVmhn.js → slot-grid-Dz13dH82.js} +4 -4
- package/dist/_chunks/{slot-grid-Q94gVmhn.js.map → slot-grid-Dz13dH82.js.map} +1 -1
- package/dist/_chunks/smile-BSYLAHy6.js +17 -0
- package/dist/_chunks/smile-BSYLAHy6.js.map +1 -0
- package/dist/_chunks/{sparkline-B5Ms55PZ.js → sparkline-DEROcSl0.js} +2 -2
- package/dist/_chunks/{sparkline-B5Ms55PZ.js.map → sparkline-DEROcSl0.js.map} +1 -1
- package/dist/_chunks/sq-AQvefouo.js +355 -0
- package/dist/_chunks/sq-AQvefouo.js.map +1 -0
- package/dist/_chunks/{stepper-progress-jFY8BSf7.js → stepper-progress-DDjq5nei.js} +16 -15
- package/dist/_chunks/stepper-progress-DDjq5nei.js.map +1 -0
- package/dist/_chunks/streaming-text-GH07yIYh.js +127 -0
- package/dist/_chunks/streaming-text-GH07yIYh.js.map +1 -0
- package/dist/_chunks/sv-zkx9eBtD.js +376 -0
- package/dist/_chunks/sv-zkx9eBtD.js.map +1 -0
- package/dist/_chunks/{switch-D916VW86.js → switch-BJ6HD3Mn.js} +2 -2
- package/dist/_chunks/{switch-D916VW86.js.map → switch-BJ6HD3Mn.js.map} +1 -1
- package/dist/_chunks/{tabs-aEQfQV3x.js → tabs-BpPYVme_.js} +4 -4
- package/dist/_chunks/{tabs-aEQfQV3x.js.map → tabs-BpPYVme_.js.map} +1 -1
- package/dist/_chunks/{tag-bBPAvXyh.js → tag-CyoaEmf_.js} +2 -2
- package/dist/_chunks/{tag-bBPAvXyh.js.map → tag-CyoaEmf_.js.map} +1 -1
- package/dist/_chunks/{task-tray-6NlryfMJ.js → task-tray-DRK0b0Qb.js} +3 -3
- package/dist/_chunks/{task-tray-6NlryfMJ.js.map → task-tray-DRK0b0Qb.js.map} +1 -1
- package/dist/_chunks/{text-area-D5GAe8pV.js → text-area-BIx0tZ05.js} +27 -26
- package/dist/_chunks/text-area-BIx0tZ05.js.map +1 -0
- package/dist/_chunks/{text-input-CakysYnD.js → text-input-BaClJL8Y.js} +2 -2
- package/dist/_chunks/{text-input-CakysYnD.js.map → text-input-BaClJL8Y.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-JoeMs_ws.js → theme-toggle-DpC28kt5.js} +6 -6
- package/dist/_chunks/{theme-toggle-JoeMs_ws.js.map → theme-toggle-DpC28kt5.js.map} +1 -1
- package/dist/_chunks/{time-picker-DeVZkIY2.js → time-picker-B5umYwfv.js} +2 -2
- package/dist/_chunks/{time-picker-DeVZkIY2.js.map → time-picker-B5umYwfv.js.map} +1 -1
- package/dist/_chunks/{timeline-CR7HjZCK.js → timeline-D0Wo7v_o.js} +3 -3
- package/dist/_chunks/{timeline-CR7HjZCK.js.map → timeline-D0Wo7v_o.js.map} +1 -1
- package/dist/_chunks/{toast.agent-DVpKt38p.js → toast.agent-WHHfw5VX.js} +322 -320
- package/dist/_chunks/{toast.agent-DVpKt38p.js.map → toast.agent-WHHfw5VX.js.map} +1 -1
- package/dist/_chunks/{tooltip-ClJd0ciy.js → tooltip-DvmfrNvB.js} +29 -20
- package/dist/_chunks/tooltip-DvmfrNvB.js.map +1 -0
- package/dist/_chunks/{tooth-scheme-3mITSXiZ.js → tooth-scheme-CxlsLjfN.js} +2 -2
- package/dist/_chunks/{tooth-scheme-3mITSXiZ.js.map → tooth-scheme-CxlsLjfN.js.map} +1 -1
- package/dist/_chunks/tr-Dmr412Ac.js +378 -0
- package/dist/_chunks/tr-Dmr412Ac.js.map +1 -0
- package/dist/_chunks/{transaction-chip-z9ENE50O.js → transaction-chip-B8ujzowA.js} +47 -60
- package/dist/_chunks/transaction-chip-B8ujzowA.js.map +1 -0
- package/dist/_chunks/{transcript-panel-QUQ9XJmf.js → transcript-panel-DyhTpAP7.js} +21 -20
- package/dist/_chunks/transcript-panel-DyhTpAP7.js.map +1 -0
- package/dist/_chunks/{use-direction-D6rvvG9G.js → use-direction-Dp8h70PP.js} +7 -6
- package/dist/_chunks/use-direction-Dp8h70PP.js.map +1 -0
- package/dist/_chunks/use-isomorphic-layout-effect-BGfaCOP1.js +6 -0
- package/dist/_chunks/use-isomorphic-layout-effect-BGfaCOP1.js.map +1 -0
- package/dist/_chunks/use-media-query-CcAx5SMM.js +16 -0
- package/dist/_chunks/use-media-query-CcAx5SMM.js.map +1 -0
- package/dist/_chunks/{use-password-requirements-E0sSfx5X.js → use-password-requirements-DsgduV1x.js} +3 -3
- package/dist/_chunks/{use-password-requirements-E0sSfx5X.js.map → use-password-requirements-DsgduV1x.js.map} +1 -1
- package/dist/_chunks/use-scroll-to-first-error-4Za-u5Nw.js +43 -0
- package/dist/_chunks/use-scroll-to-first-error-4Za-u5Nw.js.map +1 -0
- package/dist/_chunks/{workflow-map-DlWBJJBt.js → workflow-map-BSvQS3be.js} +6 -6
- package/dist/_chunks/{workflow-map-DlWBJJBt.js.map → workflow-map-BSvQS3be.js.map} +1 -1
- package/dist/_chunks/zh-CN-DxVt64Zk.js +388 -0
- package/dist/_chunks/zh-CN-DxVt64Zk.js.map +1 -0
- package/dist/agent/registry.d.ts +1 -6
- package/dist/agent/registry.d.ts.map +1 -1
- package/dist/agent-catalog.json +42 -1
- package/dist/components/_shared/date-locale.d.ts +7 -2
- package/dist/components/_shared/date-locale.d.ts.map +1 -1
- package/dist/components/_shared/index.d.ts +1 -1
- package/dist/components/_shared/index.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/index.js +1 -1
- package/dist/components/button-group/button-group.d.ts.map +1 -1
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/chat-container.d.ts.map +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/chat-input.d.ts.map +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/copy-field/index.js +1 -1
- package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +1 -1
- package/dist/components/data-table/data-table.d.ts.map +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/email-input/index.js +1 -1
- package/dist/components/file-upload/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/header-settings/index.js +6 -6
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts.map +1 -1
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.d.ts +10 -0
- package/dist/components/map-view/map-view.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts.map +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/practice-results/index.d.ts +4 -0
- package/dist/components/practice-results/index.d.ts.map +1 -0
- package/dist/components/practice-results/index.js +6 -0
- package/dist/components/practice-results/index.js.map +1 -0
- package/dist/components/practice-results/practice-results.agent.d.ts +4 -0
- package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -0
- package/dist/components/practice-results/practice-results.d.ts +159 -0
- package/dist/components/practice-results/practice-results.d.ts.map +1 -0
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/progress/progress.d.ts.map +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-footer/public-footer.d.ts.map +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/resizable/resizable.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-input/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/signature-capture/signature-capture.d.ts.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tag/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-area/text-area.d.ts.map +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/transaction-chip/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/hooks/index.js +69 -66
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-debounced-value.d.ts.map +1 -1
- package/dist/hooks/use-direction.d.ts.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts.map +1 -1
- package/dist/hooks/use-scroll-to-first-error.d.ts.map +1 -1
- package/dist/i18n/locales/ar.d.ts +92 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +82 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +92 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +81 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +92 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +82 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +92 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +92 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +92 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +81 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +92 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +81 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +92 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +82 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +92 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +81 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +92 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +82 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +92 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +81 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +92 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +82 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +92 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +83 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +92 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +82 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +92 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +82 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +92 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +82 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +92 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +82 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +92 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +82 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +92 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +82 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +532 -528
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +92 -0
- package/dist/locales/de.json +92 -0
- package/dist/locales/el.json +92 -0
- package/dist/locales/en.json +92 -0
- package/dist/locales/es.json +92 -0
- package/dist/locales/fr.json +92 -0
- package/dist/locales/hi.json +92 -0
- package/dist/locales/it.json +92 -0
- package/dist/locales/ja.json +92 -0
- package/dist/locales/nl.json +92 -0
- package/dist/locales/pl.json +92 -0
- package/dist/locales/pt.json +92 -0
- package/dist/locales/ro.json +92 -0
- package/dist/locales/ru.json +92 -0
- package/dist/locales/sq.json +92 -0
- package/dist/locales/sv.json +92 -0
- package/dist/locales/tr.json +92 -0
- package/dist/locales/zh.json +92 -0
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +5 -2
- package/dist/_chunks/ai-prompt-input-BXlwNnWe.js.map +0 -1
- package/dist/_chunks/audio-recorder-DL800PE_.js.map +0 -1
- package/dist/_chunks/audio-visualiser-I-T4Z7EU.js +0 -145
- package/dist/_chunks/audio-visualiser-I-T4Z7EU.js.map +0 -1
- package/dist/_chunks/avatar-D_H4emLo.js.map +0 -1
- package/dist/_chunks/booking-Cw92aqo3.js.map +0 -1
- package/dist/_chunks/button-group-Bh2g_Ng-.js.map +0 -1
- package/dist/_chunks/chat-container-izziXViv.js.map +0 -1
- package/dist/_chunks/chat-input-cyl_y9bh.js.map +0 -1
- package/dist/_chunks/color-picker-Bm-gzpsh.js.map +0 -1
- package/dist/_chunks/combobox-Da9eq00i.js.map +0 -1
- package/dist/_chunks/command-palette-11BieSNq.js.map +0 -1
- package/dist/_chunks/date-range-picker-DYgHzMOo.js.map +0 -1
- package/dist/_chunks/editable-currency-cell-renderer-CztRy_21.js.map +0 -1
- package/dist/_chunks/file-upload-DxAQprcU.js.map +0 -1
- package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +0 -1
- package/dist/_chunks/list-BdvDctBz.js.map +0 -1
- package/dist/_chunks/message-tray-Bh-0ra-Y.js.map +0 -1
- package/dist/_chunks/multi-select-dSe6Xtc4.js.map +0 -1
- package/dist/_chunks/notification-tray-Cnum6LwM.js.map +0 -1
- package/dist/_chunks/phone-input-DKSHX7NQ.js.map +0 -1
- package/dist/_chunks/progress-B-PSO5OS.js.map +0 -1
- package/dist/_chunks/public-footer.agent-Bc99tE5Z.js.map +0 -1
- package/dist/_chunks/recaptcha-widget-BtBNb6tB.js +0 -192
- package/dist/_chunks/recaptcha-widget-BtBNb6tB.js.map +0 -1
- package/dist/_chunks/registry-C9nwlNyL.js +0 -21
- package/dist/_chunks/registry-C9nwlNyL.js.map +0 -1
- package/dist/_chunks/resizable-COV-cnth.js.map +0 -1
- package/dist/_chunks/search-input-CIA6pPfn.js.map +0 -1
- package/dist/_chunks/signature-capture-DjMlFOzS.js.map +0 -1
- package/dist/_chunks/stepper-progress-jFY8BSf7.js.map +0 -1
- package/dist/_chunks/streaming-text-BgjCTVOw.js +0 -105
- package/dist/_chunks/streaming-text-BgjCTVOw.js.map +0 -1
- package/dist/_chunks/text-area-D5GAe8pV.js.map +0 -1
- package/dist/_chunks/tooltip-ClJd0ciy.js.map +0 -1
- package/dist/_chunks/transaction-chip-z9ENE50O.js.map +0 -1
- package/dist/_chunks/transcript-panel-QUQ9XJmf.js.map +0 -1
- package/dist/_chunks/use-direction-D6rvvG9G.js.map +0 -1
- package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js +0 -55
- package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-area-DEDU-lp-.js","sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, useRef, type ComponentPropsWithoutRef } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useDirection } from '../_shared/use-direction';\n\nconst scrollbarVariants = cva(\n [\n 'ds:flex ds:touch-none ds:select-none',\n // Fade in/out based on Radix data-state (requires forceMount on Scrollbar).\n // Default opacity is 1 because ScrollAreaScrollbarVisible (type='always')\n // never sets data-state at all — only hover/scroll/auto set data-state=\"hidden\".\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[state=hidden]:opacity-0',\n // Orientation-specific sizing + padding so thumb floats away from the frame edge\n 'ds:data-[orientation=vertical]:w-[var(--scrollbar-size)] ds:data-[orientation=vertical]:p-[var(--scrollbar-padding)]',\n 'ds:data-[orientation=horizontal]:h-[var(--scrollbar-size)] ds:data-[orientation=horizontal]:flex-col ds:data-[orientation=horizontal]:p-[var(--scrollbar-padding)]',\n 'ds:bg-[var(--scrollbar-track)]',\n // forced-colors: 1px border keeps the track visible when background flattens\n 'ds:forced-colors:border ds:forced-colors:border-[ButtonText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:[--scrollbar-size:var(--scrollbar-size-sm)]',\n md: 'ds:[--scrollbar-size:var(--scrollbar-size-md)]',\n lg: 'ds:[--scrollbar-size:var(--scrollbar-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:relative ds:flex-1',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--scrollbar-thumb)]',\n 'ds:hover:bg-[var(--scrollbar-thumb-hover)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // forced-color-adjust: auto so forced-colors paint ButtonFace/ButtonText\n 'ds:[forced-color-adjust:auto]',\n // hit area extension via ::before for touch pointers (must be absolute)\n 'ds:before:absolute ds:before:content-[\"\"] ds:before:inset-inline-[calc((var(--min-target-size)-100%)/-2)]',\n 'ds:before:inset-block-[calc((var(--min-target-size)-100%)/-2)]',\n ].join(' '),\n);\n\nexport interface ScrollAreaProps\n extends\n Omit<ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>, 'type'>,\n VariantProps<typeof scrollbarVariants> {\n orientation?: 'vertical' | 'horizontal' | 'both';\n size?: 'sm' | 'md' | 'lg';\n /**\n * `auto` — scrollbar fades in on pointer-enter, fades out after `--scrollbar-fade-delay` (default).\n * `always` — scrollbar always visible; use for data tables.\n * `scroll` — scrollbar visible only while scrolling.\n * `hover` — alias for `auto` (Radix hover mode).\n * `native` — skips the custom scrollbar entirely; the OS renders its own.\n * Use for virtualised lists (AG Grid, @tanstack/react-virtual).\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover' | 'native';\n className?: string;\n children: React.ReactNode;\n}\n\nconst radixType = (\n type: ScrollAreaProps['type'],\n): ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>['type'] => {\n if (type === 'auto' || type === undefined) return 'hover';\n return type as Exclude<\n ScrollAreaProps['type'],\n 'auto' | 'native' | undefined\n >;\n};\n\nconst nativeOverflow: Record<\n NonNullable<ScrollAreaProps['orientation']>,\n string\n> = {\n vertical: 'ds:overflow-y-auto',\n horizontal: 'ds:overflow-x-auto',\n both: 'ds:overflow-auto',\n};\n\nconst RadixScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n orientation = 'vertical',\n size = 'md',\n type = 'auto',\n className,\n children,\n scrollHideDelay,\n ...props\n },\n ref,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const dir = useDirection(rootRef);\n return (\n <ScrollAreaPrimitive.Root\n ref={rootRef}\n type={radixType(type)}\n dir={dir}\n scrollHideDelay={scrollHideDelay}\n data-component=\"scroll-area\"\n className={[\n 'ds:relative ds:overflow-hidden',\n 'ds:min-w-0 ds:min-h-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n // axe's `scrollable-region-focusable` rule requires any element\n // with overflow to be reachable via keyboard. Radix's Viewport\n // is the scroll container; mark it focusable (tabIndex=0) so\n // arrow / Home / End keys can drive it.\n tabIndex={0}\n className={[\n 'ds:h-full ds:w-full ds:rounded-[inherit]',\n // keyboard focus ring on the scroll container\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n ].join(' ')}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n {(orientation === 'vertical' || orientation === 'both') && (\n // forceMount keeps the element in the DOM so CSS opacity transition\n // can animate the show/hide instead of mount/unmount snapping.\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"vertical\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"horizontal\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n },\n);\n\nRadixScrollArea.displayName = 'RadixScrollArea';\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (props, ref) => {\n const {\n orientation = 'vertical',\n type = 'auto',\n className,\n children,\n scrollHideDelay: _scrollHideDelay,\n size: _size,\n ...rest\n } = props;\n if (type === 'native') {\n return (\n <div\n ref={ref}\n data-component=\"scroll-area\"\n // Native scroll containers are not focusable by default — axe's\n // scrollable-region-focusable rule fires unless the user marks them\n // explicitly tabbable so keyboard users can scroll with arrows.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className={[\n nativeOverflow[orientation],\n 'ds:min-w-0 ds:min-h-0',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n }\n return <RadixScrollArea ref={ref} {...props} />;\n },\n);\n\nScrollArea.displayName = 'ScrollArea';\n\n// Re-export Radix parts for advanced composition\nexport const ScrollAreaRoot = ScrollAreaPrimitive.Root;\nexport const ScrollAreaViewport = ScrollAreaPrimitive.Viewport;\nexport const ScrollAreaScrollbar = ScrollAreaPrimitive.Scrollbar;\nexport const ScrollAreaThumb = ScrollAreaPrimitive.Thumb;\nexport const ScrollAreaCorner = ScrollAreaPrimitive.Corner;\n"],"names":["scrollbarVariants","cva","thumbVariants","radixType","type","nativeOverflow","RadixScrollArea","forwardRef","orientation","size","className","children","scrollHideDelay","props","ref","rootRef","useRef","dir","useDirection","jsxs","ScrollAreaPrimitive","jsx","ScrollArea","_scrollHideDelay","_size","rest","ScrollAreaRoot","ScrollAreaViewport","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaCorner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scroll-area-BWqCkEGz.js","sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, useRef, type ComponentPropsWithoutRef } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useDirection } from '../_shared/use-direction';\n\nconst scrollbarVariants = cva(\n [\n 'ds:flex ds:touch-none ds:select-none',\n // Fade in/out based on Radix data-state (requires forceMount on Scrollbar).\n // Default opacity is 1 because ScrollAreaScrollbarVisible (type='always')\n // never sets data-state at all — only hover/scroll/auto set data-state=\"hidden\".\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[state=hidden]:opacity-0',\n // Orientation-specific sizing + padding so thumb floats away from the frame edge\n 'ds:data-[orientation=vertical]:w-[var(--scrollbar-size)] ds:data-[orientation=vertical]:p-[var(--scrollbar-padding)]',\n 'ds:data-[orientation=horizontal]:h-[var(--scrollbar-size)] ds:data-[orientation=horizontal]:flex-col ds:data-[orientation=horizontal]:p-[var(--scrollbar-padding)]',\n 'ds:bg-[var(--scrollbar-track)]',\n // forced-colors: 1px border keeps the track visible when background flattens\n 'ds:forced-colors:border ds:forced-colors:border-[ButtonText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:[--scrollbar-size:var(--scrollbar-size-sm)]',\n md: 'ds:[--scrollbar-size:var(--scrollbar-size-md)]',\n lg: 'ds:[--scrollbar-size:var(--scrollbar-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:relative ds:flex-1',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--scrollbar-thumb)]',\n 'ds:hover:bg-[var(--scrollbar-thumb-hover)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // forced-color-adjust: auto so forced-colors paint ButtonFace/ButtonText\n 'ds:[forced-color-adjust:auto]',\n // hit area extension via ::before for touch pointers (must be absolute)\n 'ds:before:absolute ds:before:content-[\"\"] ds:before:inset-inline-[calc((var(--min-target-size)-100%)/-2)]',\n 'ds:before:inset-block-[calc((var(--min-target-size)-100%)/-2)]',\n ].join(' '),\n);\n\nexport interface ScrollAreaProps\n extends\n Omit<ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>, 'type'>,\n VariantProps<typeof scrollbarVariants> {\n orientation?: 'vertical' | 'horizontal' | 'both';\n size?: 'sm' | 'md' | 'lg';\n /**\n * `auto` — scrollbar fades in on pointer-enter, fades out after `--scrollbar-fade-delay` (default).\n * `always` — scrollbar always visible; use for data tables.\n * `scroll` — scrollbar visible only while scrolling.\n * `hover` — alias for `auto` (Radix hover mode).\n * `native` — skips the custom scrollbar entirely; the OS renders its own.\n * Use for virtualised lists (AG Grid, @tanstack/react-virtual).\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover' | 'native';\n className?: string;\n children: React.ReactNode;\n}\n\nconst radixType = (\n type: ScrollAreaProps['type'],\n): ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>['type'] => {\n if (type === 'auto' || type === undefined) return 'hover';\n return type as Exclude<\n ScrollAreaProps['type'],\n 'auto' | 'native' | undefined\n >;\n};\n\nconst nativeOverflow: Record<\n NonNullable<ScrollAreaProps['orientation']>,\n string\n> = {\n vertical: 'ds:overflow-y-auto',\n horizontal: 'ds:overflow-x-auto',\n both: 'ds:overflow-auto',\n};\n\nconst RadixScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n orientation = 'vertical',\n size = 'md',\n type = 'auto',\n className,\n children,\n scrollHideDelay,\n ...props\n },\n ref,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const dir = useDirection(rootRef);\n return (\n <ScrollAreaPrimitive.Root\n ref={rootRef}\n type={radixType(type)}\n dir={dir}\n scrollHideDelay={scrollHideDelay}\n data-component=\"scroll-area\"\n className={[\n 'ds:relative ds:overflow-hidden',\n 'ds:min-w-0 ds:min-h-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n // axe's `scrollable-region-focusable` rule requires any element\n // with overflow to be reachable via keyboard. Radix's Viewport\n // is the scroll container; mark it focusable (tabIndex=0) so\n // arrow / Home / End keys can drive it.\n tabIndex={0}\n className={[\n 'ds:h-full ds:w-full ds:rounded-[inherit]',\n // keyboard focus ring on the scroll container\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n ].join(' ')}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n {(orientation === 'vertical' || orientation === 'both') && (\n // forceMount keeps the element in the DOM so CSS opacity transition\n // can animate the show/hide instead of mount/unmount snapping.\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"vertical\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"horizontal\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n },\n);\n\nRadixScrollArea.displayName = 'RadixScrollArea';\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (props, ref) => {\n const {\n orientation = 'vertical',\n type = 'auto',\n className,\n children,\n scrollHideDelay: _scrollHideDelay,\n size: _size,\n ...rest\n } = props;\n if (type === 'native') {\n return (\n <div\n ref={ref}\n data-component=\"scroll-area\"\n // Native scroll containers are not focusable by default — axe's\n // scrollable-region-focusable rule fires unless the user marks them\n // explicitly tabbable so keyboard users can scroll with arrows.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className={[\n nativeOverflow[orientation],\n 'ds:min-w-0 ds:min-h-0',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[Highlight]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n }\n return <RadixScrollArea ref={ref} {...props} />;\n },\n);\n\nScrollArea.displayName = 'ScrollArea';\n\n// Re-export Radix parts for advanced composition\nexport const ScrollAreaRoot = ScrollAreaPrimitive.Root;\nexport const ScrollAreaViewport = ScrollAreaPrimitive.Viewport;\nexport const ScrollAreaScrollbar = ScrollAreaPrimitive.Scrollbar;\nexport const ScrollAreaThumb = ScrollAreaPrimitive.Thumb;\nexport const ScrollAreaCorner = ScrollAreaPrimitive.Corner;\n"],"names":["scrollbarVariants","cva","thumbVariants","radixType","type","nativeOverflow","RadixScrollArea","forwardRef","orientation","size","className","children","scrollHideDelay","props","ref","rootRef","useRef","dir","useDirection","jsxs","ScrollAreaPrimitive","jsx","ScrollArea","_scrollHideDelay","_size","rest","ScrollAreaRoot","ScrollAreaViewport","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaCorner"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { forwardRef as te, useState as _, useEffect as F, useRef as j, useMemo a
|
|
|
3
3
|
import { c as A } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as U } from "react-i18next";
|
|
5
5
|
import * as q from "@radix-ui/react-popover";
|
|
6
|
-
import { S as oe } from "./search-input-
|
|
7
|
-
import { u as W } from "./registry-
|
|
6
|
+
import { S as oe } from "./search-input-C1C3jQpD.js";
|
|
7
|
+
import { u as W } from "./registry-nPAVE19X.js";
|
|
8
8
|
import { n as O } from "./normalize-diacritics-BNGbFNlJ.js";
|
|
9
9
|
import { S as ie } from "./search-BonnQsHv.js";
|
|
10
10
|
import { u as de } from "./use-debounced-callback-BisrB-Fq.js";
|
|
@@ -582,4 +582,4 @@ export {
|
|
|
582
582
|
Ie as f,
|
|
583
583
|
J as s
|
|
584
584
|
};
|
|
585
|
-
//# sourceMappingURL=search-bar-
|
|
585
|
+
//# sourceMappingURL=search-bar-CP6wUJFY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-bar-BRMW1-WG.js","sources":["../../src/components/search-bar/search-bar.agent.ts","../../src/components/search-bar/search-bar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — SearchBar. */\n/* */\n/* SearchBar is the kit's saved-search / global-search surface. In */\n/* `inline` mode it filters + opens a result popover; in `launcher` */\n/* mode it opens the CommandPalette. The adapter exposes the query, */\n/* a submit action, and an apply_saved_search hook so future MCP */\n/* tooling can drive the SearchBar by saved-search id. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SearchBarHandle } from './search-bar';\n\nexport const searchBarAgent: AgentAdapter<SearchBarHandle> = {\n id: 'search-bar',\n capabilities: ['filter', 'edit_inline', 'submit'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.searchBar.state.query',\n description:\n 'Current raw query string (inline mode). Empty in launcher mode.',\n read: (handle) => handle.getQuery(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.searchBar.state.isEmpty',\n description: 'True when the query is empty.',\n read: (handle) => handle.getQuery().length === 0,\n },\n },\n actions: {\n set_query: {\n safety: 'read',\n argsType: '{ query: string }',\n descriptionKey: 'ui.agent.searchBar.actions.setQuery',\n description:\n 'Replace the current query (inline mode only). No-op in launcher mode.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.clear',\n description: 'Clear the query and close the result popover.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.submit',\n description:\n 'In launcher mode opens the CommandPalette; in inline mode commits the highlighted option.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.focus',\n description: 'Move keyboard focus to the SearchBar.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n apply_saved_search: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.searchBar.actions.applySavedSearch',\n description:\n 'Apply a saved-search by id. The host wires the actual query lookup; the adapter routes the id to its onApplySavedSearch handler. No-op when no handler is wired.',\n invoke: (handle, args: { id: string }) => {\n handle.applySavedSearch(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'search-bar',\n description: 'Marks the SearchBar root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { SearchInput } from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { searchBarAgent } from './search-bar.agent';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (\n navigator as unknown as {\n userAgentData?: { platform?: string };\n }\n ).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n ['ds:inline-flex ds:flex-col', 'ds:w-full'].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n /**\n * Called when an external driver (agent adapter) asks the host to apply\n * a saved search by id. The host is responsible for resolving the saved\n * search and feeding the resulting query back through `value` /\n * `onQueryChange`. No-op when not provided.\n */\n onApplySavedSearch?: (id: string) => void;\n};\n\n/**\n * Imperative handle for agent-readiness + programmatic control. Replaces\n * the previously-forwarded `HTMLDivElement` ref. Consumers who needed the\n * DOM element for layout queries should wrap the SearchBar in their own\n * div with a ref attached.\n */\nexport interface SearchBarHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n focus: () => void;\n applySavedSearch: (id: string) => void;\n}\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<HTMLDivElement, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n id,\n onApplySavedSearch,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation();\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <LauncherSearchBar\n forwardedRef={ref}\n id={id}\n landmarkProps={landmarkProps}\n className={className}\n onOpenCommandPalette={onOpenCommandPalette}\n onApplySavedSearch={onApplySavedSearch}\n resolvedPlaceholder={resolvedPlaceholder}\n openLabel={t('search.open', 'Open search')}\n ariaKeyshortcuts={ariaKeyshortcuts}\n launcherClass={launcherVariants({ size, density })}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n rest={rest as HTMLAttributes<HTMLButtonElement>}\n />\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n id={id}\n onApplySavedSearch={onApplySavedSearch}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* LauncherSearchBar \\u2014 internal */\n/* ------------------------------------------------------------------ */\n\ninterface LauncherInternalProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n id?: string;\n landmarkProps: { role?: 'search' };\n className?: string;\n onOpenCommandPalette?: () => void;\n onApplySavedSearch?: (id: string) => void;\n resolvedPlaceholder: string;\n openLabel: string;\n ariaKeyshortcuts: string;\n launcherClass: string;\n shortcutHint: boolean;\n shortcutLabel: string;\n rest: HTMLAttributes<HTMLButtonElement>;\n}\n\nfunction LauncherSearchBar(props: LauncherInternalProps): ReactNode {\n const {\n forwardedRef,\n id,\n landmarkProps,\n className,\n onOpenCommandPalette,\n onApplySavedSearch,\n resolvedPlaceholder,\n openLabel,\n ariaKeyshortcuts,\n launcherClass,\n shortcutHint,\n shortcutLabel,\n rest,\n } = props;\n const buttonRef = useRef<HTMLButtonElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => '',\n // Launcher mode is stateless \\u2014 it delegates to CommandPalette.\n setQuery: () => {},\n clear: () => {},\n submit: () => onOpenCommandPalette?.(),\n focus: () => buttonRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [onOpenCommandPalette, onApplySavedSearch],\n );\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n useAgentRegistration(searchBarAgent, handle, id);\n\n return (\n <div\n ref={rootRef}\n {...landmarkProps}\n data-component=\"search-bar\"\n data-component-id={id}\n id={id}\n className={className}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={openLabel}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherClass}\n {...rest}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n id?: string;\n onApplySavedSearch?: (id: string) => void;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n id,\n onApplySavedSearch,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation();\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const query = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n // SearchInput forwards an `HTMLInputElement` with the curated handle\n // methods grafted on — for our purposes we just need `.focus()`.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n\n const debouncedQueryChange = useDebouncedCallback((next: string) => {\n onQueryChange?.(next);\n }, debounceMs);\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (!isControlled) setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange, isControlled],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) setInternalValue('');\n },\n [onSelect, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n const setQueryProgrammatic = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onQueryChange?.(next);\n setOpen(next.trim().length > 0);\n },\n [isControlled, onQueryChange],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n\n const agentHandle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => query,\n setQuery: setQueryProgrammatic,\n clear: () => {\n setQueryProgrammatic('');\n },\n submit: () => {\n const item = flatResults[activeIndex];\n if (item) commit(item);\n },\n focus: () => inputRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [\n query,\n setQueryProgrammatic,\n flatResults,\n activeIndex,\n commit,\n onApplySavedSearch,\n ],\n );\n useAgentRegistration(searchBarAgent, agentHandle, id);\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n ref={rootRef}\n {...landmarkProps}\n id={id}\n data-component=\"search-bar\"\n data-component-id={id}\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keyboard handling propagates to the inner SearchInput; this wrapper captures combobox/listbox keys */}\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n value={query}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t(\n 'search.noResults',\n 'No results for \\u201C{{query}}\\u201D',\n {\n query,\n },\n )}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading\n ? `${listboxId}-group-${gi}-heading`\n : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:cursor-pointer',\n 'ds:no-underline ds:text-[color:var(--foreground)]',\n 'ds:min-h-[var(--min-target-size)]',\n isActive ? 'ds:bg-[var(--muted)]/40' : '',\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n"],"names":["searchBarAgent","handle","args","isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","id","onApplySavedSearch","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsx","LauncherSearchBar","InlineSearchBar","forwardedRef","openLabel","launcherClass","buttonRef","useRef","rootRef","useMemo","_a","savedId","useImperativeHandle","useAgentRegistration","jsxs","Search","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","listboxId","useId","debouncedQueryChange","useDebouncedCallback","next","flatResults","handleInput","useCallback","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","setQueryProgrammatic","agentHandle","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","body","Fragment","shared","e","href","trimmed"],"mappings":";;;;;;;;;;AAaO,MAAMA,IAAgD;AAAA,EAC3D,IAAI;AAAA,EACJ,cAAc,CAAC,UAAU,eAAe,QAAQ;AAAA,EAChD,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,SAAA,EAAW,WAAW;AAAA,IAAA;AAAA,EACjD;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,GAAQC,MAA4B;AAC3C,QAAAD,EAAO,SAASC,EAAK,KAAK;AAAA,MAC5B;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,OAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,oBAAoB;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,GAAQC,MAAyB;AACxC,QAAAD,EAAO,iBAAiBC,EAAK,EAAE;AAAA,MACjC;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;AChEA,SAASC,KAAqB;AAC5B,MAAI,OAAO,YAAc,IAAa,QAAO;AAI7C,QAAMC,IACJ,UAGA,eACIC,KAAiBD,KAAA,gBAAAA,EAAQ,aAAY,UAAU,YAAY;AACjE,SAAO,OAAO,KAAKC,CAAc;AACnC;AAMA,MAAMC,KAAmBC;AAAA,EACvB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEMC,KAAwBD;AAAA,EAC5B,CAAC,8BAA8B,WAAW,EAAE,KAAK,GAAG;AAAA,EACpD;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEME,IAAuBF;AAAA,EAC3B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMG,KAAyBH;AAAA,EAC7B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ;AAmGO,SAASI,GACdC,GACAC,GACwB;AACxB,QAAMC,IAASC,EAAoBH,EAAM,KAAA,CAAM;AAC/C,SAAIE,MAAW,KAAWD,IACnBA,EACJ,IAAI,CAACG,OAAO;AAAA,IACX,GAAGA;AAAA,IACH,OAAOA,EAAE,MAAM;AAAA,MAAO,CAACC,MACrBF,EAAoBE,EAAK,KAAK,EAAE,SAASH,CAAM;AAAA,IAAA;AAAA,EACjD,EACA,EACD,OAAO,CAACE,MAAMA,EAAE,MAAM,SAAS,CAAC;AACrC;AAMO,MAAME,KAAYC;AAAA,EACvB,CAACC,GAAOC,MAAQ;AAId,UAAM;AAAA,MACJ,MAAAC,IAAO;AAAA,MACP,MAAAC,IAAO;AAAA,MACP,SAAAC,IAAU;AAAA,MACV,UAAAC,IAAW;AAAA,MACX,aAAAC;AAAA,MACA,cAAAC,IAAe;AAAA,MACf,WAAAC;AAAA,MACA,sBAAAC;AAAA,MACA,IAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,OAAOC;AAAA,MACP,cAAcC;AAAA,MACd,eAAeC;AAAA,MACf,SAASC;AAAA,MACT,UAAUC;AAAA,MACV,YAAYC;AAAA,MACZ,GAAGC;AAAA,IAAA,IACDlB,GAUE,EAAE,GAAAmB,EAAA,IAAMC,EAAA,GACR,CAACC,GAAOC,CAAQ,IAAIC,EAAS,EAAK;AACxC,IAAAC,EAAU,MAAM;AACd,MAAAF,EAASvC,IAAW;AAAA,IACtB,GAAG,CAAA,CAAE;AAEL,UAAM0C,IAAgBJ,IAAQ,OAAY,UAIpCK,IAAmB,oBAGnBC,IAAgBtB,IAClB,EAAE,MAAM,aACR,EAAE,MAAM,OAAA;AAGZ,QAAIH,MAAS,YAAY;AACvB,YAAM0B,IACJtB,KAAea,EAAE,sBAAsB,SAAc;AACvD,aACE,gBAAAU;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,cAAc7B;AAAA,UACd,IAAAS;AAAA,UACA,eAAAiB;AAAA,UACA,WAAAnB;AAAA,UACA,sBAAAC;AAAA,UACA,oBAAAE;AAAA,UACA,qBAAAiB;AAAA,UACA,WAAWT,EAAE,eAAe,aAAa;AAAA,UACzC,kBAAAO;AAAA,UACA,eAAexC,GAAiB,EAAE,MAAAiB,GAAM,SAAAC,GAAS;AAAA,UACjD,cAAAG;AAAA,UACA,eAAAkB;AAAA,UACA,MAAAP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAIA,WACE,gBAAAW;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,cAAc9B;AAAA,QACd,MAAAE;AAAA,QACA,SAAAC;AAAA,QACA,eAAAuB;AAAA,QACA,aAAArB;AAAA,QACA,cAAAC;AAAA,QACA,eAAAkB;AAAA,QACA,kBAAAC;AAAA,QACA,WAAAlB;AAAA,QACA,IAAAE;AAAA,QACA,oBAAAC;AAAA,QACC,GAdeX;AAAA,MAcZ;AAAA,IAAA;AAAA,EAGV;AACF;AAEAF,GAAU,cAAc;AAsBxB,SAASgC,GAAkB9B,GAAyC;AAClE,QAAM;AAAA,IACJ,cAAAgC;AAAA,IACA,IAAAtB;AAAA,IACA,eAAAiB;AAAA,IACA,WAAAnB;AAAA,IACA,sBAAAC;AAAA,IACA,oBAAAE;AAAA,IACA,qBAAAiB;AAAA,IACA,WAAAK;AAAA,IACA,kBAAAP;AAAA,IACA,eAAAQ;AAAA,IACA,cAAA3B;AAAA,IACA,eAAAkB;AAAA,IACA,MAAAP;AAAA,EAAA,IACElB,GACEmC,IAAYC,EAA0B,IAAI,GAC1CC,IAAUD,EAAuB,IAAI,GAErCvD,IAASyD;AAAA,IACb,OAAO;AAAA,MACL,UAAU,MAAM;AAAA;AAAA,MAEhB,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,OAAO,MAAM;AAAA,MAAC;AAAA,MACd,QAAQ,MAAM7B,KAAA,gBAAAA;AAAA,MACd,OAAO,MAAA;;AAAM,gBAAA8B,IAAAJ,EAAU,YAAV,gBAAAI,EAAmB;AAAA;AAAA,MAChC,kBAAkB,CAACC,MAAoB7B,KAAA,gBAAAA,EAAqB6B;AAAA,IAAO;AAAA,IAErE,CAAC/B,GAAsBE,CAAkB;AAAA,EAAA;AAE3C,SAAA8B;AAAA,IACET;AAAA,IACA,MAAMK,EAAQ;AAAA,IACd,CAAA;AAAA,EAAC,GAEHK,EAAqB9D,GAAgBC,GAAQ6B,CAAE,GAG7C,gBAAAmB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKQ;AAAA,MACJ,GAAGV;AAAA,MACJ,kBAAe;AAAA,MACf,qBAAmBjB;AAAA,MACnB,IAAAA;AAAA,MACA,WAAAF;AAAA,MAEA,UAAA,gBAAAmC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKR;AAAA,UACL,MAAK;AAAA,UACL,SAAS1B;AAAA,UACT,iBAAc;AAAA,UACd,cAAYwB;AAAA,UACZ,qBAAmBP;AAAA,UACnB,WAAWQ;AAAA,UACV,GAAGhB;AAAA,UAEJ,UAAA;AAAA,YAAA,gBAAAW;AAAA,cAACe;AAAA,cAAA;AAAA,gBACC,eAAW;AAAA,gBACX,WAAU;AAAA,gBACV,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEX,QAAA,EAAK,eAAY,QAAO,WAAU,6BAChC,UAAAhB,GACH;AAAA,YACCrB,IACC,gBAAAsB,EAAC,OAAA,EAAI,WAAWxC,KAAyB,aAAc,IACrD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAGN;AAmBA,SAAS0C,GAAgB/B,GAAuC;AAC9D,QAAM;AAAA,IACJ,cAAAgC;AAAA,IACA,MAAA7B;AAAA,IACA,SAAAC;AAAA,IACA,eAAAuB;AAAA,IACA,aAAArB;AAAA,IACA,cAAAC;AAAA,IACA,eAAAkB;AAAA,IACA,kBAAAC;AAAA,IACA,WAAAlB;AAAA,IACA,IAAAE;AAAA,IACA,oBAAAC;AAAA,IACA,OAAAkC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,EAAA,IACXlD,GAEE,EAAE,GAAAmB,EAAA,IAAMC,EAAA,GACR+B,IAAeN,MAAU,QACzB,CAACO,GAAeC,CAAgB,IAAI9B,EAASuB,KAAgB,EAAE,GAC/DtD,IAAQ2D,IAAgBN,KAAS,KAAMO,GAEvC,CAACE,GAAMC,CAAO,IAAIhC,EAAS,EAAK,GAChC,CAACiC,GAAaC,CAAc,IAAIlC,EAAS,CAAC,GAG1CmC,IAAWtB,EAAgC,IAAI,GAC/CuB,IAAYC,GAAA,GAEZC,IAAuBC,GAAqB,CAACC,MAAiB;AAClE,IAAAhB,KAAA,QAAAA,EAAgBgB;AAAA,EAClB,GAAGb,CAAU,GAEPc,IAAc1B,EAA+B,MAC5CU,IACEA,EAAQ,QAAQ,CAACpD,MAAMA,EAAE,KAAK,IADhB,CAAA,GAEpB,CAACoD,CAAO,CAAC;AAGZ,EAAAxB,EAAU,MAAM;AACd,IAAIgC,IAAcQ,EAAY,SAAS,OAAkB,CAAC;AAAA,EAC5D,GAAG,CAACA,EAAY,QAAQR,CAAW,CAAC;AAEpC,QAAMS,IAAcC;AAAA,IAClB,CAACC,MAAgB;AACf,MAAKhB,KAAcE,EAAiBc,CAAG,GACvCN,EAAqBM,CAAG,GACxBZ,EAAQY,EAAI,OAAO,SAAS,CAAC;AAAA,IAC/B;AAAA,IACA,CAACN,GAAsBV,CAAY;AAAA,EAAA,GAG/BiB,IAASF;AAAA,IACb,CAACrE,MAA8B;AAC7B,MAAAoD,KAAA,QAAAA,EAAWpD,IACX0D,EAAQ,EAAK,GACRJ,KAAcE,EAAiB,EAAE;AAAA,IACxC;AAAA,IACA,CAACJ,GAAUE,CAAY;AAAA,EAAA,GAGnBkB,IAAgBH;AAAA,IACpB,CAACI,MAA8C;AAC7C,UAAI,EAAAA,EAAM,YAAY,eAAeA,EAAM,YAAY,MACvD;AAAA,YAAI,CAAChB,KAAQgB,EAAM,QAAQ,eAAeN,EAAY,SAAS,GAAG;AAChE,UAAAM,EAAM,eAAA,GACNf,EAAQ,EAAI;AACZ;AAAA,QACF;AACA,YAAKD;AACL,cAAIgB,EAAM,QAAQ;AAChB,YAAAA,EAAM,eAAA,GACNb,EAAe,CAACc,OAAOA,IAAI,KAAK,KAAK,IAAIP,EAAY,QAAQ,CAAC,CAAC;AAAA,mBACtDM,EAAM,QAAQ;AACvB,YAAAA,EAAM,eAAA,GACNb;AAAA,cACE,CAACc,OACEA,IAAI,IAAI,KAAK,IAAIP,EAAY,QAAQ,CAAC,KACvC,KAAK,IAAIA,EAAY,QAAQ,CAAC;AAAA,YAAA;AAAA,mBAEzBM,EAAM,QAAQ,SAAS;AAChC,kBAAMzE,IAAOmE,EAAYR,CAAW;AACpC,YAAI3D,MACFyE,EAAM,eAAA,GACNF,EAAOvE,CAAI;AAAA,UAEf,MAAA,CAAWyE,EAAM,QAAQ,aACvBA,EAAM,eAAA,GACNf,EAAQ,EAAK;AAAA;AAAA,IAEjB;AAAA,IACA,CAACD,GAAMU,GAAaR,GAAaY,CAAM;AAAA,EAAA,GAGnCxC,KACJtB,KAAea,EAAE,sBAAsB,SAAc,GAEjDqD,IAAaR,EAAY,SAAS,GAKlCS,KACJnB,KAAQkB,IAAa,GAAGb,CAAS,WAAWH,CAAW,KAAK,QAExDkB,IAAuBR;AAAA,IAC3B,CAACH,MAAiB;AAChB,MAAKZ,KAAcE,EAAiBU,CAAI,GACxChB,KAAA,QAAAA,EAAgBgB,IAChBR,EAAQQ,EAAK,OAAO,SAAS,CAAC;AAAA,IAChC;AAAA,IACA,CAACZ,GAAcJ,CAAa;AAAA,EAAA,GAGxBV,IAAUD,EAAuB,IAAI;AAC3C,EAAAK;AAAA,IACET;AAAA,IACA,MAAMK,EAAQ;AAAA,IACd,CAAA;AAAA,EAAC;AAGH,QAAMsC,KAAcrC;AAAA,IAClB,OAAO;AAAA,MACL,UAAU,MAAM9C;AAAA,MAChB,UAAUkF;AAAA,MACV,OAAO,MAAM;AACX,QAAAA,EAAqB,EAAE;AAAA,MACzB;AAAA,MACA,QAAQ,MAAM;AACZ,cAAM7E,IAAOmE,EAAYR,CAAW;AACpC,QAAI3D,OAAaA,CAAI;AAAA,MACvB;AAAA,MACA,OAAO,MAAA;;AAAM,gBAAA0C,IAAAmB,EAAS,YAAT,gBAAAnB,EAAkB;AAAA;AAAA,MAC/B,kBAAkB,CAACC,MAAoB7B,KAAA,gBAAAA,EAAqB6B;AAAA,IAAO;AAAA,IAErE;AAAA,MACEhD;AAAA,MACAkF;AAAA,MACAV;AAAA,MACAR;AAAA,MACAY;AAAA,MACAzD;AAAA,IAAA;AAAA,EACF;AAEF,SAAA+B,EAAqB9D,GAAgB+F,IAAajE,CAAE,GAGlD,gBAAAmB,EAAC+C,EAAa,MAAb,EAAkB,MAAMtB,KAAQkB,GAAY,cAAcjB,GACzD,UAAA,gBAAAZ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKN;AAAA,MACJ,GAAGV;AAAA,MACJ,IAAAjB;AAAA,MACA,kBAAe;AAAA,MACf,qBAAmBA;AAAA,MACnB,WAAW,CAACtB,GAAsB,EAAE,MAAAe,GAAM,SAAAC,EAAA,CAAS,GAAGI,CAAS,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEX,UAAA;AAAA,QAAA,gBAAAqB,EAAC+C,EAAa,QAAb,EAAoB,SAAO,IAE1B,UAAA,gBAAAjC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,WAAW0B;AAAA,YAEX,UAAA;AAAA,cAAA,gBAAAxC;AAAA,gBAACgD;AAAA,gBAAA;AAAA,kBACC,KAAKnB;AAAA,kBACL,MAAAvD;AAAA,kBACA,OAAOX;AAAA,kBACP,SAASyE;AAAA,kBACT,aAAarC;AAAA,kBACb,cAAYT,EAAE,gBAAgB,QAAQ;AAAA,kBACtC,qBAAmBO;AAAA,kBACnB,MAAK;AAAA,kBACL,iBAAe4B,KAAQkB;AAAA,kBACvB,iBAAeb;AAAA,kBACf,yBAAuBc;AAAA,gBAAA;AAAA,cAAA;AAAA,cAExBlE,IACC,gBAAAsB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACTxC,EAAA;AAAA,oBACA;AAAA,oBACA;AAAA,kBAAA,EACA,KAAK,GAAG;AAAA,kBAET,UAAAoC;AAAA,gBAAA;AAAA,cAAA,IAED;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAER;AAAA,QACA,gBAAAI,EAAC+C,EAAa,QAAb,EACC,UAAA,gBAAA/C;AAAA,UAAC+C,EAAa;AAAA,UAAb;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,YAAY;AAAA,YACZ,cAAYzD,EAAE,uBAAuB,gBAAgB;AAAA,YACrD,iBAAiB,CAAC,MAAM,EAAE,eAAA;AAAA,YAI1B,WAAW;AAAA,cACT7B,GAAA;AAAA,cACA;AAAA,YAAA,EACA,KAAK,GAAG;AAAA,YAMV,UAAA,gBAAAuC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,IAAI8B;AAAA,gBACJ,MAAK;AAAA,gBACL,cAAYxC,EAAE,uBAAuB,gBAAgB;AAAA,gBACrD,WAAU;AAAA,gBAET,UAAA6B,KAAWA,EAAQ,SAAS,IAC3B8B;AAAA,kBACE9B;AAAA,kBACAQ;AAAA,kBACAG;AAAA,kBACAS;AAAA,kBACAX;AAAA,gBAAA,IAGF,gBAAA5B;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAU;AAAA,oBAET,UAAAV;AAAA,sBACC;AAAA,sBACA;AAAA,sBACA;AAAA,wBACE,OAAA3B;AAAA,sBAAA;AAAA,oBACF;AAAA,kBACF;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAASsF,GACPrF,GACA+D,GACAG,GACAoB,GACAC,GACW;AACX,MAAIC,IAAY;AAIhB,SAAOxF,EAAO,IAAI,CAACyF,GAAOC,MAAO;AAC/B,UAAMC,IAAYF,EAAM,UACpB,GAAGvB,CAAS,UAAUwB,CAAE,aACxB;AACJ,WACE,gBAAAxC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAMuC,EAAM,UAAU,UAAU;AAAA,QAChC,mBAAiBE;AAAA,QAEhB,UAAA;AAAA,UAAAF,EAAM,UACL,gBAAArD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIuD;AAAA,cACJ,eAAY;AAAA,cACZ,WAAU;AAAA,cAET,UAAAF,EAAM;AAAA,YAAA;AAAA,UAAA,IAEP;AAAA,UACHA,EAAM,MAAM,IAAI,CAACrF,MAAS;AACzB,kBAAMwF,IAAUJ;AAChB,YAAAA,KAAa;AACb,kBAAMK,IAAWD,MAAY7B,GACvB+B,IAAW,GAAG5B,CAAS,WAAW0B,CAAO,IACzCG,IAAWC,GAAmB5F,EAAK,IAAI,GACvC6F,IAAc;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACAJ,IAAW,4BAA4B;AAAA,YAAA,EACvC,KAAK,GAAG,GACJK,IACJ,gBAAAhD,EAAAiD,IAAA,EACG,UAAA;AAAA,cAAA/F,EAAK,OACJ,gBAAAgC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,eAAY;AAAA,kBACZ,WAAU;AAAA,kBAET,UAAAhC,EAAK;AAAA,gBAAA;AAAA,cAAA,IAEN;AAAA,cACJ,gBAAAgC,EAAC,QAAA,EAAK,WAAU,kDACb,YAAK,OACR;AAAA,cACChC,EAAK,OACJ,gBAAAgC,EAAC,QAAA,EAAK,WAAU,0DACb,UAAAhC,EAAK,MACR,IACE;AAAA,YAAA,GACN,GAEIgG,IAAS;AAAA,cACb,IAAIN;AAAA,cACJ,MAAM;AAAA,cACN,iBAAiBD;AAAA;AAAA;AAAA,cAGjB,aAAa,CAACQ,MAAwB;AACpC,gBAAAA,EAAE,eAAA,GACFf,EAASlF,CAAI;AAAA,cACf;AAAA,cACA,cAAc,MAAMmF,EAAUK,CAAO;AAAA,cACrC,WAAWK;AAAA,YAAA;AAEb,mBAAIF,IAEA,gBAAA3D,EAAC,OAAgB,MAAM2D,GAAW,GAAGK,GAClC,UAAAF,KADK9F,EAAK,EAEb,sBAID,OAAA,EAAmB,GAAGgG,GACpB,UAAAF,EAAA,GADO9F,EAAK,EAEf;AAAA,UAEJ,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MA1EI,KAAKsF,CAAE;AAAA,IAAA;AAAA,EA6ElB,CAAC;AACH;AAQA,SAASM,GAAmBM,GAA8C;AACxE,MAAI,CAACA,EAAM;AACX,QAAMC,IAAUD,EAAK,KAAA;AACrB,MAAIC,MAAY,OACZ,2BAA2B,KAAKA,CAAO,KAGvC,oBAAoB,KAAKA,CAAO;AAAG,WAAOA;AAEhD;"}
|
|
1
|
+
{"version":3,"file":"search-bar-CP6wUJFY.js","sources":["../../src/components/search-bar/search-bar.agent.ts","../../src/components/search-bar/search-bar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — SearchBar. */\n/* */\n/* SearchBar is the kit's saved-search / global-search surface. In */\n/* `inline` mode it filters + opens a result popover; in `launcher` */\n/* mode it opens the CommandPalette. The adapter exposes the query, */\n/* a submit action, and an apply_saved_search hook so future MCP */\n/* tooling can drive the SearchBar by saved-search id. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SearchBarHandle } from './search-bar';\n\nexport const searchBarAgent: AgentAdapter<SearchBarHandle> = {\n id: 'search-bar',\n capabilities: ['filter', 'edit_inline', 'submit'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.searchBar.state.query',\n description:\n 'Current raw query string (inline mode). Empty in launcher mode.',\n read: (handle) => handle.getQuery(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.searchBar.state.isEmpty',\n description: 'True when the query is empty.',\n read: (handle) => handle.getQuery().length === 0,\n },\n },\n actions: {\n set_query: {\n safety: 'read',\n argsType: '{ query: string }',\n descriptionKey: 'ui.agent.searchBar.actions.setQuery',\n description:\n 'Replace the current query (inline mode only). No-op in launcher mode.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.clear',\n description: 'Clear the query and close the result popover.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.submit',\n description:\n 'In launcher mode opens the CommandPalette; in inline mode commits the highlighted option.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.focus',\n description: 'Move keyboard focus to the SearchBar.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n apply_saved_search: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.searchBar.actions.applySavedSearch',\n description:\n 'Apply a saved-search by id. The host wires the actual query lookup; the adapter routes the id to its onApplySavedSearch handler. No-op when no handler is wired.',\n invoke: (handle, args: { id: string }) => {\n handle.applySavedSearch(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'search-bar',\n description: 'Marks the SearchBar root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { SearchInput } from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { searchBarAgent } from './search-bar.agent';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (\n navigator as unknown as {\n userAgentData?: { platform?: string };\n }\n ).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n ['ds:inline-flex ds:flex-col', 'ds:w-full'].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n /**\n * Called when an external driver (agent adapter) asks the host to apply\n * a saved search by id. The host is responsible for resolving the saved\n * search and feeding the resulting query back through `value` /\n * `onQueryChange`. No-op when not provided.\n */\n onApplySavedSearch?: (id: string) => void;\n};\n\n/**\n * Imperative handle for agent-readiness + programmatic control. Replaces\n * the previously-forwarded `HTMLDivElement` ref. Consumers who needed the\n * DOM element for layout queries should wrap the SearchBar in their own\n * div with a ref attached.\n */\nexport interface SearchBarHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n focus: () => void;\n applySavedSearch: (id: string) => void;\n}\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<HTMLDivElement, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n id,\n onApplySavedSearch,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation();\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <LauncherSearchBar\n forwardedRef={ref}\n id={id}\n landmarkProps={landmarkProps}\n className={className}\n onOpenCommandPalette={onOpenCommandPalette}\n onApplySavedSearch={onApplySavedSearch}\n resolvedPlaceholder={resolvedPlaceholder}\n openLabel={t('search.open', 'Open search')}\n ariaKeyshortcuts={ariaKeyshortcuts}\n launcherClass={launcherVariants({ size, density })}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n rest={rest as HTMLAttributes<HTMLButtonElement>}\n />\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n id={id}\n onApplySavedSearch={onApplySavedSearch}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* LauncherSearchBar \\u2014 internal */\n/* ------------------------------------------------------------------ */\n\ninterface LauncherInternalProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n id?: string;\n landmarkProps: { role?: 'search' };\n className?: string;\n onOpenCommandPalette?: () => void;\n onApplySavedSearch?: (id: string) => void;\n resolvedPlaceholder: string;\n openLabel: string;\n ariaKeyshortcuts: string;\n launcherClass: string;\n shortcutHint: boolean;\n shortcutLabel: string;\n rest: HTMLAttributes<HTMLButtonElement>;\n}\n\nfunction LauncherSearchBar(props: LauncherInternalProps): ReactNode {\n const {\n forwardedRef,\n id,\n landmarkProps,\n className,\n onOpenCommandPalette,\n onApplySavedSearch,\n resolvedPlaceholder,\n openLabel,\n ariaKeyshortcuts,\n launcherClass,\n shortcutHint,\n shortcutLabel,\n rest,\n } = props;\n const buttonRef = useRef<HTMLButtonElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n const handle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => '',\n // Launcher mode is stateless \\u2014 it delegates to CommandPalette.\n setQuery: () => {},\n clear: () => {},\n submit: () => onOpenCommandPalette?.(),\n focus: () => buttonRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [onOpenCommandPalette, onApplySavedSearch],\n );\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n useAgentRegistration(searchBarAgent, handle, id);\n\n return (\n <div\n ref={rootRef}\n {...landmarkProps}\n data-component=\"search-bar\"\n data-component-id={id}\n id={id}\n className={className}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={openLabel}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherClass}\n {...rest}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n id?: string;\n onApplySavedSearch?: (id: string) => void;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n id,\n onApplySavedSearch,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation();\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const query = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n // SearchInput forwards an `HTMLInputElement` with the curated handle\n // methods grafted on — for our purposes we just need `.focus()`.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n\n const debouncedQueryChange = useDebouncedCallback((next: string) => {\n onQueryChange?.(next);\n }, debounceMs);\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (!isControlled) setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange, isControlled],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) setInternalValue('');\n },\n [onSelect, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n const setQueryProgrammatic = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onQueryChange?.(next);\n setOpen(next.trim().length > 0);\n },\n [isControlled, onQueryChange],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(\n forwardedRef,\n () => rootRef.current as HTMLDivElement,\n [],\n );\n\n const agentHandle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => query,\n setQuery: setQueryProgrammatic,\n clear: () => {\n setQueryProgrammatic('');\n },\n submit: () => {\n const item = flatResults[activeIndex];\n if (item) commit(item);\n },\n focus: () => inputRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [\n query,\n setQueryProgrammatic,\n flatResults,\n activeIndex,\n commit,\n onApplySavedSearch,\n ],\n );\n useAgentRegistration(searchBarAgent, agentHandle, id);\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n ref={rootRef}\n {...landmarkProps}\n id={id}\n data-component=\"search-bar\"\n data-component-id={id}\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keyboard handling propagates to the inner SearchInput; this wrapper captures combobox/listbox keys */}\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n value={query}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t(\n 'search.noResults',\n 'No results for \\u201C{{query}}\\u201D',\n {\n query,\n },\n )}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading\n ? `${listboxId}-group-${gi}-heading`\n : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:cursor-pointer',\n 'ds:no-underline ds:text-[color:var(--foreground)]',\n 'ds:min-h-[var(--min-target-size)]',\n isActive ? 'ds:bg-[var(--muted)]/40' : '',\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n"],"names":["searchBarAgent","handle","args","isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","id","onApplySavedSearch","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsx","LauncherSearchBar","InlineSearchBar","forwardedRef","openLabel","launcherClass","buttonRef","useRef","rootRef","useMemo","_a","savedId","useImperativeHandle","useAgentRegistration","jsxs","Search","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","listboxId","useId","debouncedQueryChange","useDebouncedCallback","next","flatResults","handleInput","useCallback","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","setQueryProgrammatic","agentHandle","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","body","Fragment","shared","e","href","trimmed"],"mappings":"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"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { jsx as t, jsxs as ne } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as ie, useState as F, useRef as K,
|
|
2
|
+
import { forwardRef as ie, useState as F, useRef as K, useCallback as V, useImperativeHandle as oe, useEffect as de } from "react";
|
|
3
3
|
import { c as x } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { useTranslation as
|
|
5
|
-
import { T as
|
|
6
|
-
import { S as
|
|
7
|
-
import { u as
|
|
4
|
+
import { useTranslation as le } from "react-i18next";
|
|
5
|
+
import { T as ce } from "./text-input-BaClJL8Y.js";
|
|
6
|
+
import { S as ue } from "./spinner-CCByyvcb.js";
|
|
7
|
+
import { u as fe } from "./form-field-context-B3APVHKx.js";
|
|
8
|
+
import { u as me } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
8
9
|
import { u as be } from "./use-debounced-callback-BisrB-Fq.js";
|
|
9
10
|
import { S as L } from "./search-BonnQsHv.js";
|
|
10
11
|
import { X as ve } from "./x-CCcI3eJp.js";
|
|
11
|
-
const
|
|
12
|
+
const pe = x("ds:relative ds:w-full"), he = x(
|
|
12
13
|
[
|
|
13
14
|
"ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3",
|
|
14
15
|
"ds:inline-flex ds:items-center ds:justify-center ds:pointer-events-auto",
|
|
@@ -64,13 +65,13 @@ const Ee = ie(
|
|
|
64
65
|
role: G,
|
|
65
66
|
...v
|
|
66
67
|
}, J) => {
|
|
67
|
-
const { t: E } =
|
|
68
|
+
const { t: E } = le(), D = fe(), z = y ?? D.id, w = !!(D.disabled || X), S = o !== void 0, [M, Y] = F(
|
|
68
69
|
String(c ?? "")
|
|
69
70
|
), f = S ? String(o) : M, k = f.length > 0, a = K(null), [N, T] = F(
|
|
70
71
|
u === "inline" || k
|
|
71
|
-
),
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
), p = K(!1);
|
|
73
|
+
me(() => {
|
|
74
|
+
p.current && a.current && (a.current.focus(), p.current = !1);
|
|
74
75
|
});
|
|
75
76
|
const j = be((e) => {
|
|
76
77
|
n == null || n(e);
|
|
@@ -98,11 +99,11 @@ const Ee = ie(
|
|
|
98
99
|
d(""), r == null || r(""), i(""), (e = a.current) == null || e.focus();
|
|
99
100
|
}, ee = (e) => {
|
|
100
101
|
u === "expandable" && e.currentTarget.value === "" && T(!1);
|
|
101
|
-
},
|
|
102
|
+
}, h = V(() => {
|
|
102
103
|
var e;
|
|
103
|
-
u === "expandable" && !N ? (
|
|
104
|
+
u === "expandable" && !N ? (p.current = !0, T(!0)) : (e = a.current) == null || e.focus();
|
|
104
105
|
}, [u, N]);
|
|
105
|
-
|
|
106
|
+
oe(J, () => {
|
|
106
107
|
const e = a.current;
|
|
107
108
|
if (!e) return null;
|
|
108
109
|
const s = {
|
|
@@ -122,7 +123,7 @@ const Ee = ie(
|
|
|
122
123
|
// `HTMLElement.focus` slot. The adapter wires `actions.focus` to
|
|
123
124
|
// `agentFocus` so the expandable-aware path is preserved.
|
|
124
125
|
agentFocus: () => {
|
|
125
|
-
|
|
126
|
+
h();
|
|
126
127
|
}
|
|
127
128
|
};
|
|
128
129
|
for (const [l, m] of Object.entries(s))
|
|
@@ -133,13 +134,13 @@ const Ee = ie(
|
|
|
133
134
|
enumerable: !1
|
|
134
135
|
});
|
|
135
136
|
return e;
|
|
136
|
-
}, [f, d, r, i,
|
|
137
|
+
}, [f, d, r, i, h]), de(() => {
|
|
137
138
|
if (!g) return;
|
|
138
139
|
const e = (s) => {
|
|
139
|
-
s.key === g && (s.isComposing || s.defaultPrevented || ye(document.activeElement) || (s.preventDefault(),
|
|
140
|
+
s.key === g && (s.isComposing || s.defaultPrevented || ye(document.activeElement) || (s.preventDefault(), h()));
|
|
140
141
|
};
|
|
141
142
|
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
142
|
-
}, [g,
|
|
143
|
+
}, [g, h]);
|
|
143
144
|
const re = E("inputs.search.clear", "Clear search"), A = E("inputs.search.loading", "Searching…"), se = E("inputs.search.placeholder", "Search…"), B = Q ?? se;
|
|
144
145
|
if (u === "expandable" && !N)
|
|
145
146
|
return /* @__PURE__ */ t(
|
|
@@ -157,7 +158,7 @@ const Ee = ie(
|
|
|
157
158
|
"aria-controls": z,
|
|
158
159
|
disabled: w,
|
|
159
160
|
onClick: () => {
|
|
160
|
-
|
|
161
|
+
p.current = !0, T(!0);
|
|
161
162
|
},
|
|
162
163
|
className: xe(),
|
|
163
164
|
children: /* @__PURE__ */ t(L, { "aria-hidden": "true", className: "ds:size-4" })
|
|
@@ -170,16 +171,16 @@ const Ee = ie(
|
|
|
170
171
|
"aria-expanded": v["aria-expanded"],
|
|
171
172
|
"aria-controls": v["aria-controls"],
|
|
172
173
|
"aria-activedescendant": v["aria-activedescendant"]
|
|
173
|
-
} : void 0, R = k && !b && !w, ae = b ? /* @__PURE__ */ t(
|
|
174
|
+
} : void 0, R = k && !b && !w, ae = b ? /* @__PURE__ */ t(ue, { size: "sm", label: A }) : R ? /* @__PURE__ */ t("span", { className: "ds:inline-block ds:size-4", "aria-hidden": "true" }) : void 0;
|
|
174
175
|
return /* @__PURE__ */ ne(
|
|
175
176
|
"div",
|
|
176
177
|
{
|
|
177
178
|
"data-component": "search-input",
|
|
178
179
|
"data-component-id": y,
|
|
179
|
-
className:
|
|
180
|
+
className: pe({ className: C }),
|
|
180
181
|
children: [
|
|
181
182
|
/* @__PURE__ */ t(
|
|
182
|
-
|
|
183
|
+
ce,
|
|
183
184
|
{
|
|
184
185
|
ref: a,
|
|
185
186
|
id: z,
|
|
@@ -210,7 +211,7 @@ const Ee = ie(
|
|
|
210
211
|
type: "button",
|
|
211
212
|
"aria-label": re,
|
|
212
213
|
onClick: I,
|
|
213
|
-
className:
|
|
214
|
+
className: he(),
|
|
214
215
|
children: /* @__PURE__ */ t(ve, { "aria-hidden": "true", className: "ds:size-4" })
|
|
215
216
|
}
|
|
216
217
|
) : null,
|
|
@@ -233,4 +234,4 @@ Ee.displayName = "SearchInput";
|
|
|
233
234
|
export {
|
|
234
235
|
Ee as S
|
|
235
236
|
};
|
|
236
|
-
//# sourceMappingURL=search-input-
|
|
237
|
+
//# sourceMappingURL=search-input-C1C3jQpD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-input-C1C3jQpD.js","sources":["../../src/components/search-input/search-input.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search, X } from 'lucide-react';\nimport { TextInput } from '../text-input/text-input';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\nconst rootVariants = cva('ds:relative ds:w-full');\n\nconst clearButtonVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center ds:pointer-events-auto',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:bg-background ds:border ds:border-border ds:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:text-foreground ds:hover:bg-muted',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandableWrapperVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:transition-[width] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\ntype SearchInputRole = 'combobox';\n\nexport interface SearchInputProps {\n value?: string;\n defaultValue?: string;\n onChange?: (debouncedValue: string) => void;\n onInput?: (rawValue: string) => void;\n debounceMs?: number;\n isLoading?: boolean;\n variant?: 'inline' | 'expandable';\n size?: 'sm' | 'md' | 'lg';\n globalShortcut?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n name?: string;\n id?: string;\n form?: string;\n autoComplete?: string;\n autoFocus?: boolean;\n 'aria-label'?: string;\n role?: SearchInputRole;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n 'aria-activedescendant'?: string;\n}\n\nfunction isEditableElement(el: Element | null): boolean {\n if (!el) return false;\n const tag = el.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if ((el as HTMLElement).isContentEditable) return true;\n return false;\n}\n\n/**\n * Imperative handle for agent-readiness + programmatic control.\n *\n * The forwarded ref intersects the underlying `HTMLInputElement` so\n * existing consumers (`ref.current.focus()` etc.) keep working — we\n * mutate the live input element to add the curated methods rather than\n * returning a new object from `useImperativeHandle`.\n */\nexport interface SearchInputHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n /**\n * Expand-aware focus. Named `agentFocus` rather than `focus` because\n * the handle is grafted onto the underlying `HTMLInputElement` and the\n * native `focus` slot is non-writable.\n */\n agentFocus: () => void;\n}\n\n/**\n * Backwards-compatible alias retained for one release cycle — the\n * forwarded ref's value is structurally an `HTMLInputElement` with the\n * `SearchInputHandle` methods grafted on. Consumers can read it as\n * either type via a cast.\n */\nexport type SearchInputRefValue = HTMLInputElement & SearchInputHandle;\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onInput,\n debounceMs = 200,\n isLoading = false,\n variant = 'inline',\n size = 'md',\n globalShortcut,\n placeholder,\n disabled,\n className,\n name,\n id,\n form,\n autoComplete = 'off',\n autoFocus,\n role,\n ...ariaProps\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inputId = id ?? ctx.id;\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n String(defaultValue ?? ''),\n );\n const rawValue = isControlled ? String(value) : internalValue;\n const hasValue = rawValue.length > 0;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n\n const [expanded, setExpanded] = useState<boolean>(\n variant === 'inline' || hasValue,\n );\n const pendingFocusRef = useRef<boolean>(false);\n\n useIsomorphicLayoutEffect(() => {\n if (pendingFocusRef.current && innerRef.current) {\n innerRef.current.focus();\n pendingFocusRef.current = false;\n }\n });\n\n const debouncedOnChange = useDebouncedCallback((next: string) => {\n onChange?.(next);\n }, debounceMs);\n\n const fireImmediate = useCallback(\n (next: string) => {\n debouncedOnChange.cancel();\n onChange?.(next);\n },\n [debouncedOnChange, onChange],\n );\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n },\n [isControlled],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n commitValue(next);\n if (next === '') {\n fireImmediate('');\n } else {\n debouncedOnChange(next);\n }\n };\n\n const handleNativeInput = (event: FormEvent<HTMLInputElement>) => {\n const next = event.currentTarget.value;\n onInput?.(next);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape') return;\n if (event.nativeEvent.isComposing) return;\n if (!hasValue) return;\n event.preventDefault();\n event.stopPropagation();\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleClear = () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n if (variant !== 'expandable') return;\n if (event.currentTarget.value === '') {\n setExpanded(false);\n }\n };\n\n const focusInput = useCallback(() => {\n if (variant === 'expandable' && !expanded) {\n pendingFocusRef.current = true;\n setExpanded(true);\n } else {\n innerRef.current?.focus();\n }\n }, [variant, expanded]);\n\n // Build a `SearchInputRefValue` (HTMLInputElement & SearchInputHandle)\n // by attaching the curated agent methods onto the live input element.\n // Returning a fresh object would break existing consumers who do\n // `ref.current.value`, `ref.current.focus()`, etc. Instead we extend\n // the underlying DOM node with the handle methods.\n useImperativeHandle(ref, () => {\n const node = innerRef.current;\n // `useImperativeHandle` may not return null in strict typing, but\n // the cast lets us yield the live DOM node on mount and `null`\n // before mount — React itself tolerates this.\n if (!node) return null as unknown as HTMLInputElement;\n // `focus` is a non-writable own property on HTMLInputElement, so\n // we use `defineProperty` (which honours `writable: true`) to\n // graft the curated methods. The native `focus()` is the\n // canonical one — for `variant=\"expandable\"` consumers should\n // call the named curated method via `agentRef` rather than via\n // the DOM ref.\n const extras: Record<string, (...args: unknown[]) => unknown> = {\n getQuery: () => rawValue,\n setQuery: (next: unknown) => {\n const value = String(next ?? '');\n commitValue(value);\n onInput?.(value);\n fireImmediate(value);\n },\n clear: () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n },\n submit: () => {\n fireImmediate(rawValue);\n },\n // Named `agentFocus` to avoid clashing with the native, read-only\n // `HTMLElement.focus` slot. The adapter wires `actions.focus` to\n // `agentFocus` so the expandable-aware path is preserved.\n agentFocus: () => {\n focusInput();\n },\n };\n for (const [name, fn] of Object.entries(extras)) {\n Object.defineProperty(node, name, {\n value: fn,\n configurable: true,\n writable: true,\n enumerable: false,\n });\n }\n return node;\n }, [rawValue, commitValue, onInput, fireImmediate, focusInput]);\n\n useEffect(() => {\n if (!globalShortcut) return;\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== globalShortcut) return;\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (isEditableElement(document.activeElement)) return;\n event.preventDefault();\n focusInput();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [globalShortcut, focusInput]);\n\n const clearLabel = t('inputs.search.clear', 'Clear search');\n const loadingLabel = t('inputs.search.loading', 'Searching…');\n const defaultPlaceholder = t('inputs.search.placeholder', 'Search…');\n const resolvedPlaceholder = placeholder ?? defaultPlaceholder;\n\n if (variant === 'expandable' && !expanded) {\n return (\n <div\n data-component=\"search-input\"\n data-component-id={id}\n className={expandableWrapperVariants({ className })}\n >\n <button\n type=\"button\"\n aria-label={resolvedPlaceholder}\n aria-expanded={false}\n aria-controls={inputId}\n disabled={effectiveDisabled}\n onClick={() => {\n pendingFocusRef.current = true;\n setExpanded(true);\n }}\n className={expandButtonVariants()}\n >\n <Search aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n </div>\n );\n }\n\n const comboboxAria =\n role === 'combobox'\n ? {\n role: 'combobox' as const,\n 'aria-expanded': ariaProps['aria-expanded'],\n 'aria-controls': ariaProps['aria-controls'],\n 'aria-activedescendant': ariaProps['aria-activedescendant'],\n }\n : undefined;\n\n const showClear = hasValue && !isLoading && !effectiveDisabled;\n const endSlot = isLoading ? (\n <Spinner size=\"sm\" label={loadingLabel} />\n ) : showClear ? (\n <span className=\"ds:inline-block ds:size-4\" aria-hidden=\"true\" />\n ) : undefined;\n\n return (\n <div\n data-component=\"search-input\"\n data-component-id={id}\n className={rootVariants({ className })}\n >\n <TextInput\n ref={innerRef}\n id={inputId}\n type=\"search\"\n size={size}\n value={rawValue}\n disabled={effectiveDisabled}\n placeholder={resolvedPlaceholder}\n name={name}\n form={form}\n autoComplete={autoComplete}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- forwarding caller-supplied autoFocus to the inner TextInput\n autoFocus={autoFocus}\n startAdornment={<Search />}\n endAdornment={endSlot}\n clearable={false}\n onChange={handleChange}\n onInput={handleNativeInput}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n aria-label={ariaProps['aria-label']}\n aria-busy={isLoading || undefined}\n {...comboboxAria}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className={clearButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {isLoading ? loadingLabel : ''}\n </span>\n </div>\n );\n },\n);\n\nSearchInput.displayName = 'SearchInput';\n"],"names":["rootVariants","cva","clearButtonVariants","expandButtonVariants","expandableWrapperVariants","isEditableElement","el","tag","SearchInput","forwardRef","value","defaultValue","onChange","onInput","debounceMs","isLoading","variant","size","globalShortcut","placeholder","disabled","className","name","id","form","autoComplete","autoFocus","role","ariaProps","ref","t","useTranslation","ctx","useFormField","inputId","effectiveDisabled","isControlled","internalValue","setInternalValue","useState","rawValue","hasValue","innerRef","useRef","expanded","setExpanded","pendingFocusRef","useIsomorphicLayoutEffect","debouncedOnChange","useDebouncedCallback","next","fireImmediate","useCallback","commitValue","handleChange","event","handleNativeInput","handleKeyDown","_a","handleClear","handleBlur","focusInput","useImperativeHandle","node","extras","fn","useEffect","onKeyDown","clearLabel","loadingLabel","defaultPlaceholder","resolvedPlaceholder","jsx","Search","comboboxAria","showClear","endSlot","Spinner","jsxs","TextInput","X"],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ import { g as be } from "./group-options-BvKhQ3xb.js";
|
|
|
8
8
|
import { C as ye } from "./chevron-up-zOEDrmBB.js";
|
|
9
9
|
import { C as q } from "./chevron-down-BX_NP2Yh.js";
|
|
10
10
|
import { C as Se } from "./check-DPdL_Sm7.js";
|
|
11
|
-
import { u as xe } from "./use-direction-
|
|
12
|
-
import { u as Ne } from "./registry-
|
|
11
|
+
import { u as xe } from "./use-direction-Dp8h70PP.js";
|
|
12
|
+
import { u as Ne } from "./registry-nPAVE19X.js";
|
|
13
13
|
import { X as Ce } from "./x-CCcI3eJp.js";
|
|
14
14
|
const we = {
|
|
15
15
|
id: "select",
|
|
@@ -410,4 +410,4 @@ export {
|
|
|
410
410
|
H as i,
|
|
411
411
|
j
|
|
412
412
|
};
|
|
413
|
-
//# sourceMappingURL=select-
|
|
413
|
+
//# sourceMappingURL=select-hsCaJSX3.js.map
|