@alfadocs/ui-kit-debug 0.36.0 → 0.38.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/Alfadocs_Logo_Mark-7o3L3WBI.js +56 -0
- package/dist/_chunks/Alfadocs_Logo_Mark-7o3L3WBI.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-BEoMl6UL.js → alia-sidebar-DXsYPinm.js} +2 -2
- package/dist/_chunks/{alia-sidebar-BEoMl6UL.js.map → alia-sidebar-DXsYPinm.js.map} +1 -1
- package/dist/_chunks/{ar-CEpIJtcO.js → ar-Cn_NxqkN.js} +2 -2
- package/dist/_chunks/{ar-CEpIJtcO.js.map → ar-Cn_NxqkN.js.map} +1 -1
- package/dist/_chunks/bmi-BxD-tFzU.js +32 -0
- package/dist/_chunks/bmi-BxD-tFzU.js.map +1 -0
- package/dist/_chunks/bmi-calculator-BRUru9QX.js +213 -0
- package/dist/_chunks/bmi-calculator-BRUru9QX.js.map +1 -0
- package/dist/_chunks/{booking-eM0y0NIR.js → booking-DK_BPHnQ.js} +4 -4
- package/dist/_chunks/{booking-eM0y0NIR.js.map → booking-DK_BPHnQ.js.map} +1 -1
- package/dist/_chunks/calculator-dialog-B74fqpFZ.js +40 -0
- package/dist/_chunks/calculator-dialog-B74fqpFZ.js.map +1 -0
- package/dist/_chunks/chart-DnHvmiDX.js +312 -0
- package/dist/_chunks/chart-DnHvmiDX.js.map +1 -0
- package/dist/_chunks/{chat-message-D53_fH2w.js → chat-message-ASgGtj-L.js} +30 -39
- package/dist/_chunks/chat-message-ASgGtj-L.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-BA6fgS45.js → contact-profile-card-DHyuAPXM.js} +14 -13
- package/dist/_chunks/{contact-profile-card-BA6fgS45.js.map → contact-profile-card-DHyuAPXM.js.map} +1 -1
- package/dist/_chunks/cycle-calculator-B5Uj9QeT.js +185 -0
- package/dist/_chunks/cycle-calculator-B5Uj9QeT.js.map +1 -0
- package/dist/_chunks/{date-picker-B94HAV4A.js → date-picker-CvQfs6Xh.js} +2 -2
- package/dist/_chunks/{date-picker-B94HAV4A.js.map → date-picker-CvQfs6Xh.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-D8CHNYQT.js → date-range-picker-U9fn1g9d.js} +3 -3
- package/dist/_chunks/{date-range-picker-D8CHNYQT.js.map → date-range-picker-U9fn1g9d.js.map} +1 -1
- package/dist/_chunks/{date-time-picker-D1GEzf8p.js → date-time-picker-Cva0ZCWw.js} +2 -2
- package/dist/_chunks/{date-time-picker-D1GEzf8p.js.map → date-time-picker-Cva0ZCWw.js.map} +1 -1
- package/dist/_chunks/{de-Dfbeau59.js → de-BMM2H7Bs.js} +2 -2
- package/dist/_chunks/{de-Dfbeau59.js.map → de-BMM2H7Bs.js.map} +1 -1
- package/dist/_chunks/dependent-selector-CRWgieHm.js +324 -0
- package/dist/_chunks/dependent-selector-CRWgieHm.js.map +1 -0
- package/dist/_chunks/document-scanner-CdHQ6lTN.js +702 -0
- package/dist/_chunks/document-scanner-CdHQ6lTN.js.map +1 -0
- package/dist/_chunks/due-date-calculator-CUspKSTw.js +171 -0
- package/dist/_chunks/due-date-calculator-CUspKSTw.js.map +1 -0
- package/dist/_chunks/{editable-currency-cell-renderer-CZcVWBPo.js → editable-currency-cell-renderer-DGKuRNVG.js} +2 -2
- package/dist/_chunks/{editable-currency-cell-renderer-CZcVWBPo.js.map → editable-currency-cell-renderer-DGKuRNVG.js.map} +1 -1
- package/dist/_chunks/{el-Dro3J7CP.js → el-BYPonAaK.js} +2 -2
- package/dist/_chunks/{el-Dro3J7CP.js.map → el-BYPonAaK.js.map} +1 -1
- package/dist/_chunks/{es-Dvg8u70B.js → es-CMkVCQ4F.js} +2 -2
- package/dist/_chunks/{es-Dvg8u70B.js.map → es-CMkVCQ4F.js.map} +1 -1
- package/dist/_chunks/{file-upload-CdozCPct.js → file-upload-CnzRcErt.js} +2 -1
- package/dist/_chunks/{file-upload-CdozCPct.js.map → file-upload-CnzRcErt.js.map} +1 -1
- package/dist/_chunks/fiscal-code-input-BZ0FxwUl.js +540 -0
- package/dist/_chunks/fiscal-code-input-BZ0FxwUl.js.map +1 -0
- package/dist/_chunks/{fr-VOGjBSPP.js → fr-BcuWxqft.js} +2 -2
- package/dist/_chunks/{fr-VOGjBSPP.js.map → fr-BcuWxqft.js.map} +1 -1
- package/dist/_chunks/gestation-BXEgDGmP.js +50 -0
- package/dist/_chunks/gestation-BXEgDGmP.js.map +1 -0
- package/dist/_chunks/gestational-age-calculator-CsQ05qDy.js +165 -0
- package/dist/_chunks/gestational-age-calculator-CsQ05qDy.js.map +1 -0
- package/dist/_chunks/heart-C0faivFf.js +20 -0
- package/dist/_chunks/heart-C0faivFf.js.map +1 -0
- package/dist/_chunks/{hi-BSDxWU_y.js → hi-wkq_rQAh.js} +2 -2
- package/dist/_chunks/{hi-BSDxWU_y.js.map → hi-wkq_rQAh.js.map} +1 -1
- package/dist/_chunks/image-C6RM5hfF.js +16 -0
- package/dist/_chunks/image-C6RM5hfF.js.map +1 -0
- package/dist/_chunks/insert-result-yJ0QavoN.js +133 -0
- package/dist/_chunks/insert-result-yJ0QavoN.js.map +1 -0
- package/dist/_chunks/{isSameWeek-Dfzu29cW.js → isSameWeek-Bim5ftRd.js} +2 -2
- package/dist/_chunks/{isSameWeek-Dfzu29cW.js.map → isSameWeek-Bim5ftRd.js.map} +1 -1
- package/dist/_chunks/{it-CuonvcI_.js → it-GiQrQ9p4.js} +3 -3
- package/dist/_chunks/{it-CuonvcI_.js.map → it-GiQrQ9p4.js.map} +1 -1
- package/dist/_chunks/{ja-DO57gIOT.js → ja-qfYg3Rua.js} +2 -2
- package/dist/_chunks/{ja-DO57gIOT.js.map → ja-qfYg3Rua.js.map} +1 -1
- package/dist/_chunks/{logo-_Z-jLq80.js → logo-yituK7sE.js} +42 -91
- package/dist/_chunks/logo-yituK7sE.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-DXHxy9dj.js → marketplace-app-shell-BnClrL2B.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-DXHxy9dj.js.map → marketplace-app-shell-BnClrL2B.js.map} +1 -1
- package/dist/_chunks/{nl-DjPaaWaW.js → nl-xOogO4sZ.js} +2 -2
- package/dist/_chunks/{nl-DjPaaWaW.js.map → nl-xOogO4sZ.js.map} +1 -1
- package/dist/_chunks/{patient-shell-CDvMw_Nk.js → patient-shell-Bz3CdO84.js} +2 -2
- package/dist/_chunks/{patient-shell-CDvMw_Nk.js.map → patient-shell-Bz3CdO84.js.map} +1 -1
- package/dist/_chunks/{pl-Cl4lOx2N.js → pl-GnOW6eGK.js} +3 -3
- package/dist/_chunks/{pl-Cl4lOx2N.js.map → pl-GnOW6eGK.js.map} +1 -1
- package/dist/_chunks/{practice-results-BFM_lyUs.js → practice-results-C8ciLQap.js} +3 -2
- package/dist/_chunks/{practice-results-BFM_lyUs.js.map → practice-results-C8ciLQap.js.map} +1 -1
- package/dist/_chunks/pregnancy-weight-gain-BCdi-JSv.js +209 -0
- package/dist/_chunks/pregnancy-weight-gain-BCdi-JSv.js.map +1 -0
- package/dist/_chunks/{privacy-lock-DD-wHxBg.js → privacy-lock-BmX_gkvt.js} +2 -2
- package/dist/_chunks/{privacy-lock-DD-wHxBg.js.map → privacy-lock-BmX_gkvt.js.map} +1 -1
- package/dist/_chunks/{pt-D7qO5CzD.js → pt-_bV5b5RW.js} +2 -2
- package/dist/_chunks/{pt-D7qO5CzD.js.map → pt-_bV5b5RW.js.map} +1 -1
- package/dist/_chunks/{public-footer.agent-Cjfe5jus.js → public-footer.agent-zw1vFin_.js} +2 -2
- package/dist/_chunks/{public-footer.agent-Cjfe5jus.js.map → public-footer.agent-zw1vFin_.js.map} +1 -1
- package/dist/_chunks/qr-code-DNXhi6se.js +568 -0
- package/dist/_chunks/qr-code-DNXhi6se.js.map +1 -0
- package/dist/_chunks/{react-day-picker-DsjfS7uI.js → react-day-picker-CdtIiKjx.js} +27 -27
- package/dist/_chunks/{react-day-picker-DsjfS7uI.js.map → react-day-picker-CdtIiKjx.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-CHmr9Bz8.js → rich-text-editor-DLbg2852.js} +114 -124
- package/dist/_chunks/rich-text-editor-DLbg2852.js.map +1 -0
- package/dist/_chunks/{ro-CP2-VJ_O.js → ro-BEcyh5Nj.js} +2 -2
- package/dist/_chunks/{ro-CP2-VJ_O.js.map → ro-BEcyh5Nj.js.map} +1 -1
- package/dist/_chunks/rotate-ccw-BWANpitO.js +15 -0
- package/dist/_chunks/rotate-ccw-BWANpitO.js.map +1 -0
- package/dist/_chunks/{ru-RPn9_Lpq.js → ru-Bi86hqMf.js} +3 -3
- package/dist/_chunks/{ru-RPn9_Lpq.js.map → ru-Bi86hqMf.js.map} +1 -1
- package/dist/_chunks/session-countdown-LPnhTHjn.js +214 -0
- package/dist/_chunks/session-countdown-LPnhTHjn.js.map +1 -0
- package/dist/_chunks/{shield-check-BhHyReu8.js → shield-check-C73ma9Cs.js} +8 -24
- package/dist/_chunks/shield-check-C73ma9Cs.js.map +1 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-BI0fVonM.js → sign-in-with-alfadocs-button-DeHBFRNS.js} +2 -2
- package/dist/_chunks/{sign-in-with-alfadocs-button-BI0fVonM.js.map → sign-in-with-alfadocs-button-DeHBFRNS.js.map} +1 -1
- package/dist/_chunks/social-sign-in-button-X54ySJr1.js +243 -0
- package/dist/_chunks/social-sign-in-button-X54ySJr1.js.map +1 -0
- package/dist/_chunks/{sq-AQvefouo.js → sq-BujHSAWu.js} +2 -2
- package/dist/_chunks/{sq-AQvefouo.js.map → sq-BujHSAWu.js.map} +1 -1
- package/dist/_chunks/subDays-_T9YeKPX.js +8 -0
- package/dist/_chunks/{subDays-CANHP9hz.js.map → subDays-_T9YeKPX.js.map} +1 -1
- package/dist/_chunks/{sv-zkx9eBtD.js → sv-C8AeDrTA.js} +2 -2
- package/dist/_chunks/{sv-zkx9eBtD.js.map → sv-C8AeDrTA.js.map} +1 -1
- package/dist/_chunks/{tr-Dmr412Ac.js → tr-CMSs_Vgf.js} +2 -2
- package/dist/_chunks/{tr-Dmr412Ac.js.map → tr-CMSs_Vgf.js.map} +1 -1
- package/dist/_chunks/unit-converter-EUwO6QYq.js +168 -0
- package/dist/_chunks/unit-converter-EUwO6QYq.js.map +1 -0
- package/dist/_chunks/wallet-pay-button-DK4ESYge.js +250 -0
- package/dist/_chunks/wallet-pay-button-DK4ESYge.js.map +1 -0
- package/dist/_chunks/{zh-CN-DxVt64Zk.js → zh-CN-eXB-PFu4.js} +3 -3
- package/dist/_chunks/{zh-CN-DxVt64Zk.js.map → zh-CN-eXB-PFu4.js.map} +1 -1
- package/dist/agent-catalog.json +203 -1
- package/dist/brand/provider-marks/apple-pay.d.ts +12 -0
- package/dist/brand/provider-marks/apple-pay.d.ts.map +1 -0
- package/dist/brand/provider-marks/apple.d.ts +12 -0
- package/dist/brand/provider-marks/apple.d.ts.map +1 -0
- package/dist/brand/provider-marks/google-pay.d.ts +12 -0
- package/dist/brand/provider-marks/google-pay.d.ts.map +1 -0
- package/dist/brand/provider-marks/google.d.ts +13 -0
- package/dist/brand/provider-marks/google.d.ts.map +1 -0
- package/dist/components/_shared/insert-result.d.ts +47 -0
- package/dist/components/_shared/insert-result.d.ts.map +1 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts +27 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -0
- package/dist/components/bmi-calculator/bmi.d.ts +37 -0
- package/dist/components/bmi-calculator/bmi.d.ts.map +1 -0
- package/dist/components/bmi-calculator/index.d.ts +4 -0
- package/dist/components/bmi-calculator/index.d.ts.map +1 -0
- package/dist/components/bmi-calculator/index.js +15 -0
- package/dist/components/bmi-calculator/index.js.map +1 -0
- package/dist/components/booking/index.js +1 -1
- package/dist/components/calculator-dialog/calculator-dialog.d.ts +26 -0
- package/dist/components/calculator-dialog/calculator-dialog.d.ts.map +1 -0
- package/dist/components/calculator-dialog/index.d.ts +3 -0
- package/dist/components/calculator-dialog/index.d.ts.map +1 -0
- package/dist/components/calculator-dialog/index.js +5 -0
- package/dist/components/calculator-dialog/index.js.map +1 -0
- package/dist/components/chart/chart.d.ts +7 -0
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/cycle-calculator/cycle-calculator.d.ts +21 -0
- package/dist/components/cycle-calculator/cycle-calculator.d.ts.map +1 -0
- package/dist/components/cycle-calculator/cycle.d.ts +37 -0
- package/dist/components/cycle-calculator/cycle.d.ts.map +1 -0
- package/dist/components/cycle-calculator/index.d.ts +4 -0
- package/dist/components/cycle-calculator/index.d.ts.map +1 -0
- package/dist/components/cycle-calculator/index.js +7 -0
- package/dist/components/cycle-calculator/index.js.map +1 -0
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/dependent-selector/dependent-selector.agent.d.ts +4 -0
- package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -0
- package/dist/components/dependent-selector/dependent-selector.d.ts +72 -0
- package/dist/components/dependent-selector/dependent-selector.d.ts.map +1 -0
- package/dist/components/dependent-selector/index.d.ts +4 -0
- package/dist/components/dependent-selector/index.d.ts.map +1 -0
- package/dist/components/dependent-selector/index.js +6 -0
- package/dist/components/dependent-selector/index.js.map +1 -0
- package/dist/components/document-scanner/document-scanner.agent.d.ts +4 -0
- package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -0
- package/dist/components/document-scanner/document-scanner.d.ts +93 -0
- package/dist/components/document-scanner/document-scanner.d.ts.map +1 -0
- package/dist/components/document-scanner/index.d.ts +4 -0
- package/dist/components/document-scanner/index.d.ts.map +1 -0
- package/dist/components/document-scanner/index.js +6 -0
- package/dist/components/document-scanner/index.js.map +1 -0
- package/dist/components/due-date-calculator/due-date-calculator.d.ts +21 -0
- package/dist/components/due-date-calculator/due-date-calculator.d.ts.map +1 -0
- package/dist/components/due-date-calculator/gestation.d.ts +60 -0
- package/dist/components/due-date-calculator/gestation.d.ts.map +1 -0
- package/dist/components/due-date-calculator/index.d.ts +4 -0
- package/dist/components/due-date-calculator/index.d.ts.map +1 -0
- package/dist/components/due-date-calculator/index.js +13 -0
- package/dist/components/due-date-calculator/index.js.map +1 -0
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/fiscal-code-input/calculate-codice-fiscale.d.ts +24 -0
- package/dist/components/fiscal-code-input/calculate-codice-fiscale.d.ts.map +1 -0
- package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts +4 -0
- package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -0
- package/dist/components/fiscal-code-input/fiscal-code-input.d.ts +61 -0
- package/dist/components/fiscal-code-input/fiscal-code-input.d.ts.map +1 -0
- package/dist/components/fiscal-code-input/index.d.ts +6 -0
- package/dist/components/fiscal-code-input/index.d.ts.map +1 -0
- package/dist/components/fiscal-code-input/index.js +11 -0
- package/dist/components/fiscal-code-input/index.js.map +1 -0
- package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts +21 -0
- package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts.map +1 -0
- package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts +27 -0
- package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts.map +1 -0
- package/dist/components/gestational-age-calculator/index.d.ts +3 -0
- package/dist/components/gestational-age-calculator/index.d.ts.map +1 -0
- package/dist/components/gestational-age-calculator/index.js +5 -0
- package/dist/components/gestational-age-calculator/index.js.map +1 -0
- package/dist/components/index.d.ts +15 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/logo/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.d.ts +4 -0
- package/dist/components/pregnancy-weight-gain/index.d.ts.map +1 -0
- package/dist/components/pregnancy-weight-gain/index.js +9 -0
- package/dist/components/pregnancy-weight-gain/index.js.map +1 -0
- package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts +19 -0
- package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts.map +1 -0
- package/dist/components/pregnancy-weight-gain/weight-gain.d.ts +41 -0
- package/dist/components/pregnancy-weight-gain/weight-gain.d.ts.map +1 -0
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/qr-code/index.d.ts +5 -0
- package/dist/components/qr-code/index.d.ts.map +1 -0
- package/dist/components/qr-code/index.js +8 -0
- package/dist/components/qr-code/index.js.map +1 -0
- package/dist/components/qr-code/qr-code.agent.d.ts +3 -0
- package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -0
- package/dist/components/qr-code/qr-code.d.ts +59 -0
- package/dist/components/qr-code/qr-code.d.ts.map +1 -0
- package/dist/components/qr-code/qr-encode.d.ts +46 -0
- package/dist/components/qr-code/qr-encode.d.ts.map +1 -0
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/session-countdown/index.d.ts +4 -0
- package/dist/components/session-countdown/index.d.ts.map +1 -0
- package/dist/components/session-countdown/index.js +6 -0
- package/dist/components/session-countdown/index.js.map +1 -0
- package/dist/components/session-countdown/session-countdown.agent.d.ts +3 -0
- package/dist/components/session-countdown/session-countdown.agent.d.ts.map +1 -0
- package/dist/components/session-countdown/session-countdown.d.ts +38 -0
- package/dist/components/session-countdown/session-countdown.d.ts.map +1 -0
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/skeleton/skeleton.d.ts +1 -1
- package/dist/components/social-sign-in-button/index.d.ts +3 -0
- package/dist/components/social-sign-in-button/index.d.ts.map +1 -0
- package/dist/components/social-sign-in-button/index.js +5 -0
- package/dist/components/social-sign-in-button/index.js.map +1 -0
- package/dist/components/social-sign-in-button/social-sign-in-button.d.ts +56 -0
- package/dist/components/social-sign-in-button/social-sign-in-button.d.ts.map +1 -0
- package/dist/components/unit-converter/index.d.ts +4 -0
- package/dist/components/unit-converter/index.d.ts.map +1 -0
- package/dist/components/unit-converter/index.js +9 -0
- package/dist/components/unit-converter/index.js.map +1 -0
- package/dist/components/unit-converter/unit-converter.d.ts +21 -0
- package/dist/components/unit-converter/unit-converter.d.ts.map +1 -0
- package/dist/components/unit-converter/units.d.ts +18 -0
- package/dist/components/unit-converter/units.d.ts.map +1 -0
- package/dist/components/wallet-pay-button/index.d.ts +3 -0
- package/dist/components/wallet-pay-button/index.d.ts.map +1 -0
- package/dist/components/wallet-pay-button/index.js +5 -0
- package/dist/components/wallet-pay-button/index.js.map +1 -0
- package/dist/components/wallet-pay-button/wallet-pay-button.d.ts +63 -0
- package/dist/components/wallet-pay-button/wallet-pay-button.d.ts.map +1 -0
- package/dist/i18n/locales/ar.d.ts +316 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +307 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +316 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +307 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +316 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +307 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +316 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +310 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +316 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +307 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +316 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +307 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +316 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +307 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +316 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +307 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +316 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +303 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +316 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +307 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +316 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +307 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +316 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +310 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +316 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +307 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +316 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +307 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +316 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +307 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +316 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +307 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +316 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +307 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +316 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +303 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +597 -527
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +316 -0
- package/dist/locales/de.json +316 -0
- package/dist/locales/el.json +316 -0
- package/dist/locales/en.json +316 -0
- package/dist/locales/es.json +316 -0
- package/dist/locales/fr.json +316 -0
- package/dist/locales/hi.json +316 -0
- package/dist/locales/it.json +316 -0
- package/dist/locales/ja.json +316 -0
- package/dist/locales/nl.json +316 -0
- package/dist/locales/pl.json +316 -0
- package/dist/locales/pt.json +316 -0
- package/dist/locales/ro.json +316 -0
- package/dist/locales/ru.json +316 -0
- package/dist/locales/sq.json +316 -0
- package/dist/locales/sv.json +316 -0
- package/dist/locales/tr.json +316 -0
- package/dist/locales/zh.json +316 -0
- 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 +1 -1
- package/package.json +57 -1
- package/dist/_chunks/chart-DLkVn_ex.js +0 -292
- package/dist/_chunks/chart-DLkVn_ex.js.map +0 -1
- package/dist/_chunks/chat-message-D53_fH2w.js.map +0 -1
- package/dist/_chunks/logo-_Z-jLq80.js.map +0 -1
- package/dist/_chunks/rich-text-editor-CHmr9Bz8.js.map +0 -1
- package/dist/_chunks/shield-check-BhHyReu8.js.map +0 -1
- package/dist/_chunks/subDays-CANHP9hz.js +0 -8
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs as a, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as p } from "react";
|
|
3
|
+
import { D as r } from "./dialog-Cee13rHU.js";
|
|
4
|
+
const u = p(
|
|
5
|
+
({
|
|
6
|
+
trigger: i,
|
|
7
|
+
title: e,
|
|
8
|
+
description: o,
|
|
9
|
+
children: t,
|
|
10
|
+
size: n = "lg",
|
|
11
|
+
open: c,
|
|
12
|
+
defaultOpen: d,
|
|
13
|
+
onOpenChange: m,
|
|
14
|
+
id: s,
|
|
15
|
+
className: g
|
|
16
|
+
}, h) => /* @__PURE__ */ a(
|
|
17
|
+
r,
|
|
18
|
+
{
|
|
19
|
+
open: c,
|
|
20
|
+
defaultOpen: d,
|
|
21
|
+
onOpenChange: m,
|
|
22
|
+
id: s,
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ l(r.Trigger, { asChild: !0, children: i }),
|
|
25
|
+
/* @__PURE__ */ a(r.Content, { ref: h, size: n, children: [
|
|
26
|
+
/* @__PURE__ */ a(r.Header, { children: [
|
|
27
|
+
/* @__PURE__ */ l(r.Title, { children: e }),
|
|
28
|
+
o ? /* @__PURE__ */ l(r.Description, { children: o }) : null
|
|
29
|
+
] }),
|
|
30
|
+
/* @__PURE__ */ l("div", { "data-component": "calculator-dialog", className: g, children: t })
|
|
31
|
+
] })
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
u.displayName = "CalculatorDialog";
|
|
37
|
+
export {
|
|
38
|
+
u as C
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=calculator-dialog-B74fqpFZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculator-dialog-B74fqpFZ.js","sources":["../../src/components/calculator-dialog/calculator-dialog.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* CalculatorDialog — shared modal wrapper for the calculator toolset. */\n/* */\n/* Rather than baking Dialog wiring into every calculator, this single */\n/* wrapper composes the kit `Dialog` and hosts ANY calculator (or any */\n/* content) as children. Every calculator therefore gains a modal */\n/* presentation for free: */\n/* */\n/* <CalculatorDialog */\n/* trigger={<Button>Open BMI calculator</Button>} */\n/* title=\"BMI calculator\"> */\n/* <BmiCalculator /> */\n/* </CalculatorDialog> */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, type ReactNode } from 'react';\nimport { Dialog, type DialogContentProps } from '../dialog';\n\nexport interface CalculatorDialogProps {\n /** The element that opens the modal (rendered via `Dialog.Trigger asChild`). */\n trigger: ReactNode;\n /** Modal heading — also names the dialog for assistive tech. */\n title: string;\n /** Optional supporting line under the title. */\n description?: string;\n /** The calculator (or any content) shown inside the modal. */\n children: ReactNode;\n /** Dialog size. Calculators default to `lg` to fit inputs + result. */\n size?: DialogContentProps['size'];\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Open-state change handler. */\n onOpenChange?: (open: boolean) => void;\n /** Opaque instance id, forwarded to the dialog content. */\n id?: string;\n /** Extra class names on the modal body wrapper. */\n className?: string;\n}\n\nexport const CalculatorDialog = forwardRef<\n HTMLDivElement,\n CalculatorDialogProps\n>(\n (\n {\n trigger,\n title,\n description,\n children,\n size = 'lg',\n open,\n defaultOpen,\n onOpenChange,\n id,\n className,\n },\n ref,\n ) => {\n return (\n <Dialog\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n id={id}\n >\n <Dialog.Trigger asChild>{trigger}</Dialog.Trigger>\n <Dialog.Content ref={ref} size={size}>\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n {description ? (\n <Dialog.Description>{description}</Dialog.Description>\n ) : null}\n </Dialog.Header>\n <div data-component=\"calculator-dialog\" className={className}>\n {children}\n </div>\n </Dialog.Content>\n </Dialog>\n );\n },\n);\n\nCalculatorDialog.displayName = 'CalculatorDialog';\n"],"names":["CalculatorDialog","forwardRef","trigger","title","description","children","size","open","defaultOpen","onOpenChange","id","className","ref","jsxs","Dialog","jsx"],"mappings":";;;AAyCO,MAAMA,IAAmBC;AAAA,EAI9B,CACE;AAAA,IACE,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,MAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,IAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,MAGE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAP;AAAA,MACA,aAAAC;AAAA,MACA,cAAAC;AAAA,MACA,IAAAC;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAK,EAACD,EAAO,SAAP,EAAe,SAAO,IAAE,UAAAZ,GAAQ;AAAA,QACjC,gBAAAW,EAACC,EAAO,SAAP,EAAe,KAAAF,GAAU,MAAAN,GACxB,UAAA;AAAA,UAAA,gBAAAO,EAACC,EAAO,QAAP,EACC,UAAA;AAAA,YAAA,gBAAAC,EAACD,EAAO,OAAP,EAAc,UAAAX,EAAA,CAAM;AAAA,YACpBC,IACC,gBAAAW,EAACD,EAAO,aAAP,EAAoB,aAAY,IAC/B;AAAA,UAAA,GACN;AAAA,UACA,gBAAAC,EAAC,OAAA,EAAI,kBAAe,qBAAoB,WAAAJ,GACrC,UAAAN,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAL,EAAiB,cAAc;"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { jsxs as T, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Q, useId as X, useMemo as d, useRef as tt, useState as E, useEffect as P, useImperativeHandle as et } from "react";
|
|
3
|
+
import { c as ot } from "./index-D2ZczOXr.js";
|
|
4
|
+
import { useTranslation as at } from "react-i18next";
|
|
5
|
+
import rt from "react-apexcharts";
|
|
6
|
+
import $ from "apexcharts";
|
|
7
|
+
import { u as nt, g as k } from "./apexcharts-theme-BJigns_V.js";
|
|
8
|
+
import { u as st } from "./use-prefers-reduced-motion-BMwIQRjB.js";
|
|
9
|
+
import { u as it } from "./registry-nPAVE19X.js";
|
|
10
|
+
const ct = {
|
|
11
|
+
id: "chart",
|
|
12
|
+
capabilities: [],
|
|
13
|
+
state: {},
|
|
14
|
+
actions: {
|
|
15
|
+
update_series: {
|
|
16
|
+
safety: "read",
|
|
17
|
+
argsType: "series",
|
|
18
|
+
description: "Replace the chart series without remounting.",
|
|
19
|
+
invoke: (r, l) => {
|
|
20
|
+
r.updateSeries(l.series);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
export_png: {
|
|
24
|
+
safety: "read",
|
|
25
|
+
description: "Return a PNG data URI of the chart for export or screenshotting.",
|
|
26
|
+
invoke: (r) => r.dataURI()
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
domHooks: {
|
|
30
|
+
root: { attr: "data-component", value: "chart" },
|
|
31
|
+
instanceId: {
|
|
32
|
+
attr: "data-component-id",
|
|
33
|
+
sourceProp: "id",
|
|
34
|
+
description: "Sourced from the id prop."
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, dt = ot("ds:relative ds:block ds:w-full", {
|
|
38
|
+
variants: {
|
|
39
|
+
density: {
|
|
40
|
+
compact: "ds:min-h-[var(--chart-min-height-compact)]",
|
|
41
|
+
comfortable: "ds:min-h-[var(--chart-min-height-comfortable)]"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
defaultVariants: { density: "comfortable" }
|
|
45
|
+
}), lt = [
|
|
46
|
+
"verticalLines",
|
|
47
|
+
"horizontalLines",
|
|
48
|
+
"slantedLines",
|
|
49
|
+
"squares",
|
|
50
|
+
"circles"
|
|
51
|
+
], mt = ["line", "bar", "area"], ut = ["pie", "donut", "radialBar"];
|
|
52
|
+
function x(r) {
|
|
53
|
+
return ut.includes(r);
|
|
54
|
+
}
|
|
55
|
+
function ht(r) {
|
|
56
|
+
return mt.includes(r);
|
|
57
|
+
}
|
|
58
|
+
function pt(r, l) {
|
|
59
|
+
return x(l) ? [
|
|
60
|
+
{
|
|
61
|
+
name: "",
|
|
62
|
+
data: r
|
|
63
|
+
}
|
|
64
|
+
] : r;
|
|
65
|
+
}
|
|
66
|
+
const ft = Q(
|
|
67
|
+
({
|
|
68
|
+
title: r,
|
|
69
|
+
id: l,
|
|
70
|
+
type: o,
|
|
71
|
+
series: p,
|
|
72
|
+
categories: g,
|
|
73
|
+
labels: v,
|
|
74
|
+
height: G,
|
|
75
|
+
width: H,
|
|
76
|
+
patterns: L = !1,
|
|
77
|
+
toolbar: R = !1,
|
|
78
|
+
locale: _,
|
|
79
|
+
radialValueFormatter: m,
|
|
80
|
+
density: M,
|
|
81
|
+
className: U
|
|
82
|
+
}, D) => {
|
|
83
|
+
const { t: a, i18n: W } = at(), O = X(), u = d(
|
|
84
|
+
() => `chart-${O.replace(/[^a-zA-Z0-9-_]/g, "")}`,
|
|
85
|
+
[O]
|
|
86
|
+
), S = `${u}-summary`, y = tt(null), [A, Y] = E(0);
|
|
87
|
+
nt(y);
|
|
88
|
+
const h = _ ?? W.language ?? "en", [z, Z] = E(
|
|
89
|
+
() => {
|
|
90
|
+
try {
|
|
91
|
+
return k();
|
|
92
|
+
} catch {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
P(() => {
|
|
98
|
+
if (typeof document > "u") return;
|
|
99
|
+
let t;
|
|
100
|
+
const e = new MutationObserver(() => {
|
|
101
|
+
clearTimeout(t), t = setTimeout(() => {
|
|
102
|
+
try {
|
|
103
|
+
Z(k());
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
}, 50);
|
|
107
|
+
});
|
|
108
|
+
return e.observe(document.documentElement, {
|
|
109
|
+
attributes: !0,
|
|
110
|
+
attributeFilter: ["class"]
|
|
111
|
+
}), () => {
|
|
112
|
+
clearTimeout(t), e.disconnect();
|
|
113
|
+
};
|
|
114
|
+
}, []), P(() => {
|
|
115
|
+
const t = y.current;
|
|
116
|
+
if (!t || typeof ResizeObserver > "u") return;
|
|
117
|
+
const e = new ResizeObserver((n) => {
|
|
118
|
+
const s = n[0];
|
|
119
|
+
s && Y(Math.floor(s.contentRect.width));
|
|
120
|
+
});
|
|
121
|
+
return e.observe(t), () => e.disconnect();
|
|
122
|
+
}, []);
|
|
123
|
+
const I = d(
|
|
124
|
+
() => ({
|
|
125
|
+
async dataURI() {
|
|
126
|
+
const t = $.getChartByID(u);
|
|
127
|
+
return t ? (await t.dataURI()).imgURI : "";
|
|
128
|
+
},
|
|
129
|
+
updateSeries(t) {
|
|
130
|
+
const e = $.getChartByID(u);
|
|
131
|
+
e && (x(o), e.updateSeries(t));
|
|
132
|
+
}
|
|
133
|
+
}),
|
|
134
|
+
[u, o]
|
|
135
|
+
);
|
|
136
|
+
et(D, () => I, [I]), it(ct, I, l);
|
|
137
|
+
const C = typeof document < "u" && document.documentElement.dir === "rtl", N = d(
|
|
138
|
+
() => pt(p, o),
|
|
139
|
+
[p, o]
|
|
140
|
+
), f = d(
|
|
141
|
+
() => new Intl.NumberFormat(h),
|
|
142
|
+
[h]
|
|
143
|
+
), B = d(
|
|
144
|
+
() => ({
|
|
145
|
+
name: h,
|
|
146
|
+
options: {
|
|
147
|
+
toolbar: {
|
|
148
|
+
download: a("chart.toolbar.download"),
|
|
149
|
+
selection: a("chart.toolbar.selection"),
|
|
150
|
+
selectionZoom: a("chart.toolbar.selectionZoom"),
|
|
151
|
+
zoomIn: a("chart.toolbar.zoomIn"),
|
|
152
|
+
zoomOut: a("chart.toolbar.zoomOut"),
|
|
153
|
+
pan: a("chart.toolbar.pan"),
|
|
154
|
+
reset: a("chart.toolbar.reset"),
|
|
155
|
+
exportToSVG: a("chart.toolbar.exportToSVG"),
|
|
156
|
+
exportToPNG: a("chart.toolbar.exportToPNG"),
|
|
157
|
+
exportToCSV: a("chart.toolbar.exportToCSV")
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}),
|
|
161
|
+
[h, a]
|
|
162
|
+
), w = st(), j = d(() => {
|
|
163
|
+
var n, s, b;
|
|
164
|
+
const t = z, e = {
|
|
165
|
+
...t,
|
|
166
|
+
chart: {
|
|
167
|
+
...t.chart,
|
|
168
|
+
id: u,
|
|
169
|
+
toolbar: { show: R },
|
|
170
|
+
zoom: { enabled: R },
|
|
171
|
+
animations: {
|
|
172
|
+
enabled: !w,
|
|
173
|
+
dynamicAnimation: { enabled: !w }
|
|
174
|
+
},
|
|
175
|
+
locales: [B],
|
|
176
|
+
defaultLocale: h,
|
|
177
|
+
parentHeightOffset: 0
|
|
178
|
+
},
|
|
179
|
+
labels: v,
|
|
180
|
+
legend: {
|
|
181
|
+
...t.legend,
|
|
182
|
+
position: "bottom",
|
|
183
|
+
// ApexCharts legend.horizontalAlign is a physical prop mapped internally
|
|
184
|
+
// to the chart's own text flow. For RTL we flip via `yaxis.opposite`
|
|
185
|
+
// and ApexCharts' own `direction: 'rtl'` handling; legend stays anchored
|
|
186
|
+
// to the inline-start by asking for 'left' on LTR and 'right' on RTL.
|
|
187
|
+
horizontalAlign: C ? "right" : "left",
|
|
188
|
+
fontFamily: "inherit"
|
|
189
|
+
},
|
|
190
|
+
tooltip: {
|
|
191
|
+
...t.tooltip,
|
|
192
|
+
y: {
|
|
193
|
+
formatter: (i) => f.format(i)
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
noData: {
|
|
197
|
+
text: a("chart.noData")
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
if (ht(o) && (e.xaxis = {
|
|
201
|
+
...t.xaxis,
|
|
202
|
+
categories: g ?? []
|
|
203
|
+
}, e.yaxis = {
|
|
204
|
+
...t.yaxis,
|
|
205
|
+
opposite: C,
|
|
206
|
+
labels: {
|
|
207
|
+
formatter: (i) => f.format(i)
|
|
208
|
+
}
|
|
209
|
+
}, e.stroke = {
|
|
210
|
+
curve: "smooth",
|
|
211
|
+
width: o === "bar" ? 0 : 2
|
|
212
|
+
}, e.dataLabels = { enabled: !1 }), o === "radialBar" && m) {
|
|
213
|
+
const i = t.plotOptions ?? {};
|
|
214
|
+
e.plotOptions = {
|
|
215
|
+
...i,
|
|
216
|
+
radialBar: {
|
|
217
|
+
...i.radialBar ?? {},
|
|
218
|
+
dataLabels: {
|
|
219
|
+
...((n = i.radialBar) == null ? void 0 : n.dataLabels) ?? {},
|
|
220
|
+
value: {
|
|
221
|
+
...((b = (s = i.radialBar) == null ? void 0 : s.dataLabels) == null ? void 0 : b.value) ?? {},
|
|
222
|
+
formatter: (K) => m(Number(K))
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return L ? e.fill = {
|
|
229
|
+
type: "pattern",
|
|
230
|
+
opacity: o === "area" ? 0.3 : 1,
|
|
231
|
+
pattern: {
|
|
232
|
+
style: [...lt],
|
|
233
|
+
strokeWidth: 2
|
|
234
|
+
}
|
|
235
|
+
} : o === "area" && (e.fill = {
|
|
236
|
+
type: "gradient",
|
|
237
|
+
opacity: 0.3
|
|
238
|
+
}), e;
|
|
239
|
+
}, [
|
|
240
|
+
z,
|
|
241
|
+
u,
|
|
242
|
+
R,
|
|
243
|
+
w,
|
|
244
|
+
B,
|
|
245
|
+
h,
|
|
246
|
+
v,
|
|
247
|
+
f,
|
|
248
|
+
a,
|
|
249
|
+
o,
|
|
250
|
+
g,
|
|
251
|
+
C,
|
|
252
|
+
L,
|
|
253
|
+
m
|
|
254
|
+
]), q = H ?? (A > 0 ? A : "100%"), V = G ?? 320, F = d(() => {
|
|
255
|
+
const t = x(o) ? v ?? [] : g ?? [], e = N;
|
|
256
|
+
return /* @__PURE__ */ T("table", { id: S, className: "ds:sr-only", children: [
|
|
257
|
+
/* @__PURE__ */ c("caption", { children: r }),
|
|
258
|
+
/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ T("tr", { children: [
|
|
259
|
+
/* @__PURE__ */ c("th", { scope: "col", children: a("chart.table.series") }),
|
|
260
|
+
t.map((n, s) => /* @__PURE__ */ c("th", { scope: "col", children: n }, `${n}-${s}`))
|
|
261
|
+
] }) }),
|
|
262
|
+
/* @__PURE__ */ c("tbody", { children: e.map((n, s) => /* @__PURE__ */ T("tr", { children: [
|
|
263
|
+
/* @__PURE__ */ c("th", { scope: "row", children: n.name || a("chart.table.value") }),
|
|
264
|
+
n.data.map((b, i) => /* @__PURE__ */ c("td", { children: o === "radialBar" && m ? m(b) : f.format(b) }, `${s}-${i}`))
|
|
265
|
+
] }, `${n.name}-${s}`)) })
|
|
266
|
+
] });
|
|
267
|
+
}, [
|
|
268
|
+
o,
|
|
269
|
+
N,
|
|
270
|
+
v,
|
|
271
|
+
g,
|
|
272
|
+
S,
|
|
273
|
+
r,
|
|
274
|
+
a,
|
|
275
|
+
f,
|
|
276
|
+
m
|
|
277
|
+
]), J = d(() => (x(o), p), [p, o]);
|
|
278
|
+
return /* @__PURE__ */ T(
|
|
279
|
+
"div",
|
|
280
|
+
{
|
|
281
|
+
ref: y,
|
|
282
|
+
role: "img",
|
|
283
|
+
"aria-label": r,
|
|
284
|
+
"aria-describedby": S,
|
|
285
|
+
className: dt({ density: M, className: U }),
|
|
286
|
+
"data-component": "chart",
|
|
287
|
+
"data-component-id": l,
|
|
288
|
+
children: [
|
|
289
|
+
F,
|
|
290
|
+
/* @__PURE__ */ c(
|
|
291
|
+
rt,
|
|
292
|
+
{
|
|
293
|
+
type: o,
|
|
294
|
+
series: J,
|
|
295
|
+
options: j,
|
|
296
|
+
width: q,
|
|
297
|
+
height: V,
|
|
298
|
+
"aria-hidden": "true"
|
|
299
|
+
}
|
|
300
|
+
)
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
);
|
|
306
|
+
ft.displayName = "Chart";
|
|
307
|
+
export {
|
|
308
|
+
ft as C,
|
|
309
|
+
dt as a,
|
|
310
|
+
ct as c
|
|
311
|
+
};
|
|
312
|
+
//# sourceMappingURL=chart-DnHvmiDX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-DnHvmiDX.js","sources":["../../src/components/chart/chart.agent.ts","../../src/components/chart/chart.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { ChartHandle } from './chart';\n\nexport const chartAgent: AgentAdapter<ChartHandle> = {\n id: 'chart',\n capabilities: [],\n state: {},\n actions: {\n update_series: {\n safety: 'read',\n argsType: 'series',\n description: 'Replace the chart series without remounting.',\n invoke: (\n handle,\n args: { series: Parameters<ChartHandle['updateSeries']>[0] },\n ) => {\n handle.updateSeries(args.series);\n },\n },\n export_png: {\n safety: 'read',\n description:\n 'Return a PNG data URI of the chart for export or screenshotting.',\n invoke: (handle) => handle.dataURI(),\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'chart' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* Chart — thin, typed wrapper over ApexCharts (react-apexcharts). */\n/* */\n/* - All chrome, colours, and fonts flow from */\n/* `src/tokens/apexcharts-theme.ts` — never hex literals in user */\n/* code. A MutationObserver on `<html class>` re-reads the bridge so */\n/* theme changes repaint without remount. */\n/* - A ResizeObserver on the wrapper keeps the chart responsive */\n/* without listening on `window.resize`. */\n/* - Accessibility: the wrapper carries `role=\"img\"` + `aria-label` */\n/* (required `title` prop) + `aria-describedby` pointing at a */\n/* visually-hidden `<table>` that mirrors series × categories. */\n/* - Colour-blind users: `patterns` prop flips `fill.type` to pattern */\n/* using ApexCharts' built-in pattern presets. */\n/* - Numbers format via `Intl.NumberFormat(locale)` — no hand-rolled */\n/* `toFixed()`. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport ReactApexChart from 'react-apexcharts';\nimport ApexCharts from 'apexcharts';\nimport { getApexChartsTheme } from '../../tokens/apexcharts-theme';\nimport { usePrefersReducedMotion } from '../../hooks';\nimport { useNeutraliseHiddenFocus } from '../_shared/use-neutralize-hidden-focus';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { chartAgent } from './chart.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst chartVariants = cva('ds:relative ds:block ds:w-full', {\n variants: {\n density: {\n compact: 'ds:min-h-[var(--chart-min-height-compact)]',\n comfortable: 'ds:min-h-[var(--chart-min-height-comfortable)]',\n },\n },\n defaultVariants: { density: 'comfortable' },\n});\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type ChartType = 'line' | 'bar' | 'pie' | 'donut' | 'area' | 'radialBar';\n\nexport interface ChartSeries {\n name: string;\n data: number[];\n}\n\nexport interface ChartProps extends VariantProps<typeof chartVariants> {\n /** Required — drives aria-label and sr-only table caption. */\n title: string;\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Chart visual type. */\n type: ChartType;\n /**\n * For `line` / `bar` / `area`: an array of `ChartSeries`.\n * For `pie` / `donut` / `radialBar`: an array of numbers matched to `labels`.\n */\n series: ChartSeries[] | number[];\n /** Category axis labels (line / bar / area). */\n categories?: string[];\n /** Slice labels (pie / donut / radialBar). */\n labels?: string[];\n /** Height override. Defaults to 320px. */\n height?: number | string;\n /** Width override. Defaults to 100% of container. */\n width?: number | string;\n /** Opt-in pattern fills for colour-blind users. */\n patterns?: boolean;\n /** Show the ApexCharts toolbar. Defaults to false. */\n toolbar?: boolean;\n /** Locale override — defaults to the active i18next language. */\n locale?: string;\n /**\n * radialBar only. Formats the value printed in the ring centre. Use when the\n * gauge represents a non-percentage figure: pass the arc fill (0–100) as the\n * single `series` value and return the real figure here (e.g. `(_, ) => '22.4'`).\n * Ignored for every other chart type. Defaults to ApexCharts' `${value}%`.\n */\n radialValueFormatter?: (value: number) => string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface ChartHandle {\n /** Returns a PNG data URI for the chart. */\n dataURI: () => Promise<string>;\n /** Updates series without remounting. */\n updateSeries: (next: ChartProps['series']) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst PATTERN_STYLES = [\n 'verticalLines',\n 'horizontalLines',\n 'slantedLines',\n 'squares',\n 'circles',\n] as const;\n\n/** Types where `categories` belong on an x-axis. */\nconst CATEGORICAL_TYPES: ReadonlyArray<ChartType> = ['line', 'bar', 'area'];\n\n/** Types where `series` is a flat `number[]` paired with `labels`. */\nconst SLICE_TYPES: ReadonlyArray<ChartType> = ['pie', 'donut', 'radialBar'];\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction isSliceType(type: ChartType): boolean {\n return SLICE_TYPES.includes(type);\n}\n\nfunction isCategoricalType(type: ChartType): boolean {\n return CATEGORICAL_TYPES.includes(type);\n}\n\n/** Coerce `series` into `ChartSeries[]` for shared logic (table, aria). */\nfunction normaliseSeries(\n series: ChartSeries[] | number[],\n type: ChartType,\n): ChartSeries[] {\n if (isSliceType(type)) {\n const nums = series as number[];\n return [\n {\n name: '',\n data: nums,\n },\n ];\n }\n return series as ChartSeries[];\n}\n\n/* ------------------------------------------------------------------ */\n/* Chart component */\n/* ------------------------------------------------------------------ */\n\nexport const Chart = forwardRef<ChartHandle, ChartProps>(\n (\n {\n title,\n id,\n type,\n series,\n categories,\n labels,\n height,\n width,\n patterns = false,\n toolbar = false,\n locale: localeProp,\n radialValueFormatter,\n density,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const rawId = useId();\n const chartId = useMemo(\n () => `chart-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const summaryId = `${chartId}-summary`;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n\n /* ApexCharts injects focusable canvases inside the `aria-hidden` */\n /* chart wrapper. Neutralise their tabindex so axe's */\n /* `aria-hidden-focus` rule passes. Same hook used in Sparkline. */\n useNeutraliseHiddenFocus(wrapperRef);\n\n const locale = localeProp ?? i18n.language ?? 'en';\n\n /* ---- dev warning if title missing ------------------------------ */\n if (import.meta.env.DEV && !title) {\n console.warn(\n 'Chart: `title` prop is required. It drives aria-label and the screen-reader summary table.',\n );\n }\n\n /* ---- theme-reactive state -------------------------------------- */\n const [themeOptions, setThemeOptions] = useState<ApexCharts.ApexOptions>(\n () => {\n try {\n return getApexChartsTheme();\n } catch {\n return {};\n }\n },\n );\n\n /* ---- MutationObserver: re-read theme on class change ------------ */\n useEffect(() => {\n if (typeof document === 'undefined') return undefined;\n let timer: ReturnType<typeof setTimeout>;\n const observer = new MutationObserver(() => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n try {\n setThemeOptions(getApexChartsTheme());\n } catch {\n /* no-op in non-browser environments */\n }\n }, 50);\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n return () => {\n clearTimeout(timer);\n observer.disconnect();\n };\n }, []);\n\n /* ---- ResizeObserver: track container width --------------------- */\n useEffect(() => {\n const el = wrapperRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return undefined;\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) setContainerWidth(Math.floor(entry.contentRect.width));\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n /* ---- imperative handle ----------------------------------------- */\n const agentHandle = useMemo<ChartHandle>(\n () => ({\n async dataURI(): Promise<string> {\n const instance = ApexCharts.getChartByID(chartId);\n if (!instance) return '';\n const result = await instance.dataURI();\n return (result as { imgURI: string }).imgURI;\n },\n updateSeries(next) {\n const instance = ApexCharts.getChartByID(chartId);\n if (!instance) return;\n if (isSliceType(type)) {\n instance.updateSeries(next as number[]);\n } else {\n instance.updateSeries(next as ChartSeries[]);\n }\n },\n }),\n [chartId, type],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(chartAgent, agentHandle, id);\n\n /* ---- RTL detection --------------------------------------------- */\n const isRtl =\n typeof document !== 'undefined' && document.documentElement.dir === 'rtl';\n\n /* ---- normalised series for sr-only table ----------------------- */\n const tableSeries = useMemo(\n () => normaliseSeries(series, type),\n [series, type],\n );\n\n /* ---- Intl formatter -------------------------------------------- */\n const numberFormatter = useMemo(\n () => new Intl.NumberFormat(locale),\n [locale],\n );\n\n /* ---- toolbar localisation -------------------------------------- */\n const toolbarLocale = useMemo(\n () => ({\n name: locale,\n options: {\n toolbar: {\n download: t('chart.toolbar.download'),\n selection: t('chart.toolbar.selection'),\n selectionZoom: t('chart.toolbar.selectionZoom'),\n zoomIn: t('chart.toolbar.zoomIn'),\n zoomOut: t('chart.toolbar.zoomOut'),\n pan: t('chart.toolbar.pan'),\n reset: t('chart.toolbar.reset'),\n exportToSVG: t('chart.toolbar.exportToSVG'),\n exportToPNG: t('chart.toolbar.exportToPNG'),\n exportToCSV: t('chart.toolbar.exportToCSV'),\n },\n },\n }),\n [locale, t],\n );\n\n /* ---- build ApexOptions ----------------------------------------- */\n const reducedMotion = usePrefersReducedMotion();\n\n const chartOptions: ApexCharts.ApexOptions = useMemo(() => {\n const base = themeOptions;\n\n const options: ApexCharts.ApexOptions = {\n ...base,\n chart: {\n ...base.chart,\n id: chartId,\n toolbar: { show: toolbar },\n zoom: { enabled: toolbar },\n animations: {\n enabled: !reducedMotion,\n dynamicAnimation: { enabled: !reducedMotion },\n },\n locales: [toolbarLocale],\n defaultLocale: locale,\n parentHeightOffset: 0,\n },\n labels: labels,\n legend: {\n ...base.legend,\n position: 'bottom',\n // ApexCharts legend.horizontalAlign is a physical prop mapped internally\n // to the chart's own text flow. For RTL we flip via `yaxis.opposite`\n // and ApexCharts' own `direction: 'rtl'` handling; legend stays anchored\n // to the inline-start by asking for 'left' on LTR and 'right' on RTL.\n horizontalAlign: isRtl ? 'right' : 'left',\n fontFamily: 'inherit',\n },\n tooltip: {\n ...base.tooltip,\n y: {\n formatter: (value: number) => numberFormatter.format(value),\n },\n },\n noData: {\n text: t('chart.noData'),\n },\n };\n\n if (isCategoricalType(type)) {\n options.xaxis = {\n ...base.xaxis,\n categories: categories ?? [],\n };\n options.yaxis = {\n ...base.yaxis,\n opposite: isRtl,\n labels: {\n formatter: (value: number) => numberFormatter.format(value),\n },\n };\n options.stroke = {\n curve: 'smooth',\n width: type === 'bar' ? 0 : 2,\n };\n options.dataLabels = { enabled: false };\n }\n\n if (type === 'radialBar' && radialValueFormatter) {\n // ApexCharts treats a radialBar series value as a 0–100 percent and\n // renders it verbatim in the ring centre. When the displayed value is\n // NOT a percentage (e.g. a BMI), the consumer scales the series to a\n // percent for the arc and supplies `radialValueFormatter` to print the\n // real value in the centre. Without this, the gauge would read \"56%\"\n // for a BMI of 22.4 — misleading. Default behaviour is untouched.\n const basePlot = (base.plotOptions ?? {}) as NonNullable<\n ApexCharts.ApexOptions['plotOptions']\n >;\n options.plotOptions = {\n ...basePlot,\n radialBar: {\n ...(basePlot.radialBar ?? {}),\n dataLabels: {\n ...(basePlot.radialBar?.dataLabels ?? {}),\n value: {\n ...(basePlot.radialBar?.dataLabels?.value ?? {}),\n formatter: (val: number) => radialValueFormatter(Number(val)),\n },\n },\n },\n };\n }\n\n if (patterns) {\n options.fill = {\n type: 'pattern',\n opacity: type === 'area' ? 0.3 : 1,\n pattern: {\n style: [...PATTERN_STYLES],\n strokeWidth: 2,\n },\n };\n } else if (type === 'area') {\n options.fill = {\n type: 'gradient',\n opacity: 0.3,\n };\n }\n\n return options;\n }, [\n themeOptions,\n chartId,\n toolbar,\n reducedMotion,\n toolbarLocale,\n locale,\n labels,\n numberFormatter,\n t,\n type,\n categories,\n isRtl,\n patterns,\n radialValueFormatter,\n ]);\n\n /* ---- resolved dimensions --------------------------------------- */\n const resolvedWidth =\n width ?? (containerWidth > 0 ? containerWidth : '100%');\n const resolvedHeight = height ?? 320;\n\n /* ---- sr-only data table --------------------------------------- */\n const srTable = useMemo(() => {\n const columnLabels = isSliceType(type)\n ? (labels ?? [])\n : (categories ?? []);\n const rows = tableSeries;\n return (\n <table id={summaryId} className=\"ds:sr-only\">\n <caption>{title}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{t('chart.table.series')}</th>\n {columnLabels.map((col, i) => (\n <th key={`${col}-${i}`} scope=\"col\">\n {col}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIndex) => (\n <tr key={`${row.name}-${rowIndex}`}>\n <th scope=\"row\">{row.name || t('chart.table.value')}</th>\n {row.data.map((value, colIndex) => (\n <td key={`${rowIndex}-${colIndex}`}>\n {/* For a radialBar gauge the series is a synthetic arc\n percent — announce the consumer's display value (e.g.\n the real BMI) instead of the raw fill so AT users get\n the same figure sighted users see in the ring. */}\n {type === 'radialBar' && radialValueFormatter\n ? radialValueFormatter(value)\n : numberFormatter.format(value)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }, [\n type,\n tableSeries,\n labels,\n categories,\n summaryId,\n title,\n t,\n numberFormatter,\n radialValueFormatter,\n ]);\n\n /* ---- ApexCharts `series` prop shape ----------------------------- */\n const apexSeries = useMemo(() => {\n if (isSliceType(type)) {\n return series as number[];\n }\n return series as ChartSeries[];\n }, [series, type]);\n\n return (\n <div\n ref={wrapperRef}\n role=\"img\"\n aria-label={title}\n aria-describedby={summaryId}\n className={chartVariants({ density, className })}\n data-component=\"chart\"\n data-component-id={id}\n >\n {srTable}\n <ReactApexChart\n type={type}\n series={apexSeries as ApexCharts.ApexOptions['series']}\n options={chartOptions}\n width={resolvedWidth}\n height={resolvedHeight}\n aria-hidden=\"true\"\n />\n </div>\n );\n },\n);\n\nChart.displayName = 'Chart';\n\n/* ------------------------------------------------------------------ */\n/* Re-export internal helper for downstream theming (kept narrow). */\n/* ------------------------------------------------------------------ */\n\nexport { chartVariants };\n"],"names":["chartAgent","handle","args","chartVariants","cva","PATTERN_STYLES","CATEGORICAL_TYPES","SLICE_TYPES","isSliceType","type","isCategoricalType","normaliseSeries","series","Chart","forwardRef","title","id","categories","labels","height","width","patterns","toolbar","localeProp","radialValueFormatter","density","className","ref","t","i18n","useTranslation","rawId","useId","chartId","useMemo","summaryId","wrapperRef","useRef","containerWidth","setContainerWidth","useState","useNeutraliseHiddenFocus","locale","themeOptions","setThemeOptions","getApexChartsTheme","useEffect","timer","observer","el","ro","entries","entry","agentHandle","instance","ApexCharts","next","useImperativeHandle","useAgentRegistration","isRtl","tableSeries","numberFormatter","toolbarLocale","reducedMotion","usePrefersReducedMotion","chartOptions","base","options","value","basePlot","_a","_c","_b","val","resolvedWidth","resolvedHeight","srTable","columnLabels","rows","jsx","jsxs","col","i","row","rowIndex","colIndex","apexSeries","ReactApexChart"],"mappings":"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"}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
import { jsxs as d, jsx as a } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as C, useMemo as j, Fragment as g } from "react";
|
|
3
|
-
import { c as
|
|
3
|
+
import { c as v } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as T } from "react-i18next";
|
|
5
5
|
import { B as z } from "./button-DD_0Xdmr.js";
|
|
6
|
-
import { A
|
|
7
|
-
import { T as
|
|
8
|
-
import { s as
|
|
9
|
-
import {
|
|
10
|
-
import { C as
|
|
11
|
-
import { C as
|
|
12
|
-
import { C as
|
|
13
|
-
|
|
14
|
-
* @license lucide-react v1.8.0 - ISC
|
|
15
|
-
*
|
|
16
|
-
* This source code is licensed under the ISC license.
|
|
17
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
18
|
-
*/
|
|
19
|
-
const _ = [
|
|
20
|
-
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
21
|
-
["path", { d: "M3 3v5h5", key: "1xhq8a" }]
|
|
22
|
-
], B = F("rotate-ccw", _), D = h(
|
|
6
|
+
import { A } from "./avatar-BNQNhoyL.js";
|
|
7
|
+
import { T as F } from "./timestamp-BV2lC-wV.js";
|
|
8
|
+
import { s as I } from "./safe-image-src-DstKgCo7.js";
|
|
9
|
+
import { R as M } from "./rotate-ccw-BWANpitO.js";
|
|
10
|
+
import { C as S } from "./clock-21AGPWJ5.js";
|
|
11
|
+
import { C as V } from "./check-DPdL_Sm7.js";
|
|
12
|
+
import { C as B } from "./circle-alert-ChA9opNA.js";
|
|
13
|
+
const D = v(
|
|
23
14
|
"ds:flex ds:w-full ds:items-start ds:gap-[var(--spacing-sm)]",
|
|
24
15
|
{
|
|
25
16
|
variants: {
|
|
@@ -31,7 +22,7 @@ const _ = [
|
|
|
31
22
|
},
|
|
32
23
|
defaultVariants: { role: "assistant" }
|
|
33
24
|
}
|
|
34
|
-
), E =
|
|
25
|
+
), E = v(
|
|
35
26
|
[
|
|
36
27
|
// Cap at 42rem on wide surfaces; on narrow docks (Alia sidebar ≈22rem)
|
|
37
28
|
// leave room for the avatar column (size-8 = 32px = --spacing-xl) +
|
|
@@ -53,8 +44,8 @@ const _ = [
|
|
|
53
44
|
},
|
|
54
45
|
defaultVariants: { role: "assistant" }
|
|
55
46
|
}
|
|
56
|
-
),
|
|
57
|
-
function
|
|
47
|
+
), L = /^(https?:|mailto:)/i;
|
|
48
|
+
function R(t) {
|
|
58
49
|
const e = [];
|
|
59
50
|
let r = t;
|
|
60
51
|
const n = /\*\*([^*]+)\*\*|`([^`]+)`|\[([^\]]+)\]\(([^)]+)\)|\n/;
|
|
@@ -68,8 +59,8 @@ function $(t) {
|
|
|
68
59
|
}
|
|
69
60
|
return e;
|
|
70
61
|
}
|
|
71
|
-
function
|
|
72
|
-
return
|
|
62
|
+
function _(t) {
|
|
63
|
+
return R(t).map((e, r) => e.type === "bold" ? /* @__PURE__ */ a("strong", { children: e.value }, r) : e.type === "code" ? /* @__PURE__ */ a(
|
|
73
64
|
"code",
|
|
74
65
|
{
|
|
75
66
|
dir: "ltr",
|
|
@@ -77,7 +68,7 @@ function q(t) {
|
|
|
77
68
|
children: e.value
|
|
78
69
|
},
|
|
79
70
|
r
|
|
80
|
-
) : e.type === "br" ? /* @__PURE__ */ a("br", {}, r) : e.type === "link" ?
|
|
71
|
+
) : e.type === "br" ? /* @__PURE__ */ a("br", {}, r) : e.type === "link" ? L.test(e.href) ? /* @__PURE__ */ a(
|
|
81
72
|
"a",
|
|
82
73
|
{
|
|
83
74
|
href: e.href,
|
|
@@ -89,17 +80,17 @@ function q(t) {
|
|
|
89
80
|
r
|
|
90
81
|
) : /* @__PURE__ */ a(g, { children: e.label }, r) : /* @__PURE__ */ a(g, { children: e.value }, r));
|
|
91
82
|
}
|
|
92
|
-
const
|
|
83
|
+
const $ = C(
|
|
93
84
|
({
|
|
94
85
|
role: t,
|
|
95
86
|
content: e,
|
|
96
87
|
avatar: r,
|
|
97
88
|
timestamp: n,
|
|
98
89
|
status: s,
|
|
99
|
-
renderMarkdown:
|
|
90
|
+
renderMarkdown: h = !1,
|
|
100
91
|
onRetry: l,
|
|
101
|
-
className:
|
|
102
|
-
...
|
|
92
|
+
className: b,
|
|
93
|
+
...x
|
|
103
94
|
}, y) => {
|
|
104
95
|
const { t: i, i18n: m } = T(), o = j(() => {
|
|
105
96
|
if (!n) return null;
|
|
@@ -108,8 +99,8 @@ const H = C(
|
|
|
108
99
|
hour: "2-digit",
|
|
109
100
|
minute: "2-digit"
|
|
110
101
|
}).format(p);
|
|
111
|
-
}, [n, m.language]), c = i(`chat.message.role.${t}`), N = o ? i("chat.message.label", { role: c, time: o }) : i("chat.message.labelNoTime", { role: c }), w =
|
|
112
|
-
|
|
102
|
+
}, [n, m.language]), c = i(`chat.message.role.${t}`), N = o ? i("chat.message.label", { role: c, time: o }) : i("chat.message.labelNoTime", { role: c }), w = h ? _(e) : e, u = !s || s === "edited" ? null : s === "sending" ? /* @__PURE__ */ a(S, { "aria-hidden": "true", className: "ds:size-3.5" }) : s === "sent" ? /* @__PURE__ */ a(V, { "aria-hidden": "true", className: "ds:size-3.5" }) : /* @__PURE__ */ a(
|
|
103
|
+
B,
|
|
113
104
|
{
|
|
114
105
|
"aria-hidden": "true",
|
|
115
106
|
className: "ds:size-3.5 ds:text-[color:var(--destructive)]"
|
|
@@ -122,14 +113,14 @@ const H = C(
|
|
|
122
113
|
"aria-label": N,
|
|
123
114
|
"data-component": "chat-message",
|
|
124
115
|
className: [
|
|
125
|
-
D({ role: t, className:
|
|
116
|
+
D({ role: t, className: b }),
|
|
126
117
|
// Entrance: fade + slide up on mount. `--animation-duration` is 0ms
|
|
127
118
|
// under `prefers-reduced-motion` and `.theme-accessible`, so both
|
|
128
119
|
// collapse the animation to an instant state change automatically.
|
|
129
120
|
"ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-2",
|
|
130
121
|
"ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]"
|
|
131
122
|
].join(" "),
|
|
132
|
-
...
|
|
123
|
+
...x,
|
|
133
124
|
children: [
|
|
134
125
|
t !== "system" && r ? r.slot ? (
|
|
135
126
|
// Consumer-supplied avatar node (e.g. Alia's Sparkles tile).
|
|
@@ -139,10 +130,10 @@ const H = C(
|
|
|
139
130
|
// `javascript:` / `data:text/html` / `data:image/svg+xml` and so
|
|
140
131
|
// are scrubbed here before reaching <Avatar>. Fallback to initials.
|
|
141
132
|
/* @__PURE__ */ a(
|
|
142
|
-
|
|
133
|
+
A,
|
|
143
134
|
{
|
|
144
135
|
name: r.name,
|
|
145
|
-
src:
|
|
136
|
+
src: I(r.src),
|
|
146
137
|
size: "sm"
|
|
147
138
|
}
|
|
148
139
|
)
|
|
@@ -183,7 +174,7 @@ const H = C(
|
|
|
183
174
|
].join(" "),
|
|
184
175
|
children: [
|
|
185
176
|
n ? /* @__PURE__ */ a(
|
|
186
|
-
|
|
177
|
+
F,
|
|
187
178
|
{
|
|
188
179
|
value: n,
|
|
189
180
|
format: "absolute",
|
|
@@ -217,7 +208,7 @@ const H = C(
|
|
|
217
208
|
intent: "ghost",
|
|
218
209
|
size: "sm",
|
|
219
210
|
onClick: l,
|
|
220
|
-
startIcon: /* @__PURE__ */ a(
|
|
211
|
+
startIcon: /* @__PURE__ */ a(M, {}),
|
|
221
212
|
children: i("chat.message.retry")
|
|
222
213
|
}
|
|
223
214
|
) : null
|
|
@@ -232,8 +223,8 @@ const H = C(
|
|
|
232
223
|
);
|
|
233
224
|
}
|
|
234
225
|
);
|
|
235
|
-
|
|
226
|
+
$.displayName = "ChatMessage";
|
|
236
227
|
export {
|
|
237
|
-
|
|
228
|
+
$ as C
|
|
238
229
|
};
|
|
239
|
-
//# sourceMappingURL=chat-message-
|
|
230
|
+
//# sourceMappingURL=chat-message-ASgGtj-L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-ASgGtj-L.js","sources":["../../src/components/chat-message/chat-message.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { AlertCircle, Check, Clock, RotateCcw } from 'lucide-react';\nimport { Button } from '../button';\nimport { Avatar } from '../avatar';\nimport { Timestamp } from '../timestamp';\nimport { safeImageSrc } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type ChatMessageRole = 'user' | 'assistant' | 'system';\nexport type ChatMessageStatus = 'sending' | 'sent' | 'error' | 'edited';\n\nexport interface ChatMessageAvatar {\n name?: string;\n src?: string;\n /**\n * Optional custom avatar node. When provided, it REPLACES the built-in\n * `<Avatar>` (initials / image) for this message. Used by the Alia\n * pattern to render a Sparkles identity tile instead of an avatar, and\n * by consumers that want to swap in a user-icon chip, brand glyph, etc.\n * The caller is responsible for accessible labelling on the custom node\n * — ChatMessage's own `aria-label` already announces the role/time, so\n * purely decorative nodes can be `aria-hidden`.\n */\n slot?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n 'ds:flex ds:w-full ds:items-start ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n role: {\n user: 'ds:flex-row-reverse',\n assistant: 'ds:flex-row',\n system: 'ds:flex-col ds:items-center ds:text-center',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\nconst bubbleVariants = cva(\n [\n // Cap at 42rem on wide surfaces; on narrow docks (Alia sidebar ≈22rem)\n // leave room for the avatar column (size-8 = 32px = --spacing-xl) +\n // `gap-sm` (8px = --spacing-sm) so avatars don't clip off the inline\n // edge when the row is width-constrained.\n 'ds:relative ds:max-w-[min(42rem,calc(100%-var(--spacing-xl)-var(--spacing-sm)))]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'type-body',\n 'ds:break-words',\n ].join(' '),\n {\n variants: {\n role: {\n user: 'ds:bg-[color:var(--primary)] ds:text-[color:var(--primary-foreground)] ds:rounded-[var(--radius-md)] ds:rounded-ee-[var(--radius-sm)]',\n assistant:\n 'ds:bg-muted/40 ds:text-foreground ds:rounded-[var(--radius-md)] ds:rounded-es-[var(--radius-sm)]',\n system:\n 'ds:bg-transparent ds:text-[color:var(--muted-foreground)] type-body-sm ds:italic',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Safe markdown-ish (bold, inline code, line-breaks, links as text) */\n/* No dangerouslySetInnerHTML. */\n/* ------------------------------------------------------------------ */\n\ntype Token =\n | { type: 'text'; value: string }\n | { type: 'bold'; value: string }\n | { type: 'code'; value: string }\n | { type: 'br' }\n | { type: 'link'; label: string; href: string };\n\nconst SAFE_SCHEMES = /^(https?:|mailto:)/i;\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let remaining = input;\n const pattern = /\\*\\*([^*]+)\\*\\*|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)|\\n/;\n while (remaining.length > 0) {\n const match = pattern.exec(remaining);\n if (!match) {\n tokens.push({ type: 'text', value: remaining });\n break;\n }\n if (match.index > 0) {\n tokens.push({ type: 'text', value: remaining.slice(0, match.index) });\n }\n if (match[1] !== undefined) {\n tokens.push({ type: 'bold', value: match[1] });\n } else if (match[2] !== undefined) {\n tokens.push({ type: 'code', value: match[2] });\n } else if (match[3] !== undefined && match[4] !== undefined) {\n tokens.push({ type: 'link', label: match[3], href: match[4] });\n } else {\n tokens.push({ type: 'br' });\n }\n remaining = remaining.slice(match.index + match[0].length);\n }\n return tokens;\n}\n\nfunction renderBody(input: string): ReactNode {\n return tokenize(input).map((tok, i) => {\n if (tok.type === 'bold') return <strong key={i}>{tok.value}</strong>;\n if (tok.type === 'code') {\n return (\n <code\n key={i}\n dir=\"ltr\"\n className=\"ds:rounded-[var(--radius-sm)] ds:bg-muted/30 ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:font-[family-name:var(--font-mono)]\"\n >\n {tok.value}\n </code>\n );\n }\n if (tok.type === 'br') return <br key={i} />;\n if (tok.type === 'link') {\n if (!SAFE_SCHEMES.test(tok.href)) {\n // Unsafe scheme (javascript:, data:) — render as inert text.\n return <Fragment key={i}>{tok.label}</Fragment>;\n }\n return (\n <a\n key={i}\n href={tok.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"ds:underline ds:underline-offset-2 ds:hover:opacity-80\"\n >\n {tok.label}\n </a>\n );\n }\n return <Fragment key={i}>{tok.value}</Fragment>;\n });\n}\n\n/* ------------------------------------------------------------------ */\n/* ChatMessage */\n/* ------------------------------------------------------------------ */\n\ntype NativeProps = Omit<HTMLAttributes<HTMLElement>, 'content' | 'role'>;\n\nexport interface ChatMessageProps\n extends NativeProps, VariantProps<typeof bubbleVariants> {\n role: ChatMessageRole;\n content: string;\n avatar?: ChatMessageAvatar;\n timestamp?: Date | number | string;\n status?: ChatMessageStatus;\n /** Parse a small, safe subset of markdown. Never renders raw HTML. */\n renderMarkdown?: boolean;\n /** Invoked when the retry button is activated (error status only). */\n onRetry?: () => void;\n}\n\nexport const ChatMessage = forwardRef<HTMLElement, ChatMessageProps>(\n (\n {\n role,\n content,\n avatar,\n timestamp,\n status,\n renderMarkdown = false,\n onRetry,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n // Local format — used for the aria-label interpolation only. Visible\n // label is rendered by `<Timestamp>` below, which computes the same\n // locale-aware HH:MM internally.\n const formattedTime = useMemo(() => {\n if (!timestamp) return null;\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) return null;\n return new Intl.DateTimeFormat(i18n.language, {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n }, [timestamp, i18n.language]);\n\n const roleLabel = t(`chat.message.role.${role}`);\n const messageLabel = formattedTime\n ? t('chat.message.label', { role: roleLabel, time: formattedTime })\n : t('chat.message.labelNoTime', { role: roleLabel });\n\n const body = renderMarkdown ? renderBody(content) : content;\n\n const statusIcon = (() => {\n if (!status || status === 'edited') return null;\n if (status === 'sending')\n return <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n if (status === 'sent')\n return <Check aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n return (\n <AlertCircle\n aria-hidden=\"true\"\n className=\"ds:size-3.5 ds:text-[color:var(--destructive)]\"\n />\n );\n })();\n\n const statusText = status ? t(`chat.message.status.${status}`) : null;\n\n return (\n <article\n ref={ref}\n aria-label={messageLabel}\n data-component=\"chat-message\"\n className={[\n rowVariants({ role, className }),\n // Entrance: fade + slide up on mount. `--animation-duration` is 0ms\n // under `prefers-reduced-motion` and `.theme-accessible`, so both\n // collapse the animation to an instant state change automatically.\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-2',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n {...rest}\n >\n {role !== 'system' && avatar ? (\n avatar.slot ? (\n // Consumer-supplied avatar node (e.g. Alia's Sparkles tile).\n avatar.slot\n ) : (\n // Allow-list the src: LLM-supplied values can carry\n // `javascript:` / `data:text/html` / `data:image/svg+xml` and so\n // are scrubbed here before reaching <Avatar>. Fallback to initials.\n <Avatar\n name={avatar.name}\n src={safeImageSrc(avatar.src)}\n size=\"sm\"\n />\n )\n ) : null}\n\n <div\n className={[\n // min-w-0 allows this flex item to shrink below its content's\n // natural width — without it, a single unbreakable token (URL,\n // CJK run, hash) can force the bubble wider than the parent\n // and spill outside narrow containers like the Alia sidebar.\n 'ds:flex ds:flex-col ds:min-w-0',\n role === 'user'\n ? 'ds:items-end'\n : role === 'assistant'\n ? 'ds:items-start'\n : 'ds:items-center',\n ].join(' ')}\n >\n <div\n dir=\"auto\"\n className={[\n bubbleVariants({ role }),\n // `break-words` (from bubbleVariants) handles soft hyphens;\n // `overflow-wrap: anywhere` is the last-resort break for\n // URLs, hashes, or CJK runs that would otherwise push the\n // bubble wider than its parent in narrow docks like Alia.\n 'ds:[overflow-wrap:anywhere]',\n ].join(' ')}\n >\n {body}\n </div>\n\n {(formattedTime || statusText) && role !== 'system' ? (\n <div\n className={[\n 'ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-meta ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {timestamp ? (\n <Timestamp\n value={timestamp}\n format=\"absolute\"\n absoluteFormat={{ hour: '2-digit', minute: '2-digit' }}\n dir=\"ltr\"\n />\n ) : null}\n {statusIcon ? (\n // `key={status}` re-mounts the span on every status change so\n // `animate-in` re-runs — gives the sending → sent → error\n // swap a subtle cross-fade instead of an abrupt pop.\n <span\n key={status}\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n {statusIcon}\n <span className=\"ds:sr-only\">{statusText}</span>\n </span>\n ) : null}\n {status === 'error' && onRetry ? (\n <Button\n intent=\"ghost\"\n size=\"sm\"\n onClick={onRetry}\n startIcon={<RotateCcw />}\n >\n {t('chat.message.retry')}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </article>\n );\n },\n);\n\nChatMessage.displayName = 'ChatMessage';\n"],"names":["rowVariants","cva","bubbleVariants","SAFE_SCHEMES","tokenize","input","tokens","remaining","pattern","match","renderBody","tok","i","jsx","Fragment","ChatMessage","forwardRef","role","content","avatar","timestamp","status","renderMarkdown","onRetry","className","rest","ref","t","i18n","useTranslation","formattedTime","useMemo","date","roleLabel","messageLabel","body","statusIcon","Clock","Check","AlertCircle","statusText","jsxs","Avatar","safeImageSrc","Timestamp","Button","RotateCcw"],"mappings":"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"}
|