@alfadocs/ui-kit-debug 0.67.1 → 0.69.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/{accordion-9lJSMMsZ.js → accordion-DnIa7OHX.js} +69 -47
- package/dist/_chunks/accordion-DnIa7OHX.js.map +1 -0
- package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js +2061 -0
- package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +1 -0
- package/dist/_chunks/address-autocomplete-BEX9PXty.js +496 -0
- package/dist/_chunks/address-autocomplete-BEX9PXty.js.map +1 -0
- package/dist/_chunks/{agenda-card.agent-B_R47-c9.js → agenda-card.agent-mTCrkKSZ.js} +6 -1
- package/dist/_chunks/{agenda-card.agent-B_R47-c9.js.map → agenda-card.agent-mTCrkKSZ.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-T-BumlGZ.js → agenda-tray-g0kg7HwB.js} +36 -24
- package/dist/_chunks/agenda-tray-g0kg7HwB.js.map +1 -0
- package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js → ai-consent-banner-CXlsNX1c.js} +3 -3
- package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js.map → ai-consent-banner-CXlsNX1c.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-BwEACCPm.js → ai-prompt-input-CuhTo9mh.js} +80 -61
- package/dist/_chunks/ai-prompt-input-CuhTo9mh.js.map +1 -0
- package/dist/_chunks/{ai-tools-rail-CInA_1-E.js → ai-tools-rail-BA_sqy1A.js} +87 -70
- package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js → alia-sidebar-B47qRQb5.js} +5 -5
- package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js.map → alia-sidebar-B47qRQb5.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-N8pIKWuS.js → anamnesis-card-DRmE24OQ.js} +2 -2
- package/dist/_chunks/{anamnesis-card-N8pIKWuS.js.map → anamnesis-card-DRmE24OQ.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-BMl89NPW.js → appointment-tray-CZtvtaH-.js} +32 -20
- package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +1 -0
- package/dist/_chunks/{audio-recorder-DjXLP4aF.js → audio-recorder-DYXXnGug.js} +59 -56
- package/dist/_chunks/audio-recorder-DYXXnGug.js.map +1 -0
- package/dist/_chunks/{autocomplete-CcCFlVf-.js → autocomplete-DOeGouCL.js} +157 -132
- package/dist/_chunks/autocomplete-DOeGouCL.js.map +1 -0
- package/dist/_chunks/bishop-score-PJI3AXzA.js +304 -0
- package/dist/_chunks/bishop-score-PJI3AXzA.js.map +1 -0
- package/dist/_chunks/bmi-calculator-BZtIJ53x.js +434 -0
- package/dist/_chunks/bmi-calculator-BZtIJ53x.js.map +1 -0
- package/dist/_chunks/{booking-L8-YP8BJ.js → booking-C3VqFReX.js} +420 -397
- package/dist/_chunks/booking-C3VqFReX.js.map +1 -0
- package/dist/_chunks/{breadcrumb-OTbaY70e.js → breadcrumb-CchdeG7d.js} +42 -28
- package/dist/_chunks/breadcrumb-CchdeG7d.js.map +1 -0
- package/dist/_chunks/{calculator-dialog-CFk4I91b.js → calculator-dialog-BR5iU0kf.js} +2 -2
- package/dist/_chunks/{calculator-dialog-CFk4I91b.js.map → calculator-dialog-BR5iU0kf.js.map} +1 -1
- package/dist/_chunks/{calendar-oYWOCrnf.js → calendar-CZUjL8SZ.js} +258 -201
- package/dist/_chunks/calendar-CZUjL8SZ.js.map +1 -0
- package/dist/_chunks/{care-plan-card-BwVUyUBb.js → care-plan-card-CvFGXa2z.js} +10 -6
- package/dist/_chunks/care-plan-card-CvFGXa2z.js.map +1 -0
- package/dist/_chunks/{care-plan-entry-card-VzdQHcOL.js → care-plan-entry-card-C3E_gClk.js} +17 -13
- package/dist/_chunks/care-plan-entry-card-C3E_gClk.js.map +1 -0
- package/dist/_chunks/{carousel.agent-vt21A_el.js → carousel.agent-4v8Emr9E.js} +219 -198
- package/dist/_chunks/{carousel.agent-vt21A_el.js.map → carousel.agent-4v8Emr9E.js.map} +1 -1
- package/dist/_chunks/{chart-Cg3e9EH9.js → chart-CMr3eW62.js} +150 -109
- package/dist/_chunks/chart-CMr3eW62.js.map +1 -0
- package/dist/_chunks/{chat-container-ogB4OskO.js → chat-container-DWho5hPR.js} +47 -34
- package/dist/_chunks/chat-container-DWho5hPR.js.map +1 -0
- package/dist/_chunks/{chat-input-B5zjNEUN.js → chat-input-BcXTetgM.js} +57 -41
- package/dist/_chunks/chat-input-BcXTetgM.js.map +1 -0
- package/dist/_chunks/{checkbox-DRcOdmXv.js → checkbox-BuZ1u__2.js} +41 -27
- package/dist/_chunks/checkbox-BuZ1u__2.js.map +1 -0
- package/dist/_chunks/{checkbox-group-CpUwlHug.js → checkbox-group-PqNmQ-cE.js} +3 -3
- package/dist/_chunks/{checkbox-group-CpUwlHug.js.map → checkbox-group-PqNmQ-cE.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-gtrxv6zn.js → clinical-note-card-DqQYf_D4.js} +2 -2
- package/dist/_chunks/{clinical-note-card-gtrxv6zn.js.map → clinical-note-card-DqQYf_D4.js.map} +1 -1
- package/dist/_chunks/{collapsible-X3oaLPU3.js → collapsible-BrnRiCC6.js} +26 -23
- package/dist/_chunks/collapsible-BrnRiCC6.js.map +1 -0
- package/dist/_chunks/{color-picker-FXpItIaF.js → color-picker-C_fZl6sA.js} +124 -112
- package/dist/_chunks/color-picker-C_fZl6sA.js.map +1 -0
- package/dist/_chunks/{combobox-BC-DFx8G.js → combobox-Clum7gJ1.js} +165 -128
- package/dist/_chunks/combobox-Clum7gJ1.js.map +1 -0
- package/dist/_chunks/{command-palette-BiPAAno-.js → command-palette-CJzmc5pC.js} +87 -64
- package/dist/_chunks/command-palette-CJzmc5pC.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-7BMB85T6.js → contact-profile-card-Dramqa9C.js} +13 -11
- package/dist/_chunks/contact-profile-card-Dramqa9C.js.map +1 -0
- package/dist/_chunks/{copy-field-CCq7j6Zc.js → copy-field-Bjw9u2cV.js} +42 -35
- package/dist/_chunks/copy-field-Bjw9u2cV.js.map +1 -0
- package/dist/_chunks/counter-dRlTNC_y.js +55 -0
- package/dist/_chunks/counter-dRlTNC_y.js.map +1 -0
- package/dist/_chunks/{cycle-calculator-BF0ointe.js → cycle-calculator-DmRGJNaT.js} +3 -3
- package/dist/_chunks/{cycle-calculator-BF0ointe.js.map → cycle-calculator-DmRGJNaT.js.map} +1 -1
- package/dist/_chunks/{date-picker-oGg5BnXL.js → date-picker-Dl9RKxaV.js} +76 -57
- package/dist/_chunks/{date-picker-oGg5BnXL.js.map → date-picker-Dl9RKxaV.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-C5BWfH_T.js → date-range-picker-CTUeR6Bj.js} +73 -46
- package/dist/_chunks/date-range-picker-CTUeR6Bj.js.map +1 -0
- package/dist/_chunks/{date-time-picker-Ze1My59T.js → date-time-picker-BhoogS5Q.js} +64 -40
- package/dist/_chunks/date-time-picker-BhoogS5Q.js.map +1 -0
- package/dist/_chunks/{dependent-selector-DpzGtr_J.js → dependent-selector-CG_FOHya.js} +44 -30
- package/dist/_chunks/dependent-selector-CG_FOHya.js.map +1 -0
- package/dist/_chunks/{dialog-DMGnSelc.js → dialog-ZNuboNmy.js} +35 -28
- package/dist/_chunks/dialog-ZNuboNmy.js.map +1 -0
- package/dist/_chunks/{document-scanner-D2qehl3-.js → document-scanner-CTubA0-N.js} +12 -4
- package/dist/_chunks/document-scanner-CTubA0-N.js.map +1 -0
- package/dist/_chunks/{dropdown-menu-DwwPovMZ.js → dropdown-menu-qrxjymfw.js} +94 -93
- package/dist/_chunks/dropdown-menu-qrxjymfw.js.map +1 -0
- package/dist/_chunks/{due-date-calculator-DU9AEWNy.js → due-date-calculator-BTmsIQqD.js} +4 -4
- package/dist/_chunks/{due-date-calculator-DU9AEWNy.js.map → due-date-calculator-BTmsIQqD.js.map} +1 -1
- package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +448 -0
- package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +1 -0
- package/dist/_chunks/editor-overlay-wYm22wZK.js.map +1 -1
- package/dist/_chunks/{email-input-lQivsFrw.js → email-input-B_Y55f5G.js} +3 -3
- package/dist/_chunks/{email-input-lQivsFrw.js.map → email-input-B_Y55f5G.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-BVSzOhuR.js → fetal-weight-CRz7KE2D.js} +2 -2
- package/dist/_chunks/{fetal-weight-BVSzOhuR.js.map → fetal-weight-CRz7KE2D.js.map} +1 -1
- package/dist/_chunks/{file-upload-BosbPDb1.js → file-upload-5ScQd4fE.js} +118 -100
- package/dist/_chunks/file-upload-5ScQd4fE.js.map +1 -0
- package/dist/_chunks/{fiscal-code-input-DPtqluVb.js → fiscal-code-input-Cf-8O4Fj.js} +76 -63
- package/dist/_chunks/fiscal-code-input-Cf-8O4Fj.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-CkWjv3o6.js → freemium-paywall-DZ2mBS3w.js} +78 -71
- package/dist/_chunks/freemium-paywall-DZ2mBS3w.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js → gestational-age-calculator-BleUdhbI.js} +5 -5
- package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js.map → gestational-age-calculator-BleUdhbI.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-if4Q8aSX.js → hcg-doubling-CnjDXX6U.js} +3 -3
- package/dist/_chunks/{hcg-doubling-if4Q8aSX.js.map → hcg-doubling-CnjDXX6U.js.map} +1 -1
- package/dist/_chunks/{header-settings-CNOqIhoW.js → header-settings-DJqoAl5m.js} +86 -46
- package/dist/_chunks/header-settings-DJqoAl5m.js.map +1 -0
- package/dist/_chunks/{index.modern-D2LGACWg.js → index.modern-Zta-A4Jm.js} +3 -3
- package/dist/_chunks/{index.modern-D2LGACWg.js.map → index.modern-Zta-A4Jm.js.map} +1 -1
- package/dist/_chunks/{list-BOwqwy03.js → list-DgE1xWBM.js} +99 -84
- package/dist/_chunks/list-DgE1xWBM.js.map +1 -0
- package/dist/_chunks/{locale-picker-C9JmBht3.js → locale-picker-ChYYSX2N.js} +47 -35
- package/dist/_chunks/locale-picker-ChYYSX2N.js.map +1 -0
- package/dist/_chunks/{map-view-Tb5VfK9Y.js → map-view-BkOoGoX2.js} +160 -115
- package/dist/_chunks/map-view-BkOoGoX2.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js → marketplace-app-shell-6T9W4Knl.js} +4 -4
- package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js.map → marketplace-app-shell-6T9W4Knl.js.map} +1 -1
- package/dist/_chunks/{message-card.agent-4IeIgrnJ.js → message-card.agent-ZLhx3Bs5.js} +6 -1
- package/dist/_chunks/message-card.agent-ZLhx3Bs5.js.map +1 -0
- package/dist/_chunks/{message-tray-CVyJajVJ.js → message-tray-DwrBLJlf.js} +90 -48
- package/dist/_chunks/message-tray-DwrBLJlf.js.map +1 -0
- package/dist/_chunks/{multi-select-BcPylvHR.js → multi-select-BdHHDrRN.js} +196 -153
- package/dist/_chunks/multi-select-BdHHDrRN.js.map +1 -0
- package/dist/_chunks/{navigation-menu-C6lBYVv9.js → navigation-menu-DRUi6sSj.js} +75 -42
- package/dist/_chunks/navigation-menu-DRUi6sSj.js.map +1 -0
- package/dist/_chunks/{notification-card.agent-Rqt3ofk9.js → notification-card.agent-DxGBZb8T.js} +5 -1
- package/dist/_chunks/notification-card.agent-DxGBZb8T.js.map +1 -0
- package/dist/_chunks/{notification-tray-DlgenTEe.js → notification-tray-Btb9oQeZ.js} +112 -97
- package/dist/_chunks/notification-tray-Btb9oQeZ.js.map +1 -0
- package/dist/_chunks/{number-input-Dj5L3pXK.js → number-input-DxphVG_A.js} +36 -27
- package/dist/_chunks/number-input-DxphVG_A.js.map +1 -0
- package/dist/_chunks/{operator-hero-f_KaRhw5.js → operator-hero-CP2Nhupm.js} +12 -8
- package/dist/_chunks/operator-hero-CP2Nhupm.js.map +1 -0
- package/dist/_chunks/{otp-input-xQ4Ps5VY.js → otp-input-DzBQ-CpE.js} +52 -33
- package/dist/_chunks/otp-input-DzBQ-CpE.js.map +1 -0
- package/dist/_chunks/{pagination-DQOgnxxw.js → pagination-D58kglCr.js} +181 -162
- package/dist/_chunks/pagination-D58kglCr.js.map +1 -0
- package/dist/_chunks/{patient-search-DR9XUYRQ.js → patient-search-CBC_ySF6.js} +69 -60
- package/dist/_chunks/patient-search-CBC_ySF6.js.map +1 -0
- package/dist/_chunks/{patient-shell-BfgufL_q.js → patient-shell-DV3XEtIB.js} +3 -3
- package/dist/_chunks/{patient-shell-BfgufL_q.js.map → patient-shell-DV3XEtIB.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-hEmr4eTW.js → patient-summary-card-B836_fDB.js} +95 -103
- package/dist/_chunks/patient-summary-card-B836_fDB.js.map +1 -0
- package/dist/_chunks/patient-table-CDuosVru.js +889 -0
- package/dist/_chunks/patient-table-CDuosVru.js.map +1 -0
- package/dist/_chunks/{payment-form-nXocS_MX.js → payment-form-DvjwYVIT.js} +56 -44
- package/dist/_chunks/payment-form-DvjwYVIT.js.map +1 -0
- package/dist/_chunks/{payment-request-card-CYE5vhZ0.js → payment-request-card-DioWKBUq.js} +2 -2
- package/dist/_chunks/{payment-request-card-CYE5vhZ0.js.map → payment-request-card-DioWKBUq.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-GsfNqeeT.js → pdf-viewer-D6BPfW2D.js} +205 -157
- package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +1 -0
- package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js → periodontal-chart-card-BuDEMbHE.js} +2 -2
- package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js.map → periodontal-chart-card-BuDEMbHE.js.map} +1 -1
- package/dist/_chunks/{phone-input-DVXhNlIl.js → phone-input-DjU-XmO_.js} +64 -47
- package/dist/_chunks/phone-input-DjU-XmO_.js.map +1 -0
- package/dist/_chunks/{popover-DTbfAuR0.js → popover-B2qCDhJC.js} +37 -32
- package/dist/_chunks/popover-B2qCDhJC.js.map +1 -0
- package/dist/_chunks/{practice-results-DND2SAt7.js → practice-results-KrTHqZua.js} +278 -242
- package/dist/_chunks/practice-results-KrTHqZua.js.map +1 -0
- package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js → pregnancy-dating-DORUAOHB.js} +6 -6
- package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js.map → pregnancy-dating-DORUAOHB.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js → pregnancy-weight-gain-DVz4rr7-.js} +3 -3
- package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-DVz4rr7-.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-C7JyMf0y.js → privacy-lock-BzMLQu-j.js} +32 -28
- package/dist/_chunks/privacy-lock-BzMLQu-j.js.map +1 -0
- package/dist/_chunks/{product-hub-panel-CAXDFeGP.js → product-hub-panel-e6pW220e.js} +45 -27
- package/dist/_chunks/product-hub-panel-e6pW220e.js.map +1 -0
- package/dist/_chunks/{progress-kzIRcdaq.js → progress-DA413-zn.js} +2 -2
- package/dist/_chunks/{progress-kzIRcdaq.js.map → progress-DA413-zn.js.map} +1 -1
- package/dist/_chunks/{public-footer.agent-CfXuW1x6.js → public-footer.agent-D0cFbjWl.js} +151 -146
- package/dist/_chunks/public-footer.agent-D0cFbjWl.js.map +1 -0
- package/dist/_chunks/{public-header.agent-BOhJgZEU.js → public-header.agent-DqkqA-ca.js} +107 -102
- package/dist/_chunks/{public-header.agent-BOhJgZEU.js.map → public-header.agent-DqkqA-ca.js.map} +1 -1
- package/dist/_chunks/{qr-code-DNXhi6se.js → qr-code-CPkEs5mG.js} +52 -46
- package/dist/_chunks/qr-code-CPkEs5mG.js.map +1 -0
- package/dist/_chunks/{radio-group-CLjK-SlK.js → radio-group-BPt7pKZW.js} +5 -5
- package/dist/_chunks/{radio-group-CLjK-SlK.js.map → radio-group-BPt7pKZW.js.map} +1 -1
- package/dist/_chunks/{recaptcha-widget-BCNHsgqt.js → recaptcha-widget-BC-4To9b.js} +9 -2
- package/dist/_chunks/recaptcha-widget-BC-4To9b.js.map +1 -0
- package/dist/_chunks/registry-DvAUVLHh.js +51 -0
- package/dist/_chunks/registry-DvAUVLHh.js.map +1 -0
- package/dist/_chunks/{resizable-3vzqDlg6.js → resizable-DVGcfOrk.js} +193 -173
- package/dist/_chunks/resizable-DVGcfOrk.js.map +1 -0
- package/dist/_chunks/{reviews-panel-DBktKm7i.js → reviews-panel-Dq7LMDcH.js} +87 -68
- package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +1 -0
- package/dist/_chunks/rich-text-editor-BsV7zUdg.js +2142 -0
- package/dist/_chunks/rich-text-editor-BsV7zUdg.js.map +1 -0
- package/dist/_chunks/{search-bar-SY2BcV2N.js → search-bar-C_T3pBJn.js} +105 -78
- package/dist/_chunks/search-bar-C_T3pBJn.js.map +1 -0
- package/dist/_chunks/{search-input-DbxrnHkW.js → search-input-DQvGxR74.js} +2 -2
- package/dist/_chunks/{search-input-DbxrnHkW.js.map → search-input-DQvGxR74.js.map} +1 -1
- package/dist/_chunks/{search-input.agent-CfZvViOd.js → search-input.agent-DRH54coT.js} +19 -4
- package/dist/_chunks/search-input.agent-DRH54coT.js.map +1 -0
- package/dist/_chunks/{select-CEtRcon5.js → select-DMLG44F5.js} +72 -56
- package/dist/_chunks/select-DMLG44F5.js.map +1 -0
- package/dist/_chunks/{session-countdown-LPnhTHjn.js → session-countdown-X1Ki6i0M.js} +3 -3
- package/dist/_chunks/{session-countdown-LPnhTHjn.js.map → session-countdown-X1Ki6i0M.js.map} +1 -1
- package/dist/_chunks/{sheet-taJer-Ha.js → sheet-BxsE7eQm.js} +59 -45
- package/dist/_chunks/sheet-BxsE7eQm.js.map +1 -0
- package/dist/_chunks/{sidebar-DaB4ulxH.js → sidebar-DY9jGjgt.js} +254 -248
- package/dist/_chunks/sidebar-DY9jGjgt.js.map +1 -0
- package/dist/_chunks/{sign-document-CdAiHiCh.js → sign-document-B4DeRhTe.js} +75 -49
- package/dist/_chunks/sign-document-B4DeRhTe.js.map +1 -0
- package/dist/_chunks/{signature-capture-COi0Uiqu.js → signature-capture-Ct_4Md4e.js} +138 -104
- package/dist/_chunks/signature-capture-Ct_4Md4e.js.map +1 -0
- package/dist/_chunks/{slider-BHWzXdjt.js → slider-DN1CWkKB.js} +85 -65
- package/dist/_chunks/slider-DN1CWkKB.js.map +1 -0
- package/dist/_chunks/{sparkline-DGhCSw8M.js → sparkline-iOXYgvJe.js} +75 -53
- package/dist/_chunks/sparkline-iOXYgvJe.js.map +1 -0
- package/dist/_chunks/{stepper-accordion.agent-C4quJ-MD.js → stepper-accordion.agent-cmEguIdx.js} +7 -1
- package/dist/_chunks/stepper-accordion.agent-cmEguIdx.js.map +1 -0
- package/dist/_chunks/{stepper-progress-DDjq5nei.js → stepper-progress-Bv0njx4g.js} +30 -24
- package/dist/_chunks/stepper-progress-Bv0njx4g.js.map +1 -0
- package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js → suggestion-chip.agent-Brn3CiFE.js} +9 -8
- package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js.map → suggestion-chip.agent-Brn3CiFE.js.map} +1 -1
- package/dist/_chunks/{switch-BJ6HD3Mn.js → switch-OILsBLWo.js} +25 -19
- package/dist/_chunks/switch-OILsBLWo.js.map +1 -0
- package/dist/_chunks/{tabs-BIQ0ew1T.js → tabs-BxcOziCo.js} +67 -58
- package/dist/_chunks/tabs-BxcOziCo.js.map +1 -0
- package/dist/_chunks/{task-card.agent-CUPKYd7w.js → task-card.agent-Bt14CzUd.js} +4 -1
- package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +1 -0
- package/dist/_chunks/{task-tray-CAncV-QQ.js → task-tray-qOEQflu4.js} +74 -57
- package/dist/_chunks/task-tray-qOEQflu4.js.map +1 -0
- package/dist/_chunks/{text-area-BIx0tZ05.js → text-area-Bt3p7Pt0.js} +41 -34
- package/dist/_chunks/text-area-Bt3p7Pt0.js.map +1 -0
- package/dist/_chunks/{text-input-BaClJL8Y.js → text-input-B-OWQ1Je.js} +15 -8
- package/dist/_chunks/text-input-B-OWQ1Je.js.map +1 -0
- package/dist/_chunks/{theme-toggle-DETmSu_h.js → theme-toggle-XB6o_lgs.js} +38 -26
- package/dist/_chunks/theme-toggle-XB6o_lgs.js.map +1 -0
- package/dist/_chunks/{time-picker-B5umYwfv.js → time-picker-BPlJWm8w.js} +41 -31
- package/dist/_chunks/time-picker-BPlJWm8w.js.map +1 -0
- package/dist/_chunks/{timeline-DQa5Tyz4.js → timeline-CqA4nKTI.js} +33 -25
- package/dist/_chunks/timeline-CqA4nKTI.js.map +1 -0
- package/dist/_chunks/{toast.agent-vuLRRn2a.js → toast.agent-57UzyR9U.js} +62 -45
- package/dist/_chunks/{toast.agent-vuLRRn2a.js.map → toast.agent-57UzyR9U.js.map} +1 -1
- package/dist/_chunks/{tooth-scheme-BIx1O2aJ.js → tooth-scheme-yBr53cvv.js} +421 -348
- package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +1 -0
- package/dist/_chunks/{transcript-panel-CLHmv83g.js → transcript-panel-3THQX6nJ.js} +47 -33
- package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +1 -0
- package/dist/_chunks/unit-converter-YEpD9evj.js +337 -0
- package/dist/_chunks/unit-converter-YEpD9evj.js.map +1 -0
- package/dist/_chunks/{use-password-requirements-DsgduV1x.js → use-password-requirements-BXvS2MBS.js} +131 -117
- package/dist/_chunks/use-password-requirements-BXvS2MBS.js.map +1 -0
- package/dist/_chunks/users-MBVtUzwd.js +17 -0
- package/dist/_chunks/users-MBVtUzwd.js.map +1 -0
- package/dist/_chunks/warning-stack-BsgaEbL8.js +283 -0
- package/dist/_chunks/warning-stack-BsgaEbL8.js.map +1 -0
- package/dist/_chunks/{whatsapp-button-DUjlWGKf.js → whatsapp-button-BIy6NaJK.js} +6 -3
- package/dist/_chunks/whatsapp-button-BIy6NaJK.js.map +1 -0
- package/dist/_chunks/{workflow-map-JAZryZJr.js → workflow-map-Bdam9pGp.js} +99 -88
- package/dist/_chunks/workflow-map-Bdam9pGp.js.map +1 -0
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +36 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/registry.d.ts +33 -0
- package/dist/agent/registry.d.ts.map +1 -1
- package/dist/agent/types.d.ts +78 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent-catalog.json +6905 -509
- package/dist/agent-i18n/en.json +1175 -0
- package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts +4 -0
- package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts.map +1 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts +18 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.d.ts +2 -1
- package/dist/components/address-autocomplete/index.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.js +3 -2
- package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -1
- package/dist/components/ai-tools-rail/index.js +1 -1
- package/dist/components/anamnesis-card/index.js +1 -1
- package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -1
- package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
- package/dist/components/appointment-card/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/bishop-score/bishop-score.agent.d.ts +4 -0
- package/dist/components/bishop-score/bishop-score.agent.d.ts.map +1 -0
- package/dist/components/bishop-score/bishop-score.d.ts +17 -1
- package/dist/components/bishop-score/bishop-score.d.ts.map +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts +4 -0
- package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts.map +1 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts +26 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/booking.agent.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/calculator-dialog/index.js +1 -1
- package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/carousel/carousel.agent.d.ts.map +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/chart/chart.agent.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/contact-profile-card/contact-profile-card.agent.d.ts.map +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/copy-field/copy-field.agent.d.ts.map +1 -1
- package/dist/components/copy-field/index.js +1 -1
- package/dist/components/counter/counter.d.ts +22 -0
- package/dist/components/counter/counter.d.ts.map +1 -0
- package/dist/components/counter/index.d.ts +3 -0
- package/dist/components/counter/index.d.ts.map +1 -0
- package/dist/components/counter/index.js +5 -0
- package/dist/components/counter/index.js.map +1 -0
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/data-table.agent.d.ts.map +1 -1
- package/dist/components/data-table/data-table.d.ts +1 -1
- package/dist/components/data-table/data-table.d.ts.map +1 -1
- package/dist/components/data-table/filters/date-range-filter.d.ts +1 -1
- package/dist/components/data-table/filters/date-range-filter.d.ts.map +1 -1
- package/dist/components/data-table/index.js +31 -30
- package/dist/components/data-table/index.js.map +1 -1
- package/dist/components/data-table/toolbar.d.ts +4 -1
- package/dist/components/data-table/toolbar.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -1
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/document-scanner/document-scanner.agent.d.ts.map +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/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/editor-overlay/editor-overlay.d.ts.map +1 -1
- package/dist/components/email-input/index.js +1 -1
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -1
- package/dist/components/fiscal-code-input/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts +6 -0
- package/dist/components/freemium-paywall/freemium-paywall.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-settings/header-settings.agent.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.agent.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-card/message-card.agent.d.ts.map +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +1 -1
- package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.agent.d.ts.map +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/operator-hero/operator-hero.agent.d.ts.map +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/password-input/password-input.agent.d.ts.map +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
- package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts +13 -0
- package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts +43 -0
- package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +45 -0
- package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts +24 -0
- package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +26 -0
- package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +1 -0
- package/dist/components/patient-table/columns.d.ts +102 -0
- package/dist/components/patient-table/columns.d.ts.map +1 -0
- package/dist/components/patient-table/index.d.ts +24 -0
- package/dist/components/patient-table/index.d.ts.map +1 -0
- package/dist/components/patient-table/index.js +13 -0
- package/dist/components/patient-table/index.js.map +1 -0
- package/dist/components/patient-table/patient-table.d.ts +138 -0
- package/dist/components/patient-table/patient-table.d.ts.map +1 -0
- package/dist/components/patient-table/types.d.ts +172 -0
- package/dist/components/patient-table/types.d.ts.map +1 -0
- package/dist/components/patient-table/use-responsive-columns.d.ts +109 -0
- package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -0
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.agent.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.agent.d.ts.map +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/privacy-lock/privacy-lock.agent.d.ts.map +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/product-hub-tray/product-hub-panel.agent.d.ts.map +1 -1
- package/dist/components/product-hub-tray/product-hub-tray.agent.d.ts.map +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -1
- package/dist/components/public-footer/public-footer.d.ts.map +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/public-header/public-header.agent.d.ts.map +1 -1
- package/dist/components/qr-code/index.js +1 -1
- package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -1
- package/dist/components/radio-group/index.js +1 -1
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
- package/dist/components/resizable/resizable.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -1
- package/dist/components/rich-text-editor/help-me-write-overlay.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts +15 -0
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -1
- package/dist/components/search-input/index.js +2 -2
- package/dist/components/search-input/search-input.agent.d.ts.map +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.agent.d.ts.map +1 -1
- package/dist/components/session-countdown/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar.d.ts +7 -0
- package/dist/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/sign-document/sign-document.agent.d.ts.map +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/slider.agent.d.ts.map +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/switch/switch.agent.d.ts.map +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.agent.d.ts.map +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-card/task-card.agent.d.ts.map +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-area/text-area.agent.d.ts.map +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/text-input/text-input.agent.d.ts.map +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.agent.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toast/toast.agent.d.ts.map +1 -1
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/unit-converter/unit-converter.agent.d.ts +4 -0
- package/dist/components/unit-converter/unit-converter.agent.d.ts.map +1 -0
- package/dist/components/unit-converter/unit-converter.d.ts +27 -0
- package/dist/components/unit-converter/unit-converter.d.ts.map +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/warning-stack/warning-stack.d.ts +9 -0
- package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
- package/dist/components/whatsapp-button/index.d.ts +1 -1
- package/dist/components/whatsapp-button/index.d.ts.map +1 -1
- package/dist/components/whatsapp-button/index.js +3 -2
- package/dist/components/whatsapp-button/whatsapp-button.d.ts +3 -0
- package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow/workflow.agent.d.ts.map +1 -1
- package/dist/i18n/locales/ar.d.ts +74 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +76 -2
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +74 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +76 -2
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +74 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +76 -2
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +92 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +94 -2
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +74 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +76 -2
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +74 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +76 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +74 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +76 -2
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +74 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +76 -2
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +74 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +76 -2
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +74 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +76 -2
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +74 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +76 -2
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +74 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +76 -2
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +74 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +76 -2
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +74 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +76 -2
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +74 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +76 -2
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +74 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +76 -2
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +74 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +76 -2
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +74 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +76 -2
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +688 -673
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +76 -2
- package/dist/locales/de.json +76 -2
- package/dist/locales/el.json +76 -2
- package/dist/locales/en.json +76 -2
- package/dist/locales/es.json +76 -2
- package/dist/locales/fr.json +76 -2
- package/dist/locales/hi.json +76 -2
- package/dist/locales/it.json +76 -2
- package/dist/locales/ja.json +76 -2
- package/dist/locales/nl.json +76 -2
- package/dist/locales/pl.json +76 -2
- package/dist/locales/pt.json +76 -2
- package/dist/locales/ro.json +76 -2
- package/dist/locales/ru.json +76 -2
- package/dist/locales/sq.json +76 -2
- package/dist/locales/sv.json +76 -2
- package/dist/locales/tr.json +76 -2
- package/dist/locales/zh.json +76 -2
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +3 -2
- package/package.json +14 -1
- package/dist/_chunks/accordion-9lJSMMsZ.js.map +0 -1
- package/dist/_chunks/address-autocomplete-CT-9AOli.js +0 -358
- package/dist/_chunks/address-autocomplete-CT-9AOli.js.map +0 -1
- package/dist/_chunks/agenda-tray-T-BumlGZ.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-BwEACCPm.js.map +0 -1
- package/dist/_chunks/ai-tools-rail-CInA_1-E.js.map +0 -1
- package/dist/_chunks/appointment-tray-BMl89NPW.js.map +0 -1
- package/dist/_chunks/audio-recorder-DjXLP4aF.js.map +0 -1
- package/dist/_chunks/autocomplete-CcCFlVf-.js.map +0 -1
- package/dist/_chunks/bishop-score-CjsB9bM-.js +0 -185
- package/dist/_chunks/bishop-score-CjsB9bM-.js.map +0 -1
- package/dist/_chunks/bmi-calculator-n-823_1V.js +0 -258
- package/dist/_chunks/bmi-calculator-n-823_1V.js.map +0 -1
- package/dist/_chunks/booking-L8-YP8BJ.js.map +0 -1
- package/dist/_chunks/breadcrumb-OTbaY70e.js.map +0 -1
- package/dist/_chunks/calendar-oYWOCrnf.js.map +0 -1
- package/dist/_chunks/care-plan-card-BwVUyUBb.js.map +0 -1
- package/dist/_chunks/care-plan-entry-card-VzdQHcOL.js.map +0 -1
- package/dist/_chunks/chart-Cg3e9EH9.js.map +0 -1
- package/dist/_chunks/chat-container-ogB4OskO.js.map +0 -1
- package/dist/_chunks/chat-input-B5zjNEUN.js.map +0 -1
- package/dist/_chunks/checkbox-DRcOdmXv.js.map +0 -1
- package/dist/_chunks/collapsible-X3oaLPU3.js.map +0 -1
- package/dist/_chunks/color-picker-FXpItIaF.js.map +0 -1
- package/dist/_chunks/combobox-BC-DFx8G.js.map +0 -1
- package/dist/_chunks/command-palette-BiPAAno-.js.map +0 -1
- package/dist/_chunks/contact-profile-card-7BMB85T6.js.map +0 -1
- package/dist/_chunks/copy-field-CCq7j6Zc.js.map +0 -1
- package/dist/_chunks/date-range-picker-C5BWfH_T.js.map +0 -1
- package/dist/_chunks/date-time-picker-Ze1My59T.js.map +0 -1
- package/dist/_chunks/dependent-selector-DpzGtr_J.js.map +0 -1
- package/dist/_chunks/dialog-DMGnSelc.js.map +0 -1
- package/dist/_chunks/document-scanner-D2qehl3-.js.map +0 -1
- package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +0 -1
- package/dist/_chunks/editable-currency-cell-renderer-D1ewvJKO.js +0 -2391
- package/dist/_chunks/editable-currency-cell-renderer-D1ewvJKO.js.map +0 -1
- package/dist/_chunks/file-upload-BosbPDb1.js.map +0 -1
- package/dist/_chunks/fiscal-code-input-DPtqluVb.js.map +0 -1
- package/dist/_chunks/freemium-paywall-CkWjv3o6.js.map +0 -1
- package/dist/_chunks/header-settings-CNOqIhoW.js.map +0 -1
- package/dist/_chunks/list-BOwqwy03.js.map +0 -1
- package/dist/_chunks/locale-picker-C9JmBht3.js.map +0 -1
- package/dist/_chunks/map-view-Tb5VfK9Y.js.map +0 -1
- package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
- package/dist/_chunks/message-tray-CVyJajVJ.js.map +0 -1
- package/dist/_chunks/multi-select-BcPylvHR.js.map +0 -1
- package/dist/_chunks/navigation-menu-C6lBYVv9.js.map +0 -1
- package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
- package/dist/_chunks/notification-tray-DlgenTEe.js.map +0 -1
- package/dist/_chunks/number-input-Dj5L3pXK.js.map +0 -1
- package/dist/_chunks/operator-hero-f_KaRhw5.js.map +0 -1
- package/dist/_chunks/otp-input-xQ4Ps5VY.js.map +0 -1
- package/dist/_chunks/pagination-DQOgnxxw.js.map +0 -1
- package/dist/_chunks/patient-search-DR9XUYRQ.js.map +0 -1
- package/dist/_chunks/patient-summary-card-hEmr4eTW.js.map +0 -1
- package/dist/_chunks/payment-form-nXocS_MX.js.map +0 -1
- package/dist/_chunks/pdf-viewer-GsfNqeeT.js.map +0 -1
- package/dist/_chunks/phone-input-DVXhNlIl.js.map +0 -1
- package/dist/_chunks/popover-DTbfAuR0.js.map +0 -1
- package/dist/_chunks/practice-results-DND2SAt7.js.map +0 -1
- package/dist/_chunks/privacy-lock-C7JyMf0y.js.map +0 -1
- package/dist/_chunks/product-hub-panel-CAXDFeGP.js.map +0 -1
- package/dist/_chunks/public-footer.agent-CfXuW1x6.js.map +0 -1
- package/dist/_chunks/qr-code-DNXhi6se.js.map +0 -1
- package/dist/_chunks/recaptcha-widget-BCNHsgqt.js.map +0 -1
- package/dist/_chunks/registry-nPAVE19X.js +0 -21
- package/dist/_chunks/registry-nPAVE19X.js.map +0 -1
- package/dist/_chunks/resizable-3vzqDlg6.js.map +0 -1
- package/dist/_chunks/reviews-panel-DBktKm7i.js.map +0 -1
- package/dist/_chunks/rich-text-editor-DAeCXiQG.js +0 -1973
- package/dist/_chunks/rich-text-editor-DAeCXiQG.js.map +0 -1
- package/dist/_chunks/search-bar-SY2BcV2N.js.map +0 -1
- package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
- package/dist/_chunks/select-CEtRcon5.js.map +0 -1
- package/dist/_chunks/sheet-taJer-Ha.js.map +0 -1
- package/dist/_chunks/sidebar-DaB4ulxH.js.map +0 -1
- package/dist/_chunks/sign-document-CdAiHiCh.js.map +0 -1
- package/dist/_chunks/signature-capture-COi0Uiqu.js.map +0 -1
- package/dist/_chunks/slider-BHWzXdjt.js.map +0 -1
- package/dist/_chunks/sparkline-DGhCSw8M.js.map +0 -1
- package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +0 -1
- package/dist/_chunks/stepper-progress-DDjq5nei.js.map +0 -1
- package/dist/_chunks/switch-BJ6HD3Mn.js.map +0 -1
- package/dist/_chunks/tabs-BIQ0ew1T.js.map +0 -1
- package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
- package/dist/_chunks/task-tray-CAncV-QQ.js.map +0 -1
- package/dist/_chunks/text-area-BIx0tZ05.js.map +0 -1
- package/dist/_chunks/text-input-BaClJL8Y.js.map +0 -1
- package/dist/_chunks/theme-toggle-DETmSu_h.js.map +0 -1
- package/dist/_chunks/time-picker-B5umYwfv.js.map +0 -1
- package/dist/_chunks/timeline-DQa5Tyz4.js.map +0 -1
- package/dist/_chunks/tooth-scheme-BIx1O2aJ.js.map +0 -1
- package/dist/_chunks/transcript-panel-CLHmv83g.js.map +0 -1
- package/dist/_chunks/unit-converter-C1V3ACM9.js +0 -196
- package/dist/_chunks/unit-converter-C1V3ACM9.js.map +0 -1
- package/dist/_chunks/use-password-requirements-DsgduV1x.js.map +0 -1
- package/dist/_chunks/warning-stack-Cv4fr5zo.js +0 -220
- package/dist/_chunks/warning-stack-Cv4fr5zo.js.map +0 -1
- package/dist/_chunks/whatsapp-button-DUjlWGKf.js.map +0 -1
- package/dist/_chunks/workflow-map-JAZryZJr.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-hub-panel-e6pW220e.js","sources":["../../node_modules/lucide-react/dist/esm/icons/gift.js","../../src/components/product-hub-tray/product-hub-tray.agent.ts","../../src/components/product-hub-tray/product-hub-tray.tsx","../../src/components/product-hub-tray/product-hub-panel.agent.ts","../../src/components/product-hub-tray/product-hub-panel.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n [\"path\", { d: \"M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8\", key: \"1sqzm4\" }],\n [\n \"path\",\n { d: \"M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5\", key: \"kc0143\" }\n ],\n [\"rect\", { x: \"3\", y: \"7\", width: \"18\", height: \"4\", rx: \"1\", key: \"1hberx\" }]\n];\nconst Gift = createLucideIcon(\"gift\", __iconNode);\n\nexport { __iconNode, Gift as default };\n//# sourceMappingURL=gift.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — ProductHubTray. */\n/* */\n/* Tray-level surface: an agent can open / close the dropdown panel and */\n/* read the unseen-release count. Release content (titles, summaries, */\n/* URLs) is never exposed — counts and booleans only. All actions are */\n/* routed through the curated imperative handle; the adapter never */\n/* touches the DOM directly. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProductHubTrayHandle } from './product-hub-tray';\n\nexport const productHubTrayAgent: AgentAdapter<ProductHubTrayHandle> = {\n id: 'product-hub-tray',\n capabilities: ['open', 'close'],\n state: {\n unseenCount: {\n type: 'number',\n descriptionKey: 'ui.agent.productHubTray.state.unseenCount',\n description:\n 'Number of unseen product releases — the trigger badge count.',\n read: (handle) => handle.getUnseenCount(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.productHubTray.actions.open',\n description: 'Open the product-updates panel.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.productHubTray.actions.close',\n description: 'Close the product-updates panel.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'product-hub-tray',\n description: 'Marks the ProductHubTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-update-id',\n description:\n 'Stable release id emitted on each rendered release row inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Gift } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { IconButton } from '../button/icon-button';\nimport { Link } from '../link';\nimport { Separator } from '../separator/separator';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { Timestamp } from '../timestamp';\nimport { isSafeEntityUrl } from '../_shared/is-safe-url';\nimport { safeImageSrc } from '../_shared/safe-image-src';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { productHubTrayAgent } from './product-hub-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * One product-hub release entry. The kit is purely presentational —\n * the consumer fetches releases (Supabase, REST, …) and maps them into\n * this shape.\n */\nexport interface ProductHubItem {\n /** Unique identifier for the release. */\n id: string;\n /** Release title — rendered bold on the first line. */\n title: string;\n /** Short release summary — rendered as plain text, clamped to 2 lines. */\n summary?: string;\n /** ISO-8601 publish date — rendered as a localised, italic absolute date. */\n dateIso?: string;\n /**\n * Thumbnail URL. Guarded through the shared `safeImageSrc` allow-list\n * and rendered with `referrerPolicy=\"no-referrer\"`. Unsafe or missing\n * sources fall back to a Gift glyph tile.\n */\n imageUrl?: string;\n /**\n * Release deep link. Guarded through `isSafeEntityUrl`; safe URLs make\n * the row title an anchor that opens in a new tab. Unsafe URLs render\n * the title as plain text.\n */\n url?: string;\n /** Marks the release as not yet seen — highlights the row and counts toward the trigger badge. */\n unseen?: boolean;\n}\n\n/**\n * Curated imperative handle for ProductHubTray. Exposed to the agent\n * registry so a future MCP UI bridge can drive the tray without touching\n * the DOM. See `product-hub-tray.agent.ts`.\n */\nexport interface ProductHubTrayHandle {\n open: () => void;\n close: () => void;\n getUnseenCount: () => number;\n}\n\nexport interface ProductHubTrayProps\n extends\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onClick' | 'children' | 'role' | 'id'\n >,\n VariantProps<typeof productHubTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n /** Releases rendered in the dropdown panel, newest first. */\n items: ProductHubItem[];\n /**\n * Product-hub landing URL. When set (and safe) the panel renders a\n * pinned \"Open in Product Hub\" footer link that opens in a new tab.\n */\n hubUrl?: string;\n /** When true the panel shows skeleton placeholders. */\n loading?: boolean;\n /** Error-state slot — rendered inside the panel instead of the list. */\n error?: ReactNode;\n /**\n * Unseen-release count override. Defaults to the number of `items`\n * with `unseen: true`. Drives the trigger badge.\n */\n unseenCount?: number;\n /** Fires when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Analytics hook — fires when a row is activated. Navigation itself is\n * owned by the row anchor (new tab); this callback must not be relied\n * on for routing.\n */\n onItemActivate?: (item: ProductHubItem) => void;\n /** Override for the trigger's accessible label. */\n triggerLabel?: string;\n /** Number of releases rendered before the rest are cut off. Default 10. */\n maxVisible?: number;\n /** Empty-state slot — replaces the built-in \"No product updates yet\" panel. */\n emptyState?: ReactNode;\n /** Open the panel on first mount (uncontrolled). */\n defaultOpen?: boolean;\n /** BCP-47 locale override for the per-row dates. Falls back to `i18n.language`. */\n locale?: string;\n /** Panel alignment relative to the trigger. Default `'end'`. */\n align?: 'start' | 'center' | 'end';\n /** Side of the trigger to open on. Default `'bottom'`. */\n side?: 'top' | 'bottom';\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst productHubTrayVariants = cva(\n 'ds:relative ds:inline-flex ds:items-center',\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst panelVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:border ds:border-[color:var(--card-border)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:z-[var(--z-popover)]',\n // Fluid below the design cap so narrow viewports keep a gutter on\n // both sides of the panel (shadow included).\n 'ds:w-[min(24rem,calc(100vw-2*var(--spacing-md)))]',\n // Near-full-screen sheet below `sm`; auto above, where the list's\n // own `--product-hub-tray-max-block-size` cap governs the height.\n 'ds:h-[calc(100dvh-6rem)] ds:sm:h-auto',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n 'ds:motion-reduce:transition-none ds:motion-reduce:animate-none',\n 'ds:focus-visible:outline-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-xs)]',\n md: 'ds:p-[var(--spacing-sm)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst badgeVariants = cva(\n [\n // Anchored to the top-end corner of the trigger, nudged outward so\n // the gift glyph isn't covered.\n 'ds:absolute ds:-top-[var(--spacing-xs)] ds:-end-[var(--spacing-xs)]',\n 'ds:inline-flex ds:items-center ds:justify-center',\n // Circle at 1-2 digits; widens into a pill only for \"99+\".\n 'ds:min-w-[calc(var(--spacing-md)+var(--spacing-xs))] ds:h-[calc(var(--spacing-md)+var(--spacing-xs))] ds:ps-[calc(var(--spacing-xs)/1.5)] ds:pe-[calc(var(--spacing-xs)/1.5)]',\n 'ds:rounded-[var(--radius-full)]',\n // One red unseen-count chip across every header tray — matches the\n // platform header and the NotificationTray badge convention.\n 'ds:bg-[color:var(--destructive)] ds:text-[color:var(--destructive-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n 'ds:pointer-events-none ds:select-none',\n 'ds:forced-colors:outline ds:forced-colors:outline-1 ds:forced-colors:outline-[CanvasText]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Shared release row — used by both ProductHubTray (compact) and */\n/* ProductHubPanel (roomier). Internal seam, not part of the barrel. */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n [\n 'ds:relative ds:flex ds:items-start',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-start',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n density: {\n tray: 'ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]',\n panel: 'ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]',\n },\n unseen: {\n true: 'ds:bg-[color:var(--accent)]/5 ds:hover:bg-[color:var(--accent)]/10',\n false: 'ds:hover:bg-[color:var(--muted)]/40',\n },\n },\n defaultVariants: {\n density: 'tray',\n unseen: false,\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:shrink-0 ds:rounded-[var(--radius-sm)] ds:object-cover',\n // Tile backdrop so transparent / still-loading thumbnails keep a\n // visible square instead of collapsing into whitespace.\n 'ds:bg-[color:var(--muted)]',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n density: {\n tray: 'ds:size-10',\n panel: 'ds:size-12',\n },\n },\n defaultVariants: {\n density: 'tray',\n },\n },\n);\n\nconst stretchedLinkClass = [\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-sm)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\nexport interface ProductHubUpdateRowProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onClick' | 'role' | 'title'\n> {\n /** The release to render. */\n item: ProductHubItem;\n /** `tray` — compact dropdown row. `panel` — roomier dashboard row. */\n density?: 'tray' | 'panel';\n /** BCP-47 locale override for the date. */\n locale?: string;\n /** Analytics hook — navigation is owned by the row anchor. */\n onActivate?: (item: ProductHubItem) => void;\n}\n\n/**\n * @internal Shared row between ProductHubTray and ProductHubPanel.\n * Exported for the sibling panel only — import the trays, not this.\n */\nexport function ProductHubUpdateRow({\n item,\n density = 'tray',\n locale,\n onActivate,\n className,\n ...rest\n}: ProductHubUpdateRowProps) {\n const { t } = useTranslation();\n const safeSrc = safeImageSrc(item.imageUrl);\n const hasSafeUrl = !!item.url && isSafeEntityUrl(item.url);\n const unseen = !!item.unseen;\n\n // Read after the title when the row gets focus / is traversed:\n // \"<title>, new, (opens in a new tab)\". The unseen dot itself is\n // decorative — state never relies on colour alone.\n const unseenHint = unseen ? (\n <span className=\"ds:sr-only\">\n {t('productHubTray.unseenLabel', ', new')}\n </span>\n ) : null;\n\n return (\n <div\n role=\"listitem\"\n data-component=\"product-hub-update\"\n data-update-id={item.id}\n data-unseen={unseen ? 'true' : 'false'}\n className={rowVariants({ density, unseen, className })}\n {...rest}\n >\n {safeSrc ? (\n <img\n src={safeSrc}\n alt=\"\"\n aria-hidden=\"true\"\n referrerPolicy=\"no-referrer\"\n loading=\"lazy\"\n className={thumbVariants({ density })}\n />\n ) : (\n <span\n aria-hidden=\"true\"\n className={`${thumbVariants({ density })} ds:inline-flex ds:items-center ds:justify-center ds:text-[color:var(--muted-foreground)] ds:[&>svg]:size-5`}\n >\n <Gift />\n </span>\n )}\n\n <div className=\"ds:min-w-0 ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-item ds:text-[color:var(--foreground)]\">\n {unseen ? (\n <span\n aria-hidden=\"true\"\n data-testid=\"product-hub-unseen-dot\"\n className=\"ds:inline-block ds:size-1.5 ds:shrink-0 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--primary)] ds:forced-colors:bg-[Highlight]\"\n />\n ) : null}\n {hasSafeUrl ? (\n // A real (non-display:contents) anchor so the row is reliably\n // keyboard-focusable; the ::after stretch keeps the whole row\n // clickable and carries the focus ring.\n <a\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`${stretchedLinkClass} ds:min-w-0 ds:flex-1 ds:no-underline ds:text-[color:var(--foreground)]`}\n onClick={() => onActivate?.(item)}\n >\n <span className=\"ds:block ds:truncate ds:font-semibold\">\n {item.title}\n </span>\n {unseenHint}\n <span className=\"ds:sr-only\">\n {t('productHubTray.opensInNewTab', '(opens in a new tab)')}\n </span>\n </a>\n ) : (\n <>\n <span className=\"ds:min-w-0 ds:flex-1 ds:truncate ds:font-semibold\">\n {item.title}\n </span>\n {unseenHint}\n </>\n )}\n </span>\n\n {item.summary ? (\n <p className=\"ds:m-0 type-body-sm ds:text-[color:var(--muted-foreground)] ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:2] ds:break-words\">\n {item.summary}\n </p>\n ) : null}\n\n {item.dateIso ? (\n <Timestamp\n value={item.dateIso}\n format=\"absolute\"\n locale={locale}\n className=\"ds:italic ds:text-[color:var(--muted-foreground)]\"\n />\n ) : null}\n </div>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Shared loading / status helpers (also consumed by ProductHubPanel) */\n/* ------------------------------------------------------------------ */\n\n/** @internal Skeleton placeholder mirroring the row layout. */\nexport function UpdateSkeletonRow({\n density = 'tray',\n}: {\n density?: 'tray' | 'panel';\n}) {\n return (\n <div\n aria-hidden=\"true\"\n className={\n density === 'panel'\n ? 'ds:flex ds:items-start ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]'\n : 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]'\n }\n >\n <Skeleton\n variant=\"rounded\"\n width={density === 'panel' ? '3rem' : '2.5rem'}\n height={density === 'panel' ? '3rem' : '2.5rem'}\n />\n <div className=\"ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Skeleton variant=\"text\" size=\"md\" width=\"60%\" />\n <Skeleton variant=\"text\" size=\"sm\" width=\"90%\" />\n <Skeleton variant=\"text\" size=\"sm\" width=\"30%\" />\n </div>\n </div>\n );\n}\n\n/** @internal Centered status container for error / consumer-slot states. */\nexport function UpdateStatusPanel({ children }: { children: ReactNode }) {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:flex ds:flex-col ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-lg)] ds:text-center type-body-sm ds:text-[color:var(--muted-foreground)]\"\n >\n {children}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction formatBadgeCount(count: number, overflowLabel: string): string {\n return count > 99 ? overflowLabel : String(count);\n}\n\nfunction EmptyPanel() {\n const { t } = useTranslation();\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:flex ds:flex-col ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-lg)] ds:text-center\"\n >\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:size-10 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--muted)] ds:text-[color:var(--muted-foreground)] ds:[&>svg]:size-5\"\n >\n <Gift />\n </span>\n <p className=\"type-title-item ds:text-[color:var(--foreground)]\">\n {t('productHubTray.emptyTitle', 'No product updates yet')}\n </p>\n <p className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {t(\n 'productHubTray.emptyDescription',\n 'New releases and improvements will appear here.',\n )}\n </p>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const ProductHubTray = forwardRef<HTMLDivElement, ProductHubTrayProps>(\n (\n {\n id,\n items,\n hubUrl,\n loading = false,\n error,\n unseenCount,\n onOpenChange,\n onItemActivate,\n triggerLabel,\n maxVisible = 10,\n emptyState,\n defaultOpen = false,\n locale,\n align = 'end',\n side = 'bottom',\n size = 'md',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const [isOpenRaw, handleOpenChange] = useControllableState<boolean>({\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const isOpen = isOpenRaw ?? false;\n\n const displayCount = unseenCount ?? items.filter((i) => i.unseen).length;\n const resolvedTriggerLabel =\n triggerLabel ??\n (displayCount > 0\n ? t('productHubTray.triggerLabel', {\n count: displayCount,\n defaultValue: \"What's new, {{count}} unseen updates\",\n })\n : t('productHubTray.triggerLabelNone', \"What's new\"));\n\n const badgeLabel = formatBadgeCount(\n displayCount,\n t('productHubTray.badgeCountOverflow', '99+'),\n );\n\n const visible = items.slice(0, Math.max(0, maxVisible));\n const showList = !error && !loading && visible.length > 0;\n const safeHubUrl = hubUrl && isSafeEntityUrl(hubUrl) ? hubUrl : undefined;\n\n /* Curated handle — refs keep the look-ups current without\n * re-memoising on every items update. */\n const itemsRef = useRef<ProductHubItem[]>(items);\n itemsRef.current = items;\n const unseenRef = useRef<number | undefined>(unseenCount);\n unseenRef.current = unseenCount;\n\n const handle = useMemo<ProductHubTrayHandle>(\n () => ({\n open: () => handleOpenChange(true),\n close: () => handleOpenChange(false),\n getUnseenCount: () =>\n unseenRef.current ?? itemsRef.current.filter((i) => i.unseen).length,\n }),\n [handleOpenChange],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n useAgentRegistration(productHubTrayAgent, handle, id);\n\n let body: ReactNode;\n if (error) {\n body = <UpdateStatusPanel>{error}</UpdateStatusPanel>;\n } else if (loading) {\n body = (\n <>\n <UpdateSkeletonRow />\n <UpdateSkeletonRow />\n <UpdateSkeletonRow />\n </>\n );\n } else if (visible.length === 0) {\n body = emptyState ?? <EmptyPanel />;\n } else {\n body = visible.map((item) => (\n <ProductHubUpdateRow\n key={item.id}\n item={item}\n density=\"tray\"\n locale={locale}\n onActivate={onItemActivate}\n />\n ));\n }\n\n return (\n <div\n ref={rootRef}\n data-component=\"product-hub-tray\"\n data-component-id={id}\n className={[productHubTrayVariants({ size }), className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <RadixPopover.Root open={isOpen} onOpenChange={handleOpenChange}>\n <RadixPopover.Trigger asChild>\n <IconButton\n icon={<Gift />}\n intent=\"outline\"\n size={size === 'sm' ? 'sm' : 'md'}\n aria-label={resolvedTriggerLabel}\n aria-haspopup=\"dialog\"\n />\n </RadixPopover.Trigger>\n {displayCount > 0 ? (\n <span\n aria-hidden=\"true\"\n data-testid=\"product-hub-tray-badge\"\n className={badgeVariants()}\n >\n {badgeLabel}\n </span>\n ) : null}\n <RadixPopover.Portal>\n <RadixPopover.Content\n role=\"dialog\"\n aria-label={t('productHubTray.panelTitle', \"What's new\")}\n side={side}\n align={align}\n sideOffset={8}\n // Keeps Radix's collision-avoidance from flush-mounting the\n // panel against the viewport edge on narrow screens.\n collisionPadding={16}\n className={panelVariants({ size })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]\">\n <h3 className=\"ds:m-0 type-title-card ds:text-[color:var(--foreground)]\">\n {t('productHubTray.panelTitle', \"What's new\")}\n </h3>\n </div>\n <Separator />\n {/* The release list is the ONLY scroll region. `role=\"list\"`\n requires `listitem` children, so it is applied only when\n rows render (axe aria-required-children). Consumers\n override the height cap via the\n `--product-hub-tray-max-block-size` custom property. */}\n <div\n role={showList ? 'list' : undefined}\n data-max-visible={maxVisible}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:overflow-y-auto ds:pt-[var(--spacing-xs)] ds:flex-1 ds:sm:flex-none ds:sm:[max-block-size:var(--product-hub-tray-max-block-size,24rem)]\"\n >\n {body}\n </div>\n {safeHubUrl ? (\n <>\n <Separator />\n <div className=\"ds:flex ds:justify-center ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]\">\n <Link href={safeHubUrl} external>\n {t('productHubTray.openHub', 'Open in Product Hub')}\n </Link>\n </div>\n </>\n ) : null}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n </div>\n );\n },\n);\n\nProductHubTray.displayName = 'ProductHubTray';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — ProductHubPanel. */\n/* */\n/* Read-mostly dashboard surface: an agent can read the displayed */\n/* release ids + unseen flags (never titles / summaries / URLs) and */\n/* route a per-item activation through the curated handle. The adapter */\n/* never touches the DOM directly. */\n/* */\n/* NOTE: catalog discovery only picks up `<dirName>.agent.ts`, so this */\n/* sibling adapter is registered at runtime but not yet listed in */\n/* dist/agent-catalog.json (same situation as appointment-tray inside */\n/* the appointment-card directory). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProductHubPanelHandle } from './product-hub-panel';\n\nexport const productHubPanelAgent: AgentAdapter<ProductHubPanelHandle> = {\n id: 'product-hub-panel',\n // selectItem activates one release row (fires the host hook) without\n // persisting a stored selection → `pick`, not `select_single`.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; unseen: boolean }>',\n descriptionKey: 'ui.agent.productHubPanel.state.items',\n description:\n 'Currently-displayed releases. Ids + unseen flag only — no content.',\n read: (handle) => handle.getItems(),\n },\n unseenCount: {\n type: 'number',\n descriptionKey: 'ui.agent.productHubPanel.state.unseenCount',\n description: 'Number of displayed releases still marked unseen.',\n read: (handle) => handle.getUnseenCount(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Stable release id (the data-update-id of the row).',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.productHubPanel.actions.selectItem',\n description:\n 'Activate the release with the given id (fires the host analytics hook).',\n examples: [\n { args: { id: 'rel-0680' }, note: 'Activate a specific release row.' },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'product-hub-panel',\n description: 'Marks the ProductHubPanel section.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific panel from the agent.',\n },\n item: {\n attr: 'data-update-id',\n description:\n 'Stable release id emitted on each rendered release row inside the panel.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Gift } from 'lucide-react';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { Link } from '../link';\nimport { Separator } from '../separator/separator';\nimport { isSafeEntityUrl } from '../_shared/is-safe-url';\nimport { useAgentRegistration } from '../../agent/registry';\nimport {\n ProductHubUpdateRow,\n UpdateSkeletonRow,\n UpdateStatusPanel,\n type ProductHubItem,\n} from './product-hub-tray';\nimport { productHubPanelAgent } from './product-hub-panel.agent';\n\n/* -------------------------------------------------------------------- */\n/* ProductHubPanel */\n/* */\n/* Dashboard-panel sibling of ProductHubTray: a titled, bordered card */\n/* (model: AgendaTray + the dashboard \"Recent notifications\" panel) */\n/* listing the same release rows at a roomier density — no popover. */\n/* The consumer fetches the data; loading / empty / error are props. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst productHubPanelVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n surface: {\n flat: '',\n elevated: 'ds:shadow-[var(--shadow-card)]',\n },\n },\n defaultVariants: {\n surface: 'elevated',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Curated imperative handle for ProductHubPanel — read-only ids / counts\n * plus a select delegation. See `product-hub-panel.agent.ts`.\n */\nexport interface ProductHubPanelHandle {\n getItems: () => Array<{ id: string; unseen: boolean }>;\n getUnseenCount: () => number;\n selectItem: (id: string) => void;\n}\n\nexport interface ProductHubPanelProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'children' | 'id'>,\n VariantProps<typeof productHubPanelVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific panel.\n */\n id?: string;\n /** Releases rendered in the panel, newest first. */\n items: ProductHubItem[];\n /**\n * Product-hub landing URL. When set (and safe) the panel renders an\n * \"Open in Product Hub\" footer link that opens in a new tab.\n */\n hubUrl?: string;\n /** When true the panel shows skeleton placeholders. */\n loading?: boolean;\n /** Error-state slot — rendered instead of the list. */\n error?: ReactNode;\n /** Panel heading. Defaults to the localised \"What's new\". */\n title?: string;\n /** Optional sub-heading rendered under the title. */\n description?: string;\n /** Number of releases rendered before the rest are cut off. Default 5. */\n maxVisible?: number;\n /** Empty-state slot — replaces the built-in EmptyState. */\n emptyState?: ReactNode;\n /**\n * Analytics hook — fires when a row is activated. Navigation itself is\n * owned by the row anchor (new tab).\n */\n onItemActivate?: (item: ProductHubItem) => void;\n /** BCP-47 locale override for the per-row dates. */\n locale?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const ProductHubPanel = forwardRef<HTMLElement, ProductHubPanelProps>(\n (\n {\n id,\n items,\n hubUrl,\n loading = false,\n error,\n title,\n description,\n maxVisible = 5,\n emptyState,\n onItemActivate,\n locale,\n surface = 'elevated',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('productHubPanel.title', \"What's new\");\n\n const visible = items.slice(0, Math.max(0, maxVisible));\n const safeHubUrl = hubUrl && isSafeEntityUrl(hubUrl) ? hubUrl : undefined;\n\n let body: ReactNode;\n if (error) {\n body = <UpdateStatusPanel>{error}</UpdateStatusPanel>;\n } else if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0\">\n {[0, 1, 2].map((i) => (\n <UpdateSkeletonRow key={i} density=\"panel\" />\n ))}\n </div>\n );\n } else if (visible.length === 0) {\n body = emptyState ?? (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={t('productHubPanel.emptyTitle', 'No product updates yet')}\n description={t(\n 'productHubPanel.emptyDescription',\n 'New releases and improvements will appear here.',\n )}\n />\n </div>\n );\n } else {\n body = (\n <div\n role=\"list\"\n data-max-visible={maxVisible}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0\"\n >\n {visible.map((item) => (\n <ProductHubUpdateRow\n key={item.id}\n item={item}\n density=\"panel\"\n locale={locale}\n onActivate={onItemActivate}\n />\n ))}\n </div>\n );\n }\n\n /* Curated imperative handle for agent integration. */\n const itemsRef = useRef<ProductHubItem[]>(items);\n itemsRef.current = items;\n\n const handle = useMemo<ProductHubPanelHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({ id: i.id, unseen: !!i.unseen })),\n getUnseenCount: () => itemsRef.current.filter((i) => i.unseen).length,\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onItemActivate?.(found);\n },\n }),\n [onItemActivate],\n );\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n useAgentRegistration(productHubPanelAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"product-hub-panel\"\n data-component-id={id}\n className={productHubPanelVariants({ surface, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]\">\n {/* h2 — visual peer of the dashboard's other titled regions.\n Heading ladder: h1 (page) → h2 (this panel) → row titles. */}\n <h2 className=\"ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:text-start type-title-section ds:text-[color:var(--foreground)]\">\n <Gift aria-hidden=\"true\" className=\"ds:size-5 ds:shrink-0\" />\n {heading}\n </h2>\n {description ? (\n <p className=\"ds:m-0 ds:text-start type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {description}\n </p>\n ) : null}\n </header>\n {body}\n {safeHubUrl ? (\n <>\n <Separator />\n <div className=\"ds:flex ds:justify-center ds:p-[var(--spacing-sm)]\">\n <Link href={safeHubUrl} external>\n {t('productHubPanel.openHub', 'Open in Product Hub')}\n </Link>\n </div>\n </>\n ) : null}\n </section>\n );\n },\n);\n\nProductHubPanel.displayName = 'ProductHubPanel';\n"],"names":["__iconNode","Gift","createLucideIcon","productHubTrayAgent","handle","productHubTrayVariants","cva","panelVariants","badgeVariants","rowVariants","thumbVariants","stretchedLinkClass","ProductHubUpdateRow","item","density","locale","onActivate","className","rest","t","useTranslation","safeSrc","safeImageSrc","hasSafeUrl","isSafeEntityUrl","unseen","unseenHint","jsx","jsxs","Fragment","Timestamp","UpdateSkeletonRow","Skeleton","UpdateStatusPanel","children","formatBadgeCount","count","overflowLabel","EmptyPanel","ProductHubTray","forwardRef","id","items","hubUrl","loading","error","unseenCount","onOpenChange","onItemActivate","triggerLabel","maxVisible","emptyState","defaultOpen","align","side","size","ref","isOpenRaw","handleOpenChange","useControllableState","isOpen","displayCount","i","resolvedTriggerLabel","badgeLabel","visible","showList","safeHubUrl","itemsRef","useRef","unseenRef","useMemo","rootRef","useImperativeHandle","useAgentRegistration","body","RadixPopover","IconButton","Separator","Link","productHubPanelAgent","args","productHubPanelVariants","ProductHubPanel","title","description","surface","heading","EmptyState","targetId","found","innerRef"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -2,7 +2,7 @@ import { jsx as d, jsxs as N } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as R, useId as fe, useRef as p, useState as pe, useEffect as ge, useMemo as ve, useImperativeHandle as be, createContext as ye, useContext as he } from "react";
|
|
3
3
|
import { c as U } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as C } from "react-i18next";
|
|
5
|
-
import { u as xe } from "./registry-
|
|
5
|
+
import { u as xe } from "./registry-DvAUVLHh.js";
|
|
6
6
|
import { u as K } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
7
7
|
const ke = {
|
|
8
8
|
id: "progress",
|
|
@@ -296,4 +296,4 @@ export {
|
|
|
296
296
|
Se as P,
|
|
297
297
|
ke as p
|
|
298
298
|
};
|
|
299
|
-
//# sourceMappingURL=progress-
|
|
299
|
+
//# sourceMappingURL=progress-DA413-zn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-kzIRcdaq.js","sources":["../../src/components/progress/progress.agent.ts","../../src/components/progress/progress.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { ProgressHandle } from './progress';\n\nexport const progressAgent: AgentAdapter<ProgressHandle> = {\n id: 'progress',\n capabilities: [],\n state: {},\n actions: {\n set_value: {\n safety: 'read',\n argsType: '{ value: number }',\n description: 'Set the displayed progress value (0–100).',\n invoke: (handle, args: { value: number }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'progress' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { progressAgent } from './progress.agent';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n/* ── Public types ─────────────────────────────────────────────────────── */\n\nexport interface ProgressHandle {\n setValue: (value: number) => void;\n}\n\nexport interface ProgressProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role'\n> {\n value?: number;\n max?: number;\n shape?: 'bar' | 'circular';\n size?: 'sm' | 'md' | 'lg';\n ariaLabel?: string;\n ariaValueText?: string;\n debouncePercent?: number;\n disabled?: boolean;\n children?: ReactNode;\n}\n\n/* ── Context ──────────────────────────────────────────────────────────── */\n\ntype ProgressContextValue = {\n labelId: string;\n isIndeterminate: boolean;\n value: number | undefined;\n max: number;\n};\n\nconst ProgressCtx = createContext<ProgressContextValue | null>(null);\n\nfunction useProgressCtx(): ProgressContextValue {\n const ctx = useContext(ProgressCtx);\n if (!ctx)\n throw new Error('Progress sub-components must be used within <Progress>');\n return ctx;\n}\n\n/* ── Circle geometry ──────────────────────────────────────────────────── */\n\nconst CIRCLE = {\n sm: { viewBox: '0 0 24 24', cx: 12, cy: 12, r: 10 },\n md: { viewBox: '0 0 40 40', cx: 20, cy: 20, r: 18 },\n lg: { viewBox: '0 0 56 56', cx: 28, cy: 28, r: 26 },\n} as const;\n\n/* ── CVA ──────────────────────────────────────────────────────────────── */\n\nconst barTrackVariants = cva(\n 'ds:relative ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-[var(--progress-track)]',\n {\n variants: {\n size: { sm: 'ds:h-1', md: 'ds:h-2', lg: 'ds:h-3' },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst circularVariants = cva('', {\n variants: {\n size: {\n sm: 'ds:w-6 ds:h-6',\n md: 'ds:w-10 ds:h-10',\n lg: 'ds:w-14 ds:h-14',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ── Progress.Label ───────────────────────────────────────────────────── */\n\nconst ProgressLabel = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ children, className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const defaultText = ctx.isIndeterminate\n ? t('common.loading', 'Loading...')\n : t('common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max),\n });\n\n return (\n <span\n ref={ref}\n id={ctx.labelId}\n className={['type-label ds:text-foreground', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children ?? defaultText}\n </span>\n );\n});\nProgressLabel.displayName = 'Progress.Label';\n\n/* ── Progress.Value ───────────────────────────────────────────────────── */\n\nconst ProgressValue = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const text = ctx.isIndeterminate\n ? t('common.loading', 'Loading...')\n : new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max);\n\n return (\n <span\n ref={ref}\n className={[\n 'type-body-sm ds:tabular-nums ds:text-muted-foreground',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {text}\n </span>\n );\n});\nProgressValue.displayName = 'Progress.Value';\n\n/* ── Progress root ────────────────────────────────────────────────────── */\n\nconst ProgressRoot = forwardRef<ProgressHandle, ProgressProps>(\n (\n {\n id,\n value,\n max = 100,\n shape = 'bar',\n size = 'md',\n ariaLabel,\n ariaValueText,\n debouncePercent = 1,\n disabled = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const labelId = useId();\n const { t, i18n } = useTranslation();\n const barTrackRef = useRef<HTMLDivElement>(null);\n const barFillRef = useRef<HTMLDivElement>(null);\n const circTrackRef = useRef<SVGSVGElement>(null);\n const circFillRef = useRef<SVGCircleElement>(null);\n /* Separate typed refs for each shape to avoid union-type casts */\n const lastAnnouncedPercentRef = useRef<number | null>(null);\n\n const isIndeterminate = value === undefined;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(max, Math.max(0, value));\n const targetPercent =\n clampedValue !== undefined ? (clampedValue / max) * 100 : undefined;\n\n /* ── Mount-in animation ──────────────────────────────────────────── */\n // Paint once at 0 before showing the target value, so the existing\n // transition on stroke-dashoffset / inline-size animates from empty\n // → target on mount. First render: hasMounted=false → percent=0,\n // useLayoutEffect writes 0 to the style, browser paints empty.\n // useEffect then flips hasMounted, triggering a re-render at the\n // target percent; the style write inside useLayoutEffect produces\n // the change the transition needs.\n const [hasMounted, setHasMounted] = useState(false);\n useEffect(() => {\n setHasMounted(true);\n }, []);\n const percent = hasMounted || isIndeterminate ? targetPercent : 0;\n\n /* ── CSS property updates (visual fill) ──────────────────────────── */\n useIsomorphicLayoutEffect(() => {\n if (isIndeterminate || percent === undefined) return;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(percent),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - percent / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n }, [isIndeterminate, percent, shape, size]);\n\n /* ── Debounced ARIA value updates ────────────────────────────────── */\n useIsomorphicLayoutEffect(() => {\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n if (!trackEl) return;\n\n if (isIndeterminate) {\n trackEl.removeAttribute('aria-valuenow');\n lastAnnouncedPercentRef.current = null;\n return;\n }\n if (clampedValue === undefined) return;\n\n const pct = (clampedValue / max) * 100;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent) {\n trackEl.setAttribute('aria-valuenow', String(clampedValue));\n lastAnnouncedPercentRef.current = pct;\n }\n }, [isIndeterminate, clampedValue, max, debouncePercent, shape]);\n\n /* ── Imperative handle for high-frequency updates ────────────────── */\n const rootRef = useRef<HTMLDivElement>(null);\n\n const agentHandle = useMemo<ProgressHandle>(\n () => ({\n setValue: (v: number) => {\n const clamped = Math.min(max, Math.max(0, v));\n const pct = (clamped / max) * 100;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(pct),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - pct / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent && trackEl) {\n trackEl.setAttribute('aria-valuenow', String(clamped));\n lastAnnouncedPercentRef.current = pct;\n }\n },\n }),\n [max, shape, size, debouncePercent],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(progressAgent, agentHandle, id);\n\n /* ── ARIA props shared by both shapes ────────────────────────────── */\n // Provide aria-label as fallback alongside aria-labelledby: per ARIA spec,\n // AT falls back to aria-label when aria-labelledby references a missing id.\n // This covers the case where neither ariaLabel nor Progress.Label is used.\n const fallbackAriaLabel = isIndeterminate\n ? t('common.loading', 'Loading...')\n : t('common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((clampedValue ?? 0) / max),\n });\n\n const labelProps = ariaLabel\n ? { 'aria-label': ariaLabel }\n : { 'aria-labelledby': labelId, 'aria-label': fallbackAriaLabel };\n\n const stateProps = isIndeterminate\n ? { 'aria-busy': true as const, 'aria-valuemin': 0, 'aria-valuemax': max }\n : {\n 'aria-valuemin': 0 as const,\n 'aria-valuemax': max,\n ...(ariaValueText ? { 'aria-valuetext': ariaValueText } : {}),\n };\n\n const disabledProp = disabled ? { 'aria-disabled': true as const } : {};\n\n const wrapperClass = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n disabled && 'ds:opacity-50',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const ctxValue: ProgressContextValue = {\n labelId,\n isIndeterminate,\n value: clampedValue,\n max,\n };\n\n /* ── Bar shape ──────────────────────────────────────────────────── */\n if (shape === 'bar') {\n const fillClass = isIndeterminate\n ? [\n 'ds:absolute ds:[inset-block:0] ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:[@media(prefers-reduced-motion:no-preference)]:animate-[progress-bar-indeterminate_1200ms_ease-in-out_infinite]',\n 'ds:[.theme-accessible_&]:animate-none',\n 'ds:motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n 'ds:absolute ds:[inset-block:0] ds:start-0',\n 'ds:[inline-size:calc(var(--progress-value,0)*1%)]',\n 'ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:transition-[inline-size] ds:duration-[var(--animation-duration)]',\n 'ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n ].join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div\n ref={rootRef}\n className={wrapperClass}\n data-component=\"progress\"\n data-component-id={id}\n {...rest}\n >\n {children}\n <div\n ref={barTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n className={barTrackVariants({ size })}\n >\n <div ref={barFillRef} className={fillClass} />\n </div>\n </div>\n </ProgressCtx.Provider>\n );\n }\n\n /* ── Circular shape ─────────────────────────────────────────────── */\n const { viewBox, cx, cy, r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const indeterminateDashOffset = circumference * 0.25;\n // For determinate progress, paint an empty arc on first mount. The\n // effect above then sets stroke-dashoffset to the target, and the\n // CSS transition animates from empty → target.\n const initialDashOffset = isIndeterminate\n ? indeterminateDashOffset\n : circumference;\n\n const svgClass = isIndeterminate\n ? [\n circularVariants({ size }),\n 'ds:[transform:rotate(-90deg)]',\n 'ds:[@media(prefers-reduced-motion:no-preference)]:animate-[progress-circular-spin_1200ms_linear_infinite]',\n 'ds:[.theme-accessible_&]:animate-none',\n 'ds:motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n circularVariants({ size }),\n 'ds:[transform:rotate(-90deg)]',\n 'ds:rtl:[transform:rotate(-90deg)_scaleX(-1)]',\n ].join(' ');\n\n const fillStrokeClass = [\n 'ds:stroke-primary ds:[stroke-width:var(--spacing-xs)]',\n !isIndeterminate &&\n 'ds:transition-[stroke-dashoffset] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div\n ref={rootRef}\n className={wrapperClass}\n data-component=\"progress\"\n {...rest}\n >\n {children}\n <svg\n ref={circTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n viewBox={viewBox}\n className={svgClass}\n >\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeDasharray={circumference}\n className=\"ds:[stroke:var(--progress-track)] ds:[stroke-width:var(--spacing-xs)]\"\n />\n <circle\n ref={circFillRef}\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={initialDashOffset}\n className={fillStrokeClass}\n />\n </svg>\n </div>\n </ProgressCtx.Provider>\n );\n },\n);\n\nProgressRoot.displayName = 'Progress';\n\n/* ── Compound export ──────────────────────────────────────────────────── */\n\nexport const Progress = Object.assign(ProgressRoot, {\n Label: ProgressLabel,\n Value: ProgressValue,\n});\n"],"names":["progressAgent","handle","args","ProgressCtx","createContext","useProgressCtx","ctx","useContext","CIRCLE","barTrackVariants","cva","circularVariants","ProgressLabel","forwardRef","children","className","props","ref","t","i18n","useTranslation","defaultText","jsx","ProgressValue","text","ProgressRoot","id","value","max","shape","size","ariaLabel","ariaValueText","debouncePercent","disabled","rest","labelId","useId","barTrackRef","useRef","barFillRef","circTrackRef","circFillRef","lastAnnouncedPercentRef","isIndeterminate","clampedValue","targetPercent","hasMounted","setHasMounted","useState","useEffect","percent","useIsomorphicLayoutEffect","_a","r","offset","_b","trackEl","pct","last","rootRef","agentHandle","useMemo","v","clamped","useImperativeHandle","useAgentRegistration","fallbackAriaLabel","labelProps","stateProps","disabledProp","wrapperClass","ctxValue","fillClass","jsxs","viewBox","cx","cy","circumference","indeterminateDashOffset","initialDashOffset","svgClass","fillStrokeClass","Progress"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"progress-DA413-zn.js","sources":["../../src/components/progress/progress.agent.ts","../../src/components/progress/progress.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { ProgressHandle } from './progress';\n\nexport const progressAgent: AgentAdapter<ProgressHandle> = {\n id: 'progress',\n capabilities: [],\n state: {},\n actions: {\n set_value: {\n safety: 'read',\n argsType: '{ value: number }',\n description: 'Set the displayed progress value (0–100).',\n invoke: (handle, args: { value: number }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'progress' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { progressAgent } from './progress.agent';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n/* ── Public types ─────────────────────────────────────────────────────── */\n\nexport interface ProgressHandle {\n setValue: (value: number) => void;\n}\n\nexport interface ProgressProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role'\n> {\n value?: number;\n max?: number;\n shape?: 'bar' | 'circular';\n size?: 'sm' | 'md' | 'lg';\n ariaLabel?: string;\n ariaValueText?: string;\n debouncePercent?: number;\n disabled?: boolean;\n children?: ReactNode;\n}\n\n/* ── Context ──────────────────────────────────────────────────────────── */\n\ntype ProgressContextValue = {\n labelId: string;\n isIndeterminate: boolean;\n value: number | undefined;\n max: number;\n};\n\nconst ProgressCtx = createContext<ProgressContextValue | null>(null);\n\nfunction useProgressCtx(): ProgressContextValue {\n const ctx = useContext(ProgressCtx);\n if (!ctx)\n throw new Error('Progress sub-components must be used within <Progress>');\n return ctx;\n}\n\n/* ── Circle geometry ──────────────────────────────────────────────────── */\n\nconst CIRCLE = {\n sm: { viewBox: '0 0 24 24', cx: 12, cy: 12, r: 10 },\n md: { viewBox: '0 0 40 40', cx: 20, cy: 20, r: 18 },\n lg: { viewBox: '0 0 56 56', cx: 28, cy: 28, r: 26 },\n} as const;\n\n/* ── CVA ──────────────────────────────────────────────────────────────── */\n\nconst barTrackVariants = cva(\n 'ds:relative ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-[var(--progress-track)]',\n {\n variants: {\n size: { sm: 'ds:h-1', md: 'ds:h-2', lg: 'ds:h-3' },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst circularVariants = cva('', {\n variants: {\n size: {\n sm: 'ds:w-6 ds:h-6',\n md: 'ds:w-10 ds:h-10',\n lg: 'ds:w-14 ds:h-14',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ── Progress.Label ───────────────────────────────────────────────────── */\n\nconst ProgressLabel = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ children, className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const defaultText = ctx.isIndeterminate\n ? t('common.loading', 'Loading...')\n : t('common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max),\n });\n\n return (\n <span\n ref={ref}\n id={ctx.labelId}\n className={['type-label ds:text-foreground', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children ?? defaultText}\n </span>\n );\n});\nProgressLabel.displayName = 'Progress.Label';\n\n/* ── Progress.Value ───────────────────────────────────────────────────── */\n\nconst ProgressValue = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const text = ctx.isIndeterminate\n ? t('common.loading', 'Loading...')\n : new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max);\n\n return (\n <span\n ref={ref}\n className={[\n 'type-body-sm ds:tabular-nums ds:text-muted-foreground',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {text}\n </span>\n );\n});\nProgressValue.displayName = 'Progress.Value';\n\n/* ── Progress root ────────────────────────────────────────────────────── */\n\nconst ProgressRoot = forwardRef<ProgressHandle, ProgressProps>(\n (\n {\n id,\n value,\n max = 100,\n shape = 'bar',\n size = 'md',\n ariaLabel,\n ariaValueText,\n debouncePercent = 1,\n disabled = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const labelId = useId();\n const { t, i18n } = useTranslation();\n const barTrackRef = useRef<HTMLDivElement>(null);\n const barFillRef = useRef<HTMLDivElement>(null);\n const circTrackRef = useRef<SVGSVGElement>(null);\n const circFillRef = useRef<SVGCircleElement>(null);\n /* Separate typed refs for each shape to avoid union-type casts */\n const lastAnnouncedPercentRef = useRef<number | null>(null);\n\n const isIndeterminate = value === undefined;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(max, Math.max(0, value));\n const targetPercent =\n clampedValue !== undefined ? (clampedValue / max) * 100 : undefined;\n\n /* ── Mount-in animation ──────────────────────────────────────────── */\n // Paint once at 0 before showing the target value, so the existing\n // transition on stroke-dashoffset / inline-size animates from empty\n // → target on mount. First render: hasMounted=false → percent=0,\n // useLayoutEffect writes 0 to the style, browser paints empty.\n // useEffect then flips hasMounted, triggering a re-render at the\n // target percent; the style write inside useLayoutEffect produces\n // the change the transition needs.\n const [hasMounted, setHasMounted] = useState(false);\n useEffect(() => {\n setHasMounted(true);\n }, []);\n const percent = hasMounted || isIndeterminate ? targetPercent : 0;\n\n /* ── CSS property updates (visual fill) ──────────────────────────── */\n useIsomorphicLayoutEffect(() => {\n if (isIndeterminate || percent === undefined) return;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(percent),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - percent / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n }, [isIndeterminate, percent, shape, size]);\n\n /* ── Debounced ARIA value updates ────────────────────────────────── */\n useIsomorphicLayoutEffect(() => {\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n if (!trackEl) return;\n\n if (isIndeterminate) {\n trackEl.removeAttribute('aria-valuenow');\n lastAnnouncedPercentRef.current = null;\n return;\n }\n if (clampedValue === undefined) return;\n\n const pct = (clampedValue / max) * 100;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent) {\n trackEl.setAttribute('aria-valuenow', String(clampedValue));\n lastAnnouncedPercentRef.current = pct;\n }\n }, [isIndeterminate, clampedValue, max, debouncePercent, shape]);\n\n /* ── Imperative handle for high-frequency updates ────────────────── */\n const rootRef = useRef<HTMLDivElement>(null);\n\n const agentHandle = useMemo<ProgressHandle>(\n () => ({\n setValue: (v: number) => {\n const clamped = Math.min(max, Math.max(0, v));\n const pct = (clamped / max) * 100;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(pct),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - pct / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent && trackEl) {\n trackEl.setAttribute('aria-valuenow', String(clamped));\n lastAnnouncedPercentRef.current = pct;\n }\n },\n }),\n [max, shape, size, debouncePercent],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(progressAgent, agentHandle, id);\n\n /* ── ARIA props shared by both shapes ────────────────────────────── */\n // Provide aria-label as fallback alongside aria-labelledby: per ARIA spec,\n // AT falls back to aria-label when aria-labelledby references a missing id.\n // This covers the case where neither ariaLabel nor Progress.Label is used.\n const fallbackAriaLabel = isIndeterminate\n ? t('common.loading', 'Loading...')\n : t('common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((clampedValue ?? 0) / max),\n });\n\n const labelProps = ariaLabel\n ? { 'aria-label': ariaLabel }\n : { 'aria-labelledby': labelId, 'aria-label': fallbackAriaLabel };\n\n const stateProps = isIndeterminate\n ? { 'aria-busy': true as const, 'aria-valuemin': 0, 'aria-valuemax': max }\n : {\n 'aria-valuemin': 0 as const,\n 'aria-valuemax': max,\n ...(ariaValueText ? { 'aria-valuetext': ariaValueText } : {}),\n };\n\n const disabledProp = disabled ? { 'aria-disabled': true as const } : {};\n\n const wrapperClass = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n disabled && 'ds:opacity-50',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const ctxValue: ProgressContextValue = {\n labelId,\n isIndeterminate,\n value: clampedValue,\n max,\n };\n\n /* ── Bar shape ──────────────────────────────────────────────────── */\n if (shape === 'bar') {\n const fillClass = isIndeterminate\n ? [\n 'ds:absolute ds:[inset-block:0] ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:[@media(prefers-reduced-motion:no-preference)]:animate-[progress-bar-indeterminate_1200ms_ease-in-out_infinite]',\n 'ds:[.theme-accessible_&]:animate-none',\n 'ds:motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n 'ds:absolute ds:[inset-block:0] ds:start-0',\n 'ds:[inline-size:calc(var(--progress-value,0)*1%)]',\n 'ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:transition-[inline-size] ds:duration-[var(--animation-duration)]',\n 'ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n ].join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div\n ref={rootRef}\n className={wrapperClass}\n data-component=\"progress\"\n data-component-id={id}\n {...rest}\n >\n {children}\n <div\n ref={barTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n className={barTrackVariants({ size })}\n >\n <div ref={barFillRef} className={fillClass} />\n </div>\n </div>\n </ProgressCtx.Provider>\n );\n }\n\n /* ── Circular shape ─────────────────────────────────────────────── */\n const { viewBox, cx, cy, r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const indeterminateDashOffset = circumference * 0.25;\n // For determinate progress, paint an empty arc on first mount. The\n // effect above then sets stroke-dashoffset to the target, and the\n // CSS transition animates from empty → target.\n const initialDashOffset = isIndeterminate\n ? indeterminateDashOffset\n : circumference;\n\n const svgClass = isIndeterminate\n ? [\n circularVariants({ size }),\n 'ds:[transform:rotate(-90deg)]',\n 'ds:[@media(prefers-reduced-motion:no-preference)]:animate-[progress-circular-spin_1200ms_linear_infinite]',\n 'ds:[.theme-accessible_&]:animate-none',\n 'ds:motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n circularVariants({ size }),\n 'ds:[transform:rotate(-90deg)]',\n 'ds:rtl:[transform:rotate(-90deg)_scaleX(-1)]',\n ].join(' ');\n\n const fillStrokeClass = [\n 'ds:stroke-primary ds:[stroke-width:var(--spacing-xs)]',\n !isIndeterminate &&\n 'ds:transition-[stroke-dashoffset] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div\n ref={rootRef}\n className={wrapperClass}\n data-component=\"progress\"\n {...rest}\n >\n {children}\n <svg\n ref={circTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n viewBox={viewBox}\n className={svgClass}\n >\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeDasharray={circumference}\n className=\"ds:[stroke:var(--progress-track)] ds:[stroke-width:var(--spacing-xs)]\"\n />\n <circle\n ref={circFillRef}\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={initialDashOffset}\n className={fillStrokeClass}\n />\n </svg>\n </div>\n </ProgressCtx.Provider>\n );\n },\n);\n\nProgressRoot.displayName = 'Progress';\n\n/* ── Compound export ──────────────────────────────────────────────────── */\n\nexport const Progress = Object.assign(ProgressRoot, {\n Label: ProgressLabel,\n Value: ProgressValue,\n});\n"],"names":["progressAgent","handle","args","ProgressCtx","createContext","useProgressCtx","ctx","useContext","CIRCLE","barTrackVariants","cva","circularVariants","ProgressLabel","forwardRef","children","className","props","ref","t","i18n","useTranslation","defaultText","jsx","ProgressValue","text","ProgressRoot","id","value","max","shape","size","ariaLabel","ariaValueText","debouncePercent","disabled","rest","labelId","useId","barTrackRef","useRef","barFillRef","circTrackRef","circFillRef","lastAnnouncedPercentRef","isIndeterminate","clampedValue","targetPercent","hasMounted","setHasMounted","useState","useEffect","percent","useIsomorphicLayoutEffect","_a","r","offset","_b","trackEl","pct","last","rootRef","agentHandle","useMemo","v","clamped","useImperativeHandle","useAgentRegistration","fallbackAriaLabel","labelProps","stateProps","disabledProp","wrapperClass","ctxValue","fillClass","jsxs","viewBox","cx","cy","circumference","indeterminateDashOffset","initialDashOffset","svgClass","fillStrokeClass","Progress"],"mappings":"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"}
|