@alfadocs/ui-kit-debug 1.50.0 → 1.51.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/{actions-cell-renderer-DMittsR3.js → actions-cell-renderer-DBI33cMp.js} +4 -4
- package/dist/_chunks/{actions-cell-renderer-DMittsR3.js.map → actions-cell-renderer-DBI33cMp.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-BhZASyJm.js → agenda-tray-CGhEEnFE.js} +3 -3
- package/dist/_chunks/{agenda-tray-BhZASyJm.js.map → agenda-tray-CGhEEnFE.js.map} +1 -1
- package/dist/_chunks/{ai-credits-notice-C-kz_RrY.js → ai-credits-notice-C9K_ley1.js} +3 -3
- package/dist/_chunks/{ai-credits-notice-C-kz_RrY.js.map → ai-credits-notice-C9K_ley1.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-BRZeS3mT.js → ai-permission-notice-DMG1o4Qa.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-BRZeS3mT.js.map → ai-permission-notice-DMG1o4Qa.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-CxvnXsAs.js → ai-prompt-input-ucwO-z8g.js} +2 -2
- package/dist/_chunks/{ai-prompt-input-CxvnXsAs.js.map → ai-prompt-input-ucwO-z8g.js.map} +1 -1
- package/dist/_chunks/{alia-sidebar-Dx-oeOV2.js → alia-sidebar-K3gaNH94.js} +7 -7
- package/dist/_chunks/{alia-sidebar-Dx-oeOV2.js.map → alia-sidebar-K3gaNH94.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-D8Si-2GV.js → anamnesis-card-CPjry4ur.js} +2 -2
- package/dist/_chunks/{anamnesis-card-D8Si-2GV.js.map → anamnesis-card-CPjry4ur.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-CZirLRuv.js → anamnesis-summary-rows-D9LZZHLw.js} +9 -9
- package/dist/_chunks/{anamnesis-summary-rows-CZirLRuv.js.map → anamnesis-summary-rows-D9LZZHLw.js.map} +1 -1
- package/dist/_chunks/{appointment-card-BgLpE6T5.js → appointment-card-DETaIfBb.js} +2 -2
- package/dist/_chunks/{appointment-card-BgLpE6T5.js.map → appointment-card-DETaIfBb.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-Dk11UOVW.js → appointment-peek-B79v56Zc.js} +4 -4
- package/dist/_chunks/{appointment-peek-Dk11UOVW.js.map → appointment-peek-B79v56Zc.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-wQ-PdkFV.js → appointment-timeline-tyJJPgVU.js} +5 -5
- package/dist/_chunks/{appointment-timeline-wQ-PdkFV.js.map → appointment-timeline-tyJJPgVU.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-D7Gt6m8x.js → appointment-tray-Dq4zto_L.js} +4 -4
- package/dist/_chunks/{appointment-tray-D7Gt6m8x.js.map → appointment-tray-Dq4zto_L.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-DZBtAvLH.js → audio-recorder-Ddlp5rVg.js} +3 -3
- package/dist/_chunks/{audio-recorder-DZBtAvLH.js.map → audio-recorder-Ddlp5rVg.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-klaxFNL_.js → balance-badge-cell-BCEsdEOe.js} +4 -4
- package/dist/_chunks/{balance-badge-cell-klaxFNL_.js.map → balance-badge-cell-BCEsdEOe.js.map} +1 -1
- package/dist/_chunks/{bishop-score-BMLRvXYF.js → bishop-score-1NAiZh0K.js} +2 -2
- package/dist/_chunks/{bishop-score-BMLRvXYF.js.map → bishop-score-1NAiZh0K.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-DUhRyyrA.js → bmi-calculator-ZzzPZhhI.js} +2 -2
- package/dist/_chunks/{bmi-calculator-DUhRyyrA.js.map → bmi-calculator-ZzzPZhhI.js.map} +1 -1
- package/dist/_chunks/{booking-Cdzd8kyY.js → booking-DmyX24Ls.js} +5 -5
- package/dist/_chunks/{booking-Cdzd8kyY.js.map → booking-DmyX24Ls.js.map} +1 -1
- package/dist/_chunks/{button-18oBsI3n.js → button-CYPx2xFq.js} +38 -36
- package/dist/_chunks/button-CYPx2xFq.js.map +1 -0
- package/dist/_chunks/{button-group-BSDqso_C.js → button-group-t9RrsCS6.js} +3 -3
- package/dist/_chunks/{button-group-BSDqso_C.js.map → button-group-t9RrsCS6.js.map} +1 -1
- package/dist/_chunks/{calendar-zpE9qTM4.js → calendar-aqzmITxw.js} +543 -508
- package/dist/_chunks/calendar-aqzmITxw.js.map +1 -0
- package/dist/_chunks/{calendar-event-card-DplPh1wv.js → calendar-event-card-DyFSIehr.js} +148 -145
- package/dist/_chunks/{calendar-event-card-DplPh1wv.js.map → calendar-event-card-DyFSIehr.js.map} +1 -1
- package/dist/_chunks/calendar-workspace-BqoPkCUp.js +10597 -0
- package/dist/_chunks/calendar-workspace-BqoPkCUp.js.map +1 -0
- package/dist/_chunks/{care-plan-card-ciBaaguw.js → care-plan-card-amX33mMF.js} +2 -2
- package/dist/_chunks/{care-plan-card-ciBaaguw.js.map → care-plan-card-amX33mMF.js.map} +1 -1
- package/dist/_chunks/{care-plan-entry-card-D7A0whiZ.js → care-plan-entry-card-DNkEucjN.js} +2 -2
- package/dist/_chunks/{care-plan-entry-card-D7A0whiZ.js.map → care-plan-entry-card-DNkEucjN.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-DKV1gLqv.js → care-plan-header-CJi853Rf.js} +2 -2
- package/dist/_chunks/{care-plan-header-DKV1gLqv.js.map → care-plan-header-CJi853Rf.js.map} +1 -1
- package/dist/_chunks/{carousel.agent-DqDGR2yH.js → carousel.agent-2EhJsAtl.js} +2 -2
- package/dist/_chunks/{carousel.agent-DqDGR2yH.js.map → carousel.agent-2EhJsAtl.js.map} +1 -1
- package/dist/_chunks/{chart-VjuXDXOZ.js → chart-B2HnwMP5.js} +3 -3
- package/dist/_chunks/{chart-VjuXDXOZ.js.map → chart-B2HnwMP5.js.map} +1 -1
- package/dist/_chunks/{chat-input-BVho_SqP.js → chat-input-CHUsUFOD.js} +2 -2
- package/dist/_chunks/{chat-input-BVho_SqP.js.map → chat-input-CHUsUFOD.js.map} +1 -1
- package/dist/_chunks/{chat-message-B4ihjNy3.js → chat-message-DTcRGhNo.js} +3 -3
- package/dist/_chunks/{chat-message-B4ihjNy3.js.map → chat-message-DTcRGhNo.js.map} +1 -1
- package/dist/_chunks/{code-block-C_eNHWaa.js → code-block-BrwcZNPq.js} +2 -2
- package/dist/_chunks/{code-block-C_eNHWaa.js.map → code-block-BrwcZNPq.js.map} +1 -1
- package/dist/_chunks/{connection-status-Cfux3TvH.js → connection-status-DMheLE65.js} +3 -3
- package/dist/_chunks/{connection-status-Cfux3TvH.js.map → connection-status-DMheLE65.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-Dj4NgBL-.js → contact-profile-card-zQLGGFKG.js} +2 -2
- package/dist/_chunks/{contact-profile-card-Dj4NgBL-.js.map → contact-profile-card-zQLGGFKG.js.map} +1 -1
- package/dist/_chunks/{control-room-rail-DAO0qfOI.js → control-room-rail-5iuM3jcm.js} +3 -3
- package/dist/_chunks/{control-room-rail-DAO0qfOI.js.map → control-room-rail-5iuM3jcm.js.map} +1 -1
- package/dist/_chunks/{copy-field-Cm4y5Bff.js → copy-field-C-KvrgOG.js} +2 -2
- package/dist/_chunks/{copy-field-Cm4y5Bff.js.map → copy-field-C-KvrgOG.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-B9lBRNiZ.js → cycle-calculator-DQMCeEzn.js} +2 -2
- package/dist/_chunks/{cycle-calculator-B9lBRNiZ.js.map → cycle-calculator-DQMCeEzn.js.map} +1 -1
- package/dist/_chunks/{dashboard-grid-uX7x1ePj.js → dashboard-grid-H7uph3HO.js} +2 -2
- package/dist/_chunks/{dashboard-grid-uX7x1ePj.js.map → dashboard-grid-H7uph3HO.js.map} +1 -1
- package/dist/_chunks/{data-table-CrI3_bjH.js → data-table-C4yPR89K.js} +7 -7
- package/dist/_chunks/{data-table-CrI3_bjH.js.map → data-table-C4yPR89K.js.map} +1 -1
- package/dist/_chunks/{data-table-tabs-CzYYKp2_.js → data-table-tabs-Dd_O1nPY.js} +3 -3
- package/dist/_chunks/{data-table-tabs-CzYYKp2_.js.map → data-table-tabs-Dd_O1nPY.js.map} +1 -1
- package/dist/_chunks/{description-list-1A2DEbE6.js → description-list-DOPu69Jg.js} +2 -2
- package/dist/_chunks/{description-list-1A2DEbE6.js.map → description-list-DOPu69Jg.js.map} +1 -1
- package/dist/_chunks/{document-preview-Od2Hz4z5.js → document-preview-Dzh1YAz8.js} +3 -3
- package/dist/_chunks/{document-preview-Od2Hz4z5.js.map → document-preview-Dzh1YAz8.js.map} +1 -1
- package/dist/_chunks/{document-scanner-p0aGlzCy.js → document-scanner-BSVwMR4V.js} +2 -2
- package/dist/_chunks/{document-scanner-p0aGlzCy.js.map → document-scanner-BSVwMR4V.js.map} +1 -1
- package/dist/_chunks/dropdown-menu-DIzxr_lp.js +594 -0
- package/dist/_chunks/dropdown-menu-DIzxr_lp.js.map +1 -0
- package/dist/_chunks/{due-date-calculator-BVqJaxzd.js → due-date-calculator-DUjw4w5O.js} +2 -2
- package/dist/_chunks/{due-date-calculator-BVqJaxzd.js.map → due-date-calculator-DUjw4w5O.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-D_G2Ap61.js → editable-currency-cell-renderer-Cch3RIJL.js} +3 -3
- package/dist/_chunks/{editable-currency-cell-renderer-D_G2Ap61.js.map → editable-currency-cell-renderer-Cch3RIJL.js.map} +1 -1
- package/dist/_chunks/{editable-description-B4NVdjvd.js → editable-description-CRQib91p.js} +3 -3
- package/dist/_chunks/{editable-description-B4NVdjvd.js.map → editable-description-CRQib91p.js.map} +1 -1
- package/dist/_chunks/{editor-overlay-BDiBvQmL.js → editor-overlay-DsA7vR5C.js} +2 -2
- package/dist/_chunks/{editor-overlay-BDiBvQmL.js.map → editor-overlay-DsA7vR5C.js.map} +1 -1
- package/dist/_chunks/{empty-state-DTBZ1ENT.js → empty-state-Ck1wVWdN.js} +2 -2
- package/dist/_chunks/{empty-state-DTBZ1ENT.js.map → empty-state-Ck1wVWdN.js.map} +1 -1
- package/dist/_chunks/{entity-summary-CFJfBdVP.js → entity-summary-Cvs21xPr.js} +3 -3
- package/dist/_chunks/{entity-summary-CFJfBdVP.js.map → entity-summary-Cvs21xPr.js.map} +1 -1
- package/dist/_chunks/{error-boundary-BxTqEXqj.js → error-boundary-C_HAzVLO.js} +2 -2
- package/dist/_chunks/{error-boundary-BxTqEXqj.js.map → error-boundary-C_HAzVLO.js.map} +1 -1
- package/dist/_chunks/{face-scheme-fku-RShg.js → face-scheme-DVZZTuXT.js} +5 -5
- package/dist/_chunks/{face-scheme-fku-RShg.js.map → face-scheme-DVZZTuXT.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-B69yOS9W.js → fetal-weight-B-lO-948.js} +2 -2
- package/dist/_chunks/{fetal-weight-B69yOS9W.js.map → fetal-weight-B-lO-948.js.map} +1 -1
- package/dist/_chunks/{field-array-lIXrFWS0.js → field-array-B3IDOct8.js} +3 -3
- package/dist/_chunks/{field-array-lIXrFWS0.js.map → field-array-B3IDOct8.js.map} +1 -1
- package/dist/_chunks/{file-manager-C6QQPQV5.js → file-manager-COUb-w8j.js} +7 -7
- package/dist/_chunks/{file-manager-C6QQPQV5.js.map → file-manager-COUb-w8j.js.map} +1 -1
- package/dist/_chunks/{finished-terminal-B2oqXO0Y.js → finished-terminal-BrAWwfOw.js} +2 -2
- package/dist/_chunks/{finished-terminal-B2oqXO0Y.js.map → finished-terminal-BrAWwfOw.js.map} +1 -1
- package/dist/_chunks/{fiscal-code-input-BEF8eKIG.js → fiscal-code-input-CwUwhUZy.js} +2 -2
- package/dist/_chunks/{fiscal-code-input-BEF8eKIG.js.map → fiscal-code-input-CwUwhUZy.js.map} +1 -1
- package/dist/_chunks/floating-action-button-pojvb9gG.js.map +1 -1
- package/dist/_chunks/{freemium-paywall-B6JITu4l.js → freemium-paywall-DiPJrL18.js} +2 -2
- package/dist/_chunks/{freemium-paywall-B6JITu4l.js.map → freemium-paywall-DiPJrL18.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-DsGN6_HS.js → gestational-age-calculator-BVPtrWKf.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-DsGN6_HS.js.map → gestational-age-calculator-BVPtrWKf.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-D2SH-e7t.js → hcg-doubling-CPktiA3H.js} +2 -2
- package/dist/_chunks/{hcg-doubling-D2SH-e7t.js.map → hcg-doubling-CPktiA3H.js.map} +1 -1
- package/dist/_chunks/{header-CCjp5GvE.js → header-C8NbLgVq.js} +2 -2
- package/dist/_chunks/{header-CCjp5GvE.js.map → header-C8NbLgVq.js.map} +1 -1
- package/dist/_chunks/header-settings-D0M3WNTS.js +305 -0
- package/dist/_chunks/header-settings-D0M3WNTS.js.map +1 -0
- package/dist/_chunks/{help-me-write-templates-DQtT1qs_.js → help-me-write-templates-CYAKuXZ3.js} +5 -5
- package/dist/_chunks/{help-me-write-templates-DQtT1qs_.js.map → help-me-write-templates-CYAKuXZ3.js.map} +1 -1
- package/dist/_chunks/{hover-card-BplP5SzQ.js → hover-card-BM0vNmq4.js} +2 -2
- package/dist/_chunks/{hover-card-BplP5SzQ.js.map → hover-card-BM0vNmq4.js.map} +1 -1
- package/dist/_chunks/{icon-button-CY7GU_Se.js → icon-button-JAXAkqWC.js} +2 -2
- package/dist/_chunks/icon-button-JAXAkqWC.js.map +1 -0
- package/dist/_chunks/{icon-button-group-B_426QN_.js → icon-button-group-ud2BLmxe.js} +3 -3
- package/dist/_chunks/{icon-button-group-B_426QN_.js.map → icon-button-group-ud2BLmxe.js.map} +1 -1
- package/dist/_chunks/{icon-picker-ZLebyB0U.js → icon-picker-B1PwkUHy.js} +3 -3
- package/dist/_chunks/{icon-picker-ZLebyB0U.js.map → icon-picker-B1PwkUHy.js.map} +1 -1
- package/dist/_chunks/{image-cropper-_HiNN79d.js → image-cropper-DM6hpXUw.js} +2 -2
- package/dist/_chunks/{image-cropper-_HiNN79d.js.map → image-cropper-DM6hpXUw.js.map} +1 -1
- package/dist/_chunks/{info-tip-laBxZhKu.js → info-tip-CywkQ1NX.js} +2 -2
- package/dist/_chunks/{info-tip-laBxZhKu.js.map → info-tip-CywkQ1NX.js.map} +1 -1
- package/dist/_chunks/{insert-result-CSuPQyKL.js → insert-result-Fu9AHxR6.js} +2 -2
- package/dist/_chunks/{insert-result-CSuPQyKL.js.map → insert-result-Fu9AHxR6.js.map} +1 -1
- package/dist/_chunks/{key-value-pair-Dcdl3Gni.js → key-value-pair-BL1J3_Km.js} +2 -2
- package/dist/_chunks/{key-value-pair-Dcdl3Gni.js.map → key-value-pair-BL1J3_Km.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-BTJSnM_H.js → kit-extensions-B9Qn6VIc.js} +6 -6
- package/dist/_chunks/{kit-extensions-BTJSnM_H.js.map → kit-extensions-B9Qn6VIc.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-CkNbUsBM.js → link-cell-renderer-BcW3F1j9.js} +2 -2
- package/dist/_chunks/{link-cell-renderer-CkNbUsBM.js.map → link-cell-renderer-BcW3F1j9.js.map} +1 -1
- package/dist/_chunks/{locale-picker-DGkQmhV9.js → locale-picker-Z42P8T-i.js} +218 -213
- package/dist/_chunks/locale-picker-Z42P8T-i.js.map +1 -0
- package/dist/_chunks/{map-view-Bb7ClKSF.js → map-view-DxYPJjM9.js} +2 -2
- package/dist/_chunks/{map-view-Bb7ClKSF.js.map → map-view-DxYPJjM9.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-1uKqs4gD.js → marketplace-app-shell-rTTvWRrE.js} +6 -6
- package/dist/_chunks/{marketplace-app-shell-1uKqs4gD.js.map → marketplace-app-shell-rTTvWRrE.js.map} +1 -1
- package/dist/_chunks/{message-card-C2zsvyj0.js → message-card-CUBPPn4Z.js} +3 -3
- package/dist/_chunks/{message-card-C2zsvyj0.js.map → message-card-CUBPPn4Z.js.map} +1 -1
- package/dist/_chunks/{message-tray-CMlmxdH2.js → message-tray-uy3DAIbn.js} +4 -4
- package/dist/_chunks/{message-tray-CMlmxdH2.js.map → message-tray-uy3DAIbn.js.map} +1 -1
- package/dist/_chunks/{muscle-scheme-Co0NIgbU.js → muscle-scheme-CH-vQ7Ch.js} +2 -2
- package/dist/_chunks/{muscle-scheme-Co0NIgbU.js.map → muscle-scheme-CH-vQ7Ch.js.map} +1 -1
- package/dist/_chunks/{notes-panel-xxpFt-I1.js → notes-panel-Dka4Z2M7.js} +4 -4
- package/dist/_chunks/{notes-panel-xxpFt-I1.js.map → notes-panel-Dka4Z2M7.js.map} +1 -1
- package/dist/_chunks/{notification-card-DDzBCi8l.js → notification-card-Hy8w3UWx.js} +3 -3
- package/dist/_chunks/{notification-card-DDzBCi8l.js.map → notification-card-Hy8w3UWx.js.map} +1 -1
- package/dist/_chunks/{notification-tray-PnH2PBlZ.js → notification-tray-VuV3XXB8.js} +4 -4
- package/dist/_chunks/{notification-tray-PnH2PBlZ.js.map → notification-tray-VuV3XXB8.js.map} +1 -1
- package/dist/_chunks/{optical-prescription-DUufWXfZ.js → optical-prescription-C2n6d0HO.js} +2 -2
- package/dist/_chunks/{optical-prescription-DUufWXfZ.js.map → optical-prescription-C2n6d0HO.js.map} +1 -1
- package/dist/_chunks/{panel-subview-CzHutkA8.js → panel-subview-DAY-ToM3.js} +2 -2
- package/dist/_chunks/{panel-subview-CzHutkA8.js.map → panel-subview-DAY-ToM3.js.map} +1 -1
- package/dist/_chunks/{patient-details-tTlvrJSU.js → patient-details-D9sAM3qh.js} +3 -3
- package/dist/_chunks/{patient-details-tTlvrJSU.js.map → patient-details-D9sAM3qh.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-DElFbpKc.js → patient-field-row-CT04C_lZ.js} +277 -257
- package/dist/_chunks/patient-field-row-CT04C_lZ.js.map +1 -0
- package/dist/_chunks/{patient-search-DgXdGkhK.js → patient-search-DkIukAMQ.js} +3 -3
- package/dist/_chunks/{patient-search-DgXdGkhK.js.map → patient-search-DkIukAMQ.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-DQ__6DR-.js → patient-summary-card-DI0BH-Fe.js} +5 -5
- package/dist/_chunks/{patient-summary-card-DQ__6DR-.js.map → patient-summary-card-DI0BH-Fe.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-ugi4np1l.js → payment-automation-upsell-vQBIyUky.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-ugi4np1l.js.map → payment-automation-upsell-vQBIyUky.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-DMJB57Tv.js → payment-request-card-BSaJzhxz.js} +3 -3
- package/dist/_chunks/{payment-request-card-DMJB57Tv.js.map → payment-request-card-BSaJzhxz.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-DbGzKDj7.js → periodontal-chart-BcTcOc79.js} +2 -2
- package/dist/_chunks/{periodontal-chart-DbGzKDj7.js.map → periodontal-chart-BcTcOc79.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-card-DvHyP47v.js → periodontal-chart-card-NS_nToBf.js} +2 -2
- package/dist/_chunks/{periodontal-chart-card-DvHyP47v.js.map → periodontal-chart-card-NS_nToBf.js.map} +1 -1
- package/dist/_chunks/{popover-Dvb40vPH.js → popover-SASSeAdY.js} +2 -2
- package/dist/_chunks/{popover-Dvb40vPH.js.map → popover-SASSeAdY.js.map} +1 -1
- package/dist/_chunks/{practice-results-EKRiqWtQ.js → practice-results-C3ifcObw.js} +6 -6
- package/dist/_chunks/{practice-results-EKRiqWtQ.js.map → practice-results-C3ifcObw.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-lfjjZVZH.js → pregnancy-dating-CpJ3iYvD.js} +2 -2
- package/dist/_chunks/{pregnancy-dating-lfjjZVZH.js.map → pregnancy-dating-CpJ3iYvD.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-WpNt-S0q.js → pregnancy-weight-gain-kDOhA2vZ.js} +2 -2
- package/dist/_chunks/{pregnancy-weight-gain-WpNt-S0q.js.map → pregnancy-weight-gain-kDOhA2vZ.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-D6gq0GDg.js → privacy-lock-CEyvNpC8.js} +3 -3
- package/dist/_chunks/{privacy-lock-D6gq0GDg.js.map → privacy-lock-CEyvNpC8.js.map} +1 -1
- package/dist/_chunks/{privacy-mask-BC5lw2zB.js → privacy-mask-TzMlEu3Q.js} +2 -2
- package/dist/_chunks/{privacy-mask-BC5lw2zB.js.map → privacy-mask-TzMlEu3Q.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-CKeSCSeE.js → product-hub-panel-b70i9Hi1.js} +3 -3
- package/dist/_chunks/{product-hub-panel-CKeSCSeE.js.map → product-hub-panel-b70i9Hi1.js.map} +1 -1
- package/dist/_chunks/{public-header.agent-B9wDmUeB.js → public-header.agent-D0ApOrmx.js} +3 -3
- package/dist/_chunks/{public-header.agent-B9wDmUeB.js.map → public-header.agent-D0ApOrmx.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-TmyIvTOa.js → radiograph-panel.agent-jhwaIW8U.js} +4 -4
- package/dist/_chunks/{radiograph-panel.agent-TmyIvTOa.js.map → radiograph-panel.agent-jhwaIW8U.js.map} +1 -1
- package/dist/_chunks/resource-chip-DQeCJzJf.js +143 -0
- package/dist/_chunks/resource-chip-DQeCJzJf.js.map +1 -0
- package/dist/_chunks/{reviews-panel-BdwFp_0c.js → reviews-panel-B5QC4FIp.js} +4 -4
- package/dist/_chunks/{reviews-panel-BdwFp_0c.js.map → reviews-panel-B5QC4FIp.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-y6ML0KeV.js → rich-text-editor-DoBXdwmx.js} +930 -943
- package/dist/_chunks/rich-text-editor-DoBXdwmx.js.map +1 -0
- package/dist/_chunks/{session-countdown-ACJyTXH2.js → session-countdown-26XB5u38.js} +2 -2
- package/dist/_chunks/{session-countdown-ACJyTXH2.js.map → session-countdown-26XB5u38.js.map} +1 -1
- package/dist/_chunks/{sheet-D0Lh0KR2.js → sheet-CwhNzxbr.js} +2 -2
- package/dist/_chunks/{sheet-D0Lh0KR2.js.map → sheet-CwhNzxbr.js.map} +1 -1
- package/dist/_chunks/{sign-in-with-alfadocs-button-CDyJAIzW.js → sign-in-with-alfadocs-button-jxbze77L.js} +2 -2
- package/dist/_chunks/{sign-in-with-alfadocs-button-CDyJAIzW.js.map → sign-in-with-alfadocs-button-jxbze77L.js.map} +1 -1
- package/dist/_chunks/{signature-request-BUGeG8oD.js → signature-request-BorHf3CY.js} +4 -4
- package/dist/_chunks/{signature-request-BUGeG8oD.js.map → signature-request-BorHf3CY.js.map} +1 -1
- package/dist/_chunks/{slot-grid-4fWH3Euk.js → slot-grid-xgf2UKLS.js} +4 -4
- package/dist/_chunks/{slot-grid-4fWH3Euk.js.map → slot-grid-xgf2UKLS.js.map} +1 -1
- package/dist/_chunks/social-sign-in-button-dlpPI5l7.js.map +1 -1
- package/dist/_chunks/{streaming-text-eRiizArc.js → streaming-text-Cos2fVTw.js} +2 -2
- package/dist/_chunks/{streaming-text-eRiizArc.js.map → streaming-text-Cos2fVTw.js.map} +1 -1
- package/dist/_chunks/{tab-bar-BHFf6knq.js → tab-bar-BrkMUW0c.js} +2 -2
- package/dist/_chunks/{tab-bar-BHFf6knq.js.map → tab-bar-BrkMUW0c.js.map} +1 -1
- package/dist/_chunks/tabs-tK22Mz7r.js +413 -0
- package/dist/_chunks/tabs-tK22Mz7r.js.map +1 -0
- package/dist/_chunks/{task-card-jaOhnj_q.js → task-card-CLpHmqEY.js} +2 -2
- package/dist/_chunks/{task-card-jaOhnj_q.js.map → task-card-CLpHmqEY.js.map} +1 -1
- package/dist/_chunks/{task-editor-DlvTwAfv.js → task-editor-B4UGsU7l.js} +6 -6
- package/dist/_chunks/{task-editor-DlvTwAfv.js.map → task-editor-B4UGsU7l.js.map} +1 -1
- package/dist/_chunks/{task-tray-HHyxi9ga.js → task-tray-dsmYgjVb.js} +4 -4
- package/dist/_chunks/{task-tray-HHyxi9ga.js.map → task-tray-dsmYgjVb.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-DbSjq_mz.js → tasks-panel-CwwVw491.js} +6 -6
- package/dist/_chunks/{tasks-panel-DbSjq_mz.js.map → tasks-panel-CwwVw491.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-LUBxlNDm.js → theme-toggle-jyoyhbJL.js} +4 -4
- package/dist/_chunks/{theme-toggle-LUBxlNDm.js.map → theme-toggle-jyoyhbJL.js.map} +1 -1
- package/dist/_chunks/{toast-CT8hjr9r.js → toast-FijDyPnv.js} +2 -2
- package/dist/_chunks/{toast-CT8hjr9r.js.map → toast-FijDyPnv.js.map} +1 -1
- package/dist/_chunks/{token-insert-menu-klwbxVKh.js → token-insert-menu-Cjf99IdN.js} +3 -3
- package/dist/_chunks/{token-insert-menu-klwbxVKh.js.map → token-insert-menu-Cjf99IdN.js.map} +1 -1
- package/dist/_chunks/{tool-rail-DEeX4PdN.js → tool-rail-DphMl1hX.js} +2 -2
- package/dist/_chunks/{tool-rail-DEeX4PdN.js.map → tool-rail-DphMl1hX.js.map} +1 -1
- package/dist/_chunks/{tooth-scheme-BkjhkI8g.js → tooth-scheme-BaCJnyg9.js} +663 -718
- package/dist/_chunks/tooth-scheme-BaCJnyg9.js.map +1 -0
- package/dist/_chunks/{unit-converter-Dp_KDxE6.js → unit-converter-CGpOgarU.js} +2 -2
- package/dist/_chunks/{unit-converter-Dp_KDxE6.js.map → unit-converter-CGpOgarU.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-5-hV-2xA.js → use-appointment-details-read-uEnJLVfA.js} +14 -14
- package/dist/_chunks/{use-appointment-details-read-5-hV-2xA.js.map → use-appointment-details-read-uEnJLVfA.js.map} +1 -1
- package/dist/_chunks/wallet-pay-button--dnR6NfJ.js.map +1 -1
- package/dist/_chunks/{warning-stack-CEgYkI1z.js → warning-stack-7Hffm7K1.js} +3 -3
- package/dist/_chunks/{warning-stack-CEgYkI1z.js.map → warning-stack-7Hffm7K1.js.map} +1 -1
- package/dist/_chunks/{workflow-map-qGkQTNvS.js → workflow-map-Jfe9L9Wt.js} +6 -6
- package/dist/_chunks/{workflow-map-qGkQTNvS.js.map → workflow-map-Jfe9L9Wt.js.map} +1 -1
- package/dist/_chunks/{workflow-status-ClHfz4Kr.js → workflow-status-jHfsIDzi.js} +2 -2
- package/dist/_chunks/{workflow-status-ClHfz4Kr.js.map → workflow-status-jHfsIDzi.js.map} +1 -1
- package/dist/agent-catalog.json +103 -38
- package/dist/agent-i18n/en.json +7 -4
- package/dist/components/_shared/entity-card/entity-card.d.ts +1 -1
- package/dist/components/_shared/field-visibility-cog.d.ts.map +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/index.js +1 -1
- package/dist/components/anamnesis-card/index.js +1 -1
- package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts +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/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/button/button.d.ts +11 -0
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/icon-button.d.ts +4 -0
- package/dist/components/button/icon-button.d.ts.map +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/calendar/calendar.d.ts +11 -3
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/calendar-event-card/calendar-event-card.d.ts +6 -0
- package/dist/components/calendar-event-card/calendar-event-card.d.ts.map +1 -1
- package/dist/components/calendar-event-card/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/chart/chart.d.ts +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/connection-status/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/copy-field/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +4 -4
- package/dist/components/data-table-tabs/index.js +1 -1
- package/dist/components/description-list/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/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +52 -2
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.d.ts +1 -1
- package/dist/components/dropdown-menu/index.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/editable-description/index.js +1 -1
- package/dist/components/editor-overlay/index.js +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/error-boundary/index.js +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/field-array/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/finished-terminal/index.js +1 -1
- package/dist/components/fiscal-code-input/index.js +1 -1
- package/dist/components/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/header-settings/header-settings.d.ts +3 -3
- package/dist/components/header-settings/header-settings.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/hover-card/index.js +1 -1
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/icon-picker/index.js +1 -1
- package/dist/components/image-cropper/index.js +1 -1
- package/dist/components/info-tip/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/locale-picker/locale-picker.d.ts +7 -0
- package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/muscle-scheme/index.js +1 -1
- package/dist/components/notes-panel/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/operator-hero/operator-hero.d.ts +1 -1
- package/dist/components/optical-prescription/index.js +1 -1
- package/dist/components/panel-subview/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-details/patient-details.d.ts +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-summary-card/patient-summary-card.d.ts +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/periodontal-chart/index.js +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/resource-chip/index.d.ts +1 -1
- package/dist/components/resource-chip/index.d.ts.map +1 -1
- package/dist/components/resource-chip/index.js +3 -2
- package/dist/components/resource-chip/resource-chip.d.ts +20 -0
- package/dist/components/resource-chip/resource-chip.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/session-countdown/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/skeleton-scheme/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/social-sign-in-button/social-sign-in-button.d.ts.map +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/tab-bar/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.d.ts.map +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/toast/index.js +1 -1
- package/dist/components/token-insert-menu/index.js +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/tooth-scheme/tooth-scheme.d.ts +2 -2
- package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/wallet-pay-button/wallet-pay-button.d.ts.map +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow/workflow-card.d.ts +1 -1
- package/dist/components/workflow-status/index.js +1 -1
- package/dist/i18n/locales/ar.d.ts +5 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +5 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +5 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +5 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +5 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +5 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +5 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +5 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +5 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +5 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +5 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +5 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +5 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +5 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +5 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +5 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +5 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +5 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +5 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +5 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +5 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +5 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +5 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +5 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +5 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +5 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +5 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +5 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +5 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +5 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +5 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +5 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +5 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +5 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +5 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +5 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +478 -477
- package/dist/locales/ar.json +5 -0
- package/dist/locales/de.json +5 -0
- package/dist/locales/el.json +5 -0
- package/dist/locales/en.json +5 -0
- package/dist/locales/es.json +5 -0
- package/dist/locales/fr.json +5 -0
- package/dist/locales/hi.json +5 -0
- package/dist/locales/it.json +5 -0
- package/dist/locales/ja.json +5 -0
- package/dist/locales/nl.json +5 -0
- package/dist/locales/pl.json +5 -0
- package/dist/locales/pt.json +5 -0
- package/dist/locales/ro.json +5 -0
- package/dist/locales/ru.json +5 -0
- package/dist/locales/sq.json +5 -0
- package/dist/locales/sv.json +5 -0
- package/dist/locales/tr.json +5 -0
- package/dist/locales/zh.json +5 -0
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.surface.d.ts +4 -1
- package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/help-me-write-templates/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/signature-request/index.js +1 -1
- package/dist/tokens.css +2 -1
- package/package.json +1 -1
- package/dist/_chunks/button-18oBsI3n.js.map +0 -1
- package/dist/_chunks/calendar-workspace-CWRH4x15.js +0 -10577
- package/dist/_chunks/calendar-workspace-CWRH4x15.js.map +0 -1
- package/dist/_chunks/calendar-zpE9qTM4.js.map +0 -1
- package/dist/_chunks/dropdown-menu-C8PaW3lR.js +0 -369
- package/dist/_chunks/dropdown-menu-C8PaW3lR.js.map +0 -1
- package/dist/_chunks/header-settings-ZXa6hXuu.js +0 -335
- package/dist/_chunks/header-settings-ZXa6hXuu.js.map +0 -1
- package/dist/_chunks/icon-button-CY7GU_Se.js.map +0 -1
- package/dist/_chunks/locale-picker-DGkQmhV9.js.map +0 -1
- package/dist/_chunks/patient-field-row-DElFbpKc.js.map +0 -1
- package/dist/_chunks/resource-chip-DYTG0IQQ.js +0 -83
- package/dist/_chunks/resource-chip-DYTG0IQQ.js.map +0 -1
- package/dist/_chunks/rich-text-editor-y6ML0KeV.js.map +0 -1
- package/dist/_chunks/tabs-CFsuMQ5H.js +0 -409
- package/dist/_chunks/tabs-CFsuMQ5H.js.map +0 -1
- package/dist/_chunks/tooth-scheme-BkjhkI8g.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { Slot as
|
|
4
|
-
import { c as
|
|
5
|
-
const
|
|
1
|
+
import { jsxs as f, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as B, isValidElement as L, useEffect as O, cloneElement as S } from "react";
|
|
3
|
+
import { Slot as V, Slottable as $ } from "@radix-ui/react-slot";
|
|
4
|
+
import { c as j } from "./index-D2ZczOXr.js";
|
|
5
|
+
const E = j(
|
|
6
6
|
// `forced-colors:*` — under Windows High Contrast Mode the OS strips our
|
|
7
7
|
// bg/text tokens, so `ghost` / `outline` / `link` would lose their shape.
|
|
8
8
|
// We repaint a `ButtonBorder` edge + swap the focus ring to `CanvasText`
|
|
@@ -83,50 +83,52 @@ const j = $(
|
|
|
83
83
|
background: "transparent"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
), C =
|
|
86
|
+
), C = B(
|
|
87
87
|
({
|
|
88
88
|
intent: c,
|
|
89
89
|
size: t,
|
|
90
|
-
background:
|
|
91
|
-
className:
|
|
92
|
-
asChild:
|
|
90
|
+
background: p,
|
|
91
|
+
className: g,
|
|
92
|
+
asChild: r = !1,
|
|
93
93
|
loading: e = !1,
|
|
94
94
|
startIcon: a,
|
|
95
95
|
endIcon: i,
|
|
96
|
-
flipIconInRtl:
|
|
97
|
-
hideLabel:
|
|
98
|
-
disabled:
|
|
99
|
-
children:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
L(()
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
96
|
+
flipIconInRtl: h = !1,
|
|
97
|
+
hideLabel: y = !1,
|
|
98
|
+
disabled: x,
|
|
99
|
+
children: d,
|
|
100
|
+
type: l,
|
|
101
|
+
...u
|
|
102
|
+
}, k) => {
|
|
103
|
+
const w = r ? V : "button", o = r && L(d) ? d : null, n = y && (!r || o !== null), z = !d && (a || i), N = u["aria-label"];
|
|
104
|
+
O(() => {
|
|
105
|
+
}, [z, N]);
|
|
106
|
+
const m = t === "sm" ? 16 : t === "lg" ? 20 : 18, b = t === "sm" ? "ds:size-4" : t === "lg" ? "ds:size-5" : "ds:size-[18px]", v = h ? "ds:rtl:rotate-180" : "";
|
|
107
|
+
return /* @__PURE__ */ f(
|
|
108
|
+
w,
|
|
108
109
|
{
|
|
109
|
-
ref:
|
|
110
|
-
|
|
110
|
+
ref: k,
|
|
111
|
+
type: r ? l : l ?? "button",
|
|
112
|
+
className: E({
|
|
111
113
|
intent: c,
|
|
112
114
|
size: t,
|
|
113
|
-
background:
|
|
115
|
+
background: p,
|
|
114
116
|
hideLabel: n,
|
|
115
|
-
className:
|
|
117
|
+
className: g
|
|
116
118
|
}),
|
|
117
|
-
disabled:
|
|
119
|
+
disabled: x || e,
|
|
118
120
|
"aria-busy": e || void 0,
|
|
119
121
|
"data-component": "button",
|
|
120
122
|
"data-intent": c ?? void 0,
|
|
121
|
-
...
|
|
123
|
+
...u,
|
|
122
124
|
children: [
|
|
123
|
-
e && /* @__PURE__ */
|
|
125
|
+
e && /* @__PURE__ */ f(
|
|
124
126
|
"svg",
|
|
125
127
|
{
|
|
126
128
|
"aria-hidden": "true",
|
|
127
129
|
className: "ds:animate-spin",
|
|
128
|
-
width:
|
|
129
|
-
height:
|
|
130
|
+
width: m,
|
|
131
|
+
height: m,
|
|
130
132
|
viewBox: "0 0 24 24",
|
|
131
133
|
fill: "none",
|
|
132
134
|
children: [
|
|
@@ -157,26 +159,26 @@ const j = $(
|
|
|
157
159
|
"span",
|
|
158
160
|
{
|
|
159
161
|
"aria-hidden": "true",
|
|
160
|
-
className: `ds:inline-flex ds:items-center ${
|
|
162
|
+
className: `ds:inline-flex ds:items-center ${b} ${v}`.trim(),
|
|
161
163
|
children: a
|
|
162
164
|
}
|
|
163
165
|
),
|
|
164
|
-
|
|
166
|
+
r ? /* @__PURE__ */ s($, { children: n && o ? S(
|
|
165
167
|
o,
|
|
166
168
|
void 0,
|
|
167
169
|
/* @__PURE__ */ s("span", { className: "ds:sr-only", children: o.props.children })
|
|
168
|
-
) :
|
|
170
|
+
) : d }) : /* @__PURE__ */ s(
|
|
169
171
|
"span",
|
|
170
172
|
{
|
|
171
173
|
className: e || n ? "ds:sr-only" : "ds:inline-flex",
|
|
172
|
-
children:
|
|
174
|
+
children: d
|
|
173
175
|
}
|
|
174
176
|
),
|
|
175
177
|
!e && i && /* @__PURE__ */ s(
|
|
176
178
|
"span",
|
|
177
179
|
{
|
|
178
180
|
"aria-hidden": "true",
|
|
179
|
-
className: `ds:inline-flex ds:items-center ${
|
|
181
|
+
className: `ds:inline-flex ds:items-center ${b} ${v}`.trim(),
|
|
180
182
|
children: i
|
|
181
183
|
}
|
|
182
184
|
)
|
|
@@ -189,4 +191,4 @@ C.displayName = "Button";
|
|
|
189
191
|
export {
|
|
190
192
|
C as B
|
|
191
193
|
};
|
|
192
|
-
//# sourceMappingURL=button-
|
|
194
|
+
//# sourceMappingURL=button-CYPx2xFq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button-CYPx2xFq.js","sources":["../../src/components/button/button.tsx"],"sourcesContent":["import {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type ReactNode,\n useEffect,\n} from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst buttonVariants = cva(\n // `forced-colors:*` — under Windows High Contrast Mode the OS strips our\n // bg/text tokens, so `ghost` / `outline` / `link` would lose their shape.\n // We repaint a `ButtonBorder` edge + swap the focus ring to `CanvasText`\n // so the control and its focused state both survive HCM.\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:font-medium ds:transition-colors ds:rounded-[var(--radius-md)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:border ds:forced-colors:border-[ButtonBorder] ds:forced-colors:focus-visible:outline-[CanvasText] ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed ds:aria-busy:cursor-wait ds:relative',\n {\n variants: {\n intent: {\n primary:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:bg-primary-hover ds:active:opacity-90 ds:shadow-sm',\n secondary:\n 'ds:bg-secondary ds:text-secondary-foreground ds:hover:bg-secondary-hover ds:active:opacity-90',\n // Background paint is owned by the `background` variant (compound\n // rules below) — see-through by default so outline chrome works on\n // tinted toolbars and shells; `background=\"surface\"` opts into the\n // painted `--background` fill for host pages where a transparent\n // outline reads grey on grey.\n outline:\n 'ds:text-foreground ds:border ds:border-border ds:hover:bg-muted/10 ds:active:bg-muted/20',\n ghost:\n 'ds:bg-transparent ds:text-foreground ds:hover:bg-muted/10 ds:active:bg-muted/20',\n destructive:\n 'ds:bg-destructive ds:text-destructive-foreground ds:hover:bg-destructive-hover ds:active:opacity-90 ds:shadow-sm',\n // Outline chrome in the destructive palette — for dangerous secondary\n // actions (cancel appointment, remove item) that must read as risky\n // without the solid fill's weight. Background paint comes from the\n // `background` variant, same as `outline`.\n destructiveOutline:\n 'ds:text-destructive ds:border ds:border-destructive ds:hover:bg-destructive/10 ds:active:bg-destructive/20',\n link: 'ds:bg-transparent ds:text-primary ds:underline-offset-4 ds:hover:underline ds:active:opacity-80 ds:p-0 ds:h-auto ds:rounded-none',\n // `tonal` is a container-contextual intent. The button carries a\n // `data-intent=\"tonal\"` hook + baseline chrome (hover/active/shadow).\n // The ambient container (e.g. `Alert`) paints the colour via a\n // descendant selector — `[&_[data-intent=tonal]]:bg-…` — so the\n // button picks up the surrounding tint (amber on `warning`, red on\n // `error`, etc.). Outside such a container the button falls back to\n // the primary palette so a loose `<Button intent=\"tonal\">` is never\n // invisible.\n tonal:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:opacity-90 ds:active:opacity-80 ds:shadow-sm',\n // `soft` is the recommended secondary action: a primary-tinted\n // surface under deep brand ink, quieter than `primary`, warmer than\n // `outline`. Tokens re-point per theme (see `--primary-soft`).\n soft: 'ds:bg-[var(--primary-soft)] ds:text-[color:var(--primary-soft-foreground)] ds:hover:bg-[var(--primary-soft-hover)] ds:active:opacity-90',\n },\n size: {\n sm: 'ds:h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)] ds:min-h-[var(--min-target-size)] ds:sm:min-h-0 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n md: 'ds:h-10 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-6 ds:pe-6 ds:text-[length:var(--font-size-lg)]',\n },\n hideLabel: {\n true: 'ds:aspect-square ds:ps-0 ds:pe-0',\n false: '',\n },\n // Backing paint behind the outline intents. Only meaningful for\n // `outline` / `destructiveOutline` (the compound rules below);\n // ignored by the filled and deliberately see-through intents.\n background: {\n transparent: '',\n surface: '',\n },\n },\n // The outline intents carry NO bg utility of their own — the compound\n // rules below are the single source of the paint, so `transparent` vs\n // `surface` never depends on CSS order between competing bg-* classes.\n compoundVariants: [\n {\n intent: ['outline', 'destructiveOutline'],\n background: 'transparent',\n className: 'ds:bg-transparent',\n },\n {\n // 1.6.1 — the painted fill 1.4.6 baked into `outline` is now this\n // opt-in: it kept host pages legible but turned every toolbar\n // icon button on a tinted shell into a solid white square.\n intent: ['outline', 'destructiveOutline'],\n background: 'surface',\n className: 'ds:bg-[var(--background)]',\n },\n ],\n defaultVariants: {\n intent: 'primary',\n size: 'md',\n hideLabel: false,\n background: 'transparent',\n },\n },\n);\n\nexport interface ButtonProps\n extends\n ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * Native button type. Defaults to `'button'` (since 1.51.0), so a kit\n * Button never submits a surrounding `<form>` by accident. Pass\n * `type=\"submit\"` for a form's submit action (or `\"reset\"`). With\n * `asChild` no default is added: the slotted child keeps its own `type`.\n */\n type?: 'button' | 'submit' | 'reset';\n asChild?: boolean;\n loading?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n /**\n * Mirror directional icons (arrows, chevrons) horizontally when the\n * interface renders in RTL. Default `false` — most icons (trash, calendar,\n * plus) must NOT flip. Opt in per call-site for arrow / chevron glyphs.\n */\n flipIconInRtl?: boolean;\n /**\n * Visually hide the label, leaving the icon(s) and a square footprint.\n * The children stay in the DOM screen-reader-only, so the accessible\n * name is preserved. With `asChild` the slotted element's own children\n * become the hidden label, so a link folds to its icon too.\n */\n hideLabel?: boolean;\n /**\n * Backing paint behind `intent=\"outline\"` / `\"destructiveOutline\"`.\n * `'transparent'` (default) shows the surface behind the button —\n * correct on toolbars and tinted shells (app header, coloured bars).\n * `'surface'` paints `--background` behind the outline — for host\n * pages and split-button segments where a see-through outline reads\n * grey on grey. Ignored by the other intents.\n */\n background?: 'transparent' | 'surface';\n}\n\n/**\n * The kit's text action. Renders a native `<button type=\"button\">`, so it\n * never submits a surrounding form unless you pass `type=\"submit\"`.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n intent,\n size,\n background,\n className,\n asChild = false,\n loading = false,\n startIcon,\n endIcon,\n flipIconInRtl = false,\n hideLabel = false,\n disabled,\n children,\n type,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : 'button';\n /* A slotted child is one element: its own children are the label. */\n const slotted =\n asChild && isValidElement<{ children?: ReactNode }>(children)\n ? children\n : null;\n const labelHidden = hideLabel && (!asChild || slotted !== null);\n const isIconButton = !children && (startIcon || endIcon);\n\n const ariaLabel = props['aria-label'];\n useEffect(() => {\n if (import.meta.env.DEV && isIconButton && !ariaLabel) {\n console.warn(\n 'Button: Use IconButton for icon-only triggers to ensure accessibility and proper square sizing.',\n );\n }\n }, [isIconButton, ariaLabel]);\n\n const iconSize = size === 'sm' ? 16 : size === 'lg' ? 20 : 18;\n const iconSizeClass =\n size === 'sm'\n ? 'ds:size-4'\n : size === 'lg'\n ? 'ds:size-5'\n : 'ds:size-[18px]';\n const iconFlipClass = flipIconInRtl ? 'ds:rtl:rotate-180' : '';\n\n return (\n <Comp\n ref={ref}\n // An untyped native <button> submits its form, so default to\n // \"button\". With asChild the slotted child keeps its own type.\n type={asChild ? type : (type ?? 'button')}\n className={buttonVariants({\n intent,\n size,\n background,\n hideLabel: labelHidden,\n className,\n })}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n data-component=\"button\"\n data-intent={intent ?? undefined}\n {...props}\n >\n {loading && (\n <svg\n aria-hidden=\"true\"\n className=\"ds:animate-spin\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.25\"\n strokeWidth=\"3\"\n />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {!loading && startIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {startIcon}\n </span>\n )}\n {asChild ? (\n <Slottable>\n {labelHidden && slotted\n ? cloneElement(\n slotted,\n undefined,\n <span className=\"ds:sr-only\">{slotted.props.children}</span>,\n )\n : children}\n </Slottable>\n ) : (\n <span\n className={loading || labelHidden ? 'ds:sr-only' : 'ds:inline-flex'}\n >\n {children}\n </span>\n )}\n {!loading && endIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {endIcon}\n </span>\n )}\n </Comp>\n );\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["buttonVariants","cva","Button","forwardRef","intent","size","background","className","asChild","loading","startIcon","endIcon","flipIconInRtl","hideLabel","disabled","children","type","props","ref","Comp","Slot","slotted","isValidElement","labelHidden","isIconButton","ariaLabel","useEffect","iconSize","iconSizeClass","iconFlipClass","jsxs","jsx","Slottable","cloneElement"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { jsx as a, jsxs as S } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as Se, useRef as L, useState as ue, useCallback as j, Children as M, isValidElement as P, useEffect as Le, cloneElement as B } from "react";
|
|
3
3
|
import { c as Ae } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as Te } from "react-i18next";
|
|
5
|
-
import { I as ce } from "./icon-button-
|
|
6
|
-
import { D as d } from "./dropdown-menu-
|
|
5
|
+
import { I as ce } from "./icon-button-JAXAkqWC.js";
|
|
6
|
+
import { D as d } from "./dropdown-menu-DIzxr_lp.js";
|
|
7
7
|
import { T as $e } from "./tooltip-Cp-PLePW.js";
|
|
8
8
|
import { u as Fe } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
9
9
|
import { u as Ne } from "./use-priority-overflow-Cdmb5EiR.js";
|
|
@@ -405,4 +405,4 @@ je.displayName = "ButtonGroup";
|
|
|
405
405
|
export {
|
|
406
406
|
je as B
|
|
407
407
|
};
|
|
408
|
-
//# sourceMappingURL=button-group-
|
|
408
|
+
//# sourceMappingURL=button-group-t9RrsCS6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-group-BSDqso_C.js","sources":["../../src/components/button-group/button-group.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport type { ButtonProps } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu';\nimport { Tooltip } from '../tooltip';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePriorityOverflow } from '../../hooks/use-priority-overflow';\n\ntype ButtonIntent = NonNullable<ButtonProps['intent']>;\n\n/**\n * A bare boolean `inert` JSX prop is unsafe across this kit's peer range\n * (`^18.2.0 || ^19.0.0`, though the devDependency pins React 19.2.0, so\n * neither Storybook nor CI exercises React 18 here). React 18 doesn't\n * recognise `inert` as a boolean HTML attribute at all and drops a bare\n * `true` silently, which is what the platform (react-dom 18.3.1) hit:\n * these `aria-hidden` measurement/trigger clones stayed focusable and\n * clickable, tripling up `data-action` selectors and failing an axe\n * `aria-hidden-focus` check. The obvious fix — pass a non-boolean value\n * like `inert=\"\"` — makes it WORSE on React 19: it recognises `inert` as\n * boolean and explicitly warns \"Received an empty string for a\n * non-boolean attribute `inert`... will treat the attribute as if it\n * were false\", dropping it there too. There is no single JSX literal\n * that is correct on both majors.\n *\n * So this sets the real DOM property imperatively in a ref callback\n * instead of relying on JSX attribute diffing at all — the same\n * technique `tool-rail.tsx` / `panel-subview.tsx` already use via\n * `setAttribute('inert', '')` for exactly this reason. `.inert` is a\n * REFLECTED boolean IDL property (WHATWG spec): setting it always\n * updates the content attribute too, in every browser, regardless of\n * which React major (or none) rendered the element, so\n * `hasAttribute('inert')` stays a valid version-agnostic check. The\n * declarative `inert` JSX prop stays in place alongside it (harmless,\n * and keeps today's React 19 markup identical) — the ref is the\n * backstop that actually fixes React 18.\n */\nfunction forceInert<T extends HTMLElement>(node: T | null): void {\n if (node) node.inert = true;\n}\n\nconst buttonGroupVariants = cva(\n 'ds:inline-flex ds:isolate ds:[&>*]:relative ds:[&>*:focus-visible]:z-10',\n {\n variants: {\n orientation: {\n horizontal: [\n 'ds:flex-row',\n 'ds:[&>*:not(:first-child)]:rounded-s-none',\n 'ds:[&>*:not(:last-child)]:rounded-e-none',\n 'ds:[&>*:not(:first-child)]:-ms-px',\n ].join(' '),\n vertical: [\n 'ds:flex-col',\n 'ds:[&>*:not(:first-child)]:rounded-t-none',\n 'ds:[&>*:not(:last-child)]:rounded-b-none',\n 'ds:[&>*:not(:first-child)]:-mt-px',\n ].join(' '),\n },\n separator: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n orientation: 'horizontal',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-e ds:[&>*:not(:last-child)]:border-border',\n },\n {\n orientation: 'vertical',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-b ds:[&>*:not(:last-child)]:border-border',\n },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n separator: false,\n },\n },\n);\n\n// Hidden measurement rows: laid out (so widths are real) but invisible,\n// non-interactive and out of the a11y tree. Never display:none.\nconst MEASURE_ROW_CLASSES =\n 'ds:absolute ds:start-0 ds:top-0 ds:invisible ds:pointer-events-none';\n\n/** One entry of a child's own menu, as More repeats it in a submenu. */\nexport interface ButtonGroupOverflowItem {\n label: string;\n icon?: ReactNode;\n onSelect: () => void;\n disabled?: boolean;\n /** Carried onto the menu item as `data-action`. */\n action?: string;\n}\n\ntype SlottedProps = {\n children?: ReactNode;\n href?: unknown;\n target?: unknown;\n rel?: unknown;\n onClick?: unknown;\n 'aria-label'?: unknown;\n};\n\ntype GroupChildProps = {\n intent?: ButtonIntent;\n background?: 'transparent' | 'surface';\n tabIndex?: number;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n children?: ReactNode;\n disabled?: boolean;\n loading?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n hideLabel?: boolean;\n 'aria-label'?: string;\n /** State a menu item cannot carry: a pin holding one never moves. */\n 'aria-expanded'?: unknown;\n 'aria-pressed'?: unknown;\n 'aria-haspopup'?: unknown;\n /** `'always'` keeps the child in the strip at any width. */\n 'data-overflow-pin'?: boolean | 'true' | '' | 'always';\n 'data-overflow-tip'?: boolean | 'false';\n /** The child's DOM hook. More carries it onto the child's menu item. */\n 'data-action'?: string;\n size?: ButtonProps['size'];\n /** A Button over a link (`asChild` with an `<a href>`). */\n asChild?: boolean;\n /** A child that opens its own menu lists its entries here, so More can\n * repeat them in a submenu. */\n overflowItems?: ReadonlyArray<ButtonGroupOverflowItem>;\n};\n\nexport interface ButtonGroupProps\n extends\n HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonGroupVariants> {\n /**\n * Accessible label for the group. Falls back to the translated\n * `ui.buttonGroup.label` string when not provided.\n */\n label?: string;\n /**\n * When the children are interactive toolbar-style controls (e.g. toggles),\n * set this to render `role=\"toolbar\"` instead of `role=\"group\"`.\n */\n toolbar?: boolean;\n /**\n * Intent applied to every Button / IconButton child that does not set\n * its own `intent`. Defaults to `outline` — grouped buttons are peers,\n * not three solid-primary CTAs.\n */\n intent?: ButtonIntent;\n /**\n * Backing paint behind the outline intents, applied to every child that\n * does not set its own `background` AND to the group's own overflow\n * trigger. `'transparent'` (default) lets the surface behind show through\n * — right on a toolbar or a tinted shell. `'surface'` paints\n * `--background` behind the whole strip, so it reads as one solid control\n * on a host page or a panel footer. A child's explicit `background` wins.\n *\n * Set this rather than passing `background` to each child: the ellipsis\n * trigger is the group's own, so no per-child prop can reach it and the\n * strip would collapse to a mismatched see-through button.\n */\n background?: 'transparent' | 'surface';\n /**\n * Size applied to every child that does not set its own `size` AND to the\n * group's own overflow trigger. Set it here rather than per child: the\n * ellipsis trigger is the group's, so a per-child `size` leaves it at the\n * default `md` and the strip ends on a button taller than the rest.\n */\n size?: ButtonProps['size'];\n /**\n * `'menu'` keeps the strip on one line whatever the container width:\n * once the buttons stop fitting (after the optional `collapseToIcons`\n * stage) trailing ones move into a dropdown behind an ellipsis trigger.\n * The group then fills its container's inline size, so give it a bounded\n * parent. Horizontal only. Children needing to stay in the strip set\n * `data-overflow-pin`; children without a string label or `aria-label`\n * cannot be mirrored into the menu and are pinned automatically. When the\n * pinned children alone no longer fit beside the menu, trailing pins that\n * are plain actions (an `onClick`, a link or `overflowItems`) move into\n * it, so it stays reachable. A pin carrying `aria-expanded`,\n * `aria-pressed` or `aria-haspopup`, a pin with no action, and a child\n * set to `data-overflow-pin=\"always\"` never move. A link child (`asChild`\n * over an `<a href>`) becomes an item that clicks the host's own link, so\n * its handler, target and download apply; a child with `overflowItems`\n * and a string label or `aria-label` becomes a submenu.\n */\n overflow?: 'none' | 'menu';\n /**\n * With `overflow=\"menu\"`: before spilling into the menu, hide every\n * child's label (`hideLabel`) and keep only its `startIcon` — buttons\n * without an icon shrink to their padding, so give each child one.\n */\n collapseToIcons?: boolean;\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n className,\n orientation = 'horizontal',\n separator = false,\n toolbar = false,\n intent = 'outline',\n background = 'transparent',\n size,\n label,\n overflow = 'none',\n collapseToIcons = false,\n children,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const accessibleLabel = label ?? t('buttonGroup.label', 'Button group');\n const moreLabel = t('buttonGroup.more', 'More options');\n const newTabLabel = t('link.opensInNewTab', 'Opens in a new tab');\n\n if (\n import.meta.env.DEV &&\n overflow === 'menu' &&\n orientation === 'vertical'\n ) {\n console.warn(\n 'ButtonGroup: overflow=\"menu\" is horizontal-only; falling back to overflow=\"none\".',\n );\n }\n const overflowEnabled = overflow === 'menu' && orientation !== 'vertical';\n\n // Roving tabindex — required by the WAI-ARIA toolbar pattern.\n // When `toolbar` is true, one child owns `tabIndex=0` and the rest are\n // `-1`. Arrow keys / Home / End move focus between children, respecting\n // orientation and RTL. Plain `group` mode keeps every child natively\n // tabbable.\n const rovingTabindex = toolbar;\n const buttonsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [focusIndex, setFocusIndex] = useState(0);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isRTL, setIsRTL] = useState(false);\n useIsomorphicLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const node = rootRef.current;\n if (!node) return;\n setIsRTL(window.getComputedStyle(node).direction === 'rtl');\n }, []);\n\n const handleRootKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (!rovingTabindex) return;\n const count = buttonsRef.current.filter(Boolean).length;\n if (count === 0) return;\n\n const forwardKey =\n orientation === 'vertical'\n ? 'ArrowDown'\n : isRTL\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backwardKey =\n orientation === 'vertical'\n ? 'ArrowUp'\n : isRTL\n ? 'ArrowRight'\n : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forwardKey) next = (focusIndex + 1) % count;\n else if (event.key === backwardKey)\n next = (focusIndex - 1 + count) % count;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n // Skip over disabled children.\n const maxAttempts = count;\n let attempts = 0;\n let candidate = next;\n while (attempts < maxAttempts) {\n const el = buttonsRef.current[candidate];\n if (\n el &&\n el.getAttribute('aria-disabled') !== 'true' &&\n !el.disabled\n ) {\n break;\n }\n candidate =\n event.key === backwardKey || event.key === 'End'\n ? (candidate - 1 + count) % count\n : (candidate + 1) % count;\n attempts += 1;\n }\n event.preventDefault();\n setFocusIndex(candidate);\n buttonsRef.current[candidate]?.focus();\n },\n [rovingTabindex, orientation, isRTL, focusIndex],\n );\n\n /* ---- Overflow bookkeeping (menu mode only) --------------------- */\n const childElements = overflowEnabled\n ? (Children.toArray(children).filter(isValidElement) as Array<\n ReactElement<GroupChildProps>\n >)\n : [];\n\n const linkOf = (child: ReactElement<GroupChildProps>) => {\n const slotted = child.props.children;\n if (!child.props.asChild || !isValidElement<SlottedProps>(slotted))\n return null;\n if (typeof slotted.props.href !== 'string') return null;\n const label =\n typeof slotted.props.children === 'string'\n ? slotted.props.children\n : typeof slotted.props['aria-label'] === 'string'\n ? slotted.props['aria-label']\n : null;\n return {\n label,\n element: slotted,\n newTab: slotted.props.target === '_blank',\n };\n };\n const mirrorLabel = (child: ReactElement<GroupChildProps>) => {\n if (typeof child.props.children === 'string') return child.props.children;\n const aria = child.props['aria-label'];\n if (typeof aria === 'string') return aria;\n return linkOf(child)?.label ?? null;\n };\n const warnedRef = useRef(false);\n const mirrorableFlags = childElements.map(\n (child) => mirrorLabel(child) !== null,\n );\n /* A pin may make way for More only when its menu item does all the\n child does: a plain action that holds no state. */\n const movableFlags = childElements.map((child, index) => {\n const { props } = child;\n const submenu = (props.overflowItems?.length ?? 0) > 0;\n const acts =\n typeof props.onClick === 'function' ||\n linkOf(child) !== null ||\n submenu;\n const popup = props['aria-haspopup'];\n const holdsState =\n props['aria-expanded'] !== undefined ||\n props['aria-pressed'] !== undefined ||\n (popup !== undefined &&\n popup !== false &&\n popup !== 'false' &&\n !submenu);\n return (\n mirrorableFlags[index] &&\n acts &&\n !holdsState &&\n props['data-overflow-pin'] !== 'always'\n );\n });\n const pinnedFlags = childElements.map((child, index) => {\n const explicit = child.props['data-overflow-pin'] !== undefined;\n const mirrorable = mirrorableFlags[index];\n if (\n import.meta.env.DEV &&\n !explicit &&\n !mirrorable &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n console.warn(\n 'ButtonGroup: a child without a string label or aria-label cannot move into the overflow menu — it stays pinned in the strip.',\n );\n }\n return explicit || !mirrorable;\n });\n\n const {\n containerRef,\n fullRowRef,\n iconRowRef,\n triggerProbeRef,\n stage,\n visible,\n overflowing,\n } = usePriorityOverflow({\n enabled: overflowEnabled,\n count: childElements.length,\n twoStage: collapseToIcons,\n pinned: pinnedFlags,\n movable: movableFlags,\n });\n // `fullRowRef`/`iconRowRef`/`triggerProbeRef` are already stable\n // (`useCallback([])` inside the hook), so wrapping them keeps a\n // stable identity too — required so the ref callback fires once per\n // mount rather than on every render. See `forceInert` above.\n const fullRowInertRef = useCallback(\n (node: HTMLDivElement | null) => {\n forceInert(node);\n fullRowRef(node);\n },\n [fullRowRef],\n );\n const iconRowInertRef = useCallback(\n (node: HTMLDivElement | null) => {\n forceInert(node);\n iconRowRef(node);\n },\n [iconRowRef],\n );\n const triggerProbeInertRef = useCallback(\n (node: HTMLSpanElement | null) => {\n forceInert(node);\n triggerProbeRef(node);\n },\n [triggerProbeRef],\n );\n\n const triggerNodeRef = useRef<HTMLButtonElement | null>(null);\n const linkShelfRef = useRef<HTMLDivElement | null>(null);\n const visibleCount = overflowEnabled\n ? visible.filter(Boolean).length\n : Children.count(children);\n\n // Clamp the roving focus when items move into the menu; hand real focus\n // to the trigger only when the focused node was the one that left.\n useEffect(() => {\n if (!rovingTabindex || !overflowEnabled) return;\n const total = visibleCount + (overflowing ? 1 : 0);\n if (total > 0 && focusIndex >= total) {\n setFocusIndex(total - 1);\n if (document.activeElement === document.body) {\n triggerNodeRef.current?.focus();\n }\n }\n }, [\n rovingTabindex,\n overflowEnabled,\n visibleCount,\n overflowing,\n focusIndex,\n ]);\n\n const mergeChildRef = (\n childEl: ReactElement<GroupChildProps>,\n index: number,\n ) => {\n return (node: HTMLButtonElement | null) => {\n buttonsRef.current[index] = node;\n const originalRef = (\n childEl as unknown as { ref?: React.Ref<HTMLButtonElement> }\n ).ref;\n if (typeof originalRef === 'function') originalRef(node);\n else if (\n originalRef !== null &&\n originalRef !== undefined &&\n typeof originalRef === 'object'\n ) {\n (\n originalRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n };\n };\n\n /* ---- Legacy path: overflow=\"none\" keeps today's exact DOM ------ */\n const enhanced = overflowEnabled\n ? null\n : Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childEl = child as ReactElement<GroupChildProps>;\n\n // Roving-tabindex wiring (ref / tabIndex / onFocus) is only needed in\n // `toolbar` mode. In plain `group` mode inject ONLY `intent`, so the group\n // composes with members that don't forward a ref — e.g. each wrapped in a\n // `DropdownMenu.Root` for a split-button strip — without React's \"function\n // components cannot be given refs\" warning. The joined styling is DOM-level\n // (`[&>*]`), so it still applies to the rendered buttons either way.\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n };\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n\n return cloneElement(\n childEl,\n overrides as Partial<typeof childEl.props>,\n );\n });\n\n /* ---- Menu path: strip of visible children + ellipsis trigger --- */\n let stripChildren: ReactNode = null;\n let menuItems: ReactNode = null;\n let linkShelf: ReactNode = null;\n if (overflowEnabled) {\n buttonsRef.current.length = visibleCount + (overflowing ? 1 : 0);\n let stripIndex = -1;\n stripChildren = childElements.map((childEl, i) => {\n if (!visible[i]) return null;\n stripIndex += 1;\n const index = stripIndex;\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n };\n // Only children with an icon AND a text label collapse; icon-only\n // children (their children ARE the icon) would go blank.\n if (\n collapseToIcons &&\n stage === 'icons' &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n )\n overrides.hideLabel = true;\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n const collapsed = overrides.hideLabel === true;\n const cloned = cloneElement(\n childEl,\n overrides as Partial<GroupChildProps>,\n );\n // A collapsed child keeps its label screen-reader-only, so assistive\n // tech is fine — but a sighted user is left with a bare glyph and no\n // way to learn what it does. Give the collapsed stage a Tooltip.\n // `Tooltip` renders its trigger `asChild`, so the button stays the\n // group's DIRECT child and the joined-border `[&>*]` rules still hit.\n // A child that is itself a hover trigger (a HoverCard preview, say)\n // opts out with `data-overflow-tip={false}` — two overlays racing on\n // one pointer is worse than none.\n const ownsItsTip =\n childEl.props['data-overflow-tip'] === false ||\n childEl.props['data-overflow-tip'] === 'false';\n const tip = collapsed && !ownsItsTip ? mirrorLabel(childEl) : null;\n return tip ? (\n <Tooltip key={childEl.key ?? i} label={tip}>\n {cloned}\n </Tooltip>\n ) : (\n cloned\n );\n });\n\n menuItems = childElements.map((childEl, i) => {\n if (visible[i]) return null;\n const itemLabel = mirrorLabel(childEl);\n if (itemLabel === null) return null;\n const disabled =\n childEl.props.disabled === true || childEl.props.loading === true;\n const action = childEl.props['data-action'];\n const submenu = childEl.props.overflowItems;\n if (submenu && submenu.length > 0) {\n return (\n <DropdownMenu.Sub key={childEl.key ?? i}>\n <DropdownMenu.SubTrigger\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n >\n {itemLabel}\n </DropdownMenu.SubTrigger>\n <DropdownMenu.SubContent>\n {submenu.map((item, index) => (\n <DropdownMenu.Item\n key={`${index}-${item.label}`}\n startIcon={item.icon}\n disabled={item.disabled}\n data-action={item.action}\n onSelect={() => item.onSelect()}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n );\n }\n const link = linkOf(childEl);\n if (link) {\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n aria-label={\n link.newTab ? `${itemLabel}, ${newTabLabel}` : undefined\n }\n /* The host's own link, kept in the menu, takes the click. */\n onSelect={() => {\n linkShelfRef.current\n ?.querySelector<HTMLElement>(\n `[data-link-index=\"${i}\"] [href]`,\n )\n ?.click();\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n }\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n onSelect={(event) => {\n childEl.props.onClick?.(\n event as unknown as React.MouseEvent<HTMLButtonElement>,\n );\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n });\n\n /* A folded link child's own element, out of sight in the menu: a\n pick clicks it, so the host's handler gets a real click on its own\n link, with every attribute it set, and the menu still closes. */\n linkShelf = childElements.map((childEl, i) => {\n if (visible[i] || mirrorLabel(childEl) === null) return null;\n const link = linkOf(childEl);\n if (!link || (childEl.props.overflowItems?.length ?? 0) > 0)\n return null;\n const own = link.element.props.onClick;\n return (\n <span key={childEl.key ?? i} data-link-index={i}>\n {cloneElement(link.element, {\n onClick: (event: React.MouseEvent<HTMLElement>) => {\n if (typeof own === 'function') own(event);\n childEl.props.onClick?.(\n event as React.MouseEvent<HTMLButtonElement>,\n );\n },\n /* No query may land on this hidden copy. */\n id: undefined,\n 'data-action': undefined,\n } as Partial<SlottedProps>)}\n </span>\n );\n });\n }\n\n const mergedRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref && typeof ref === 'object') {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n if (!overflowEnabled) {\n return (\n <div\n ref={mergedRootRef}\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? (orientation ?? 'horizontal') : undefined}\n data-component=\"button-group\"\n onKeyDown={handleRootKeyDown}\n className={buttonGroupVariants({ orientation, separator, className })}\n {...props}\n >\n {enhanced}\n </div>\n );\n }\n\n const stripClasses = buttonGroupVariants({ orientation, separator });\n const triggerIndex = visibleCount;\n const measureClone = (\n childEl: ReactElement<GroupChildProps>,\n i: number,\n icons: boolean,\n ) =>\n cloneElement(childEl, {\n key: childEl.key ?? i,\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n tabIndex: -1,\n // Same rule as the live strip: icon-only children never hideLabel.\n ...(icons &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n ? { hideLabel: true }\n : null),\n /* The hook belongs to the live child alone: a query for it must\n never land on an inert copy. */\n 'data-action': undefined,\n ref: null,\n } as Partial<GroupChildProps>);\n\n return (\n <div\n ref={mergedRootRef}\n data-component=\"button-group\"\n className={[\n 'ds:relative ds:block ds:w-full ds:min-w-0 ds:overflow-x-clip',\n className ?? '',\n ]\n .join(' ')\n .trim()}\n {...props}\n >\n <div ref={containerRef} className=\"ds:block ds:w-full ds:min-w-0\">\n {/* Measurement rows: every item at natural width, both stages. */}\n <div\n ref={fullRowInertRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, false))}\n </div>\n {collapseToIcons ? (\n <div\n ref={iconRowInertRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, true))}\n </div>\n ) : null}\n <span\n ref={triggerProbeInertRef}\n aria-hidden=\"true\"\n inert\n className={MEASURE_ROW_CLASSES}\n >\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n background={background}\n size={size}\n aria-label={moreLabel}\n tabIndex={-1}\n />\n </span>\n\n <div\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? 'horizontal' : undefined}\n onKeyDown={handleRootKeyDown}\n /* `align-top` kills the baseline descender gap under an\n inline-level strip: without it the group measures ~3px taller\n than its own buttons, so it never lines up with a sibling\n control (a status pill, a select) in a shared `items-center`\n row. */\n className={`${stripClasses} ds:max-w-full ds:align-top`}\n >\n {stripChildren}\n {overflowing ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n background={background}\n size={size}\n aria-label={moreLabel}\n ref={(node: HTMLButtonElement | null) => {\n triggerNodeRef.current = node;\n buttonsRef.current[triggerIndex] = node;\n }}\n tabIndex={\n rovingTabindex\n ? focusIndex === triggerIndex\n ? 0\n : -1\n : undefined\n }\n onFocus={\n rovingTabindex\n ? () => setFocusIndex(triggerIndex)\n : undefined\n }\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {menuItems}\n <div ref={linkShelfRef} hidden>\n {linkShelf}\n </div>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </div>\n </div>\n </div>\n );\n },\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n"],"names":["forceInert","node","buttonGroupVariants","cva","MEASURE_ROW_CLASSES","ButtonGroup","forwardRef","className","orientation","separator","toolbar","intent","background","size","label","overflow","collapseToIcons","children","props","ref","t","useTranslation","accessibleLabel","moreLabel","newTabLabel","overflowEnabled","rovingTabindex","buttonsRef","useRef","focusIndex","setFocusIndex","useState","rootRef","isRTL","setIsRTL","useIsomorphicLayoutEffect","handleRootKeyDown","useCallback","event","count","forwardKey","backwardKey","next","maxAttempts","attempts","candidate","el","_a","childElements","Children","isValidElement","linkOf","child","slotted","mirrorLabel","aria","mirrorableFlags","movableFlags","index","submenu","acts","popup","holdsState","pinnedFlags","explicit","mirrorable","containerRef","fullRowRef","iconRowRef","triggerProbeRef","stage","visible","overflowing","usePriorityOverflow","fullRowInertRef","iconRowInertRef","triggerProbeInertRef","triggerNodeRef","linkShelfRef","visibleCount","useEffect","total","mergeChildRef","childEl","originalRef","enhanced","overrides","ev","_b","cloneElement","stripChildren","menuItems","linkShelf","stripIndex","i","collapsed","cloned","ownsItsTip","tip","Tooltip","itemLabel","disabled","action","jsxs","DropdownMenu","jsx","item","link","own","mergedRootRef","stripClasses","triggerIndex","measureClone","icons","c","IconButton","Ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button-group-t9RrsCS6.js","sources":["../../src/components/button-group/button-group.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport type { ButtonProps } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu';\nimport { Tooltip } from '../tooltip';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePriorityOverflow } from '../../hooks/use-priority-overflow';\n\ntype ButtonIntent = NonNullable<ButtonProps['intent']>;\n\n/**\n * A bare boolean `inert` JSX prop is unsafe across this kit's peer range\n * (`^18.2.0 || ^19.0.0`, though the devDependency pins React 19.2.0, so\n * neither Storybook nor CI exercises React 18 here). React 18 doesn't\n * recognise `inert` as a boolean HTML attribute at all and drops a bare\n * `true` silently, which is what the platform (react-dom 18.3.1) hit:\n * these `aria-hidden` measurement/trigger clones stayed focusable and\n * clickable, tripling up `data-action` selectors and failing an axe\n * `aria-hidden-focus` check. The obvious fix — pass a non-boolean value\n * like `inert=\"\"` — makes it WORSE on React 19: it recognises `inert` as\n * boolean and explicitly warns \"Received an empty string for a\n * non-boolean attribute `inert`... will treat the attribute as if it\n * were false\", dropping it there too. There is no single JSX literal\n * that is correct on both majors.\n *\n * So this sets the real DOM property imperatively in a ref callback\n * instead of relying on JSX attribute diffing at all — the same\n * technique `tool-rail.tsx` / `panel-subview.tsx` already use via\n * `setAttribute('inert', '')` for exactly this reason. `.inert` is a\n * REFLECTED boolean IDL property (WHATWG spec): setting it always\n * updates the content attribute too, in every browser, regardless of\n * which React major (or none) rendered the element, so\n * `hasAttribute('inert')` stays a valid version-agnostic check. The\n * declarative `inert` JSX prop stays in place alongside it (harmless,\n * and keeps today's React 19 markup identical) — the ref is the\n * backstop that actually fixes React 18.\n */\nfunction forceInert<T extends HTMLElement>(node: T | null): void {\n if (node) node.inert = true;\n}\n\nconst buttonGroupVariants = cva(\n 'ds:inline-flex ds:isolate ds:[&>*]:relative ds:[&>*:focus-visible]:z-10',\n {\n variants: {\n orientation: {\n horizontal: [\n 'ds:flex-row',\n 'ds:[&>*:not(:first-child)]:rounded-s-none',\n 'ds:[&>*:not(:last-child)]:rounded-e-none',\n 'ds:[&>*:not(:first-child)]:-ms-px',\n ].join(' '),\n vertical: [\n 'ds:flex-col',\n 'ds:[&>*:not(:first-child)]:rounded-t-none',\n 'ds:[&>*:not(:last-child)]:rounded-b-none',\n 'ds:[&>*:not(:first-child)]:-mt-px',\n ].join(' '),\n },\n separator: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n orientation: 'horizontal',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-e ds:[&>*:not(:last-child)]:border-border',\n },\n {\n orientation: 'vertical',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-b ds:[&>*:not(:last-child)]:border-border',\n },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n separator: false,\n },\n },\n);\n\n// Hidden measurement rows: laid out (so widths are real) but invisible,\n// non-interactive and out of the a11y tree. Never display:none.\nconst MEASURE_ROW_CLASSES =\n 'ds:absolute ds:start-0 ds:top-0 ds:invisible ds:pointer-events-none';\n\n/** One entry of a child's own menu, as More repeats it in a submenu. */\nexport interface ButtonGroupOverflowItem {\n label: string;\n icon?: ReactNode;\n onSelect: () => void;\n disabled?: boolean;\n /** Carried onto the menu item as `data-action`. */\n action?: string;\n}\n\ntype SlottedProps = {\n children?: ReactNode;\n href?: unknown;\n target?: unknown;\n rel?: unknown;\n onClick?: unknown;\n 'aria-label'?: unknown;\n};\n\ntype GroupChildProps = {\n intent?: ButtonIntent;\n background?: 'transparent' | 'surface';\n tabIndex?: number;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n children?: ReactNode;\n disabled?: boolean;\n loading?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n hideLabel?: boolean;\n 'aria-label'?: string;\n /** State a menu item cannot carry: a pin holding one never moves. */\n 'aria-expanded'?: unknown;\n 'aria-pressed'?: unknown;\n 'aria-haspopup'?: unknown;\n /** `'always'` keeps the child in the strip at any width. */\n 'data-overflow-pin'?: boolean | 'true' | '' | 'always';\n 'data-overflow-tip'?: boolean | 'false';\n /** The child's DOM hook. More carries it onto the child's menu item. */\n 'data-action'?: string;\n size?: ButtonProps['size'];\n /** A Button over a link (`asChild` with an `<a href>`). */\n asChild?: boolean;\n /** A child that opens its own menu lists its entries here, so More can\n * repeat them in a submenu. */\n overflowItems?: ReadonlyArray<ButtonGroupOverflowItem>;\n};\n\nexport interface ButtonGroupProps\n extends\n HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonGroupVariants> {\n /**\n * Accessible label for the group. Falls back to the translated\n * `ui.buttonGroup.label` string when not provided.\n */\n label?: string;\n /**\n * When the children are interactive toolbar-style controls (e.g. toggles),\n * set this to render `role=\"toolbar\"` instead of `role=\"group\"`.\n */\n toolbar?: boolean;\n /**\n * Intent applied to every Button / IconButton child that does not set\n * its own `intent`. Defaults to `outline` — grouped buttons are peers,\n * not three solid-primary CTAs.\n */\n intent?: ButtonIntent;\n /**\n * Backing paint behind the outline intents, applied to every child that\n * does not set its own `background` AND to the group's own overflow\n * trigger. `'transparent'` (default) lets the surface behind show through\n * — right on a toolbar or a tinted shell. `'surface'` paints\n * `--background` behind the whole strip, so it reads as one solid control\n * on a host page or a panel footer. A child's explicit `background` wins.\n *\n * Set this rather than passing `background` to each child: the ellipsis\n * trigger is the group's own, so no per-child prop can reach it and the\n * strip would collapse to a mismatched see-through button.\n */\n background?: 'transparent' | 'surface';\n /**\n * Size applied to every child that does not set its own `size` AND to the\n * group's own overflow trigger. Set it here rather than per child: the\n * ellipsis trigger is the group's, so a per-child `size` leaves it at the\n * default `md` and the strip ends on a button taller than the rest.\n */\n size?: ButtonProps['size'];\n /**\n * `'menu'` keeps the strip on one line whatever the container width:\n * once the buttons stop fitting (after the optional `collapseToIcons`\n * stage) trailing ones move into a dropdown behind an ellipsis trigger.\n * The group then fills its container's inline size, so give it a bounded\n * parent. Horizontal only. Children needing to stay in the strip set\n * `data-overflow-pin`; children without a string label or `aria-label`\n * cannot be mirrored into the menu and are pinned automatically. When the\n * pinned children alone no longer fit beside the menu, trailing pins that\n * are plain actions (an `onClick`, a link or `overflowItems`) move into\n * it, so it stays reachable. A pin carrying `aria-expanded`,\n * `aria-pressed` or `aria-haspopup`, a pin with no action, and a child\n * set to `data-overflow-pin=\"always\"` never move. A link child (`asChild`\n * over an `<a href>`) becomes an item that clicks the host's own link, so\n * its handler, target and download apply; a child with `overflowItems`\n * and a string label or `aria-label` becomes a submenu.\n */\n overflow?: 'none' | 'menu';\n /**\n * With `overflow=\"menu\"`: before spilling into the menu, hide every\n * child's label (`hideLabel`) and keep only its `startIcon` — buttons\n * without an icon shrink to their padding, so give each child one.\n */\n collapseToIcons?: boolean;\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n className,\n orientation = 'horizontal',\n separator = false,\n toolbar = false,\n intent = 'outline',\n background = 'transparent',\n size,\n label,\n overflow = 'none',\n collapseToIcons = false,\n children,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const accessibleLabel = label ?? t('buttonGroup.label', 'Button group');\n const moreLabel = t('buttonGroup.more', 'More options');\n const newTabLabel = t('link.opensInNewTab', 'Opens in a new tab');\n\n if (\n import.meta.env.DEV &&\n overflow === 'menu' &&\n orientation === 'vertical'\n ) {\n console.warn(\n 'ButtonGroup: overflow=\"menu\" is horizontal-only; falling back to overflow=\"none\".',\n );\n }\n const overflowEnabled = overflow === 'menu' && orientation !== 'vertical';\n\n // Roving tabindex — required by the WAI-ARIA toolbar pattern.\n // When `toolbar` is true, one child owns `tabIndex=0` and the rest are\n // `-1`. Arrow keys / Home / End move focus between children, respecting\n // orientation and RTL. Plain `group` mode keeps every child natively\n // tabbable.\n const rovingTabindex = toolbar;\n const buttonsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [focusIndex, setFocusIndex] = useState(0);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isRTL, setIsRTL] = useState(false);\n useIsomorphicLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const node = rootRef.current;\n if (!node) return;\n setIsRTL(window.getComputedStyle(node).direction === 'rtl');\n }, []);\n\n const handleRootKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (!rovingTabindex) return;\n const count = buttonsRef.current.filter(Boolean).length;\n if (count === 0) return;\n\n const forwardKey =\n orientation === 'vertical'\n ? 'ArrowDown'\n : isRTL\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backwardKey =\n orientation === 'vertical'\n ? 'ArrowUp'\n : isRTL\n ? 'ArrowRight'\n : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forwardKey) next = (focusIndex + 1) % count;\n else if (event.key === backwardKey)\n next = (focusIndex - 1 + count) % count;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n // Skip over disabled children.\n const maxAttempts = count;\n let attempts = 0;\n let candidate = next;\n while (attempts < maxAttempts) {\n const el = buttonsRef.current[candidate];\n if (\n el &&\n el.getAttribute('aria-disabled') !== 'true' &&\n !el.disabled\n ) {\n break;\n }\n candidate =\n event.key === backwardKey || event.key === 'End'\n ? (candidate - 1 + count) % count\n : (candidate + 1) % count;\n attempts += 1;\n }\n event.preventDefault();\n setFocusIndex(candidate);\n buttonsRef.current[candidate]?.focus();\n },\n [rovingTabindex, orientation, isRTL, focusIndex],\n );\n\n /* ---- Overflow bookkeeping (menu mode only) --------------------- */\n const childElements = overflowEnabled\n ? (Children.toArray(children).filter(isValidElement) as Array<\n ReactElement<GroupChildProps>\n >)\n : [];\n\n const linkOf = (child: ReactElement<GroupChildProps>) => {\n const slotted = child.props.children;\n if (!child.props.asChild || !isValidElement<SlottedProps>(slotted))\n return null;\n if (typeof slotted.props.href !== 'string') return null;\n const label =\n typeof slotted.props.children === 'string'\n ? slotted.props.children\n : typeof slotted.props['aria-label'] === 'string'\n ? slotted.props['aria-label']\n : null;\n return {\n label,\n element: slotted,\n newTab: slotted.props.target === '_blank',\n };\n };\n const mirrorLabel = (child: ReactElement<GroupChildProps>) => {\n if (typeof child.props.children === 'string') return child.props.children;\n const aria = child.props['aria-label'];\n if (typeof aria === 'string') return aria;\n return linkOf(child)?.label ?? null;\n };\n const warnedRef = useRef(false);\n const mirrorableFlags = childElements.map(\n (child) => mirrorLabel(child) !== null,\n );\n /* A pin may make way for More only when its menu item does all the\n child does: a plain action that holds no state. */\n const movableFlags = childElements.map((child, index) => {\n const { props } = child;\n const submenu = (props.overflowItems?.length ?? 0) > 0;\n const acts =\n typeof props.onClick === 'function' ||\n linkOf(child) !== null ||\n submenu;\n const popup = props['aria-haspopup'];\n const holdsState =\n props['aria-expanded'] !== undefined ||\n props['aria-pressed'] !== undefined ||\n (popup !== undefined &&\n popup !== false &&\n popup !== 'false' &&\n !submenu);\n return (\n mirrorableFlags[index] &&\n acts &&\n !holdsState &&\n props['data-overflow-pin'] !== 'always'\n );\n });\n const pinnedFlags = childElements.map((child, index) => {\n const explicit = child.props['data-overflow-pin'] !== undefined;\n const mirrorable = mirrorableFlags[index];\n if (\n import.meta.env.DEV &&\n !explicit &&\n !mirrorable &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n console.warn(\n 'ButtonGroup: a child without a string label or aria-label cannot move into the overflow menu — it stays pinned in the strip.',\n );\n }\n return explicit || !mirrorable;\n });\n\n const {\n containerRef,\n fullRowRef,\n iconRowRef,\n triggerProbeRef,\n stage,\n visible,\n overflowing,\n } = usePriorityOverflow({\n enabled: overflowEnabled,\n count: childElements.length,\n twoStage: collapseToIcons,\n pinned: pinnedFlags,\n movable: movableFlags,\n });\n // `fullRowRef`/`iconRowRef`/`triggerProbeRef` are already stable\n // (`useCallback([])` inside the hook), so wrapping them keeps a\n // stable identity too — required so the ref callback fires once per\n // mount rather than on every render. See `forceInert` above.\n const fullRowInertRef = useCallback(\n (node: HTMLDivElement | null) => {\n forceInert(node);\n fullRowRef(node);\n },\n [fullRowRef],\n );\n const iconRowInertRef = useCallback(\n (node: HTMLDivElement | null) => {\n forceInert(node);\n iconRowRef(node);\n },\n [iconRowRef],\n );\n const triggerProbeInertRef = useCallback(\n (node: HTMLSpanElement | null) => {\n forceInert(node);\n triggerProbeRef(node);\n },\n [triggerProbeRef],\n );\n\n const triggerNodeRef = useRef<HTMLButtonElement | null>(null);\n const linkShelfRef = useRef<HTMLDivElement | null>(null);\n const visibleCount = overflowEnabled\n ? visible.filter(Boolean).length\n : Children.count(children);\n\n // Clamp the roving focus when items move into the menu; hand real focus\n // to the trigger only when the focused node was the one that left.\n useEffect(() => {\n if (!rovingTabindex || !overflowEnabled) return;\n const total = visibleCount + (overflowing ? 1 : 0);\n if (total > 0 && focusIndex >= total) {\n setFocusIndex(total - 1);\n if (document.activeElement === document.body) {\n triggerNodeRef.current?.focus();\n }\n }\n }, [\n rovingTabindex,\n overflowEnabled,\n visibleCount,\n overflowing,\n focusIndex,\n ]);\n\n const mergeChildRef = (\n childEl: ReactElement<GroupChildProps>,\n index: number,\n ) => {\n return (node: HTMLButtonElement | null) => {\n buttonsRef.current[index] = node;\n const originalRef = (\n childEl as unknown as { ref?: React.Ref<HTMLButtonElement> }\n ).ref;\n if (typeof originalRef === 'function') originalRef(node);\n else if (\n originalRef !== null &&\n originalRef !== undefined &&\n typeof originalRef === 'object'\n ) {\n (\n originalRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n };\n };\n\n /* ---- Legacy path: overflow=\"none\" keeps today's exact DOM ------ */\n const enhanced = overflowEnabled\n ? null\n : Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childEl = child as ReactElement<GroupChildProps>;\n\n // Roving-tabindex wiring (ref / tabIndex / onFocus) is only needed in\n // `toolbar` mode. In plain `group` mode inject ONLY `intent`, so the group\n // composes with members that don't forward a ref — e.g. each wrapped in a\n // `DropdownMenu.Root` for a split-button strip — without React's \"function\n // components cannot be given refs\" warning. The joined styling is DOM-level\n // (`[&>*]`), so it still applies to the rendered buttons either way.\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n };\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n\n return cloneElement(\n childEl,\n overrides as Partial<typeof childEl.props>,\n );\n });\n\n /* ---- Menu path: strip of visible children + ellipsis trigger --- */\n let stripChildren: ReactNode = null;\n let menuItems: ReactNode = null;\n let linkShelf: ReactNode = null;\n if (overflowEnabled) {\n buttonsRef.current.length = visibleCount + (overflowing ? 1 : 0);\n let stripIndex = -1;\n stripChildren = childElements.map((childEl, i) => {\n if (!visible[i]) return null;\n stripIndex += 1;\n const index = stripIndex;\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n };\n // Only children with an icon AND a text label collapse; icon-only\n // children (their children ARE the icon) would go blank.\n if (\n collapseToIcons &&\n stage === 'icons' &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n )\n overrides.hideLabel = true;\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n const collapsed = overrides.hideLabel === true;\n const cloned = cloneElement(\n childEl,\n overrides as Partial<GroupChildProps>,\n );\n // A collapsed child keeps its label screen-reader-only, so assistive\n // tech is fine — but a sighted user is left with a bare glyph and no\n // way to learn what it does. Give the collapsed stage a Tooltip.\n // `Tooltip` renders its trigger `asChild`, so the button stays the\n // group's DIRECT child and the joined-border `[&>*]` rules still hit.\n // A child that is itself a hover trigger (a HoverCard preview, say)\n // opts out with `data-overflow-tip={false}` — two overlays racing on\n // one pointer is worse than none.\n const ownsItsTip =\n childEl.props['data-overflow-tip'] === false ||\n childEl.props['data-overflow-tip'] === 'false';\n const tip = collapsed && !ownsItsTip ? mirrorLabel(childEl) : null;\n return tip ? (\n <Tooltip key={childEl.key ?? i} label={tip}>\n {cloned}\n </Tooltip>\n ) : (\n cloned\n );\n });\n\n menuItems = childElements.map((childEl, i) => {\n if (visible[i]) return null;\n const itemLabel = mirrorLabel(childEl);\n if (itemLabel === null) return null;\n const disabled =\n childEl.props.disabled === true || childEl.props.loading === true;\n const action = childEl.props['data-action'];\n const submenu = childEl.props.overflowItems;\n if (submenu && submenu.length > 0) {\n return (\n <DropdownMenu.Sub key={childEl.key ?? i}>\n <DropdownMenu.SubTrigger\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n >\n {itemLabel}\n </DropdownMenu.SubTrigger>\n <DropdownMenu.SubContent>\n {submenu.map((item, index) => (\n <DropdownMenu.Item\n key={`${index}-${item.label}`}\n startIcon={item.icon}\n disabled={item.disabled}\n data-action={item.action}\n onSelect={() => item.onSelect()}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n );\n }\n const link = linkOf(childEl);\n if (link) {\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n aria-label={\n link.newTab ? `${itemLabel}, ${newTabLabel}` : undefined\n }\n /* The host's own link, kept in the menu, takes the click. */\n onSelect={() => {\n linkShelfRef.current\n ?.querySelector<HTMLElement>(\n `[data-link-index=\"${i}\"] [href]`,\n )\n ?.click();\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n }\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={disabled}\n data-action={action}\n onSelect={(event) => {\n childEl.props.onClick?.(\n event as unknown as React.MouseEvent<HTMLButtonElement>,\n );\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n });\n\n /* A folded link child's own element, out of sight in the menu: a\n pick clicks it, so the host's handler gets a real click on its own\n link, with every attribute it set, and the menu still closes. */\n linkShelf = childElements.map((childEl, i) => {\n if (visible[i] || mirrorLabel(childEl) === null) return null;\n const link = linkOf(childEl);\n if (!link || (childEl.props.overflowItems?.length ?? 0) > 0)\n return null;\n const own = link.element.props.onClick;\n return (\n <span key={childEl.key ?? i} data-link-index={i}>\n {cloneElement(link.element, {\n onClick: (event: React.MouseEvent<HTMLElement>) => {\n if (typeof own === 'function') own(event);\n childEl.props.onClick?.(\n event as React.MouseEvent<HTMLButtonElement>,\n );\n },\n /* No query may land on this hidden copy. */\n id: undefined,\n 'data-action': undefined,\n } as Partial<SlottedProps>)}\n </span>\n );\n });\n }\n\n const mergedRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref && typeof ref === 'object') {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n if (!overflowEnabled) {\n return (\n <div\n ref={mergedRootRef}\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? (orientation ?? 'horizontal') : undefined}\n data-component=\"button-group\"\n onKeyDown={handleRootKeyDown}\n className={buttonGroupVariants({ orientation, separator, className })}\n {...props}\n >\n {enhanced}\n </div>\n );\n }\n\n const stripClasses = buttonGroupVariants({ orientation, separator });\n const triggerIndex = visibleCount;\n const measureClone = (\n childEl: ReactElement<GroupChildProps>,\n i: number,\n icons: boolean,\n ) =>\n cloneElement(childEl, {\n key: childEl.key ?? i,\n intent: childEl.props.intent ?? intent,\n background: childEl.props.background ?? background,\n ...(size ? { size: childEl.props.size ?? size } : null),\n tabIndex: -1,\n // Same rule as the live strip: icon-only children never hideLabel.\n ...(icons &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n ? { hideLabel: true }\n : null),\n /* The hook belongs to the live child alone: a query for it must\n never land on an inert copy. */\n 'data-action': undefined,\n ref: null,\n } as Partial<GroupChildProps>);\n\n return (\n <div\n ref={mergedRootRef}\n data-component=\"button-group\"\n className={[\n 'ds:relative ds:block ds:w-full ds:min-w-0 ds:overflow-x-clip',\n className ?? '',\n ]\n .join(' ')\n .trim()}\n {...props}\n >\n <div ref={containerRef} className=\"ds:block ds:w-full ds:min-w-0\">\n {/* Measurement rows: every item at natural width, both stages. */}\n <div\n ref={fullRowInertRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, false))}\n </div>\n {collapseToIcons ? (\n <div\n ref={iconRowInertRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, true))}\n </div>\n ) : null}\n <span\n ref={triggerProbeInertRef}\n aria-hidden=\"true\"\n inert\n className={MEASURE_ROW_CLASSES}\n >\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n background={background}\n size={size}\n aria-label={moreLabel}\n tabIndex={-1}\n />\n </span>\n\n <div\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? 'horizontal' : undefined}\n onKeyDown={handleRootKeyDown}\n /* `align-top` kills the baseline descender gap under an\n inline-level strip: without it the group measures ~3px taller\n than its own buttons, so it never lines up with a sibling\n control (a status pill, a select) in a shared `items-center`\n row. */\n className={`${stripClasses} ds:max-w-full ds:align-top`}\n >\n {stripChildren}\n {overflowing ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n background={background}\n size={size}\n aria-label={moreLabel}\n ref={(node: HTMLButtonElement | null) => {\n triggerNodeRef.current = node;\n buttonsRef.current[triggerIndex] = node;\n }}\n tabIndex={\n rovingTabindex\n ? focusIndex === triggerIndex\n ? 0\n : -1\n : undefined\n }\n onFocus={\n rovingTabindex\n ? () => setFocusIndex(triggerIndex)\n : undefined\n }\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {menuItems}\n <div ref={linkShelfRef} hidden>\n {linkShelf}\n </div>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </div>\n </div>\n </div>\n );\n },\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n"],"names":["forceInert","node","buttonGroupVariants","cva","MEASURE_ROW_CLASSES","ButtonGroup","forwardRef","className","orientation","separator","toolbar","intent","background","size","label","overflow","collapseToIcons","children","props","ref","t","useTranslation","accessibleLabel","moreLabel","newTabLabel","overflowEnabled","rovingTabindex","buttonsRef","useRef","focusIndex","setFocusIndex","useState","rootRef","isRTL","setIsRTL","useIsomorphicLayoutEffect","handleRootKeyDown","useCallback","event","count","forwardKey","backwardKey","next","maxAttempts","attempts","candidate","el","_a","childElements","Children","isValidElement","linkOf","child","slotted","mirrorLabel","aria","mirrorableFlags","movableFlags","index","submenu","acts","popup","holdsState","pinnedFlags","explicit","mirrorable","containerRef","fullRowRef","iconRowRef","triggerProbeRef","stage","visible","overflowing","usePriorityOverflow","fullRowInertRef","iconRowInertRef","triggerProbeInertRef","triggerNodeRef","linkShelfRef","visibleCount","useEffect","total","mergeChildRef","childEl","originalRef","enhanced","overrides","ev","_b","cloneElement","stripChildren","menuItems","linkShelf","stripIndex","i","collapsed","cloned","ownsItsTip","tip","Tooltip","itemLabel","disabled","action","jsxs","DropdownMenu","jsx","item","link","own","mergedRootRef","stripClasses","triggerIndex","measureClone","icons","c","IconButton","Ellipsis"],"mappings":"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"}
|