@alfadocs/ui-kit-debug 1.67.0 → 1.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{address-fields-CJtu7LQU.js → address-fields-BUPRs3n-.js} +3 -3
- package/dist/_chunks/{address-fields-CJtu7LQU.js.map → address-fields-BUPRs3n-.js.map} +1 -1
- package/dist/_chunks/{agenda-card-DR9gDdKp.js → agenda-card-BDuvreCe.js} +2 -2
- package/dist/_chunks/{agenda-card-DR9gDdKp.js.map → agenda-card-BDuvreCe.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-DGB1Zup-.js → agenda-tray-CfwylhWf.js} +3 -3
- package/dist/_chunks/{agenda-tray-DGB1Zup-.js.map → agenda-tray-CfwylhWf.js.map} +1 -1
- package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js → ai-credits-exhausted-notice-Bg8NpW2K.js} +2 -2
- package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js.map → ai-credits-exhausted-notice-Bg8NpW2K.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js → ai-permission-notice-C00i6VhY.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js.map → ai-permission-notice-C00i6VhY.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-DSGSe4LH.js → ai-prompt-input-DzgyoKyk.js} +141 -139
- package/dist/_chunks/ai-prompt-input-DzgyoKyk.js.map +1 -0
- package/dist/_chunks/{alert-DjsJMGRE.js → alert-9kEwDza3.js} +122 -112
- package/dist/_chunks/alert-9kEwDza3.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-qe0quZkB.js → alia-sidebar-B06ZSOaF.js} +3 -3
- package/dist/_chunks/{alia-sidebar-qe0quZkB.js.map → alia-sidebar-B06ZSOaF.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js → anamnesis-summary-card-DQ3iE1gD.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js.map → anamnesis-summary-card-DQ3iE1gD.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-BQ_EokKz.js → anamnesis-summary-rows-CNK0fIJk.js} +392 -388
- package/dist/_chunks/anamnesis-summary-rows-CNK0fIJk.js.map +1 -0
- package/dist/_chunks/{appointment-card-CL32sux-.js → appointment-card-5JMWi9_f.js} +2 -2
- package/dist/_chunks/{appointment-card-CL32sux-.js.map → appointment-card-5JMWi9_f.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-B5mcDcXt.js → appointment-peek-D5XCfYKu.js} +2 -2
- package/dist/_chunks/{appointment-peek-B5mcDcXt.js.map → appointment-peek-D5XCfYKu.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-CCqjORFb.js → appointment-timeline-VFP6HoXT.js} +4 -4
- package/dist/_chunks/{appointment-timeline-CCqjORFb.js.map → appointment-timeline-VFP6HoXT.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-qtpJt8e0.js → appointment-tray-B3PDER3I.js} +3 -3
- package/dist/_chunks/{appointment-tray-qtpJt8e0.js.map → appointment-tray-B3PDER3I.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-B11RR-rC.js → audio-recorder-4Ll0pwYK.js} +3 -3
- package/dist/_chunks/{audio-recorder-B11RR-rC.js.map → audio-recorder-4Ll0pwYK.js.map} +1 -1
- package/dist/_chunks/{auth-form-parts-DwUTH6YN.js → auth-form-parts-B40zvD-a.js} +2 -2
- package/dist/_chunks/{auth-form-parts-DwUTH6YN.js.map → auth-form-parts-B40zvD-a.js.map} +1 -1
- package/dist/_chunks/avatar-BPiPL7ND.js +199 -0
- package/dist/_chunks/avatar-BPiPL7ND.js.map +1 -0
- package/dist/_chunks/{balance-badge-cell-DZNthHO1.js → balance-badge-cell-BG3DMly4.js} +4 -4
- package/dist/_chunks/{balance-badge-cell-DZNthHO1.js.map → balance-badge-cell-BG3DMly4.js.map} +1 -1
- package/dist/_chunks/{bishop-score-CaNTrikJ.js → bishop-score-Df8nF1qg.js} +2 -2
- package/dist/_chunks/{bishop-score-CaNTrikJ.js.map → bishop-score-Df8nF1qg.js.map} +1 -1
- package/dist/_chunks/{booking-tTVxKPQY.js → booking-B1pDbERi.js} +377 -335
- package/dist/_chunks/booking-B1pDbERi.js.map +1 -0
- package/dist/_chunks/{calendar-BhN-jisv.js → calendar-BvOM8rG3.js} +2 -2
- package/dist/_chunks/{calendar-BhN-jisv.js.map → calendar-BvOM8rG3.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-MRrzcxAy.js → calendar-workspace-CYK1M83j.js} +18 -18
- package/dist/_chunks/{calendar-workspace-MRrzcxAy.js.map → calendar-workspace-CYK1M83j.js.map} +1 -1
- package/dist/_chunks/{chat-message-fRLZ95O5.js → chat-message-Be-9vIIQ.js} +2 -2
- package/dist/_chunks/{chat-message-fRLZ95O5.js.map → chat-message-Be-9vIIQ.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-BnFTIs6x.js → clinical-note-card-Caidqcwa.js} +2 -2
- package/dist/_chunks/{clinical-note-card-BnFTIs6x.js.map → clinical-note-card-Caidqcwa.js.map} +1 -1
- package/dist/_chunks/{color-picker-BsggJovx.js → color-picker-AcaWuKah.js} +99 -95
- package/dist/_chunks/color-picker-AcaWuKah.js.map +1 -0
- package/dist/_chunks/{combobox-U5yfO6o0.js → combobox-vF9O-QoG.js} +92 -83
- package/dist/_chunks/combobox-vF9O-QoG.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-C4-OCshj.js → contact-profile-card-CAwwOqHl.js} +40 -40
- package/dist/_chunks/contact-profile-card-CAwwOqHl.js.map +1 -0
- package/dist/_chunks/{control-room-rail-DUerqHeo.js → control-room-rail-BB6rCDWI.js} +3 -3
- package/dist/_chunks/{control-room-rail-DUerqHeo.js.map → control-room-rail-BB6rCDWI.js.map} +1 -1
- package/dist/_chunks/{country-select-DF5Bd_mn.js → country-select-CSE2Zm_s.js} +2 -2
- package/dist/_chunks/{country-select-DF5Bd_mn.js.map → country-select-CSE2Zm_s.js.map} +1 -1
- package/dist/_chunks/dashboard-grid-7JzaiKnk.js +1487 -0
- package/dist/_chunks/dashboard-grid-7JzaiKnk.js.map +1 -0
- package/dist/_chunks/{data-table-COoCQ4n_.js → data-table-Cty4-Jht.js} +3 -3
- package/dist/_chunks/{data-table-COoCQ4n_.js.map → data-table-Cty4-Jht.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-DBr1AhLg.js → dependent-selector-C4kOgO8b.js} +2 -2
- package/dist/_chunks/{dependent-selector-DBr1AhLg.js.map → dependent-selector-C4kOgO8b.js.map} +1 -1
- package/dist/_chunks/{document-preview-VyQOjFVL.js → document-preview-513f3iPn.js} +4 -4
- package/dist/_chunks/{document-preview-VyQOjFVL.js.map → document-preview-513f3iPn.js.map} +1 -1
- package/dist/_chunks/{document-scanner-CXH_GYh4.js → document-scanner-Bd3wbzpI.js} +2 -2
- package/dist/_chunks/{document-scanner-CXH_GYh4.js.map → document-scanner-Bd3wbzpI.js.map} +1 -1
- package/dist/_chunks/{editable-description-ChGNdYY8.js → editable-description-DnAFi360.js} +2 -2
- package/dist/_chunks/{editable-description-ChGNdYY8.js.map → editable-description-DnAFi360.js.map} +1 -1
- package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js → entity-summary-C2B8yNmc.js} +4 -4
- package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js.map → entity-summary-C2B8yNmc.js.map} +1 -1
- package/dist/_chunks/{error-summary-PUE5Zxp9.js → error-summary-mGxIyDAY.js} +2 -2
- package/dist/_chunks/{error-summary-PUE5Zxp9.js.map → error-summary-mGxIyDAY.js.map} +1 -1
- package/dist/_chunks/{face-scheme-DAD-mXzM.js → face-scheme-CSJdRNad.js} +248 -244
- package/dist/_chunks/{face-scheme-DAD-mXzM.js.map → face-scheme-CSJdRNad.js.map} +1 -1
- package/dist/_chunks/{file-manager-RiV7-OEE.js → file-manager-D4cPnRhL.js} +3 -3
- package/dist/_chunks/{file-manager-RiV7-OEE.js.map → file-manager-D4cPnRhL.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-CPOfRE0C.js → forgot-password-form-Dqi7R-NL.js} +4 -4
- package/dist/_chunks/{forgot-password-form-CPOfRE0C.js.map → forgot-password-form-Dqi7R-NL.js.map} +1 -1
- package/dist/_chunks/format-number-DdzqwMs1.js +13 -0
- package/dist/_chunks/format-number-DdzqwMs1.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-6DO7noHX.js → freemium-paywall-C73C8Rgd.js} +2 -2
- package/dist/_chunks/{freemium-paywall-6DO7noHX.js.map → freemium-paywall-C73C8Rgd.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js → gestational-age-calculator-Du53p8MH.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js.map → gestational-age-calculator-Du53p8MH.js.map} +1 -1
- package/dist/_chunks/{header-settings-BSH9Gk0J.js → header-settings-DlUbvAUx.js} +37 -36
- package/dist/_chunks/header-settings-DlUbvAUx.js.map +1 -0
- package/dist/_chunks/{heatmap-C1TeC7wT.js → heatmap-DbZIQg14.js} +4 -4
- package/dist/_chunks/{heatmap-C1TeC7wT.js.map → heatmap-DbZIQg14.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js → help-me-write-templates-5WkUfvc_.js} +3 -3
- package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js.map → help-me-write-templates-5WkUfvc_.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-DWs1UEXb.js → kit-extensions-CYvLL4ee.js} +3 -3
- package/dist/_chunks/{kit-extensions-DWs1UEXb.js.map → kit-extensions-CYvLL4ee.js.map} +1 -1
- package/dist/_chunks/length-token-DwMnGEYT.js +24 -0
- package/dist/_chunks/length-token-DwMnGEYT.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js → link-cell-renderer-DtIsQWDO.js} +4 -4
- package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js.map → link-cell-renderer-DtIsQWDO.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-A-CL3mjt.js → login-dev-card-vEL-o5wq.js} +3 -3
- package/dist/_chunks/{login-dev-card-A-CL3mjt.js.map → login-dev-card-vEL-o5wq.js.map} +1 -1
- package/dist/_chunks/{map-view-BuVfJMEa.js → map-view-CtohteZD.js} +300 -191
- package/dist/_chunks/map-view-CtohteZD.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js → marketplace-app-shell-CcLQ0Dn-.js} +4 -4
- package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js.map → marketplace-app-shell-CcLQ0Dn-.js.map} +1 -1
- package/dist/_chunks/{message-card-A3mJNqfy.js → message-card-C_ksqIYM.js} +2 -2
- package/dist/_chunks/{message-card-A3mJNqfy.js.map → message-card-C_ksqIYM.js.map} +1 -1
- package/dist/_chunks/{message-tray-Ft6vSr71.js → message-tray-DCoQ4GQb.js} +3 -3
- package/dist/_chunks/{message-tray-Ft6vSr71.js.map → message-tray-DCoQ4GQb.js.map} +1 -1
- package/dist/_chunks/{multi-select-CMaAQQgb.js → multi-select-BOad3za9.js} +110 -98
- package/dist/_chunks/multi-select-BOad3za9.js.map +1 -0
- package/dist/_chunks/{muscle-scheme-YoN3rYXV.js → muscle-scheme-C66WlCxG.js} +2 -2
- package/dist/_chunks/{muscle-scheme-YoN3rYXV.js.map → muscle-scheme-C66WlCxG.js.map} +1 -1
- package/dist/_chunks/{note-timeline-DDqNU46n.js → note-timeline-KzL52MmB.js} +2 -2
- package/dist/_chunks/{note-timeline-DDqNU46n.js.map → note-timeline-KzL52MmB.js.map} +1 -1
- package/dist/_chunks/{notes-panel-IdsmqRFC.js → notes-panel-BXN46XkF.js} +6 -6
- package/dist/_chunks/{notes-panel-IdsmqRFC.js.map → notes-panel-BXN46XkF.js.map} +1 -1
- package/dist/_chunks/notice-group-DkYzKyAZ.js +291 -0
- package/dist/_chunks/notice-group-DkYzKyAZ.js.map +1 -0
- package/dist/_chunks/{notification-tray-BR3seWA7.js → notification-tray-Cp18MW5b.js} +2 -2
- package/dist/_chunks/{notification-tray-BR3seWA7.js.map → notification-tray-Cp18MW5b.js.map} +1 -1
- package/dist/_chunks/{operator-hero-3_RG4Dkj.js → operator-hero-6aAIQaFZ.js} +83 -66
- package/dist/_chunks/operator-hero-6aAIQaFZ.js.map +1 -0
- package/dist/_chunks/{optical-prescription-CxfMsbxi.js → optical-prescription-ulXnDbBe.js} +525 -509
- package/dist/_chunks/optical-prescription-ulXnDbBe.js.map +1 -0
- package/dist/_chunks/panel-header-CbtlTe85.js +190 -0
- package/dist/_chunks/panel-header-CbtlTe85.js.map +1 -0
- package/dist/_chunks/{panel-subview-yP4qIbKS.js → panel-subview-BPU7220K.js} +2 -2
- package/dist/_chunks/{panel-subview-yP4qIbKS.js.map → panel-subview-BPU7220K.js.map} +1 -1
- package/dist/_chunks/{patient-details-C-EWQTms.js → patient-details-C4Dyo7Ck.js} +4 -4
- package/dist/_chunks/{patient-details-C-EWQTms.js.map → patient-details-C4Dyo7Ck.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js → patient-field-row-DROvUkFu.js} +4 -4
- package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js.map → patient-field-row-DROvUkFu.js.map} +1 -1
- package/dist/_chunks/{patient-search-DpAKidZ5.js → patient-search-BADdx3M1.js} +2 -2
- package/dist/_chunks/{patient-search-DpAKidZ5.js.map → patient-search-BADdx3M1.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-Bpto_VCD.js → patient-summary-card-CAimxbuI.js} +4 -4
- package/dist/_chunks/{patient-summary-card-Bpto_VCD.js.map → patient-summary-card-CAimxbuI.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js → payment-automation-upsell-CiwF5UrC.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js.map → payment-automation-upsell-CiwF5UrC.js.map} +1 -1
- package/dist/_chunks/{payment-form-XKtinW8r.js → payment-form-PBuh8PIa.js} +2 -2
- package/dist/_chunks/{payment-form-XKtinW8r.js.map → payment-form-PBuh8PIa.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-BvoVMjH4.js → pdf-viewer-gAsNUsA8.js} +2 -2
- package/dist/_chunks/{pdf-viewer-BvoVMjH4.js.map → pdf-viewer-gAsNUsA8.js.map} +1 -1
- package/dist/_chunks/{periodontal-risk-chart-CPy7CNFe.js → periodontal-risk-chart-B7S9OmPC.js} +97 -89
- package/dist/_chunks/periodontal-risk-chart-B7S9OmPC.js.map +1 -0
- package/dist/_chunks/practice-profile-hero-qfrsFQI_.js +236 -0
- package/dist/_chunks/practice-profile-hero-qfrsFQI_.js.map +1 -0
- package/dist/_chunks/{practice-results-BrUDDMXC.js → practice-results-BzThnpnm.js} +328 -298
- package/dist/_chunks/practice-results-BzThnpnm.js.map +1 -0
- package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js → pregnancy-dating-EFcFUJkQ.js} +2 -2
- package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js.map → pregnancy-dating-EFcFUJkQ.js.map} +1 -1
- package/dist/_chunks/{privacy-mask-Ch7743uk.js → privacy-mask-CCz9zuIh.js} +2 -2
- package/dist/_chunks/{privacy-mask-Ch7743uk.js.map → privacy-mask-CCz9zuIh.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-C_ZosrBt.js → product-hub-panel-YuFbNPlT.js} +2 -2
- package/dist/_chunks/{product-hub-panel-C_ZosrBt.js.map → product-hub-panel-YuFbNPlT.js.map} +1 -1
- package/dist/_chunks/progress-notice-DiHWZ8Ms.js +279 -0
- package/dist/_chunks/progress-notice-DiHWZ8Ms.js.map +1 -0
- package/dist/_chunks/{province-select-Bd20Z9Br.js → province-select-CDjs5obD.js} +2 -2
- package/dist/_chunks/{province-select-Bd20Z9Br.js.map → province-select-CDjs5obD.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js → radiograph-panel.agent-4UllIoTQ.js} +2 -2
- package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js.map → radiograph-panel.agent-4UllIoTQ.js.map} +1 -1
- package/dist/_chunks/{rating-C1Vrmpsi.js → rating-CGYpg5dj.js} +43 -44
- package/dist/_chunks/rating-CGYpg5dj.js.map +1 -0
- package/dist/_chunks/{registration-form-BxwqUZzk.js → registration-form-1B0PTDal.js} +4 -4
- package/dist/_chunks/{registration-form-BxwqUZzk.js.map → registration-form-1B0PTDal.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-AvsVgtJu.js → reviews-panel-CosDZyow.js} +29 -7
- package/dist/_chunks/reviews-panel-CosDZyow.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-aCIoptbg.js → rich-text-editor-56dSsyZI.js} +3 -3
- package/dist/_chunks/{rich-text-editor-aCIoptbg.js.map → rich-text-editor-56dSsyZI.js.map} +1 -1
- package/dist/_chunks/{select-k4gBdS8N.js → select-4S-eYZUf.js} +244 -214
- package/dist/_chunks/select-4S-eYZUf.js.map +1 -0
- package/dist/_chunks/{sign-document-D1P1nUQA.js → sign-document-BiOTs1P4.js} +2 -2
- package/dist/_chunks/{sign-document-D1P1nUQA.js.map → sign-document-BiOTs1P4.js.map} +1 -1
- package/dist/_chunks/{signature-request-3u6TvRt2.js → signature-request-DAmNj_uq.js} +5 -5
- package/dist/_chunks/{signature-request-3u6TvRt2.js.map → signature-request-DAmNj_uq.js.map} +1 -1
- package/dist/_chunks/skeleton-tTWJpvAq.js +415 -0
- package/dist/_chunks/skeleton-tTWJpvAq.js.map +1 -0
- package/dist/_chunks/{slot-grid-dj5f6R2w.js → slot-grid-D_gix9mJ.js} +2 -2
- package/dist/_chunks/{slot-grid-dj5f6R2w.js.map → slot-grid-D_gix9mJ.js.map} +1 -1
- package/dist/_chunks/{tabs-2x3L13jn.js → tabs-BTj-2qMZ.js} +2 -2
- package/dist/_chunks/{tabs-2x3L13jn.js.map → tabs-BTj-2qMZ.js.map} +1 -1
- package/dist/_chunks/{task-card-BS7Uqevr.js → task-card-Ci2XbLmq.js} +2 -2
- package/dist/_chunks/{task-card-BS7Uqevr.js.map → task-card-Ci2XbLmq.js.map} +1 -1
- package/dist/_chunks/{task-editor-Bb5MMcid.js → task-editor-BomyxGoZ.js} +8 -8
- package/dist/_chunks/{task-editor-Bb5MMcid.js.map → task-editor-BomyxGoZ.js.map} +1 -1
- package/dist/_chunks/{task-tray-eQU4KJcA.js → task-tray-Dnc72nl-.js} +3 -3
- package/dist/_chunks/{task-tray-eQU4KJcA.js.map → task-tray-Dnc72nl-.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-BOb57Ysw.js → tasks-panel-ATz9JDy8.js} +6 -6
- package/dist/_chunks/{tasks-panel-BOb57Ysw.js.map → tasks-panel-ATz9JDy8.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-Ctb77x6O.js → theme-toggle-DT_Jn4DC.js} +147 -138
- package/dist/_chunks/theme-toggle-DT_Jn4DC.js.map +1 -0
- package/dist/_chunks/{timeline-DEIuHrWz.js → timeline-wUuTDFY_.js} +2 -2
- package/dist/_chunks/{timeline-DEIuHrWz.js.map → timeline-wUuTDFY_.js.map} +1 -1
- package/dist/_chunks/{tool-rail-C-03rH2I.js → tool-rail-C-M3eVdY.js} +2 -2
- package/dist/_chunks/{tool-rail-C-03rH2I.js.map → tool-rail-C-M3eVdY.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-XudW5l6l.js → transcript-panel-CoHHpcFg.js} +2 -2
- package/dist/_chunks/{transcript-panel-XudW5l6l.js.map → transcript-panel-CoHHpcFg.js.map} +1 -1
- package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js → treatment-receipt-pFqWFyD_.js} +2 -2
- package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js.map → treatment-receipt-pFqWFyD_.js.map} +1 -1
- package/dist/_chunks/{unit-converter-BPZ0Ldkb.js → unit-converter-CIoTmCmP.js} +2 -2
- package/dist/_chunks/{unit-converter-BPZ0Ldkb.js.map → unit-converter-CIoTmCmP.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js → use-appointment-details-read-CUGfE0hV.js} +12 -12
- package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js.map → use-appointment-details-read-CUGfE0hV.js.map} +1 -1
- package/dist/_chunks/use-dismissed-CTOWqA0e.js +177 -0
- package/dist/_chunks/use-dismissed-CTOWqA0e.js.map +1 -0
- package/dist/_chunks/{voice-control-panel-BJIEbDq6.js → voice-control-panel-B8Lrk0C4.js} +4 -4
- package/dist/_chunks/{voice-control-panel-BJIEbDq6.js.map → voice-control-panel-B8Lrk0C4.js.map} +1 -1
- package/dist/_chunks/{warning-stack-BdY-0bd3.js → warning-stack-BhHUmRiD.js} +2 -2
- package/dist/_chunks/{warning-stack-BdY-0bd3.js.map → warning-stack-BhHUmRiD.js.map} +1 -1
- package/dist/_chunks/{workflow-map-CYbRD9ek.js → workflow-map-ln4_OG8A.js} +2 -2
- package/dist/_chunks/{workflow-map-CYbRD9ek.js.map → workflow-map-ln4_OG8A.js.map} +1 -1
- package/dist/agent-catalog.json +172 -4
- package/dist/agent-i18n/en.json +25 -1
- package/dist/components/_shared/format-number.d.ts +20 -0
- package/dist/components/_shared/format-number.d.ts.map +1 -0
- package/dist/components/_shared/length-token.d.ts +12 -0
- package/dist/components/_shared/length-token.d.ts.map +1 -0
- package/dist/components/_shared/option.d.ts +1 -0
- package/dist/components/_shared/option.d.ts.map +1 -1
- package/dist/components/address-fields/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-credits-notice/index.js +1 -1
- package/dist/components/ai-permission-notice/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/alert/alert.d.ts +26 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/anamnesis-summary-card/index.js +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-peek/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts +2 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/clinical-note-card/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/contact-profile-card/index.js +1 -1
- package/dist/components/control-room-rail/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts +20 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +2 -2
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/document-scanner/index.js +1 -1
- package/dist/components/editable-description/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/error-summary/index.js +1 -1
- package/dist/components/face-scheme/face-scheme.d.ts.map +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/header-settings/header-settings.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/heatmap/index.js +1 -1
- package/dist/components/index.d.ts +4 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/map-view/index.d.ts +1 -1
- package/dist/components/map-view/index.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.d.ts +51 -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/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/muscle-scheme/index.js +1 -1
- package/dist/components/note-timeline/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/notice-group/index.d.ts +3 -0
- package/dist/components/notice-group/index.d.ts.map +1 -0
- package/dist/components/notice-group/index.js +6 -0
- package/dist/components/notice-group/index.js.map +1 -0
- package/dist/components/notice-group/notice-group.agent.d.ts +4 -0
- package/dist/components/notice-group/notice-group.agent.d.ts.map +1 -0
- package/dist/components/notice-group/notice-group.d.ts +43 -0
- package/dist/components/notice-group/notice-group.d.ts.map +1 -0
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
- package/dist/components/optical-prescription/index.js +1 -1
- package/dist/components/optical-prescription/optical-prescription-data.d.ts +8 -8
- package/dist/components/optical-prescription/optical-prescription-data.d.ts.map +1 -1
- package/dist/components/optical-prescription/optical-prescription.d.ts.map +1 -1
- package/dist/components/panel-header/index.js +1 -1
- package/dist/components/panel-header/panel-header.d.ts +10 -0
- package/dist/components/panel-header/panel-header.d.ts.map +1 -1
- package/dist/components/panel-subview/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/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/periodontal-risk-chart/index.js +1 -1
- package/dist/components/periodontal-risk-chart/periodontal-risk-chart.d.ts.map +1 -1
- package/dist/components/practice-profile-hero/index.js +1 -1
- package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +4 -1
- package/dist/components/practice-profile-hero/practice-profile-hero.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.d.ts +10 -2
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/progress-notice/index.d.ts +3 -0
- package/dist/components/progress-notice/index.d.ts.map +1 -0
- package/dist/components/progress-notice/index.js +6 -0
- package/dist/components/progress-notice/index.js.map +1 -0
- package/dist/components/progress-notice/progress-notice.agent.d.ts +4 -0
- package/dist/components/progress-notice/progress-notice.agent.d.ts.map +1 -0
- package/dist/components/progress-notice/progress-notice.d.ts +81 -0
- package/dist/components/progress-notice/progress-notice.d.ts.map +1 -0
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rating/index.js +1 -1
- package/dist/components/rating/rating.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.d.ts +6 -0
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/skeleton/index.d.ts +1 -1
- package/dist/components/skeleton/index.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/skeleton/skeleton.d.ts +41 -1
- package/dist/components/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton-scheme/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/tasks-panel/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/treatment-receipt/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +81 -76
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-dismissed.d.ts +58 -0
- package/dist/hooks/use-dismissed.d.ts.map +1 -0
- package/dist/i18n/locales/ar.d.ts +22 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +22 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +22 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +22 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +22 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +22 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +22 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +22 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +22 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +22 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +22 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +22 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +22 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +22 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +22 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +22 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +22 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +22 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +22 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +22 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +22 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +22 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +22 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +22 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +22 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +22 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +22 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +22 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +22 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +22 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +22 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +22 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +22 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +22 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +22 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +22 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +1194 -1183
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +22 -0
- package/dist/locales/de.json +22 -0
- package/dist/locales/el.json +22 -0
- package/dist/locales/en.json +22 -0
- package/dist/locales/es.json +22 -0
- package/dist/locales/fr.json +22 -0
- package/dist/locales/hi.json +22 -0
- package/dist/locales/it.json +22 -0
- package/dist/locales/ja.json +22 -0
- package/dist/locales/nl.json +22 -0
- package/dist/locales/pl.json +22 -0
- package/dist/locales/pt.json +22 -0
- package/dist/locales/ro.json +22 -0
- package/dist/locales/ru.json +22 -0
- package/dist/locales/sq.json +22 -0
- package/dist/locales/sv.json +22 -0
- package/dist/locales/tr.json +22 -0
- package/dist/locales/zh.json +22 -0
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/anamnesis-export-pdf.d.ts.map +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/help-me-write-templates/index.js +2 -2
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +9 -1
- package/dist/_chunks/ai-prompt-input-DSGSe4LH.js.map +0 -1
- package/dist/_chunks/alert-DjsJMGRE.js.map +0 -1
- package/dist/_chunks/anamnesis-summary-rows-BQ_EokKz.js.map +0 -1
- package/dist/_chunks/avatar-WZY3eGE7.js +0 -123
- package/dist/_chunks/avatar-WZY3eGE7.js.map +0 -1
- package/dist/_chunks/booking-tTVxKPQY.js.map +0 -1
- package/dist/_chunks/color-picker-BsggJovx.js.map +0 -1
- package/dist/_chunks/combobox-U5yfO6o0.js.map +0 -1
- package/dist/_chunks/contact-profile-card-C4-OCshj.js.map +0 -1
- package/dist/_chunks/dashboard-grid-B2MB7SRS.js +0 -1428
- package/dist/_chunks/dashboard-grid-B2MB7SRS.js.map +0 -1
- package/dist/_chunks/header-settings-BSH9Gk0J.js.map +0 -1
- package/dist/_chunks/map-view-BuVfJMEa.js.map +0 -1
- package/dist/_chunks/multi-select-CMaAQQgb.js.map +0 -1
- package/dist/_chunks/operator-hero-3_RG4Dkj.js.map +0 -1
- package/dist/_chunks/optical-prescription-CxfMsbxi.js.map +0 -1
- package/dist/_chunks/panel-header-BJkaUwnl.js +0 -128
- package/dist/_chunks/panel-header-BJkaUwnl.js.map +0 -1
- package/dist/_chunks/periodontal-risk-chart-CPy7CNFe.js.map +0 -1
- package/dist/_chunks/practice-profile-hero-Dfc0F60y.js +0 -193
- package/dist/_chunks/practice-profile-hero-Dfc0F60y.js.map +0 -1
- package/dist/_chunks/practice-results-BrUDDMXC.js.map +0 -1
- package/dist/_chunks/rating-C1Vrmpsi.js.map +0 -1
- package/dist/_chunks/reviews-panel-AvsVgtJu.js.map +0 -1
- package/dist/_chunks/select-k4gBdS8N.js.map +0 -1
- package/dist/_chunks/skeleton-B1KTdJ4N.js +0 -116
- package/dist/_chunks/skeleton-B1KTdJ4N.js.map +0 -1
- package/dist/_chunks/theme-toggle-Ctb77x6O.js.map +0 -1
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { jsx as r, jsxs as b, Fragment as
|
|
2
|
-
import { forwardRef as
|
|
1
|
+
import { jsx as r, jsxs as b, Fragment as Ze } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as et, useContext as tt, useState as D, useRef as y, useId as st, useMemo as R, useEffect as X, useCallback as pe } from "react";
|
|
3
3
|
import * as q from "@radix-ui/react-popover";
|
|
4
4
|
import { _ as c } from "./index-4xgbg-sn.js";
|
|
5
5
|
import { c as be } from "./index-D2ZczOXr.js";
|
|
6
|
-
import { useTranslation as
|
|
7
|
-
import { u as
|
|
6
|
+
import { useTranslation as rt } from "react-i18next";
|
|
7
|
+
import { u as nt, F as it, b as at } from "./form-field-context-DtiROUJV.js";
|
|
8
8
|
import { T as fe } from "./tooltip-uEBdD1-5.js";
|
|
9
|
-
import { c as
|
|
10
|
-
import { u as
|
|
9
|
+
import { c as ot } from "./compose-refs-C0k0tdqF.js";
|
|
10
|
+
import { u as lt } from "./use-controllable-state-BiY4xTzM.js";
|
|
11
11
|
import { u as M } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
12
|
-
import { g as
|
|
12
|
+
import { g as dt } from "./group-options-BvKhQ3xb.js";
|
|
13
13
|
import { b as ve } from "./menu-row-BAr8bx1I.js";
|
|
14
|
-
import { O as
|
|
15
|
-
import { b as J, c as
|
|
16
|
-
import { u as
|
|
17
|
-
import { X as
|
|
18
|
-
import { C as
|
|
19
|
-
const
|
|
14
|
+
import { O as ct, a as ut, o as mt, b as pt, c as ft } from "./option-row-Dc7BrbK8.js";
|
|
15
|
+
import { b as J, c as ht } from "./input-surface-iBmxVBfr.js";
|
|
16
|
+
import { u as gt } from "./registry-DvAUVLHh.js";
|
|
17
|
+
import { X as bt } from "./x-B5YnXwCz.js";
|
|
18
|
+
import { C as vt } from "./check-DrFSN__t.js";
|
|
19
|
+
const yt = {
|
|
20
20
|
id: "multi-select",
|
|
21
21
|
// Persisted multi-choice (selection state + set_selection) → select_multiple,
|
|
22
22
|
// plus type-to-filter and open/close of the option list.
|
|
@@ -129,10 +129,10 @@ const vt = {
|
|
|
129
129
|
description: "Each option emits its value as data-option-id."
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
},
|
|
132
|
+
}, St = be(
|
|
133
133
|
[
|
|
134
134
|
"ds:inline-flex ds:flex-wrap ds:items-center ds:gap-1 ds:w-full",
|
|
135
|
-
|
|
135
|
+
ht,
|
|
136
136
|
"ds:aria-[invalid=true]:border-destructive",
|
|
137
137
|
"ds:aria-disabled:cursor-not-allowed ds:aria-disabled:opacity-50"
|
|
138
138
|
],
|
|
@@ -166,7 +166,7 @@ const vt = {
|
|
|
166
166
|
},
|
|
167
167
|
defaultVariants: { size: "md" }
|
|
168
168
|
}
|
|
169
|
-
),
|
|
169
|
+
), xt = [
|
|
170
170
|
"ds:inline-flex ds:items-center ds:justify-center ds:shrink-0",
|
|
171
171
|
"ds:rounded-[var(--radius-sm)]",
|
|
172
172
|
"ds:text-muted-foreground ds:hover:text-foreground",
|
|
@@ -175,7 +175,7 @@ const vt = {
|
|
|
175
175
|
"ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
|
|
176
176
|
"ds:size-4",
|
|
177
177
|
'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[""]'
|
|
178
|
-
].join(" "),
|
|
178
|
+
].join(" "), It = [
|
|
179
179
|
"ds:z-[var(--z-dropdown)] ds:overflow-hidden",
|
|
180
180
|
// At least as wide as the field, at most as wide as the screen allows: a
|
|
181
181
|
// long option wraps or ends in an ellipsis instead of running off the
|
|
@@ -190,7 +190,7 @@ const vt = {
|
|
|
190
190
|
"ds:data-[side=bottom]:slide-in-from-top-2",
|
|
191
191
|
"ds:data-[side=top]:slide-in-from-bottom-2",
|
|
192
192
|
"ds:motion-reduce:animate-none"
|
|
193
|
-
].join(" "),
|
|
193
|
+
].join(" "), Nt = [
|
|
194
194
|
"ds:relative ds:flex ds:cursor-pointer ds:items-center",
|
|
195
195
|
"ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5",
|
|
196
196
|
"ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none ds:select-none",
|
|
@@ -202,7 +202,7 @@ const vt = {
|
|
|
202
202
|
"ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5",
|
|
203
203
|
"ds:text-[var(--font-size-sm)] ds:font-medium ds:text-primary ds:outline-none ds:select-none",
|
|
204
204
|
ve.selected
|
|
205
|
-
].join(" "),
|
|
205
|
+
].join(" "), wt = "__ui-multiselect-select-all__", Ct = "__ui-multiselect-clear-all__", ye = et(
|
|
206
206
|
function({
|
|
207
207
|
options: l,
|
|
208
208
|
value: Se,
|
|
@@ -214,7 +214,7 @@ const vt = {
|
|
|
214
214
|
allowSelectAll: Z = !1,
|
|
215
215
|
allowClear: ee = !1,
|
|
216
216
|
filter: P,
|
|
217
|
-
size:
|
|
217
|
+
size: T = "md",
|
|
218
218
|
disabled: we,
|
|
219
219
|
wrapOptionLabels: te = !1,
|
|
220
220
|
className: Ce,
|
|
@@ -229,18 +229,22 @@ const vt = {
|
|
|
229
229
|
"aria-label": se,
|
|
230
230
|
...Ae
|
|
231
231
|
}, _e) {
|
|
232
|
-
const { t: u } =
|
|
232
|
+
const { t: u } = rt("ui"), m = nt(), S = tt(it) !== null, [ke, B] = lt({
|
|
233
233
|
value: Se,
|
|
234
234
|
defaultValue: xe ?? [],
|
|
235
235
|
onChange: Ie
|
|
236
|
-
}), i = ke ?? [], [w,
|
|
237
|
-
|
|
238
|
-
const Fe =
|
|
236
|
+
}), i = ke ?? [], [w, p] = D(!1), [f, K] = D(""), v = y(null), re = `${st()}-count`, N = y([]), $ = y(null), Re = ot(_e, $), x = S && m.disabled || !!we, Te = S && m.required, ne = S && m.invalid, Ee = S && m.describedBy ? m.describedBy : void 0, Oe = j ?? (S ? m.id : void 0);
|
|
237
|
+
at(m, v);
|
|
238
|
+
const Fe = R(() => {
|
|
239
239
|
const e = /* @__PURE__ */ new Map();
|
|
240
240
|
for (const t of l) e.set(t.value, t.label);
|
|
241
241
|
return e;
|
|
242
|
+
}, [l]), Ve = R(() => {
|
|
243
|
+
const e = /* @__PURE__ */ new Map();
|
|
244
|
+
for (const t of l) e.set(t.value, t.dir);
|
|
245
|
+
return e;
|
|
242
246
|
}, [l]), ie = typeof I == "number" && i.length >= I, C = (e) => {
|
|
243
|
-
|
|
247
|
+
B(e);
|
|
244
248
|
}, Le = (e) => {
|
|
245
249
|
if (i.includes(e)) {
|
|
246
250
|
C(i.filter((t) => t !== e));
|
|
@@ -250,10 +254,10 @@ const vt = {
|
|
|
250
254
|
}, U = (e) => {
|
|
251
255
|
const t = i.filter((n, a) => a !== e);
|
|
252
256
|
return C(t), t;
|
|
253
|
-
},
|
|
257
|
+
}, De = () => {
|
|
254
258
|
const e = l.filter((n) => !n.disabled).map((n) => n.value), t = typeof I == "number" ? I : e.length;
|
|
255
259
|
C(e.slice(0, t));
|
|
256
|
-
},
|
|
260
|
+
}, qe = () => {
|
|
257
261
|
C([]);
|
|
258
262
|
}, ae = y(i);
|
|
259
263
|
X(() => {
|
|
@@ -267,33 +271,33 @@ const vt = {
|
|
|
267
271
|
X(() => {
|
|
268
272
|
le.current = w;
|
|
269
273
|
}, [w]);
|
|
270
|
-
const H =
|
|
274
|
+
const H = pe(
|
|
271
275
|
(e) => {
|
|
272
|
-
|
|
276
|
+
B(e);
|
|
273
277
|
},
|
|
274
|
-
[
|
|
275
|
-
),
|
|
278
|
+
[B]
|
|
279
|
+
), Me = R(
|
|
276
280
|
() => ({
|
|
277
281
|
getSelection: () => [...ae.current],
|
|
278
282
|
getQuery: () => oe.current,
|
|
279
283
|
getIsOpen: () => le.current,
|
|
280
284
|
setSelection: (e) => H(e),
|
|
281
285
|
clearSelection: () => H([]),
|
|
282
|
-
setQuery: (e) =>
|
|
283
|
-
open: () =>
|
|
284
|
-
close: () =>
|
|
286
|
+
setQuery: (e) => K(e),
|
|
287
|
+
open: () => p(!0),
|
|
288
|
+
close: () => p(!1)
|
|
285
289
|
}),
|
|
286
290
|
[H]
|
|
287
291
|
);
|
|
288
|
-
|
|
289
|
-
const Y = Ne ?? u("inputs.multiSelect.placeholder", "Select…"), de =
|
|
292
|
+
gt(yt, Me, j);
|
|
293
|
+
const Y = Ne ?? u("inputs.multiSelect.placeholder", "Select…"), de = R(() => {
|
|
290
294
|
if (!f) return l;
|
|
291
295
|
const e = f.toLowerCase();
|
|
292
296
|
return l.filter((t) => P ? P(f, t) : t.label.toLowerCase().includes(e));
|
|
293
|
-
}, [l, f, P]),
|
|
294
|
-
() =>
|
|
297
|
+
}, [l, f, P]), ze = R(
|
|
298
|
+
() => dt(de),
|
|
295
299
|
[de]
|
|
296
|
-
),
|
|
300
|
+
), Pe = (e) => {
|
|
297
301
|
var a;
|
|
298
302
|
const t = e.currentTarget;
|
|
299
303
|
if (e.key === "Backspace" && f === "" && i.length > 0) {
|
|
@@ -316,11 +320,11 @@ const vt = {
|
|
|
316
320
|
return;
|
|
317
321
|
}
|
|
318
322
|
if (e.key === "Escape") {
|
|
319
|
-
|
|
323
|
+
p(!1);
|
|
320
324
|
return;
|
|
321
325
|
}
|
|
322
|
-
!w && (e.key === "ArrowDown" || e.key === "Enter") &&
|
|
323
|
-
},
|
|
326
|
+
!w && (e.key === "ArrowDown" || e.key === "Enter") && p(!0);
|
|
327
|
+
}, je = (e) => (t) => {
|
|
324
328
|
var h, d, g, _;
|
|
325
329
|
if (t.key === "Backspace" || t.key === "Delete" || t.key === "Enter" || t.key === " ") {
|
|
326
330
|
t.preventDefault(), t.stopPropagation();
|
|
@@ -332,10 +336,10 @@ const vt = {
|
|
|
332
336
|
});
|
|
333
337
|
return;
|
|
334
338
|
}
|
|
335
|
-
const
|
|
339
|
+
const Je = Math.min(e, L.length - 1);
|
|
336
340
|
requestAnimationFrame(() => {
|
|
337
341
|
var k;
|
|
338
|
-
(k = N.current[
|
|
342
|
+
(k = N.current[Je]) == null || k.focus();
|
|
339
343
|
});
|
|
340
344
|
return;
|
|
341
345
|
}
|
|
@@ -350,10 +354,10 @@ const vt = {
|
|
|
350
354
|
t.preventDefault(), e < i.length - 1 ? (d = N.current[e + 1]) == null || d.focus() : (g = v.current) == null || g.focus();
|
|
351
355
|
return;
|
|
352
356
|
}
|
|
353
|
-
t.key === "Escape" && (
|
|
354
|
-
}, [
|
|
357
|
+
t.key === "Escape" && (p(!1), (_ = v.current) == null || _.focus());
|
|
358
|
+
}, [E, G] = D(
|
|
355
359
|
Number.POSITIVE_INFINITY
|
|
356
|
-
), [
|
|
360
|
+
), [Be, Ke] = D(0), ce = y(-1), O = pe(() => {
|
|
357
361
|
G(Number.POSITIVE_INFINITY), Ke((e) => e + 1);
|
|
358
362
|
}, []);
|
|
359
363
|
M(() => {
|
|
@@ -374,9 +378,9 @@ const vt = {
|
|
|
374
378
|
G(
|
|
375
379
|
a === t.length ? Number.POSITIVE_INFINITY : Math.max(1, a - 1)
|
|
376
380
|
);
|
|
377
|
-
}, [
|
|
378
|
-
|
|
379
|
-
}, [i.length,
|
|
381
|
+
}, [Be]), M(() => {
|
|
382
|
+
O();
|
|
383
|
+
}, [i.length, T, O]), M(() => {
|
|
380
384
|
const e = $.current;
|
|
381
385
|
if (!e) return;
|
|
382
386
|
const t = new ResizeObserver((n) => {
|
|
@@ -384,54 +388,54 @@ const vt = {
|
|
|
384
388
|
const a = Math.round(
|
|
385
389
|
((s = n[0]) == null ? void 0 : s.contentRect.width) ?? e.clientWidth
|
|
386
390
|
);
|
|
387
|
-
a !== ce.current && (ce.current = a,
|
|
391
|
+
a !== ce.current && (ce.current = a, O());
|
|
388
392
|
});
|
|
389
393
|
return t.observe(e), () => t.disconnect();
|
|
390
|
-
}, [
|
|
391
|
-
const
|
|
394
|
+
}, [O]);
|
|
395
|
+
const F = i.map((e) => ({
|
|
392
396
|
value: e,
|
|
393
397
|
label: Fe.get(e) ?? e
|
|
394
|
-
})), ue =
|
|
398
|
+
})), ue = E === Number.POSITIVE_INFINITY || E >= F.length, $e = ue ? F : F.slice(0, E), me = ue ? [] : F.slice(E), A = me.length, Ue = (e) => {
|
|
395
399
|
var n;
|
|
396
400
|
if (x) return;
|
|
397
401
|
const t = e.target;
|
|
398
|
-
t.closest('[data-ui-chip="true"]') || t.closest('[data-ui-chip-dismiss="true"]') || (
|
|
399
|
-
},
|
|
402
|
+
t.closest('[data-ui-chip="true"]') || t.closest('[data-ui-chip-dismiss="true"]') || (p(!0), (n = v.current) == null || n.focus());
|
|
403
|
+
}, He = (e) => {
|
|
400
404
|
if (x) {
|
|
401
|
-
|
|
405
|
+
p(!1);
|
|
402
406
|
return;
|
|
403
407
|
}
|
|
404
|
-
|
|
405
|
-
},
|
|
408
|
+
p(e), e || (K(""), z == null || z(i));
|
|
409
|
+
}, Ye = Z || ee, Ge = u("inputs.multiSelect.selected", {
|
|
406
410
|
count: i.length,
|
|
407
411
|
defaultValue: `${i.length} selected`
|
|
408
|
-
}),
|
|
412
|
+
}), Qe = S && m.label || se || Y, We = [re, Ee].filter(Boolean).join(" "), Q = S ? `${m.id}-label` : void 0, V = y(null);
|
|
409
413
|
M(() => {
|
|
410
414
|
const e = v.current;
|
|
411
415
|
if (!e) return;
|
|
412
416
|
const t = e.getAttribute("aria-labelledby");
|
|
413
417
|
if (Q) {
|
|
414
418
|
if (t === Q) return;
|
|
415
|
-
|
|
416
|
-
} else
|
|
419
|
+
V.current = t, e.setAttribute("aria-labelledby", Q);
|
|
420
|
+
} else V.current !== null && (e.setAttribute("aria-labelledby", V.current), V.current = null);
|
|
417
421
|
});
|
|
418
|
-
const { onClick: W, ...
|
|
419
|
-
return /* @__PURE__ */ r(c, { shouldFilter: !1, label:
|
|
422
|
+
const { onClick: W, ...Xe } = Ae;
|
|
423
|
+
return /* @__PURE__ */ r(c, { shouldFilter: !1, label: Qe, children: /* @__PURE__ */ b(q.Root, { open: w, onOpenChange: He, children: [
|
|
420
424
|
/* @__PURE__ */ r(q.Anchor, { asChild: !0, children: /* @__PURE__ */ b(
|
|
421
425
|
"div",
|
|
422
426
|
{
|
|
423
427
|
ref: Re,
|
|
424
|
-
className:
|
|
428
|
+
className: St({ size: T, className: Ce }),
|
|
425
429
|
"aria-disabled": x || void 0,
|
|
426
430
|
"aria-invalid": ne || void 0,
|
|
427
431
|
"data-component": "multi-select",
|
|
428
432
|
"data-component-id": j,
|
|
429
433
|
onClick: (e) => {
|
|
430
|
-
W == null || W(e),
|
|
434
|
+
W == null || W(e), Ue(e);
|
|
431
435
|
},
|
|
432
|
-
...
|
|
436
|
+
...Xe,
|
|
433
437
|
children: [
|
|
434
|
-
|
|
438
|
+
$e.map((e, t) => (
|
|
435
439
|
// eslint-disable-next-line jsx-a11y/no-static-element-interactions -- chip pill receives focus via roving tabindex; chip removal uses an inner button
|
|
436
440
|
/* @__PURE__ */ b(
|
|
437
441
|
"span",
|
|
@@ -441,11 +445,11 @@ const vt = {
|
|
|
441
445
|
},
|
|
442
446
|
tabIndex: x ? -1 : 0,
|
|
443
447
|
"data-ui-chip": "true",
|
|
444
|
-
className: he({ size:
|
|
445
|
-
onKeyDown:
|
|
448
|
+
className: he({ size: T }),
|
|
449
|
+
onKeyDown: je(t),
|
|
446
450
|
"aria-label": e.label,
|
|
447
451
|
children: [
|
|
448
|
-
/* @__PURE__ */ r("span", { children: e.label }),
|
|
452
|
+
/* @__PURE__ */ r("span", { dir: Ve.get(e.value), children: e.label }),
|
|
449
453
|
/* @__PURE__ */ r(
|
|
450
454
|
"button",
|
|
451
455
|
{
|
|
@@ -463,8 +467,8 @@ const vt = {
|
|
|
463
467
|
return (a = v.current) == null ? void 0 : a.focus();
|
|
464
468
|
});
|
|
465
469
|
},
|
|
466
|
-
className:
|
|
467
|
-
children: /* @__PURE__ */ r(
|
|
470
|
+
className: xt,
|
|
471
|
+
children: /* @__PURE__ */ r(bt, { "aria-hidden": "true", className: "ds:size-3.5" })
|
|
468
472
|
}
|
|
469
473
|
)
|
|
470
474
|
]
|
|
@@ -475,12 +479,12 @@ const vt = {
|
|
|
475
479
|
A > 0 ? /* @__PURE__ */ r(
|
|
476
480
|
fe,
|
|
477
481
|
{
|
|
478
|
-
label:
|
|
482
|
+
label: me.map((e) => e.label).join(", "),
|
|
479
483
|
delayDuration: 200,
|
|
480
484
|
children: /* @__PURE__ */ r(
|
|
481
485
|
"span",
|
|
482
486
|
{
|
|
483
|
-
className: he({ size:
|
|
487
|
+
className: he({ size: T }),
|
|
484
488
|
tabIndex: 0,
|
|
485
489
|
role: "button",
|
|
486
490
|
"aria-label": u("inputs.multiSelect.overflow", {
|
|
@@ -500,14 +504,14 @@ const vt = {
|
|
|
500
504
|
{
|
|
501
505
|
ref: v,
|
|
502
506
|
value: f,
|
|
503
|
-
onValueChange:
|
|
504
|
-
onKeyDown:
|
|
507
|
+
onValueChange: K,
|
|
508
|
+
onKeyDown: Pe,
|
|
505
509
|
onFocus: () => {
|
|
506
|
-
x ||
|
|
510
|
+
x || p(!0);
|
|
507
511
|
},
|
|
508
512
|
placeholder: i.length === 0 ? Y : "",
|
|
509
513
|
id: Oe,
|
|
510
|
-
"aria-describedby":
|
|
514
|
+
"aria-describedby": We,
|
|
511
515
|
"aria-invalid": ne || void 0,
|
|
512
516
|
"aria-required": Te || void 0,
|
|
513
517
|
disabled: x,
|
|
@@ -518,7 +522,7 @@ const vt = {
|
|
|
518
522
|
].join(" ")
|
|
519
523
|
}
|
|
520
524
|
),
|
|
521
|
-
/* @__PURE__ */ r("span", { id: re, hidden: !0, children:
|
|
525
|
+
/* @__PURE__ */ r("span", { id: re, hidden: !0, children: Ge })
|
|
522
526
|
]
|
|
523
527
|
}
|
|
524
528
|
) }),
|
|
@@ -531,7 +535,7 @@ const vt = {
|
|
|
531
535
|
align: "start",
|
|
532
536
|
sideOffset: 4,
|
|
533
537
|
collisionPadding: 8,
|
|
534
|
-
className:
|
|
538
|
+
className: It,
|
|
535
539
|
children: /* @__PURE__ */ b(
|
|
536
540
|
c.List,
|
|
537
541
|
{
|
|
@@ -540,12 +544,12 @@ const vt = {
|
|
|
540
544
|
"aria-label": Y,
|
|
541
545
|
className: "ds:max-h-[20rem] ds:overflow-y-auto ds:p-1",
|
|
542
546
|
children: [
|
|
543
|
-
|
|
547
|
+
Ye ? /* @__PURE__ */ b(c.Group, { children: [
|
|
544
548
|
Z ? /* @__PURE__ */ r(
|
|
545
549
|
c.Item,
|
|
546
550
|
{
|
|
547
|
-
value:
|
|
548
|
-
onSelect:
|
|
551
|
+
value: wt,
|
|
552
|
+
onSelect: De,
|
|
549
553
|
className: ge,
|
|
550
554
|
children: u("inputs.multiSelect.selectAll", "Select all")
|
|
551
555
|
}
|
|
@@ -553,15 +557,15 @@ const vt = {
|
|
|
553
557
|
ee ? /* @__PURE__ */ r(
|
|
554
558
|
c.Item,
|
|
555
559
|
{
|
|
556
|
-
value:
|
|
557
|
-
onSelect:
|
|
560
|
+
value: Ct,
|
|
561
|
+
onSelect: qe,
|
|
558
562
|
className: ge,
|
|
559
563
|
children: u("inputs.multiSelect.clearAll", "Clear all")
|
|
560
564
|
}
|
|
561
565
|
) : null
|
|
562
566
|
] }) : null,
|
|
563
567
|
/* @__PURE__ */ r(c.Empty, { className: "ds:ps-2 ds:pe-2 ds:py-2 type-body-sm ds:text-muted-foreground", children: u("inputs.multiSelect.noOptions", "No options found") }),
|
|
564
|
-
|
|
568
|
+
ze.map(({ group: e, items: t }, n) => {
|
|
565
569
|
const a = t.map((s) => {
|
|
566
570
|
const h = i.includes(s.value), d = !h && ie, g = !!s.disabled || d, _ = /* @__PURE__ */ b(
|
|
567
571
|
c.Item,
|
|
@@ -574,7 +578,7 @@ const vt = {
|
|
|
574
578
|
},
|
|
575
579
|
"aria-selected": h,
|
|
576
580
|
"aria-disabled": g || void 0,
|
|
577
|
-
className:
|
|
581
|
+
className: Nt,
|
|
578
582
|
children: [
|
|
579
583
|
/* @__PURE__ */ r(
|
|
580
584
|
"span",
|
|
@@ -585,7 +589,7 @@ const vt = {
|
|
|
585
589
|
h ? "ds:bg-primary ds:border-primary ds:text-primary-foreground" : "ds:bg-background ds:border-[color:var(--control-border)]"
|
|
586
590
|
].join(" "),
|
|
587
591
|
"aria-hidden": "true",
|
|
588
|
-
children: h ? /* @__PURE__ */ r(
|
|
592
|
+
children: h ? /* @__PURE__ */ r(vt, { className: "ds:size-3.5" }) : null
|
|
589
593
|
}
|
|
590
594
|
),
|
|
591
595
|
s.startAdornment ? (
|
|
@@ -604,12 +608,13 @@ const vt = {
|
|
|
604
608
|
// Stacked, as in Combobox: the label and its end
|
|
605
609
|
// content on one row, the description under them.
|
|
606
610
|
// The option's name reads in that order.
|
|
607
|
-
/* @__PURE__ */ b("span", { className:
|
|
608
|
-
/* @__PURE__ */ b("span", { className:
|
|
611
|
+
/* @__PURE__ */ b("span", { className: ct, children: [
|
|
612
|
+
/* @__PURE__ */ b("span", { className: ut, children: [
|
|
609
613
|
/* @__PURE__ */ r(
|
|
610
614
|
"span",
|
|
611
615
|
{
|
|
612
|
-
|
|
616
|
+
dir: s.dir,
|
|
617
|
+
className: mt({
|
|
613
618
|
wrap: te,
|
|
614
619
|
className: "ds:flex-1 ds:text-start"
|
|
615
620
|
}),
|
|
@@ -624,7 +629,7 @@ const vt = {
|
|
|
624
629
|
s.description ? /* @__PURE__ */ r(
|
|
625
630
|
"span",
|
|
626
631
|
{
|
|
627
|
-
className:
|
|
632
|
+
className: ft({
|
|
628
633
|
tone: s.descriptionTone,
|
|
629
634
|
className: "ds:text-start"
|
|
630
635
|
}),
|
|
@@ -632,8 +637,15 @@ const vt = {
|
|
|
632
637
|
}
|
|
633
638
|
) : null
|
|
634
639
|
] })
|
|
635
|
-
) : /* @__PURE__ */ b(
|
|
636
|
-
/* @__PURE__ */ r(
|
|
640
|
+
) : /* @__PURE__ */ b(Ze, { children: [
|
|
641
|
+
/* @__PURE__ */ r(
|
|
642
|
+
"span",
|
|
643
|
+
{
|
|
644
|
+
dir: s.dir,
|
|
645
|
+
className: "ds:flex-1 ds:min-w-0 ds:truncate ds:text-start",
|
|
646
|
+
children: s.label
|
|
647
|
+
}
|
|
648
|
+
),
|
|
637
649
|
s.endContent ? (
|
|
638
650
|
// Deliberately NOT aria-hidden — unlike
|
|
639
651
|
// `startAdornment`, this slot carries meaning
|
|
@@ -682,7 +694,7 @@ ye.displayName = "MultiSelect";
|
|
|
682
694
|
const Kt = ye;
|
|
683
695
|
export {
|
|
684
696
|
Kt as M,
|
|
685
|
-
|
|
686
|
-
|
|
697
|
+
St as a,
|
|
698
|
+
yt as m
|
|
687
699
|
};
|
|
688
|
-
//# sourceMappingURL=multi-select-
|
|
700
|
+
//# sourceMappingURL=multi-select-BOad3za9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-select-BOad3za9.js","sources":["../../src/components/multi-select/multi-select.agent.ts","../../src/components/multi-select/multi-select.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { MultiSelectHandle } from './multi-select';\n\nexport const multiSelectAgent: AgentAdapter<MultiSelectHandle> = {\n id: 'multi-select',\n // Persisted multi-choice (selection state + set_selection) → select_multiple,\n // plus type-to-filter and open/close of the option list.\n capabilities: ['select_multiple', 'filter', 'open', 'close'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.multiSelect.state.selection',\n description: 'Values of currently-selected options.',\n read: (handle) => handle.getSelection(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.multiSelect.state.query',\n description: 'Current filter query.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.multiSelect.state.isOpen',\n description: 'True when the option list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_selection: {\n // Persists the user's chosen options — reversible via the same UI.\n safety: 'write',\n argsType: '{ values: string[] }',\n argsSchema: {\n type: 'object',\n properties: {\n values: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Option values to select (replaces the current selection).',\n },\n },\n required: ['values'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.setSelection',\n description:\n 'Replace the current selection with the given list of values.',\n examples: [\n {\n args: { values: ['a', 'b'] },\n note: 'Select exactly options \"a\" and \"b\".',\n },\n ],\n invoke: (handle, args: { values: string[] }) => {\n handle.setSelection(args.values);\n },\n },\n clear_selection: {\n // Discards the persisted selection — destructive (loses the choices).\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.clearSelection',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n apply_filter: {\n // Pure ephemeral filter of the visible options — no persisted change.\n safety: 'read',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'Filter text for the list.' },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.applyFilter',\n description: 'Set the filter query for the option list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.multiSelect.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'multi-select' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each option emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type Ref,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command } from 'cmdk';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport { Tooltip } from '../tooltip';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport {\n OPTION_BODY_CLASSES,\n OPTION_END_CLASSES,\n OPTION_LABEL_ROW_CLASSES,\n optionDescriptionVariants,\n optionLabelVariants,\n} from '../_shared/option-row';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_TEXT,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { multiSelectAgent } from './multi-select.agent';\n\n// MultiSelect uses `min-h-*` (not `h-*`) because the wrapper grows vertically\n// as chips wrap to additional lines. The height floor per size mirrors the\n// other inputs' fixed heights in _shared/input-surface.ts.\nconst multiSelectVariants = cva(\n [\n 'ds:inline-flex ds:flex-wrap ds:items-center ds:gap-1 ds:w-full',\n INPUT_SURFACE_CHROME,\n 'ds:aria-[invalid=true]:border-destructive',\n 'ds:aria-disabled:cursor-not-allowed ds:aria-disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: `ds:min-h-8 ds:ps-2 ds:pe-2 ds:py-1 ${INPUT_SURFACE_TEXT.sm}`,\n md: `ds:min-h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:py-1.5 ${INPUT_SURFACE_TEXT.md}`,\n lg: `ds:min-h-12 ds:ps-4 ds:pe-4 ds:py-2 ${INPUT_SURFACE_TEXT.lg}`,\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-1',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-muted',\n 'ds:text-foreground ds:select-none',\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:forced-colors:focus-visible:outline-[CanvasText]',\n ],\n {\n variants: {\n size: {\n sm: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-xs)]',\n md: 'ds:ps-2 ds:pe-1 ds:py-0.5 ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:ps-3 ds:pe-1.5 ds:py-1 ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst chipDismissClasses = [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:rounded-[var(--radius-sm)]',\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:size-4',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n].join(' ');\n\nconst popoverContentClasses = [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n // At least as wide as the field, at most as wide as the screen allows: a\n // long option wraps or ends in an ellipsis instead of running off the\n // edge. The floor gives way to the cap on a field wider than that.\n 'ds:min-w-[min(var(--radix-popover-trigger-width),var(--radix-popover-content-available-width))]',\n 'ds:max-w-[var(--radix-popover-content-available-width)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst commandItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:aria-[disabled=true]:pointer-events-none ds:aria-[disabled=true]:opacity-50',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n].join(' ');\n\nconst actionItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)] ds:ps-2 ds:pe-2 ds:py-1.5',\n 'ds:text-[var(--font-size-sm)] ds:font-medium ds:text-primary ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n].join(' ');\n\nconst SELECT_ALL_VALUE = '__ui-multiselect-select-all__';\nconst CLEAR_ALL_VALUE = '__ui-multiselect-clear-all__';\n\ntype HTMLDivAttributes = HTMLAttributes<HTMLDivElement>;\n\n// Curated agent-readiness handle — see multi-select.agent.ts.\nexport interface MultiSelectHandle {\n getSelection: () => string[];\n getQuery: () => string;\n getIsOpen: () => boolean;\n setSelection: (values: string[]) => void;\n clearSelection: () => void;\n setQuery: (query: string) => void;\n open: () => void;\n close: () => void;\n}\n\nexport interface MultiSelectProps<T extends string = string>\n extends\n Omit<HTMLDivAttributes, 'onChange'>,\n VariantProps<typeof multiSelectVariants> {\n options: OptionShape<T>[];\n value?: T[];\n defaultValue?: T[];\n onChange?: (next: T[]) => void;\n onComplete?: (values: T[]) => void;\n placeholder?: string;\n maxSelections?: number;\n allowSelectAll?: boolean;\n allowClear?: boolean;\n filter?: (query: string, option: OptionShape<T>) => boolean;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n /**\n * Let a long option label wrap onto a second line instead of ending in an\n * ellipsis. Longer still, it is clipped after two lines. Off by default.\n * An option's `description` always sits on its own line under the label.\n */\n wrapOptionLabels?: boolean;\n}\n\nconst MultiSelectImpl = forwardRef<HTMLDivElement, MultiSelectProps>(\n function MultiSelect(\n {\n options,\n value,\n defaultValue,\n onChange,\n onComplete,\n placeholder,\n maxSelections,\n allowSelectAll = false,\n allowClear = false,\n filter,\n size = 'md',\n disabled,\n wrapOptionLabels = false,\n className,\n id,\n // Pull `aria-label` out of the div spread so it names the combobox\n // INPUT (the interactive control) rather than the wrapper div. Lets a\n // consumer give the trigger a meaningful name when there's no visible\n // label or FormField (e.g. a data-table floating filter naming itself\n // after its column). Untouched callers fall back to the placeholder.\n // Inside a FormField the field's label names the input and this is\n // ignored, so it can never override the visible text (WCAG 2.5.3).\n 'aria-label': ariaLabel,\n ...divProps\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [currentValueRaw, setMultiSelectValue] = useControllableState<\n string[]\n >({\n value,\n defaultValue: defaultValue ?? [],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const counterId = `${useId()}-count`;\n const chipRefs = useRef<Array<HTMLSpanElement | null>>([]);\n const triggerRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs<HTMLDivElement>(ref, triggerRef);\n\n const effectiveDisabled =\n (inFormField && ctx.disabled) || Boolean(disabled);\n const effectiveRequired = inFormField && ctx.required;\n const effectiveInvalid = inFormField && ctx.invalid;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n const triggerId = id ?? (inFormField ? ctx.id : undefined);\n /* cmdk writes its own id on the input, so the field's label follows\n that one. */\n useFormFieldControlRef(ctx, inputRef);\n\n const labelByValue = useMemo(() => {\n const map = new Map<string, string>();\n for (const option of options) map.set(option.value, option.label);\n return map;\n }, [options]);\n const dirByValue = useMemo(() => {\n const map = new Map<string, OptionShape['dir']>();\n for (const option of options) map.set(option.value, option.dir);\n return map;\n }, [options]);\n\n const atCap =\n typeof maxSelections === 'number' && currentValue.length >= maxSelections;\n\n const commit = (next: string[]): void => {\n setMultiSelectValue(next);\n };\n\n const toggle = (val: string): void => {\n if (currentValue.includes(val)) {\n commit(currentValue.filter((v) => v !== val));\n return;\n }\n if (atCap) return;\n commit([...currentValue, val]);\n };\n\n const removeAt = (index: number): string[] => {\n const next = currentValue.filter((_, i) => i !== index);\n commit(next);\n return next;\n };\n\n const handleSelectAll = (): void => {\n const selectable = options.filter((o) => !o.disabled).map((o) => o.value);\n const cap =\n typeof maxSelections === 'number' ? maxSelections : selectable.length;\n commit(selectable.slice(0, cap));\n };\n\n const handleClearAll = (): void => {\n commit([]);\n };\n\n // Agent handle — refs for fresh reads from the memoized handle.\n const valueRef = useRef<string[]>(currentValue);\n useEffect(() => {\n valueRef.current = currentValue;\n }, [currentValue]);\n const queryRef = useRef<string>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n const openRef = useRef<boolean>(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const commitStable = useCallback(\n (next: string[]) => {\n setMultiSelectValue(next);\n },\n [setMultiSelectValue],\n );\n\n const agentHandle = useMemo<MultiSelectHandle>(\n () => ({\n getSelection: () => [...valueRef.current],\n getQuery: () => queryRef.current,\n getIsOpen: () => openRef.current,\n setSelection: (values) => commitStable(values),\n clearSelection: () => commitStable([]),\n setQuery: (next) => setQuery(next),\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [commitStable],\n );\n useAgentRegistration(multiSelectAgent, agentHandle, id);\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.multiSelect.placeholder', 'Select…');\n\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n const needle = query.toLowerCase();\n return options.filter((option) => {\n if (filter) return filter(query, option);\n return option.label.toLowerCase().includes(needle);\n });\n }, [options, query, filter]);\n\n const groups = useMemo(\n () => groupOptions(filteredOptions),\n [filteredOptions],\n );\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>): void => {\n const target = e.currentTarget;\n if (e.key === 'Backspace' && query === '' && currentValue.length > 0) {\n e.preventDefault();\n const removedIndex = currentValue.length - 1;\n const next = removeAt(removedIndex);\n const newLast = next.length - 1;\n if (newLast >= 0) {\n requestAnimationFrame(() => {\n chipRefs.current[newLast]?.focus();\n });\n }\n return;\n }\n const caretAtStart =\n target.selectionStart === 0 && target.selectionEnd === 0;\n if (\n (e.key === 'ArrowLeft' || e.key === 'ArrowRight') &&\n caretAtStart &&\n currentValue.length > 0\n ) {\n const isRTL = document.dir === 'rtl' || target.dir === 'rtl';\n const shouldNavigate =\n (isRTL && e.key === 'ArrowRight') ||\n (!isRTL && e.key === 'ArrowLeft');\n if (shouldNavigate) {\n e.preventDefault();\n const lastIdx = currentValue.length - 1;\n chipRefs.current[lastIdx]?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n return;\n }\n if (!open && (e.key === 'ArrowDown' || e.key === 'Enter')) {\n setOpen(true);\n }\n };\n\n const handleChipKeyDown =\n (index: number) =>\n (e: KeyboardEvent<HTMLSpanElement>): void => {\n if (\n e.key === 'Backspace' ||\n e.key === 'Delete' ||\n e.key === 'Enter' ||\n e.key === ' '\n ) {\n e.preventDefault();\n e.stopPropagation();\n const next = removeAt(index);\n if (next.length === 0) {\n requestAnimationFrame(() => inputRef.current?.focus());\n return;\n }\n const focusIdx = Math.min(index, next.length - 1);\n requestAnimationFrame(() => {\n chipRefs.current[focusIdx]?.focus();\n });\n return;\n }\n const isRTL = document.dir === 'rtl';\n const prevKey = isRTL ? 'ArrowRight' : 'ArrowLeft';\n const nextKey = isRTL ? 'ArrowLeft' : 'ArrowRight';\n if (e.key === prevKey) {\n e.preventDefault();\n const newIdx = Math.max(0, index - 1);\n chipRefs.current[newIdx]?.focus();\n return;\n }\n if (e.key === nextKey) {\n e.preventDefault();\n if (index < currentValue.length - 1) {\n chipRefs.current[index + 1]?.focus();\n } else {\n inputRef.current?.focus();\n }\n return;\n }\n if (e.key === 'Escape') {\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n // ----- Chip overflow measurement -----\n // The measurement must read the FULL chip row, never the collapsed one.\n // Counting only the rendered (collapsed) chips is self-referential: hiding\n // the overflow behind \"+N more\" leaves a subset that trivially fits row 1,\n // the next measure concludes \"everything fits\", it expands, re-wraps, and\n // the ResizeObserver oscillates every frame (the visible flicker).\n //\n // Instead we run a two-pass cycle driven by `measureNonce`: a request first\n // renders every chip (visibleCount → ∞), then the layout effect measures\n // that complete row and sets the collapsed count. Both passes are layout\n // effects, so React flushes them before paint — the browser only ever shows\n // the settled, single-line result, with no full-row flash.\n const [visibleCount, setVisibleCount] = useState<number>(\n Number.POSITIVE_INFINITY,\n );\n const [measureNonce, setMeasureNonce] = useState<number>(0);\n const lastWidthRef = useRef<number>(-1);\n\n const requestMeasure = useCallback((): void => {\n setVisibleCount(Number.POSITIVE_INFINITY);\n setMeasureNonce((n) => n + 1);\n }, []);\n\n // Pass two: the \"show all\" render has committed — measure the true wrap\n // point off the complete chip row and collapse to it. Runs once per request\n // (keyed on measureNonce); collapsing does not bump the nonce, so it settles.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const chipEls = Array.from(\n el.querySelectorAll<HTMLElement>('[data-ui-chip=\"true\"]'),\n );\n if (chipEls.length === 0) {\n setVisibleCount(Number.POSITIVE_INFINITY);\n return;\n }\n const firstTop = chipEls[0].offsetTop;\n let firstRowCount = 0;\n for (const chip of chipEls) {\n if (chip.offsetTop === firstTop) firstRowCount++;\n else break;\n }\n setVisibleCount(\n firstRowCount === chipEls.length\n ? Number.POSITIVE_INFINITY\n : Math.max(1, firstRowCount - 1),\n );\n }, [measureNonce]);\n\n // Re-measure whenever the selected set or the size variant changes.\n useIsomorphicLayoutEffect(() => {\n requestMeasure();\n }, [currentValue.length, size, requestMeasure]);\n\n // Re-measure on a real width change only. Collapsing shrinks the trigger's\n // height, not its width, so a width guard keeps that from re-triggering the\n // cycle — the ResizeObserver never chases its own output.\n useIsomorphicLayoutEffect(() => {\n const el = triggerRef.current;\n if (!el) return;\n const ro = new ResizeObserver((entries) => {\n const width = Math.round(\n entries[0]?.contentRect.width ?? el.clientWidth,\n );\n if (width === lastWidthRef.current) return;\n lastWidthRef.current = width;\n requestMeasure();\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [requestMeasure]);\n\n const chips = currentValue.map((val) => ({\n value: val,\n label: labelByValue.get(val) ?? val,\n }));\n\n const showAllChips =\n visibleCount === Number.POSITIVE_INFINITY || visibleCount >= chips.length;\n const visibleChips = showAllChips ? chips : chips.slice(0, visibleCount);\n const overflowChips = showAllChips ? [] : chips.slice(visibleCount);\n const overflowCount = overflowChips.length;\n\n const handleTriggerClick = (event: MouseEvent<HTMLDivElement>): void => {\n if (effectiveDisabled) return;\n // Ignore clicks on chips/buttons so they can manage their own focus.\n const target = event.target as HTMLElement;\n if (target.closest('[data-ui-chip=\"true\"]')) return;\n if (target.closest('[data-ui-chip-dismiss=\"true\"]')) return;\n setOpen(true);\n inputRef.current?.focus();\n };\n\n const handleOpenChange = (next: boolean): void => {\n if (effectiveDisabled) {\n setOpen(false);\n return;\n }\n setOpen(next);\n if (!next) {\n setQuery('');\n onComplete?.(currentValue);\n }\n };\n\n const hasActionRow = allowSelectAll || allowClear;\n\n const counterMessage = t('inputs.multiSelect.selected', {\n count: currentValue.length,\n defaultValue: `${currentValue.length} selected`,\n });\n\n /* cmdk writes `aria-labelledby` on the input after the props it is\n given, pointing at its own hidden `<label cmdk-label>` whose text is\n the Command root's `label`. So that label is the input's name: the\n host's `aria-label`, else the placeholder, so the input is never\n unnamed. The count of chosen options describes the input rather than\n naming it. */\n const accessibleName =\n (inFormField ? ctx.label || ariaLabel : ariaLabel) || resolvedPlaceholder;\n const inputDescribedBy = [counterId, describedBy].filter(Boolean).join(' ');\n\n /* Inside a FormField the name is the field's own `<label>`, read whole,\n as for every other control: its labelStart and labelEnd marks and\n \"(optional)\" join it, and the host's `aria-label` never overrides\n that visible text. cmdk's hidden label holds the label string only,\n so the input is pointed at the field's label instead. React leaves\n the attribute alone afterwards: cmdk's prop for it never changes. */\n const fieldLabelId = inFormField ? `${ctx.id}-label` : undefined;\n const cmdkLabelledBy = useRef<string | null>(null);\n useIsomorphicLayoutEffect(() => {\n const input = inputRef.current;\n if (!input) return;\n const current = input.getAttribute('aria-labelledby');\n if (fieldLabelId) {\n if (current === fieldLabelId) return;\n cmdkLabelledBy.current = current;\n input.setAttribute('aria-labelledby', fieldLabelId);\n } else if (cmdkLabelledBy.current !== null) {\n // Out of the field again: back to cmdk's own label.\n input.setAttribute('aria-labelledby', cmdkLabelledBy.current);\n cmdkLabelledBy.current = null;\n }\n });\n\n const { onClick: onClickProp, ...restDivProps } = divProps;\n\n return (\n <Command shouldFilter={false} label={accessibleName}>\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Anchor asChild>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- compound input shell; keyboard handling lives on the inner searchable input which is always rendered */}\n <div\n ref={composedRef}\n className={multiSelectVariants({ size, className })}\n aria-disabled={effectiveDisabled || undefined}\n aria-invalid={effectiveInvalid || undefined}\n data-component=\"multi-select\"\n data-component-id={id}\n onClick={(event) => {\n onClickProp?.(event);\n handleTriggerClick(event);\n }}\n {...restDivProps}\n >\n {visibleChips.map((chip, idx) => (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- chip pill receives focus via roving tabindex; chip removal uses an inner button\n <span\n key={chip.value}\n ref={(el) => {\n chipRefs.current[idx] = el;\n }}\n tabIndex={effectiveDisabled ? -1 : 0}\n data-ui-chip=\"true\"\n className={chipVariants({ size })}\n onKeyDown={handleChipKeyDown(idx)}\n aria-label={chip.label}\n >\n <span dir={dirByValue.get(chip.value)}>{chip.label}</span>\n <button\n type=\"button\"\n tabIndex={-1}\n data-ui-chip-dismiss=\"true\"\n aria-label={t('inputs.multiSelect.remove', {\n label: chip.label,\n defaultValue: `Remove ${chip.label}`,\n })}\n disabled={effectiveDisabled}\n onClick={(event) => {\n event.stopPropagation();\n removeAt(idx);\n requestAnimationFrame(() => inputRef.current?.focus());\n }}\n className={chipDismissClasses}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n </span>\n ))}\n {overflowCount > 0 ? (\n <Tooltip\n label={overflowChips.map((c) => c.label).join(', ')}\n delayDuration={200}\n >\n <span\n className={chipVariants({ size })}\n tabIndex={0}\n role=\"button\"\n aria-label={t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n >\n <span>\n {t('inputs.multiSelect.overflow', {\n count: overflowCount,\n defaultValue: `+${overflowCount} more`,\n })}\n </span>\n </span>\n </Tooltip>\n ) : null}\n <Command.Input\n ref={inputRef}\n value={query}\n onValueChange={setQuery}\n onKeyDown={handleInputKeyDown}\n onFocus={() => {\n if (!effectiveDisabled) setOpen(true);\n }}\n placeholder={\n currentValue.length === 0 ? resolvedPlaceholder : ''\n }\n id={triggerId}\n // The name comes from the Command root's `label` above, or\n // from the FormField's label: cmdk writes `aria-labelledby`\n // after these props, and a layout effect above re-points it.\n aria-describedby={inputDescribedBy}\n aria-invalid={effectiveInvalid || undefined}\n aria-required={effectiveRequired || undefined}\n disabled={effectiveDisabled}\n className={[\n 'ds:flex-1 ds:min-w-[6rem] ds:bg-transparent ds:outline-none',\n 'ds:placeholder:text-muted-foreground ds:text-start',\n 'ds:disabled:cursor-not-allowed',\n ].join(' ')}\n />\n {/* Hidden: read only as the input's description, not as stray\n text on the page. */}\n <span id={counterId} hidden>\n {counterMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal>\n {/* Portalled to <body>, so the list carries its own bounding\n marker: the kit's cascade reset — and a host's shield against\n its own bare-element CSS — scope to [data-component]. */}\n <Popover.Content\n data-component=\"multi-select-list\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={popoverContentClasses}\n >\n <Command.List\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={resolvedPlaceholder}\n className=\"ds:max-h-[20rem] ds:overflow-y-auto ds:p-1\"\n >\n {hasActionRow ? (\n <Command.Group>\n {allowSelectAll ? (\n <Command.Item\n value={SELECT_ALL_VALUE}\n onSelect={handleSelectAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.selectAll', 'Select all')}\n </Command.Item>\n ) : null}\n {allowClear ? (\n <Command.Item\n value={CLEAR_ALL_VALUE}\n onSelect={handleClearAll}\n className={actionItemClasses}\n >\n {t('inputs.multiSelect.clearAll', 'Clear all')}\n </Command.Item>\n ) : null}\n </Command.Group>\n ) : null}\n <Command.Empty className=\"ds:ps-2 ds:pe-2 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.multiSelect.noOptions', 'No options found')}\n </Command.Empty>\n {groups.map(({ group, items }, gi) => {\n const body = items.map((option) => {\n const isSelected = currentValue.includes(option.value);\n const isCapped = !isSelected && atCap;\n const isDisabled = Boolean(option.disabled) || isCapped;\n const item = (\n <Command.Item\n key={option.value}\n value={option.value}\n // Agent DOM hook — see multi-select.agent.ts item.\n data-option-id={option.value}\n disabled={isDisabled}\n onSelect={() => {\n if (isDisabled) return;\n toggle(option.value);\n }}\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n className={commandItemClasses}\n >\n <span\n // Off, the box is a state indicator, so its edge is\n // the 3:1 --control-border (WCAG 1.4.11), as on\n // Checkbox.\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:me-[var(--spacing-xs)] ds:shrink-0',\n 'ds:size-4 ds:rounded-[var(--radius-sm)] ds:border',\n isSelected\n ? 'ds:bg-primary ds:border-primary ds:text-primary-foreground'\n : 'ds:bg-background ds:border-[color:var(--control-border)]',\n ].join(' ')}\n aria-hidden=\"true\"\n >\n {isSelected ? (\n <Check className=\"ds:size-3.5\" />\n ) : null}\n </span>\n {option.startAdornment ? (\n // Decorative by contract — the accessible name comes\n // from the option label.\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0 ds:me-[var(--spacing-xs)]\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n {option.description || wrapOptionLabels ? (\n // Stacked, as in Combobox: the label and its end\n // content on one row, the description under them.\n // The option's name reads in that order.\n <span className={OPTION_BODY_CLASSES}>\n <span className={OPTION_LABEL_ROW_CLASSES}>\n <span\n dir={option.dir}\n className={optionLabelVariants({\n wrap: wrapOptionLabels,\n className: 'ds:flex-1 ds:text-start',\n })}\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Announced, as below.\n <span className={OPTION_END_CLASSES}>\n {option.endContent}\n </span>\n ) : null}\n </span>\n {option.description ? (\n <span\n className={optionDescriptionVariants({\n tone: option.descriptionTone,\n className: 'ds:text-start',\n })}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n ) : (\n <>\n {/* `min-w-0 truncate` matches Combobox and Select.\n Without it a long service name cannot be\n clipped, so it pushes the trailing content and\n overflows the row instead of the name\n ellipsing — the CJK and long-label case. */}\n <span\n dir={option.dir}\n className=\"ds:flex-1 ds:min-w-0 ds:truncate ds:text-start\"\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // (a price, a count) and must reach the\n // option's accessible name. `ms-auto` pins it\n // to the inline-end and flips under RTL.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0 ds:ps-[var(--spacing-xs)]\">\n {option.endContent}\n </span>\n ) : null}\n </>\n )}\n </Command.Item>\n );\n if (isCapped) {\n return (\n <Tooltip\n key={option.value}\n label={t('inputs.multiSelect.maxReached', {\n count: maxSelections,\n defaultValue: `Maximum ${maxSelections} selections`,\n })}\n delayDuration={200}\n >\n {item}\n </Tooltip>\n );\n }\n return item;\n });\n if (!group) {\n return (\n <Command.Group key={`group-${gi}`}>{body}</Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group}`}\n heading={group}\n className=\"ds:[&_[cmdk-group-heading]]:ps-2 ds:[&_[cmdk-group-heading]]:pe-2 ds:[&_[cmdk-group-heading]]:py-1 ds:[&_[cmdk-group-heading]]:type-eyebrow ds:[&_[cmdk-group-heading]]:text-muted-foreground\"\n >\n {body}\n </Command.Group>\n );\n })}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\nMultiSelectImpl.displayName = 'MultiSelect';\n\ninterface MultiSelectComponent {\n <T extends string = string>(\n props: MultiSelectProps<T> & { ref?: Ref<HTMLDivElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const MultiSelect = MultiSelectImpl as unknown as MultiSelectComponent;\n\nexport { multiSelectVariants };\n"],"names":["multiSelectAgent","handle","args","multiSelectVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_TEXT","chipVariants","chipDismissClasses","popoverContentClasses","commandItemClasses","MENU_ROW_HIGHLIGHT","actionItemClasses","SELECT_ALL_VALUE","CLEAR_ALL_VALUE","MultiSelectImpl","forwardRef","options","value","defaultValue","onChange","onComplete","placeholder","maxSelections","allowSelectAll","allowClear","filter","size","disabled","wrapOptionLabels","className","id","ariaLabel","divProps","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","currentValueRaw","setMultiSelectValue","useControllableState","currentValue","open","setOpen","useState","query","setQuery","inputRef","useRef","counterId","useId","chipRefs","triggerRef","composedRef","composeRefs","effectiveDisabled","effectiveRequired","effectiveInvalid","describedBy","triggerId","useFormFieldControlRef","labelByValue","useMemo","map","option","dirByValue","atCap","commit","next","toggle","val","v","removeAt","index","_","i","handleSelectAll","selectable","o","cap","handleClearAll","valueRef","useEffect","queryRef","openRef","commitStable","useCallback","agentHandle","values","useAgentRegistration","resolvedPlaceholder","filteredOptions","needle","groups","groupOptions","handleInputKeyDown","target","removedIndex","newLast","_a","caretAtStart","isRTL","lastIdx","handleChipKeyDown","e","focusIdx","prevKey","nextKey","newIdx","_b","_c","_d","visibleCount","setVisibleCount","measureNonce","setMeasureNonce","lastWidthRef","requestMeasure","n","useIsomorphicLayoutEffect","el","chipEls","firstTop","firstRowCount","chip","ro","entries","width","chips","showAllChips","visibleChips","overflowChips","overflowCount","handleTriggerClick","event","handleOpenChange","hasActionRow","counterMessage","accessibleName","inputDescribedBy","fieldLabelId","cmdkLabelledBy","input","current","onClickProp","restDivProps","jsx","Command","jsxs","Popover","idx","X","Tooltip","c","group","items","gi","body","isSelected","isCapped","isDisabled","item","Check","OPTION_BODY_CLASSES","OPTION_LABEL_ROW_CLASSES","optionLabelVariants","OPTION_END_CLASSES","optionDescriptionVariants","Fragment","MultiSelect"],"mappings":"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"}
|