@alfadocs/ui-kit-debug 1.55.0 → 1.57.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/{ai-credits-notice-BoNJtOuE.js → ai-credits-notice-ktklr8fy.js} +2 -2
- package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js.map → ai-credits-notice-ktklr8fy.js.map} +1 -1
- package/dist/_chunks/ai-permission-notice-DyuEGwAt.js +206 -0
- package/dist/_chunks/ai-permission-notice-DyuEGwAt.js.map +1 -0
- package/dist/_chunks/alia-sidebar-BBKBJCv6.js +1284 -0
- package/dist/_chunks/alia-sidebar-BBKBJCv6.js.map +1 -0
- package/dist/_chunks/{anamnesis-summary-rows-Dtw5Hpg4.js → anamnesis-summary-rows-CCQ62mMN.js} +5 -5
- package/dist/_chunks/{anamnesis-summary-rows-Dtw5Hpg4.js.map → anamnesis-summary-rows-CCQ62mMN.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-BIZaDeCi.js → appointment-peek-WvNbE4JG.js} +2 -2
- package/dist/_chunks/{appointment-peek-BIZaDeCi.js.map → appointment-peek-WvNbE4JG.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-DmqYEIT9.js → appointment-timeline-Z0494xO-.js} +2 -2
- package/dist/_chunks/{appointment-timeline-DmqYEIT9.js.map → appointment-timeline-Z0494xO-.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-zP-iN-Pd.js → balance-badge-cell-CII3SDmR.js} +3 -3
- package/dist/_chunks/{balance-badge-cell-zP-iN-Pd.js.map → balance-badge-cell-CII3SDmR.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-DTZhRhXe.js → bmi-calculator-C0UTxB7R.js} +2 -2
- package/dist/_chunks/{bmi-calculator-DTZhRhXe.js.map → bmi-calculator-C0UTxB7R.js.map} +1 -1
- package/dist/_chunks/{booking-uZO10TLK.js → booking-81WnKDsH.js} +4 -4
- package/dist/_chunks/{booking-uZO10TLK.js.map → booking-81WnKDsH.js.map} +1 -1
- package/dist/_chunks/{breadcrumb-xgVpPH2H.js → breadcrumb-Boan-5n8.js} +39 -39
- package/dist/_chunks/breadcrumb-Boan-5n8.js.map +1 -0
- package/dist/_chunks/{calculator-dialog-BRjZMWuE.js → calculator-dialog-CzQv03p0.js} +2 -2
- package/dist/_chunks/{calculator-dialog-BRjZMWuE.js.map → calculator-dialog-CzQv03p0.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-DVajSkKA.js → calendar-workspace-D5-k_9zE.js} +15 -15
- package/dist/_chunks/{calendar-workspace-DVajSkKA.js.map → calendar-workspace-D5-k_9zE.js.map} +1 -1
- package/dist/_chunks/{care-plan-card-Ddjh5Doc.js → care-plan-card-DxrRLRdW.js} +2 -2
- package/dist/_chunks/{care-plan-card-Ddjh5Doc.js.map → care-plan-card-DxrRLRdW.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-BeMYMiI7.js → care-plan-header-BMwZIgHJ.js} +3 -3
- package/dist/_chunks/{care-plan-header-BeMYMiI7.js.map → care-plan-header-BMwZIgHJ.js.map} +1 -1
- package/dist/_chunks/chart-DQ5GxqgT.js +906 -0
- package/dist/_chunks/chart-DQ5GxqgT.js.map +1 -0
- package/dist/_chunks/{clinical-note-card-14JIoUR0.js → clinical-note-card-hx939bvw.js} +2 -2
- package/dist/_chunks/{clinical-note-card-14JIoUR0.js.map → clinical-note-card-hx939bvw.js.map} +1 -1
- package/dist/_chunks/{color-picker-BRQ4Y9SO.js → color-picker-BsggJovx.js} +128 -123
- package/dist/_chunks/color-picker-BsggJovx.js.map +1 -0
- package/dist/_chunks/{contact-card-CmK05vNb.js → contact-card-fHBMwEsx.js} +2 -2
- package/dist/_chunks/{contact-card-CmK05vNb.js.map → contact-card-fHBMwEsx.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-C5DbP_X3.js → contact-profile-card-CMyBYgRR.js} +3 -3
- package/dist/_chunks/{contact-profile-card-C5DbP_X3.js.map → contact-profile-card-CMyBYgRR.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js → cycle-calculator-Cww9DzIa.js} +2 -2
- package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js.map → cycle-calculator-Cww9DzIa.js.map} +1 -1
- package/dist/_chunks/dashboard-grid-DfEY2qci.js +844 -0
- package/dist/_chunks/dashboard-grid-DfEY2qci.js.map +1 -0
- package/dist/_chunks/{data-table-C6T31E33.js → data-table-fAMTeAjM.js} +2 -2
- package/dist/_chunks/{data-table-C6T31E33.js.map → data-table-fAMTeAjM.js.map} +1 -1
- package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js → data-table-tabs-CHYAAeHy.js} +2 -2
- package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js.map → data-table-tabs-CHYAAeHy.js.map} +1 -1
- package/dist/_chunks/{date-picker-wRAcq2lt.js → date-picker-BSZuKo13.js} +69 -62
- package/dist/_chunks/date-picker-BSZuKo13.js.map +1 -0
- package/dist/_chunks/{date-range-picker-BOvHwWO5.js → date-range-picker-CFk-5O3R.js} +188 -177
- package/dist/_chunks/date-range-picker-CFk-5O3R.js.map +1 -0
- package/dist/_chunks/{date-time-picker-CLeLKuv9.js → date-time-picker-CjxTkblD.js} +92 -85
- package/dist/_chunks/date-time-picker-CjxTkblD.js.map +1 -0
- package/dist/_chunks/{dependent-selector-Bet3XAFj.js → dependent-selector-DgaAQc-c.js} +91 -86
- package/dist/_chunks/dependent-selector-DgaAQc-c.js.map +1 -0
- package/dist/_chunks/{dialog-D52AI4nF.js → dialog-Dn-iQ0Jp.js} +86 -69
- package/dist/_chunks/dialog-Dn-iQ0Jp.js.map +1 -0
- package/dist/_chunks/{document-preview-uoTekVR7.js → document-preview-CHGGG0l_.js} +2 -2
- package/dist/_chunks/{document-preview-uoTekVR7.js.map → document-preview-CHGGG0l_.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-DXDJbUzo.js → due-date-calculator-D_qFUiHp.js} +3 -3
- package/dist/_chunks/{due-date-calculator-DXDJbUzo.js.map → due-date-calculator-D_qFUiHp.js.map} +1 -1
- package/dist/_chunks/{entity-summary-DcB0fIiv.js → entity-summary-CWcCSThK.js} +2 -2
- package/dist/_chunks/{entity-summary-DcB0fIiv.js.map → entity-summary-CWcCSThK.js.map} +1 -1
- package/dist/_chunks/{file-manager-dIJQUZvq.js → file-manager-CFsL1KVt.js} +4 -4
- package/dist/_chunks/{file-manager-dIJQUZvq.js.map → file-manager-CFsL1KVt.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-B6ojVXq7.js → freemium-paywall-DIKuhX8b.js} +90 -86
- package/dist/_chunks/freemium-paywall-DIKuhX8b.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-BfGpt3du.js → gestational-age-calculator-CZi43xKG.js} +3 -3
- package/dist/_chunks/{gestational-age-calculator-BfGpt3du.js.map → gestational-age-calculator-CZi43xKG.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js → hcg-doubling-Ccvh7OaU.js} +2 -2
- package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js.map → hcg-doubling-Ccvh7OaU.js.map} +1 -1
- package/dist/_chunks/{header-settings-ge_3gYEq.js → header-settings-BMcCx2LC.js} +2 -2
- package/dist/_chunks/{header-settings-ge_3gYEq.js.map → header-settings-BMcCx2LC.js.map} +1 -1
- package/dist/_chunks/{heatmap-BARGZZt2.js → heatmap-BEeOThkW.js} +2 -2
- package/dist/_chunks/{heatmap-BARGZZt2.js.map → heatmap-BEeOThkW.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-B7L3zGsE.js → help-me-write-templates-BUoYGo6f.js} +2 -2
- package/dist/_chunks/help-me-write-templates-BUoYGo6f.js.map +1 -0
- package/dist/_chunks/{hover-card-BnTueNS2.js → hover-card-U_ZYoh1n.js} +201 -187
- package/dist/_chunks/hover-card-U_ZYoh1n.js.map +1 -0
- package/dist/_chunks/{icon-picker-DWrqmI1c.js → icon-picker-C86lQTIA.js} +2 -2
- package/dist/_chunks/{icon-picker-DWrqmI1c.js.map → icon-picker-C86lQTIA.js.map} +1 -1
- package/dist/_chunks/{info-tip-B0jmIt6M.js → info-tip-CJpNpzZe.js} +2 -2
- package/dist/_chunks/{info-tip-B0jmIt6M.js.map → info-tip-CJpNpzZe.js.map} +1 -1
- package/dist/_chunks/{key-value-pair-Ax8IJr1M.js → key-value-pair-BNNITp6S.js} +25 -19
- package/dist/_chunks/key-value-pair-BNNITp6S.js.map +1 -0
- package/dist/_chunks/{kit-extensions-C9-v8Dih.js → kit-extensions-DYVxWcqv.js} +5 -5
- package/dist/_chunks/{kit-extensions-C9-v8Dih.js.map → kit-extensions-DYVxWcqv.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-DlBVPMTi.js → link-cell-renderer-CxW_oLa5.js} +2 -2
- package/dist/_chunks/{link-cell-renderer-DlBVPMTi.js.map → link-cell-renderer-CxW_oLa5.js.map} +1 -1
- package/dist/_chunks/link-gRw3NtOt.js +137 -0
- package/dist/_chunks/link-gRw3NtOt.js.map +1 -0
- package/dist/_chunks/{locale-picker-DfNSdOpy.js → locale-picker-BGfrZyTw.js} +2 -2
- package/dist/_chunks/{locale-picker-DfNSdOpy.js.map → locale-picker-BGfrZyTw.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-Dcx-JEjg.js → marketplace-app-shell-BZcA9Z06.js} +143 -129
- package/dist/_chunks/marketplace-app-shell-BZcA9Z06.js.map +1 -0
- package/dist/_chunks/{message-tray-BB95DA82.js → message-tray-QKQutwxj.js} +76 -69
- package/dist/_chunks/message-tray-QKQutwxj.js.map +1 -0
- package/dist/_chunks/{nav-grid-BqCPH8sm.js → nav-grid-Byx8PxuB.js} +2 -2
- package/dist/_chunks/{nav-grid-BqCPH8sm.js.map → nav-grid-Byx8PxuB.js.map} +1 -1
- package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js +89 -0
- package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js.map +1 -0
- package/dist/_chunks/{note-attachment-I1NLoeRZ.js → note-attachment-Bt2cddsZ.js} +2 -2
- package/dist/_chunks/{note-attachment-I1NLoeRZ.js.map → note-attachment-Bt2cddsZ.js.map} +1 -1
- package/dist/_chunks/{note-timeline-CsY8YOE7.js → note-timeline-CX9nAgAR.js} +2 -2
- package/dist/_chunks/{note-timeline-CsY8YOE7.js.map → note-timeline-CX9nAgAR.js.map} +1 -1
- package/dist/_chunks/{notes-panel-I8ntrrUW.js → notes-panel-Cm4pttpl.js} +4 -4
- package/dist/_chunks/{notes-panel-I8ntrrUW.js.map → notes-panel-Cm4pttpl.js.map} +1 -1
- package/dist/_chunks/{notification-tray-__sJXnsz.js → notification-tray-C5VtbGjd.js} +83 -76
- package/dist/_chunks/notification-tray-C5VtbGjd.js.map +1 -0
- package/dist/_chunks/{patient-details-DsTtjpuX.js → patient-details-99kEdtc5.js} +2 -2
- package/dist/_chunks/{patient-details-DsTtjpuX.js.map → patient-details-99kEdtc5.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-BvZ9luz-.js → patient-field-row-DkxY13T6.js} +5 -5
- package/dist/_chunks/{patient-field-row-BvZ9luz-.js.map → patient-field-row-DkxY13T6.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-3dspc2tR.js → patient-summary-card-opdyfeW2.js} +10 -6
- package/dist/_chunks/{patient-summary-card-3dspc2tR.js.map → patient-summary-card-opdyfeW2.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-DEUfM7EU.js → payment-automation-upsell-DiHovmUL.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-DEUfM7EU.js.map → payment-automation-upsell-DiHovmUL.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-DAGqh9Yx.js → payment-request-card-DAniJNLX.js} +3 -3
- package/dist/_chunks/{payment-request-card-DAGqh9Yx.js.map → payment-request-card-DAniJNLX.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-C3minW5b.js → pdf-viewer-CNQxa4tv.js} +396 -391
- package/dist/_chunks/pdf-viewer-CNQxa4tv.js.map +1 -0
- package/dist/_chunks/{periodontal-chart-BqwLxy2m.js → periodontal-chart-DD5C0M3l.js} +2 -2
- package/dist/_chunks/{periodontal-chart-BqwLxy2m.js.map → periodontal-chart-DD5C0M3l.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-card-CWZ1YM1h.js → periodontal-chart-card-CxdXvsPU.js} +2 -2
- package/dist/_chunks/{periodontal-chart-card-CWZ1YM1h.js.map → periodontal-chart-card-CxdXvsPU.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-C9IuvLId.js → periodontal-diagnosis-D-PJv7KS.js} +2 -2
- package/dist/_chunks/{periodontal-diagnosis-C9IuvLId.js.map → periodontal-diagnosis-D-PJv7KS.js.map} +1 -1
- package/dist/_chunks/{phone-input-DxkHMYmu.js → phone-input-O9camxkq.js} +156 -151
- package/dist/_chunks/phone-input-O9camxkq.js.map +1 -0
- package/dist/_chunks/popover-BG75rYjN.js +367 -0
- package/dist/_chunks/popover-BG75rYjN.js.map +1 -0
- package/dist/_chunks/{position-grid-D2D5_Tze.js → position-grid-CBB88EaH.js} +38 -36
- package/dist/_chunks/position-grid-CBB88EaH.js.map +1 -0
- package/dist/_chunks/{practice-results-DxOgbPDy.js → practice-results-CfRkjzsI.js} +2 -2
- package/dist/_chunks/{practice-results-DxOgbPDy.js.map → practice-results-CfRkjzsI.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-R3q5n1Wh.js → pregnancy-dating-BFzv9g1N.js} +3 -3
- package/dist/_chunks/{pregnancy-dating-R3q5n1Wh.js.map → pregnancy-dating-BFzv9g1N.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-DwmNklDU.js → pregnancy-weight-gain-CUUrBTBo.js} +2 -2
- package/dist/_chunks/{pregnancy-weight-gain-DwmNklDU.js.map → pregnancy-weight-gain-CUUrBTBo.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-BSSiGGG4.js → product-hub-panel-DlVRK7Ue.js} +103 -96
- package/dist/_chunks/product-hub-panel-DlVRK7Ue.js.map +1 -0
- package/dist/_chunks/{public-footer-CxpG6J1M.js → public-footer-ZWTEG1Rq.js} +2 -2
- package/dist/_chunks/{public-footer-CxpG6J1M.js.map → public-footer-ZWTEG1Rq.js.map} +1 -1
- package/dist/_chunks/{public-header.agent-BWusjxY8.js → public-header.agent-BctevbuY.js} +2 -2
- package/dist/_chunks/{public-header.agent-BWusjxY8.js.map → public-header.agent-BctevbuY.js.map} +1 -1
- package/dist/_chunks/{radio-group-BT97ty7o.js → radio-group-DicxWJXP.js} +111 -106
- package/dist/_chunks/radio-group-DicxWJXP.js.map +1 -0
- package/dist/_chunks/{radiograph-panel.agent-BA90I3Mu.js → radiograph-panel.agent-DyqbTECc.js} +4 -4
- package/dist/_chunks/{radiograph-panel.agent-BA90I3Mu.js.map → radiograph-panel.agent-DyqbTECc.js.map} +1 -1
- package/dist/_chunks/{registration-form-D7iNqMBF.js → registration-form-BlTzYywa.js} +2 -2
- package/dist/_chunks/{registration-form-D7iNqMBF.js.map → registration-form-BlTzYywa.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-Blp4smUr.js → rich-text-editor-DTnNZ4Ff.js} +489 -484
- package/dist/_chunks/rich-text-editor-DTnNZ4Ff.js.map +1 -0
- package/dist/_chunks/{sheet-CNFW8mYZ.js → sheet-8qsiMoUI.js} +95 -79
- package/dist/_chunks/sheet-8qsiMoUI.js.map +1 -0
- package/dist/_chunks/{sign-document-B6HlyCGV.js → sign-document-D4iHS_Ug.js} +2 -2
- package/dist/_chunks/{sign-document-B6HlyCGV.js.map → sign-document-D4iHS_Ug.js.map} +1 -1
- package/dist/_chunks/{signature-request-rgMsgo-C.js → signature-request-DRuYAG5I.js} +2 -2
- package/dist/_chunks/{signature-request-rgMsgo-C.js.map → signature-request-DRuYAG5I.js.map} +1 -1
- package/dist/_chunks/{signed-out-frame-B2GTIeqA.js → signed-out-frame-AhMsNW1r.js} +2 -2
- package/dist/_chunks/{signed-out-frame-B2GTIeqA.js.map → signed-out-frame-AhMsNW1r.js.map} +1 -1
- package/dist/_chunks/{stat-51CDL4au.js → stat-DmjGfXND.js} +117 -108
- package/dist/_chunks/stat-DmjGfXND.js.map +1 -0
- package/dist/_chunks/{stepper-accordion-D7lnBGh2.js → stepper-accordion-DDTSOUHc.js} +17 -6
- package/dist/_chunks/stepper-accordion-DDTSOUHc.js.map +1 -0
- package/dist/_chunks/{task-editor-Ctxsa1BY.js → task-editor-NkcopDna.js} +4 -4
- package/dist/_chunks/{task-editor-Ctxsa1BY.js.map → task-editor-NkcopDna.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-DinTrRIW.js → use-appointment-details-read-CfFQNOF_.js} +5 -5
- package/dist/_chunks/{use-appointment-details-read-DinTrRIW.js.map → use-appointment-details-read-CfFQNOF_.js.map} +1 -1
- package/dist/_chunks/use-select-on-arrow-Cr4iBuW5.js +26 -0
- package/dist/_chunks/use-select-on-arrow-Cr4iBuW5.js.map +1 -0
- package/dist/_chunks/{voice-control-panel-Bg1eklL0.js → voice-control-panel-BKbgb7FM.js} +2 -2
- package/dist/_chunks/{voice-control-panel-Bg1eklL0.js.map → voice-control-panel-BKbgb7FM.js.map} +1 -1
- package/dist/_chunks/{widget-picker-D8RiWrJd.js → widget-picker-rBA7MR5P.js} +2 -2
- package/dist/_chunks/{widget-picker-D8RiWrJd.js.map → widget-picker-rBA7MR5P.js.map} +1 -1
- package/dist/_chunks/{workflow-map-D3mezmGB.js → workflow-map-Demlpy39.js} +2 -2
- package/dist/_chunks/{workflow-map-D3mezmGB.js.map → workflow-map-Demlpy39.js.map} +1 -1
- package/dist/agent-catalog.json +28 -11
- package/dist/agent-i18n/en.json +8 -7
- package/dist/components/_shared/non-modal-tab-exit.d.ts +19 -0
- package/dist/components/_shared/non-modal-tab-exit.d.ts.map +1 -0
- package/dist/components/_shared/use-apex-chart-semantics.d.ts +6 -0
- package/dist/components/_shared/use-apex-chart-semantics.d.ts.map +1 -0
- package/dist/components/_shared/use-select-on-arrow.d.ts +20 -0
- package/dist/components/_shared/use-select-on-arrow.d.ts.map +1 -0
- package/dist/components/ai-credits-notice/index.js +1 -1
- package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +32 -0
- package/dist/components/ai-permission-notice/ai-permission-notice.d.ts.map +1 -1
- package/dist/components/ai-permission-notice/index.d.ts +1 -1
- package/dist/components/ai-permission-notice/index.d.ts.map +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-peek/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.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/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/chart/chart.d.ts +15 -10
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts +22 -0
- package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts.map +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts +48 -4
- package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +2 -2
- package/dist/components/data-table-tabs/index.js +1 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/dependent-selector/dependent-selector.d.ts.map +1 -1
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/dialog/dialog.d.ts +2 -2
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- 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/index.js +1 -1
- package/dist/components/heatmap/index.js +1 -1
- package/dist/components/hover-card/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card/index.js +1 -1
- package/dist/components/icon-picker/index.js +1 -1
- package/dist/components/info-tip/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/link/link.d.ts +5 -3
- package/dist/components/link/link.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts.map +1 -1
- package/dist/components/nav-grid/index.js +1 -1
- package/dist/components/note-timeline/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/periodontal-chart/index.js +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/periodontal-diagnosis/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.d.ts +1 -1
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/position-grid/index.js +1 -1
- package/dist/components/position-grid/position-grid.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/radio-group/index.js +1 -1
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sheet/sheet.d.ts +2 -2
- package/dist/components/sheet/sheet.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/stat/index.d.ts +1 -1
- package/dist/components/stat/index.d.ts.map +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/stat/stat.d.ts +9 -0
- package/dist/components/stat/stat.d.ts.map +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/widget-picker/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/host-legacy.css +13 -2
- package/dist/i18n/locales/ar.d.ts +17 -2
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +20 -5
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +17 -2
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +20 -5
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +17 -2
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +20 -5
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +17 -2
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +20 -5
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +17 -2
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +20 -5
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +17 -2
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +20 -5
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +17 -2
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +20 -5
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +17 -2
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +20 -5
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +17 -2
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +20 -5
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +17 -2
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +20 -5
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +17 -2
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +20 -5
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +17 -2
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +20 -5
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +17 -2
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +20 -5
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +17 -2
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +20 -5
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +17 -2
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +20 -5
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +17 -2
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +20 -5
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +17 -2
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +20 -5
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +17 -2
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +20 -5
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +207 -206
- package/dist/locales/ar.json +20 -5
- package/dist/locales/de.json +20 -5
- package/dist/locales/el.json +20 -5
- package/dist/locales/en.json +20 -5
- package/dist/locales/es.json +20 -5
- package/dist/locales/fr.json +20 -5
- package/dist/locales/hi.json +20 -5
- package/dist/locales/it.json +20 -5
- package/dist/locales/ja.json +20 -5
- package/dist/locales/nl.json +20 -5
- package/dist/locales/pl.json +20 -5
- package/dist/locales/pt.json +20 -5
- package/dist/locales/ro.json +20 -5
- package/dist/locales/ru.json +20 -5
- package/dist/locales/sq.json +20 -5
- package/dist/locales/sv.json +20 -5
- package/dist/locales/tr.json +20 -5
- package/dist/locales/zh.json +20 -5
- package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts +10 -13
- package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-popout.d.ts +5 -3
- package/dist/patterns/alia-assistant/alia-popout.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.d.ts +2 -0
- package/dist/patterns/alia-assistant/index.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.js +6 -5
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +2 -2
- package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts.map +1 -1
- package/dist/patterns/help-me-write-templates/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +7 -2
- package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/patterns/signed-out-frame/index.js +1 -1
- package/dist/tokens.css +13 -2
- package/package.json +1 -1
- package/dist/_chunks/ai-permission-notice-5vpblPCx.js +0 -171
- package/dist/_chunks/ai-permission-notice-5vpblPCx.js.map +0 -1
- package/dist/_chunks/alia-sidebar-DS0b54Mv.js +0 -1183
- package/dist/_chunks/alia-sidebar-DS0b54Mv.js.map +0 -1
- package/dist/_chunks/breadcrumb-xgVpPH2H.js.map +0 -1
- package/dist/_chunks/chart-C2RBJERE.js +0 -705
- package/dist/_chunks/chart-C2RBJERE.js.map +0 -1
- package/dist/_chunks/color-picker-BRQ4Y9SO.js.map +0 -1
- package/dist/_chunks/dashboard-grid-SAGoyCtL.js +0 -691
- package/dist/_chunks/dashboard-grid-SAGoyCtL.js.map +0 -1
- package/dist/_chunks/date-picker-wRAcq2lt.js.map +0 -1
- package/dist/_chunks/date-range-picker-BOvHwWO5.js.map +0 -1
- package/dist/_chunks/date-time-picker-CLeLKuv9.js.map +0 -1
- package/dist/_chunks/dependent-selector-Bet3XAFj.js.map +0 -1
- package/dist/_chunks/dialog-D52AI4nF.js.map +0 -1
- package/dist/_chunks/freemium-paywall-B6ojVXq7.js.map +0 -1
- package/dist/_chunks/help-me-write-templates-B7L3zGsE.js.map +0 -1
- package/dist/_chunks/hover-card-BnTueNS2.js.map +0 -1
- package/dist/_chunks/key-value-pair-Ax8IJr1M.js.map +0 -1
- package/dist/_chunks/link-2HokYuIi.js +0 -130
- package/dist/_chunks/link-2HokYuIi.js.map +0 -1
- package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js.map +0 -1
- package/dist/_chunks/message-tray-BB95DA82.js.map +0 -1
- package/dist/_chunks/notification-tray-__sJXnsz.js.map +0 -1
- package/dist/_chunks/pdf-viewer-C3minW5b.js.map +0 -1
- package/dist/_chunks/phone-input-DxkHMYmu.js.map +0 -1
- package/dist/_chunks/popover-BI3oV3eY.js +0 -305
- package/dist/_chunks/popover-BI3oV3eY.js.map +0 -1
- package/dist/_chunks/position-grid-D2D5_Tze.js.map +0 -1
- package/dist/_chunks/product-hub-panel-BSSiGGG4.js.map +0 -1
- package/dist/_chunks/radio-group-BT97ty7o.js.map +0 -1
- package/dist/_chunks/rich-text-editor-Blp4smUr.js.map +0 -1
- package/dist/_chunks/sheet-CNFW8mYZ.js.map +0 -1
- package/dist/_chunks/stat-51CDL4au.js.map +0 -1
- package/dist/_chunks/stepper-accordion-D7lnBGh2.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { jsxs as d, jsx as e, Fragment as v } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as y } from "react";
|
|
3
3
|
import { c as H } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { A as S } from "./app-frame-B-0O9CrU.js";
|
|
5
|
-
import { P as x } from "./public-footer-
|
|
5
|
+
import { P as x } from "./public-footer-ZWTEG1Rq.js";
|
|
6
6
|
import { useTranslation as b } from "react-i18next";
|
|
7
7
|
import { B as u } from "./button-Bn16lcFM.js";
|
|
8
8
|
import { H as N, g as O, f as F, a as z, d as B } from "./header-B9552pLh.js";
|
|
@@ -168,4 +168,4 @@ export {
|
|
|
168
168
|
V as S,
|
|
169
169
|
w as a
|
|
170
170
|
};
|
|
171
|
-
//# sourceMappingURL=signed-out-frame-
|
|
171
|
+
//# sourceMappingURL=signed-out-frame-AhMsNW1r.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signed-out-frame-B2GTIeqA.js","sources":["../../src/patterns/signed-out-frame/signed-out-header.tsx","../../src/patterns/signed-out-frame/signed-out-frame.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* SignedOutHeader — the app's Header as a visitor sees it before */\n/* sign-in: the brand, the skip link and the way to the other */\n/* signed-out pages. No search, inbox or account menu. */\n/* */\n/* A link shows only when the host gives its address. On the login page */\n/* that is the two ways to register; on a registration page it is the */\n/* way back to the login. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { LogIn, Stethoscope, User } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '../../components/button';\nimport {\n Header,\n HeaderBrand,\n HeaderEnd,\n HeaderSkipLink,\n HeaderStart,\n} from '../../components/header';\nimport { Logo } from '../../components/logo';\nimport { isSafeHref } from '../../components/_shared/safe-href';\n\nexport interface SignedOutHeaderProps {\n /** Where the brand leads. Default `/`. */\n homeHref?: string;\n /** The id of the `<main>` the skip link lands on. Default\n * `main-content`, `AppFrame`'s own default. */\n mainId?: string;\n /**\n * Adds \"Sign in\". For a registration page. A path on the same site, or\n * an address written in full (`https://…`); anything else shows no\n * link. The same rule holds for the two addresses below.\n */\n loginHref?: string;\n /** Adds \"Register as a doctor\". For the login page. */\n registerDoctorHref?: string;\n /** Adds \"Register as a patient\". For the login page. */\n registerPatientHref?: string;\n}\n\n// The header's buttons are the header turned inside out: the bar's ink as\n// the fill, the bar's own colour (`--header-brand-surface`) as the text.\n// Light: white with violet text (4.75:1). Dark: the bar is the page's navy,\n// so the text is navy too; fuchsia on the cream fill would be 2.75:1.\n//\n// Hover tints the fill with the bar. In the light theme that alone would\n// drop the violet text to 4.07:1, so the text deepens with it (4.76:1):\n// `--header-brand-surface-hover` is --primary-hover in light and stays the\n// navy in dark. The buttons carry no `--secondary-border` edge: the fill is\n// already the bar's ink.\n//\n// A small button is 32px tall from `sm` up and drops its wider hit box\n// there. These keep the hit box at every width: the bar is 64px tall, and\n// a tablet is touched as much as a phone.\nconst linksVariants = cva(\n 'ds:items-center ds:gap-[var(--spacing-sm)] ds:[--secondary:var(--header-foreground)] ds:[--secondary-hover:color-mix(in_srgb,var(--header-foreground)_88%,transparent)] ds:[--secondary-border:transparent] ds:[--secondary-foreground:var(--header-brand-surface,var(--primary))] ds:[&_a:hover]:[--secondary-foreground:var(--header-brand-surface-hover,var(--primary-hover))] ds:[&_a]:sm:before:block',\n {\n variants: {\n /** Labelled buttons from `md` up; icons only below it. */\n show: {\n wide: 'ds:hidden ds:md:inline-flex',\n narrow: 'ds:inline-flex ds:md:hidden',\n always: 'ds:inline-flex',\n },\n },\n defaultVariants: { show: 'always' },\n },\n);\n\n/** An address a link may use, or nothing. */\nconst linkTo = (href: string | undefined): string | undefined =>\n href && isSafeHref(href) ? href : undefined;\n\ninterface RegisterLinksProps {\n doctorHref: string | undefined;\n patientHref: string | undefined;\n hideLabel?: boolean;\n}\n\n/** The ways to open an account. Links, not buttons: each goes to its own\n * registration page. */\nfunction RegisterLinks({\n doctorHref,\n patientHref,\n hideLabel = false,\n}: RegisterLinksProps) {\n const { t } = useTranslation('ui');\n return (\n <>\n {doctorHref && (\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<Stethoscope />}\n hideLabel={hideLabel}\n >\n <a href={doctorHref} data-action=\"register-doctor\">\n {t('signedOutHeader.registerDoctor')}\n </a>\n </Button>\n )}\n {patientHref && (\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<User />}\n hideLabel={hideLabel}\n >\n <a href={patientHref} data-action=\"register-patient\">\n {t('signedOutHeader.registerPatient')}\n </a>\n </Button>\n )}\n </>\n );\n}\n\n/**\n * The signed-out header. `SignedOutFrame` renders it; use it on its own\n * only with a frame of your own.\n */\nexport const SignedOutHeader = forwardRef<HTMLElement, SignedOutHeaderProps>(\n (\n {\n homeHref = '/',\n mainId = 'main-content',\n loginHref,\n registerDoctorHref,\n registerPatientHref,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const loginLink = linkTo(loginHref);\n const doctorLink = linkTo(registerDoctorHref);\n const patientLink = linkTo(registerPatientHref);\n const hasRegister = Boolean(doctorLink || patientLink);\n\n return (\n <Header ref={ref}>\n <HeaderStart>\n <HeaderSkipLink href={`#${mainId}`} />\n <HeaderBrand\n href={linkTo(homeHref) ?? '/'}\n logo={<Logo variant=\"monochrome\" size=\"md\" decorative />}\n aria-label={t('publicHeader.homeLabel')}\n />\n </HeaderStart>\n {(loginLink || hasRegister) && (\n <HeaderEnd>\n {/* One short label: it keeps its text on a phone. */}\n {loginLink && (\n <div className={linksVariants()}>\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<LogIn />}\n >\n <a href={loginLink} data-action=\"login\">\n {t('signedOutHeader.login')}\n </a>\n </Button>\n </div>\n )}\n {/* Two labelled buttons and the brand do not fit a phone, so\n below `md` each folds to its icon and keeps its name for a\n screen reader. */}\n {hasRegister && (\n <>\n <div className={linksVariants({ show: 'wide' })}>\n <RegisterLinks\n doctorHref={doctorLink}\n patientHref={patientLink}\n />\n </div>\n <div className={linksVariants({ show: 'narrow' })}>\n <RegisterLinks\n doctorHref={doctorLink}\n patientHref={patientLink}\n hideLabel\n />\n </div>\n </>\n )}\n </HeaderEnd>\n )}\n </Header>\n );\n },\n);\nSignedOutHeader.displayName = 'SignedOutHeader';\n","/* -------------------------------------------------------------------- */\n/* SignedOutFrame — the app frame as a visitor sees it before sign-in. */\n/* */\n/* The signed-out header on top, no sidebar, the page's content centred */\n/* on the app's canvas, and the minimal footer with the privacy policy */\n/* and the terms. The login, forgot-password and registration pages */\n/* wear it, so they read as one family. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { AppFrame } from '../../components/app-frame';\nimport {\n PublicFooter,\n type LegalUrlOverrides,\n} from '../../components/public-footer';\nimport {\n SignedOutHeader,\n type SignedOutHeaderProps,\n} from './signed-out-header';\n\nexport interface SignedOutFrameProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>,\n SignedOutHeaderProps {\n /** The page: a card such as `LoginForm`, centred in `<main>`. */\n children: ReactNode;\n /** Shows the footer with the privacy policy and the terms. Default\n * true. */\n showFooter?: boolean;\n /**\n * Adds the footer's copyright line: the year, the company's registered\n * name and its VAT number. Default false.\n */\n showCopyright?: boolean;\n /** The site the footer's legal links lead to. Default: the footer's\n * own, `https://www.alfadocs.com`. */\n marketingBaseUrl?: string;\n /** The footer's legal links, per language, where they differ from its\n * defaults. */\n legalUrlOverrides?: LegalUrlOverrides;\n}\n\n// The wrapper is only a marker: the frame inside it is the box. It has\n// no box of its own (`display: contents`), so a `className` that sizes or\n// spaces it does nothing, and a ref to it measures nothing.\nconst signedOutFrameVariants = cva('ds:contents');\n\n/**\n * The signed-out app frame. It is one viewport tall: the header and the\n * footer stay put and the content scrolls between them.\n */\nexport const SignedOutFrame = forwardRef<HTMLDivElement, SignedOutFrameProps>(\n (\n {\n children,\n homeHref,\n mainId = 'main-content',\n loginHref,\n registerDoctorHref,\n registerPatientHref,\n showFooter = true,\n showCopyright = false,\n marketingBaseUrl,\n legalUrlOverrides,\n className,\n ...rest\n },\n ref,\n ) => (\n <div\n ref={ref}\n {...rest}\n data-component=\"signed-out-frame\"\n className={signedOutFrameVariants({ className })}\n >\n {/* `<main>` is a size container, so the content can be exactly as\n tall as the space between the header and the footer (`100cqh`)\n and centre in it, whatever height the footer wraps to on a\n phone. */}\n <AppFrame\n header={\n <SignedOutHeader\n homeHref={homeHref}\n mainId={mainId}\n loginHref={loginHref}\n registerDoctorHref={registerDoctorHref}\n registerPatientHref={registerPatientHref}\n />\n }\n sidebar={null}\n footer={\n showFooter ? (\n <PublicFooter\n variant=\"minimal\"\n showCopyright={showCopyright}\n marketingBaseUrl={marketingBaseUrl}\n legalUrlOverrides={legalUrlOverrides}\n />\n ) : undefined\n }\n mainId={mainId}\n padded={false}\n mainClassName=\"ds:bg-[color:var(--app-shell-background)] ds:[container-type:size]\"\n >\n <div className=\"ds:flex ds:min-h-[100cqh] ds:w-full ds:items-center ds:justify-center ds:p-0 ds:sm:p-[var(--spacing-lg)]\">\n {children}\n </div>\n </AppFrame>\n </div>\n ),\n);\nSignedOutFrame.displayName = 'SignedOutFrame';\n"],"names":["linksVariants","cva","linkTo","href","isSafeHref","RegisterLinks","doctorHref","patientHref","hideLabel","t","useTranslation","jsxs","Fragment","jsx","Button","Stethoscope","User","SignedOutHeader","forwardRef","homeHref","mainId","loginHref","registerDoctorHref","registerPatientHref","ref","loginLink","doctorLink","patientLink","hasRegister","Header","HeaderStart","HeaderSkipLink","HeaderBrand","Logo","HeaderEnd","LogIn","signedOutFrameVariants","SignedOutFrame","children","showFooter","showCopyright","marketingBaseUrl","legalUrlOverrides","className","rest","AppFrame","PublicFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signed-out-frame-AhMsNW1r.js","sources":["../../src/patterns/signed-out-frame/signed-out-header.tsx","../../src/patterns/signed-out-frame/signed-out-frame.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* SignedOutHeader — the app's Header as a visitor sees it before */\n/* sign-in: the brand, the skip link and the way to the other */\n/* signed-out pages. No search, inbox or account menu. */\n/* */\n/* A link shows only when the host gives its address. On the login page */\n/* that is the two ways to register; on a registration page it is the */\n/* way back to the login. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { LogIn, Stethoscope, User } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '../../components/button';\nimport {\n Header,\n HeaderBrand,\n HeaderEnd,\n HeaderSkipLink,\n HeaderStart,\n} from '../../components/header';\nimport { Logo } from '../../components/logo';\nimport { isSafeHref } from '../../components/_shared/safe-href';\n\nexport interface SignedOutHeaderProps {\n /** Where the brand leads. Default `/`. */\n homeHref?: string;\n /** The id of the `<main>` the skip link lands on. Default\n * `main-content`, `AppFrame`'s own default. */\n mainId?: string;\n /**\n * Adds \"Sign in\". For a registration page. A path on the same site, or\n * an address written in full (`https://…`); anything else shows no\n * link. The same rule holds for the two addresses below.\n */\n loginHref?: string;\n /** Adds \"Register as a doctor\". For the login page. */\n registerDoctorHref?: string;\n /** Adds \"Register as a patient\". For the login page. */\n registerPatientHref?: string;\n}\n\n// The header's buttons are the header turned inside out: the bar's ink as\n// the fill, the bar's own colour (`--header-brand-surface`) as the text.\n// Light: white with violet text (4.75:1). Dark: the bar is the page's navy,\n// so the text is navy too; fuchsia on the cream fill would be 2.75:1.\n//\n// Hover tints the fill with the bar. In the light theme that alone would\n// drop the violet text to 4.07:1, so the text deepens with it (4.76:1):\n// `--header-brand-surface-hover` is --primary-hover in light and stays the\n// navy in dark. The buttons carry no `--secondary-border` edge: the fill is\n// already the bar's ink.\n//\n// A small button is 32px tall from `sm` up and drops its wider hit box\n// there. These keep the hit box at every width: the bar is 64px tall, and\n// a tablet is touched as much as a phone.\nconst linksVariants = cva(\n 'ds:items-center ds:gap-[var(--spacing-sm)] ds:[--secondary:var(--header-foreground)] ds:[--secondary-hover:color-mix(in_srgb,var(--header-foreground)_88%,transparent)] ds:[--secondary-border:transparent] ds:[--secondary-foreground:var(--header-brand-surface,var(--primary))] ds:[&_a:hover]:[--secondary-foreground:var(--header-brand-surface-hover,var(--primary-hover))] ds:[&_a]:sm:before:block',\n {\n variants: {\n /** Labelled buttons from `md` up; icons only below it. */\n show: {\n wide: 'ds:hidden ds:md:inline-flex',\n narrow: 'ds:inline-flex ds:md:hidden',\n always: 'ds:inline-flex',\n },\n },\n defaultVariants: { show: 'always' },\n },\n);\n\n/** An address a link may use, or nothing. */\nconst linkTo = (href: string | undefined): string | undefined =>\n href && isSafeHref(href) ? href : undefined;\n\ninterface RegisterLinksProps {\n doctorHref: string | undefined;\n patientHref: string | undefined;\n hideLabel?: boolean;\n}\n\n/** The ways to open an account. Links, not buttons: each goes to its own\n * registration page. */\nfunction RegisterLinks({\n doctorHref,\n patientHref,\n hideLabel = false,\n}: RegisterLinksProps) {\n const { t } = useTranslation('ui');\n return (\n <>\n {doctorHref && (\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<Stethoscope />}\n hideLabel={hideLabel}\n >\n <a href={doctorHref} data-action=\"register-doctor\">\n {t('signedOutHeader.registerDoctor')}\n </a>\n </Button>\n )}\n {patientHref && (\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<User />}\n hideLabel={hideLabel}\n >\n <a href={patientHref} data-action=\"register-patient\">\n {t('signedOutHeader.registerPatient')}\n </a>\n </Button>\n )}\n </>\n );\n}\n\n/**\n * The signed-out header. `SignedOutFrame` renders it; use it on its own\n * only with a frame of your own.\n */\nexport const SignedOutHeader = forwardRef<HTMLElement, SignedOutHeaderProps>(\n (\n {\n homeHref = '/',\n mainId = 'main-content',\n loginHref,\n registerDoctorHref,\n registerPatientHref,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const loginLink = linkTo(loginHref);\n const doctorLink = linkTo(registerDoctorHref);\n const patientLink = linkTo(registerPatientHref);\n const hasRegister = Boolean(doctorLink || patientLink);\n\n return (\n <Header ref={ref}>\n <HeaderStart>\n <HeaderSkipLink href={`#${mainId}`} />\n <HeaderBrand\n href={linkTo(homeHref) ?? '/'}\n logo={<Logo variant=\"monochrome\" size=\"md\" decorative />}\n aria-label={t('publicHeader.homeLabel')}\n />\n </HeaderStart>\n {(loginLink || hasRegister) && (\n <HeaderEnd>\n {/* One short label: it keeps its text on a phone. */}\n {loginLink && (\n <div className={linksVariants()}>\n <Button\n asChild\n intent=\"secondary\"\n size=\"sm\"\n startIcon={<LogIn />}\n >\n <a href={loginLink} data-action=\"login\">\n {t('signedOutHeader.login')}\n </a>\n </Button>\n </div>\n )}\n {/* Two labelled buttons and the brand do not fit a phone, so\n below `md` each folds to its icon and keeps its name for a\n screen reader. */}\n {hasRegister && (\n <>\n <div className={linksVariants({ show: 'wide' })}>\n <RegisterLinks\n doctorHref={doctorLink}\n patientHref={patientLink}\n />\n </div>\n <div className={linksVariants({ show: 'narrow' })}>\n <RegisterLinks\n doctorHref={doctorLink}\n patientHref={patientLink}\n hideLabel\n />\n </div>\n </>\n )}\n </HeaderEnd>\n )}\n </Header>\n );\n },\n);\nSignedOutHeader.displayName = 'SignedOutHeader';\n","/* -------------------------------------------------------------------- */\n/* SignedOutFrame — the app frame as a visitor sees it before sign-in. */\n/* */\n/* The signed-out header on top, no sidebar, the page's content centred */\n/* on the app's canvas, and the minimal footer with the privacy policy */\n/* and the terms. The login, forgot-password and registration pages */\n/* wear it, so they read as one family. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { AppFrame } from '../../components/app-frame';\nimport {\n PublicFooter,\n type LegalUrlOverrides,\n} from '../../components/public-footer';\nimport {\n SignedOutHeader,\n type SignedOutHeaderProps,\n} from './signed-out-header';\n\nexport interface SignedOutFrameProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>,\n SignedOutHeaderProps {\n /** The page: a card such as `LoginForm`, centred in `<main>`. */\n children: ReactNode;\n /** Shows the footer with the privacy policy and the terms. Default\n * true. */\n showFooter?: boolean;\n /**\n * Adds the footer's copyright line: the year, the company's registered\n * name and its VAT number. Default false.\n */\n showCopyright?: boolean;\n /** The site the footer's legal links lead to. Default: the footer's\n * own, `https://www.alfadocs.com`. */\n marketingBaseUrl?: string;\n /** The footer's legal links, per language, where they differ from its\n * defaults. */\n legalUrlOverrides?: LegalUrlOverrides;\n}\n\n// The wrapper is only a marker: the frame inside it is the box. It has\n// no box of its own (`display: contents`), so a `className` that sizes or\n// spaces it does nothing, and a ref to it measures nothing.\nconst signedOutFrameVariants = cva('ds:contents');\n\n/**\n * The signed-out app frame. It is one viewport tall: the header and the\n * footer stay put and the content scrolls between them.\n */\nexport const SignedOutFrame = forwardRef<HTMLDivElement, SignedOutFrameProps>(\n (\n {\n children,\n homeHref,\n mainId = 'main-content',\n loginHref,\n registerDoctorHref,\n registerPatientHref,\n showFooter = true,\n showCopyright = false,\n marketingBaseUrl,\n legalUrlOverrides,\n className,\n ...rest\n },\n ref,\n ) => (\n <div\n ref={ref}\n {...rest}\n data-component=\"signed-out-frame\"\n className={signedOutFrameVariants({ className })}\n >\n {/* `<main>` is a size container, so the content can be exactly as\n tall as the space between the header and the footer (`100cqh`)\n and centre in it, whatever height the footer wraps to on a\n phone. */}\n <AppFrame\n header={\n <SignedOutHeader\n homeHref={homeHref}\n mainId={mainId}\n loginHref={loginHref}\n registerDoctorHref={registerDoctorHref}\n registerPatientHref={registerPatientHref}\n />\n }\n sidebar={null}\n footer={\n showFooter ? (\n <PublicFooter\n variant=\"minimal\"\n showCopyright={showCopyright}\n marketingBaseUrl={marketingBaseUrl}\n legalUrlOverrides={legalUrlOverrides}\n />\n ) : undefined\n }\n mainId={mainId}\n padded={false}\n mainClassName=\"ds:bg-[color:var(--app-shell-background)] ds:[container-type:size]\"\n >\n <div className=\"ds:flex ds:min-h-[100cqh] ds:w-full ds:items-center ds:justify-center ds:p-0 ds:sm:p-[var(--spacing-lg)]\">\n {children}\n </div>\n </AppFrame>\n </div>\n ),\n);\nSignedOutFrame.displayName = 'SignedOutFrame';\n"],"names":["linksVariants","cva","linkTo","href","isSafeHref","RegisterLinks","doctorHref","patientHref","hideLabel","t","useTranslation","jsxs","Fragment","jsx","Button","Stethoscope","User","SignedOutHeader","forwardRef","homeHref","mainId","loginHref","registerDoctorHref","registerPatientHref","ref","loginLink","doctorLink","patientLink","hasRegister","Header","HeaderStart","HeaderSkipLink","HeaderBrand","Logo","HeaderEnd","LogIn","signedOutFrameVariants","SignedOutFrame","children","showFooter","showCopyright","marketingBaseUrl","legalUrlOverrides","className","rest","AppFrame","PublicFooter"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
1
|
+
import { jsxs as b, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Z, useId as tt, useCallback as O, useRef as et, useMemo as rt } from "react";
|
|
3
3
|
import { c as V } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as B } from "react-i18next";
|
|
5
|
-
import { u as
|
|
5
|
+
import { u as st } from "./use-count-up-BLLetaZ8.js";
|
|
6
6
|
const P = V("ds:flex ds:flex-col ds:h-full", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
@@ -106,180 +106,188 @@ const P = V("ds:flex ds:flex-col ds:h-full", {
|
|
|
106
106
|
variant: "default",
|
|
107
107
|
intent: "foreground"
|
|
108
108
|
}
|
|
109
|
-
}),
|
|
109
|
+
}), at = V(
|
|
110
110
|
"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-label",
|
|
111
111
|
{
|
|
112
112
|
variants: {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
// Whether the change is good news, not which way it went: with
|
|
114
|
+
// `trendPolarity="lower-is-better"` a fall is `better`.
|
|
115
|
+
tone: {
|
|
116
|
+
better: "ds:text-[var(--success)]",
|
|
117
|
+
worse: "ds:text-[var(--destructive)]",
|
|
118
|
+
neutral: "ds:text-[var(--muted-foreground)]"
|
|
117
119
|
}
|
|
118
120
|
},
|
|
119
121
|
defaultVariants: {
|
|
120
|
-
|
|
122
|
+
tone: "neutral"
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
|
-
),
|
|
125
|
+
), nt = { up: "↑", down: "↓", flat: "→" }, it = {
|
|
124
126
|
up: "stat.trend.up",
|
|
125
127
|
down: "stat.trend.down",
|
|
126
128
|
flat: "stat.trend.flat"
|
|
127
129
|
};
|
|
128
|
-
function
|
|
129
|
-
trend:
|
|
130
|
+
function dt({
|
|
131
|
+
trend: a,
|
|
130
132
|
delta: t,
|
|
131
|
-
deltaFormat:
|
|
132
|
-
locale:
|
|
133
|
+
deltaFormat: u = "decimal",
|
|
134
|
+
locale: n,
|
|
135
|
+
polarity: e = "higher-is-better"
|
|
133
136
|
}) {
|
|
134
|
-
const { t:
|
|
135
|
-
style:
|
|
136
|
-
}).format(
|
|
137
|
-
return /* @__PURE__ */
|
|
138
|
-
/* @__PURE__ */
|
|
139
|
-
/* @__PURE__ */
|
|
140
|
-
|
|
137
|
+
const { t: i, i18n: m } = B("ui"), d = typeof t == "string" ? t : new Intl.NumberFormat(n ?? m.language, {
|
|
138
|
+
style: u === "percent" ? "percent" : "decimal"
|
|
139
|
+
}).format(u === "percent" ? t / 100 : t), r = a === "flat" ? "neutral" : a === "up" == (e === "higher-is-better") ? "better" : "worse";
|
|
140
|
+
return /* @__PURE__ */ b("span", { className: at({ tone: r }), "data-trend-tone": r, children: [
|
|
141
|
+
/* @__PURE__ */ l("span", { "aria-hidden": "true", children: nt[a] }),
|
|
142
|
+
/* @__PURE__ */ l("span", { className: "ds:sr-only", children: i(it[a]) }),
|
|
143
|
+
d,
|
|
144
|
+
r === "neutral" ? null : /* @__PURE__ */ b("span", { className: "ds:sr-only", children: [
|
|
145
|
+
" ",
|
|
146
|
+
i(r === "better" ? "stat.trend.better" : "stat.trend.worse")
|
|
147
|
+
] })
|
|
141
148
|
] });
|
|
142
149
|
}
|
|
143
|
-
function
|
|
144
|
-
const
|
|
145
|
-
if (
|
|
146
|
-
let
|
|
147
|
-
e.startsWith("+") ? (
|
|
148
|
-
let
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
let
|
|
150
|
+
function ot(a, t) {
|
|
151
|
+
const u = a.trim();
|
|
152
|
+
if (u === "") return null;
|
|
153
|
+
let n = "", e = u;
|
|
154
|
+
e.startsWith("+") ? (n = "+", e = e.slice(1).trimStart()) : (e.startsWith("-") || e.startsWith("−")) && (n = "-", e = e.slice(1).trimStart());
|
|
155
|
+
let i = "";
|
|
156
|
+
const m = e.match(/[KMB]$/i);
|
|
157
|
+
m && (i = m[0], e = e.slice(0, -1).trimEnd());
|
|
158
|
+
let d = "", r = ".";
|
|
152
159
|
try {
|
|
153
|
-
const
|
|
154
|
-
for (const
|
|
155
|
-
|
|
160
|
+
const h = new Intl.NumberFormat(t).formatToParts(12345.6);
|
|
161
|
+
for (const c of h)
|
|
162
|
+
c.type === "group" ? d = c.value : c.type === "decimal" && (r = c.value);
|
|
156
163
|
} catch {
|
|
157
164
|
}
|
|
158
165
|
const g = e.match(/^(\d+)\.(\d+)$/);
|
|
159
|
-
if (g && !(g[2].length === 3 &&
|
|
160
|
-
const
|
|
161
|
-
if (Number.isFinite(
|
|
162
|
-
return { target:
|
|
166
|
+
if (g && !(g[2].length === 3 && d === ".")) {
|
|
167
|
+
const c = Number.parseFloat(e);
|
|
168
|
+
if (Number.isFinite(c))
|
|
169
|
+
return { target: c, sign: n, suffix: i };
|
|
163
170
|
}
|
|
164
|
-
let
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
return Number.isFinite(
|
|
171
|
+
let o = e;
|
|
172
|
+
d !== "" && (o = o.split(d).join("")), r !== "." && (o = o.split(r).join(".")), o = o.replace(/[\s\u00A0\u202F]/g, "");
|
|
173
|
+
const f = Number.parseFloat(o);
|
|
174
|
+
return Number.isFinite(f) ? { target: f, sign: n, suffix: i } : null;
|
|
168
175
|
}
|
|
169
|
-
const ct =
|
|
176
|
+
const ct = Z(
|
|
170
177
|
({
|
|
171
|
-
label:
|
|
178
|
+
label: a,
|
|
172
179
|
value: t,
|
|
173
|
-
format:
|
|
174
|
-
currency:
|
|
180
|
+
format: u,
|
|
181
|
+
currency: n,
|
|
175
182
|
locale: e,
|
|
176
|
-
trend:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
trend: i,
|
|
184
|
+
trendPolarity: m,
|
|
185
|
+
delta: d,
|
|
186
|
+
deltaFormat: r = "decimal",
|
|
187
|
+
icon: g,
|
|
188
|
+
loading: o = !1,
|
|
189
|
+
animate: f = !1,
|
|
190
|
+
animateOnEveryView: h = !1,
|
|
191
|
+
animateDurationMs: c = 1600,
|
|
192
|
+
animateLocale: K,
|
|
193
|
+
animateSeparators: x,
|
|
194
|
+
variant: y = "default",
|
|
195
|
+
size: N = "md",
|
|
188
196
|
align: I = "start",
|
|
189
197
|
intent: M = "foreground",
|
|
190
198
|
className: j,
|
|
191
199
|
...k
|
|
192
200
|
}, R) => {
|
|
193
|
-
const { i18n:
|
|
201
|
+
const { i18n: Y } = B("ui"), T = tt(), p = e ?? Y.language, _ = O(() => {
|
|
194
202
|
if (typeof t == "string") return t;
|
|
195
|
-
switch (
|
|
203
|
+
switch (u) {
|
|
196
204
|
case "currency":
|
|
197
|
-
return new Intl.NumberFormat(
|
|
205
|
+
return new Intl.NumberFormat(p, {
|
|
198
206
|
style: "currency",
|
|
199
|
-
currency:
|
|
207
|
+
currency: n ?? "USD"
|
|
200
208
|
}).format(t);
|
|
201
209
|
case "percent":
|
|
202
|
-
return new Intl.NumberFormat(
|
|
210
|
+
return new Intl.NumberFormat(p, { style: "percent" }).format(
|
|
203
211
|
t
|
|
204
212
|
);
|
|
205
213
|
case "decimal":
|
|
206
|
-
return new Intl.NumberFormat(
|
|
214
|
+
return new Intl.NumberFormat(p, { style: "decimal" }).format(
|
|
207
215
|
t
|
|
208
216
|
);
|
|
209
217
|
default:
|
|
210
|
-
return new Intl.NumberFormat(
|
|
218
|
+
return new Intl.NumberFormat(p).format(t);
|
|
211
219
|
}
|
|
212
|
-
}, [t,
|
|
213
|
-
|
|
214
|
-
const s =
|
|
215
|
-
(
|
|
220
|
+
}, [t, u, p, n])(), w = K ?? p;
|
|
221
|
+
et(!1);
|
|
222
|
+
const s = rt(() => f ? typeof t == "number" ? Number.isFinite(t) ? { target: t, sign: "", suffix: "" } : null : ot(t, w) : null, [f, t, w]), q = f && s !== null, H = (s == null ? void 0 : s.target) ?? 0, F = (s == null ? void 0 : s.sign) ?? "", $ = (s == null ? void 0 : s.suffix) ?? "", J = O(
|
|
223
|
+
(z) => {
|
|
216
224
|
const E = (() => {
|
|
217
225
|
try {
|
|
218
|
-
return new Intl.NumberFormat(
|
|
226
|
+
return new Intl.NumberFormat(w, {
|
|
219
227
|
useGrouping: !0
|
|
220
228
|
});
|
|
221
229
|
} catch {
|
|
222
230
|
return null;
|
|
223
231
|
}
|
|
224
232
|
})();
|
|
225
|
-
let
|
|
233
|
+
let v;
|
|
226
234
|
if (E)
|
|
227
|
-
if (
|
|
228
|
-
const A = Math.abs(
|
|
235
|
+
if (x) {
|
|
236
|
+
const A = Math.abs(z), D = Math.trunc(A), G = A - D, Q = x.thousand ?? "", S = String(D).replace(
|
|
229
237
|
/\B(?=(\d{3})+(?!\d))/g,
|
|
230
|
-
|
|
238
|
+
Q
|
|
231
239
|
);
|
|
232
240
|
if (G === 0)
|
|
233
|
-
|
|
241
|
+
v = S;
|
|
234
242
|
else {
|
|
235
|
-
const L = G.toFixed(6).replace(/0+$/, "").slice(2),
|
|
236
|
-
|
|
243
|
+
const L = G.toFixed(6).replace(/0+$/, "").slice(2), X = x.decimal ?? ".";
|
|
244
|
+
v = L ? S + X + L : S;
|
|
237
245
|
}
|
|
238
246
|
} else
|
|
239
|
-
|
|
247
|
+
v = E.format(Math.abs(z));
|
|
240
248
|
else
|
|
241
|
-
|
|
249
|
+
v = String(Math.abs(z));
|
|
242
250
|
let W = F;
|
|
243
|
-
return F === "" &&
|
|
251
|
+
return F === "" && z < 0 && (W = "-"), `${W}${v}${$}`;
|
|
244
252
|
},
|
|
245
|
-
[
|
|
246
|
-
), C =
|
|
247
|
-
to:
|
|
253
|
+
[w, x, F, $]
|
|
254
|
+
), C = st({
|
|
255
|
+
to: H,
|
|
248
256
|
from: 0,
|
|
249
|
-
durationMs:
|
|
257
|
+
durationMs: c,
|
|
250
258
|
startOnVisible: !0,
|
|
251
|
-
retriggerOnReEntry:
|
|
259
|
+
retriggerOnReEntry: h,
|
|
252
260
|
// `formatter` is the only path we use — it owns both the locale
|
|
253
261
|
// formatting and the sign/suffix re-application.
|
|
254
|
-
formatter:
|
|
262
|
+
formatter: J
|
|
255
263
|
});
|
|
256
|
-
return
|
|
264
|
+
return o ? /* @__PURE__ */ b(
|
|
257
265
|
"div",
|
|
258
266
|
{
|
|
259
267
|
ref: R,
|
|
260
268
|
role: "group",
|
|
261
269
|
"aria-busy": "true",
|
|
262
|
-
"aria-label":
|
|
270
|
+
"aria-label": a,
|
|
263
271
|
"data-component": "stat",
|
|
264
|
-
className: P({ variant:
|
|
272
|
+
className: P({ variant: y, size: N, align: I, className: j }),
|
|
265
273
|
...k,
|
|
266
274
|
children: [
|
|
267
|
-
/* @__PURE__ */
|
|
268
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ l("div", { className: "ds:h-[var(--skeleton-label-h)] ds:w-[var(--skeleton-label-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" }),
|
|
276
|
+
/* @__PURE__ */ l("div", { className: "ds:h-[var(--skeleton-value-h)] ds:w-[var(--skeleton-value-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]" })
|
|
269
277
|
]
|
|
270
278
|
}
|
|
271
|
-
) : /* @__PURE__ */
|
|
279
|
+
) : /* @__PURE__ */ b(
|
|
272
280
|
"div",
|
|
273
281
|
{
|
|
274
282
|
ref: R,
|
|
275
283
|
role: "group",
|
|
276
284
|
"aria-labelledby": T,
|
|
277
285
|
"data-component": "stat",
|
|
278
|
-
className: P({ variant:
|
|
286
|
+
className: P({ variant: y, size: N, align: I, className: j }),
|
|
279
287
|
...k,
|
|
280
288
|
children: [
|
|
281
|
-
/* @__PURE__ */
|
|
282
|
-
|
|
289
|
+
/* @__PURE__ */ b("span", { className: "ds:inline-flex ds:items-center", children: [
|
|
290
|
+
g && /* @__PURE__ */ l(
|
|
283
291
|
"span",
|
|
284
292
|
{
|
|
285
293
|
"aria-hidden": "true",
|
|
@@ -292,41 +300,42 @@ const ct = X(
|
|
|
292
300
|
"ds:text-[color:var(--accent)]",
|
|
293
301
|
"ds:forced-colors:text-[CanvasText]"
|
|
294
302
|
].join(" "),
|
|
295
|
-
children:
|
|
303
|
+
children: g
|
|
296
304
|
}
|
|
297
305
|
),
|
|
298
|
-
/* @__PURE__ */
|
|
306
|
+
/* @__PURE__ */ l(
|
|
299
307
|
"span",
|
|
300
308
|
{
|
|
301
309
|
id: T,
|
|
302
310
|
className: "type-label ds:text-[var(--muted-foreground)]",
|
|
303
|
-
children:
|
|
311
|
+
children: a
|
|
304
312
|
}
|
|
305
313
|
)
|
|
306
314
|
] }),
|
|
307
|
-
|
|
315
|
+
q ? (
|
|
308
316
|
// The animated number is wrapped in an `aria-live="off"` span
|
|
309
317
|
// so screen readers don't announce every interpolated frame.
|
|
310
318
|
// The `role="group"` ancestor (with `aria-labelledby` pointing
|
|
311
319
|
// at the label) carries the final accessible reading — the
|
|
312
320
|
// animated frames are decorative only.
|
|
313
|
-
/* @__PURE__ */
|
|
321
|
+
/* @__PURE__ */ l(
|
|
314
322
|
"span",
|
|
315
323
|
{
|
|
316
324
|
ref: C.ref,
|
|
317
325
|
"aria-live": "off",
|
|
318
|
-
className: U({ size:
|
|
326
|
+
className: U({ size: N, variant: y, intent: M }),
|
|
319
327
|
children: C.value
|
|
320
328
|
}
|
|
321
329
|
)
|
|
322
|
-
) : /* @__PURE__ */
|
|
323
|
-
|
|
324
|
-
|
|
330
|
+
) : /* @__PURE__ */ l("span", { className: U({ size: N, variant: y, intent: M }), children: _ }),
|
|
331
|
+
i != null && d != null && /* @__PURE__ */ l(
|
|
332
|
+
dt,
|
|
325
333
|
{
|
|
326
|
-
trend:
|
|
327
|
-
delta:
|
|
328
|
-
deltaFormat:
|
|
329
|
-
locale: e
|
|
334
|
+
trend: i,
|
|
335
|
+
delta: d,
|
|
336
|
+
deltaFormat: r,
|
|
337
|
+
locale: e,
|
|
338
|
+
polarity: m
|
|
330
339
|
}
|
|
331
340
|
)
|
|
332
341
|
]
|
|
@@ -338,4 +347,4 @@ ct.displayName = "Stat";
|
|
|
338
347
|
export {
|
|
339
348
|
ct as S
|
|
340
349
|
};
|
|
341
|
-
//# sourceMappingURL=stat-
|
|
350
|
+
//# sourceMappingURL=stat-DmjGfXND.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat-DmjGfXND.js","sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useId,\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 { useCountUp } from '../../hooks/use-count-up';\n\n/* ------------------------------------------------------------------ */\n/* CVA — stat root */\n/* ------------------------------------------------------------------ */\n\n// `h-full` lets Stats grow to fill a flex / grid parent's cell, so a\n// row paired with taller cards (BenefitCard, Card, etc.) reads as a\n// matching set instead of mismatched heights. In a non-stretching\n// parent (block flow, inline) it's a no-op — block-size defers to\n// content as before. The flex-col inside still pins label/icon row\n// at the top and the number below, so growing the card adds the\n// extra space below the number instead of inserting it between\n// label and value.\nconst statVariants = cva('ds:flex ds:flex-col ds:h-full', {\n variants: {\n variant: {\n default: 'ds:gap-[var(--spacing-xs)]',\n outlined: [\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n ].join(' '),\n // White card surface with the shared card shadow + border —\n // matches `Card variant=\"elevated\"` and `BenefitCard.elevated`\n // tokens (`--card`, `--card-border`, `--shadow-card`,\n // `--radius-lg`) so a grid of elevated Stats reads as a set of\n // shaded panels without nesting a Card around each one. The\n // border is essential in dark mode: shadow alone on a dark\n // surface loses contrast and the card boundary disappears.\n // `--surface-border-width` bumps it to 2px in the accessible themes,\n // matching Card / BenefitCard's 0.31.5 accessibility uplift.\n elevated: [\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:bg-[var(--card)]',\n 'ds:text-[var(--card-foreground)]',\n 'ds:[:where(&)]:border-[length:var(--surface-border-width,var(--border-width-sm))] ds:border-[color:var(--card-border)]',\n 'ds:shadow-[var(--shadow-card)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n // Forced-colors: UA strips shadow, so render a border as the\n // separation cue — mirrors Card's forced-colors behaviour.\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n compact: 'ds:gap-[var(--spacing-none)]',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n align: {\n start: 'ds:items-start ds:text-start',\n center: 'ds:items-center ds:text-center',\n end: 'ds:items-end ds:text-end',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n align: 'start',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — value element */\n/* ------------------------------------------------------------------ */\n\nconst valueVariants = cva('type-metric', {\n variants: {\n size: {\n sm: 'ds:[--type-metric-size:var(--font-size-xl)]',\n md: 'ds:[--type-metric-size:var(--font-size-3xl)]',\n lg: 'ds:[--type-metric-size:var(--font-size-5xl)]',\n },\n variant: {\n default: '',\n outlined: '',\n elevated: '',\n compact: '',\n },\n // Colour of the headline metric value. Defaults to `--foreground`\n // (the existing render). `primary` / `accent` are the brand intents\n // — use for hero / marketing stats where the number IS the visual\n // marker. `success` / `destructive` / `info` / `warning` map to the\n // semantic tokens for KPI tiles that want to signal status via the\n // value colour itself (e.g. revenue green, debt red). The trend\n // chevron and the label colour are independent of this prop.\n intent: {\n foreground: 'ds:text-[var(--foreground)]',\n primary: 'ds:text-[var(--primary)]',\n accent: 'ds:text-[var(--accent)]',\n success: 'ds:text-[var(--success)]',\n destructive: 'ds:text-[var(--destructive)]',\n info: 'ds:text-[var(--info)]',\n warning: 'ds:text-[var(--warning)]',\n },\n },\n compoundVariants: [\n {\n variant: 'compact',\n size: 'sm',\n className: 'ds:[--type-metric-size:var(--font-size-lg)]',\n },\n {\n variant: 'compact',\n size: 'md',\n className: 'ds:[--type-metric-size:var(--font-size-xl)]',\n },\n {\n variant: 'compact',\n size: 'lg',\n className: 'ds:[--type-metric-size:var(--font-size-2xl)]',\n },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n intent: 'foreground',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — trend element */\n/* ------------------------------------------------------------------ */\n\nconst trendVariants = cva(\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-label',\n {\n variants: {\n // Whether the change is good news, not which way it went: with\n // `trendPolarity=\"lower-is-better\"` a fall is `better`.\n tone: {\n better: 'ds:text-[var(--success)]',\n worse: 'ds:text-[var(--destructive)]',\n neutral: 'ds:text-[var(--muted-foreground)]',\n },\n },\n defaultVariants: {\n tone: 'neutral',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* StatTrend (internal — not exported) */\n/* ------------------------------------------------------------------ */\n\n/** Which way is good news for a metric's trend. */\nexport type StatTrendPolarity = 'higher-is-better' | 'lower-is-better';\n\ninterface StatTrendProps {\n trend: 'up' | 'down' | 'flat';\n delta: number | string;\n deltaFormat?: 'decimal' | 'percent';\n locale?: string;\n polarity?: StatTrendPolarity;\n}\n\nconst ARROW = { up: '↑', down: '↓', flat: '→' } as const;\nconst TREND_KEY = {\n up: 'stat.trend.up',\n down: 'stat.trend.down',\n flat: 'stat.trend.flat',\n} as const;\n\nfunction StatTrend({\n trend,\n delta,\n deltaFormat = 'decimal',\n locale,\n polarity = 'higher-is-better',\n}: StatTrendProps) {\n const { t, i18n } = useTranslation('ui');\n\n const formattedDelta =\n typeof delta === 'string'\n ? delta\n : new Intl.NumberFormat(locale ?? i18n.language, {\n style: deltaFormat === 'percent' ? 'percent' : 'decimal',\n }).format(deltaFormat === 'percent' ? delta / 100 : delta);\n\n // The arrow follows the number; the colour and the spoken \"better\" or\n // \"worse\" follow the polarity, so the meaning never rests on colour.\n const tone =\n trend === 'flat'\n ? 'neutral'\n : (trend === 'up') === (polarity === 'higher-is-better')\n ? 'better'\n : 'worse';\n\n return (\n <span className={trendVariants({ tone })} data-trend-tone={tone}>\n <span aria-hidden=\"true\">{ARROW[trend]}</span>\n <span className=\"ds:sr-only\">{t(TREND_KEY[trend])}</span>\n {formattedDelta}\n {tone === 'neutral' ? null : (\n <span className=\"ds:sr-only\">\n {' '}\n {t(tone === 'better' ? 'stat.trend.better' : 'stat.trend.worse')}\n </span>\n )}\n </span>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Parse a string value into a numeric target for the count-up */\n/* ------------------------------------------------------------------ */\n\ntype ParsedValue = {\n /** Numeric target for the count-up. */\n target: number;\n /** Leading sign captured from the input string (e.g. \"+\" / \"-\"). */\n sign: '' | '+' | '-';\n /** Trailing shorthand suffix (e.g. \"K\" / \"M\" / \"B\") to re-append. */\n suffix: string;\n};\n\n/**\n * Strip locale-aware separators, a leading sign, and the K/M/B\n * shorthand suffix from a pre-formatted string so the count-up has a\n * pure numeric target to animate towards. Returns `null` for any input\n * that can't be parsed — the caller short-circuits to static rendering\n * in that case.\n */\nfunction parseStatValue(raw: string, locale: string): ParsedValue | null {\n const trimmed = raw.trim();\n if (trimmed === '') return null;\n\n // Capture leading sign so we can re-attach it every frame. Stat's\n // marketing usage (\"+500.000\", \"-12\") often relies on it.\n let sign: '' | '+' | '-' = '';\n let body = trimmed;\n if (body.startsWith('+')) {\n sign = '+';\n body = body.slice(1).trimStart();\n } else if (body.startsWith('-') || body.startsWith('−')) {\n // Hyphen-minus or the typographic minus sign — both treated as -.\n sign = '-';\n body = body.slice(1).trimStart();\n }\n\n // Trailing K / M / B shorthand (case-insensitive). Re-append verbatim\n // so \"+1.5K\" renders as \"+1.5K\" at every frame.\n let suffix = '';\n const suffixMatch = body.match(/[KMB]$/i);\n if (suffixMatch) {\n suffix = suffixMatch[0];\n body = body.slice(0, -1).trimEnd();\n }\n\n // Discover the locale's group + decimal glyphs from a probe value.\n // formatToParts is the canonical way; we fall back to `.` decimal /\n // `,` group if Intl can't tell us (no-locale envs).\n let group = '';\n let decimal = '.';\n try {\n const probe = new Intl.NumberFormat(locale).formatToParts(12345.6);\n for (const part of probe) {\n if (part.type === 'group') group = part.value;\n else if (part.type === 'decimal') decimal = part.value;\n }\n } catch {\n /* swallow — defaults already set */\n }\n\n // Heuristic for input strings that look like JS-native decimals\n // (e.g. `\"1500.25\"`) regardless of the requested locale: if the body\n // is a clean US-style decimal AND the fraction after the `.` is NOT\n // a three-digit thousands group in a locale that uses `.` as the\n // group separator, treat it as a direct numeric literal. This covers\n // the common case where a caller types `value=\"1500.25\"` and expects\n // the count-up to land on 1500.25 even though the output locale is\n // it-IT (which uses `.` for thousands).\n const usStyleMatch = body.match(/^(\\d+)\\.(\\d+)$/);\n if (usStyleMatch) {\n const fractionLen = usStyleMatch[2].length;\n if (!(fractionLen === 3 && group === '.')) {\n const direct = Number.parseFloat(body);\n if (Number.isFinite(direct)) {\n return { target: direct, sign, suffix };\n }\n }\n }\n\n // Strip every group separator we discovered, then normalise the\n // decimal separator to `.` so JS can parseFloat the result.\n // Note: when the locale's group separator is empty (e.g. some\n // numbering systems) the replace is a no-op.\n let normalised = body;\n if (group !== '') {\n normalised = normalised.split(group).join('');\n }\n if (decimal !== '.') {\n normalised = normalised.split(decimal).join('.');\n }\n\n // Defence-in-depth: strip whitespace plus NBSP (U+00A0) and NARROW\n // NO-BREAK SPACE (U+202F) that some locales (fr-FR, it-IT) use as\n // thousand separators. Hex escapes keep this source ASCII-clean.\n normalised = normalised.replace(/[\\s\\u00A0\\u202F]/g, '');\n\n const numeric = Number.parseFloat(normalised);\n if (!Number.isFinite(numeric)) return null;\n\n return { target: numeric, sign, suffix };\n}\n\n/* ------------------------------------------------------------------ */\n/* StatProps */\n/* ------------------------------------------------------------------ */\n\nexport interface StatProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof statVariants> {\n /** Metric label rendered above the value. */\n label: string;\n /** Numeric or pre-formatted string value. */\n value: number | string;\n /** Number formatting style. Omit to use default decimal formatting. */\n format?: 'decimal' | 'currency' | 'percent';\n /** ISO 4217 currency code — required when format=\"currency\". */\n currency?: string;\n /** BCP 47 locale override. Defaults to the active i18n language. */\n locale?: string;\n /** Trend direction. Requires `delta` to render the trend row. */\n trend?: 'up' | 'down' | 'flat';\n /** Trend delta magnitude, e.g. 12 for \"↑ 12%\". */\n delta?: number | string;\n /**\n * Which way is good news. `higher-is-better` (default) shows a rise in\n * the success colour; `lower-is-better` (a no-show or cancellation rate,\n * a waiting time) shows a fall in it instead. The arrow always points the\n * way the number moved, and screen readers hear \"better\" or \"worse\".\n */\n trendPolarity?: StatTrendPolarity;\n /** Number formatting style for the delta. Default \"decimal\". */\n deltaFormat?: 'decimal' | 'percent';\n /** Optional leading icon rendered at the start of the label row. */\n icon?: ReactNode;\n /**\n * Colour of the headline value. Defaults to `foreground`. Brand\n * intents (`primary`, `accent`) are for hero / marketing stats where\n * the number is the visual marker. Semantic intents\n * (`success`, `destructive`, `info`, `warning`) signal status via\n * the value colour itself — e.g. revenue green, debt red on KPI\n * tiles. Trend chevron and label colour are independent.\n */\n intent?:\n | 'foreground'\n | 'primary'\n | 'accent'\n | 'success'\n | 'destructive'\n | 'info'\n | 'warning';\n /** Renders animated skeleton placeholders instead of content. */\n loading?: boolean;\n /**\n * Animate the numeric value from 0 (or from the captured leading\n * sign) to the final value when the Stat first scrolls into view.\n * Default `false`. Marketing surfaces opt in; dashboards leave it\n * off so live metrics render immediately.\n */\n animate?: boolean;\n /**\n * When `true`, the count-up re-plays every time the Stat scrolls\n * out of view and back in. Default `false` — animate once per\n * element per session, matching the booking-website hero pattern.\n * Ignored under `prefers-reduced-motion: reduce`.\n */\n animateOnEveryView?: boolean;\n /** Animation duration in milliseconds. Default 1600. */\n animateDurationMs?: number;\n /**\n * BCP 47 locale used for the per-frame count-up formatting. Falls\n * back to `locale`, then to the active i18n language.\n */\n animateLocale?: string;\n /**\n * Override the locale's thousand / decimal glyphs for the count-up.\n * Wins over locale defaults. Pass partial overrides — `decimal`\n * alone is valid; the unspecified separator stays at the locale\n * default.\n */\n animateSeparators?: {\n thousand?: string;\n decimal?: string;\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Stat */\n/* ------------------------------------------------------------------ */\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n (\n {\n label,\n value,\n format,\n currency,\n locale,\n trend,\n trendPolarity,\n delta,\n deltaFormat = 'decimal',\n icon,\n loading = false,\n animate = false,\n animateOnEveryView = false,\n animateDurationMs = 1600,\n animateLocale,\n animateSeparators,\n variant = 'default',\n size = 'md',\n align = 'start',\n intent = 'foreground',\n className,\n ...props\n },\n ref,\n ) => {\n const { i18n } = useTranslation('ui');\n const labelId = useId();\n const lang = locale ?? i18n.language;\n\n /* -------------------------------------------------- */\n /* Static formatting — the value as it would appear */\n /* in the non-animated (or post-animation) state. */\n /* -------------------------------------------------- */\n\n const formatValue = useCallback((): string => {\n if (typeof value === 'string') return value;\n\n switch (format) {\n case 'currency':\n return new Intl.NumberFormat(lang, {\n style: 'currency',\n currency: currency ?? 'USD',\n }).format(value);\n case 'percent':\n return new Intl.NumberFormat(lang, { style: 'percent' }).format(\n value,\n );\n case 'decimal':\n return new Intl.NumberFormat(lang, { style: 'decimal' }).format(\n value,\n );\n default:\n return new Intl.NumberFormat(lang).format(value);\n }\n }, [value, format, lang, currency]);\n\n const staticValue = formatValue();\n\n /* -------------------------------------------------- */\n /* Parse the value into a numeric target for the */\n /* count-up. Numeric values use `value` directly; */\n /* string values are stripped of sign / shorthand / */\n /* locale separators and re-decorated each frame. */\n /* -------------------------------------------------- */\n\n const animationLocale = animateLocale ?? lang;\n const hasWarnedRef = useRef<boolean>(false);\n\n const parsed = useMemo<ParsedValue | null>(() => {\n if (!animate) return null;\n if (typeof value === 'number') {\n // Numeric: target is the number itself; no sign / suffix to\n // re-attach.\n return Number.isFinite(value)\n ? { target: value, sign: '', suffix: '' }\n : null;\n }\n return parseStatValue(value, animationLocale);\n }, [animate, value, animationLocale]);\n\n // Dev-mode warning when an animate-flagged Stat has an unparseable\n // string value. Render static, no throw — one warn per component.\n if (\n animate &&\n typeof value === 'string' &&\n parsed === null &&\n import.meta.env.DEV &&\n !hasWarnedRef.current\n ) {\n hasWarnedRef.current = true;\n console.warn(\n `Stat: value=\"${value}\" couldn't be parsed for the count-up animation. Rendering static.`,\n );\n }\n\n const shouldAnimate = animate && parsed !== null;\n\n /* -------------------------------------------------- */\n /* Wire the hook unconditionally — rules-of-hooks. */\n /* When `shouldAnimate` is false the hook still runs */\n /* but `to === from` so it's a no-op visually. */\n /* -------------------------------------------------- */\n\n const target = parsed?.target ?? 0;\n const sign = parsed?.sign ?? '';\n const suffix = parsed?.suffix ?? '';\n\n // Wrap the count-up formatter so the captured sign + suffix are\n // re-applied every frame. The hook hands us the locale-formatted\n // magnitude; we own the decoration around it.\n const formatter = useCallback(\n (n: number) => {\n // Use the absolute value for the magnitude so the captured\n // sign is the sole source of the rendered sign. Negative\n // numbers passed in (e.g. `to: -12`) come through unsigned;\n // we re-apply via `sign`. Always force `useGrouping: true` so\n // ICU's locale-default `min2` doesn't suppress the thousand\n // glyph on 4-digit values like 1.000 (it-IT). The user wrote\n // a stat value — they want it grouped.\n const magnitudeNF = (() => {\n try {\n return new Intl.NumberFormat(animationLocale, {\n useGrouping: true,\n });\n } catch {\n return null;\n }\n })();\n\n let magnitudeStr: string;\n if (magnitudeNF) {\n if (animateSeparators) {\n // Hand-build the grouped magnitude so we don't depend on\n // ICU's locale-by-locale grouping defaults (which differ\n // between engines and can drop the group at 4-digit\n // thresholds even with `useGrouping: true`). Locale only\n // influences sign handling, which we apply separately.\n const abs = Math.abs(n);\n const intPart = Math.trunc(abs);\n const fracPart = abs - intPart;\n const groupGlyph = animateSeparators.thousand ?? '';\n const intStr = String(intPart).replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n groupGlyph,\n );\n if (fracPart === 0) {\n magnitudeStr = intStr;\n } else {\n const fracStr = fracPart.toFixed(6).replace(/0+$/, '').slice(2);\n const decimalGlyph = animateSeparators.decimal ?? '.';\n magnitudeStr = fracStr ? intStr + decimalGlyph + fracStr : intStr;\n }\n } else {\n magnitudeStr = magnitudeNF.format(Math.abs(n));\n }\n } else {\n magnitudeStr = String(Math.abs(n));\n }\n\n // Re-derive the sign every frame: the captured sign wins, but\n // a negative `to` with no leading sign in the source still\n // renders with a leading \"-\" so the final formatted output\n // matches locale conventions.\n let resolvedSign: string = sign;\n if (sign === '' && n < 0) resolvedSign = '-';\n\n return `${resolvedSign}${magnitudeStr}${suffix}`;\n },\n [animationLocale, animateSeparators, sign, suffix],\n );\n\n const countUp = useCountUp({\n to: target,\n from: 0,\n durationMs: animateDurationMs,\n startOnVisible: true,\n retriggerOnReEntry: animateOnEveryView,\n // `formatter` is the only path we use — it owns both the locale\n // formatting and the sign/suffix re-application.\n formatter,\n });\n\n /* -------------------------------------------------- */\n /* Loading state */\n /* -------------------------------------------------- */\n\n if (loading) {\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-busy=\"true\"\n aria-label={label}\n data-component=\"stat\"\n className={statVariants({ variant, size, align, className })}\n {...props}\n >\n <div className=\"ds:h-[var(--skeleton-label-h)] ds:w-[var(--skeleton-label-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]\" />\n <div className=\"ds:h-[var(--skeleton-value-h)] ds:w-[var(--skeleton-value-w)] ds:animate-pulse ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]\" />\n </div>\n );\n }\n\n /* -------------------------------------------------- */\n /* Render */\n /* -------------------------------------------------- */\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={labelId}\n data-component=\"stat\"\n className={statVariants({ variant, size, align, className })}\n {...props}\n >\n <span className=\"ds:inline-flex ds:items-center\">\n {icon && (\n <span\n aria-hidden=\"true\"\n className={[\n 'ds:me-[var(--spacing-xs)] ds:inline-flex ds:shrink-0',\n // Accent tint on the leading icon. The icon is decorative\n // (aria-hidden), so magenta-500's 3.2:1 contrast on white\n // is acceptable here — the Stat label + value still\n // carry the accessible name at `--foreground`.\n 'ds:text-[color:var(--accent)]',\n 'ds:forced-colors:text-[CanvasText]',\n ].join(' ')}\n >\n {icon}\n </span>\n )}\n <span\n id={labelId}\n className=\"type-label ds:text-[var(--muted-foreground)]\"\n >\n {label}\n </span>\n </span>\n {shouldAnimate ? (\n // The animated number is wrapped in an `aria-live=\"off\"` span\n // so screen readers don't announce every interpolated frame.\n // The `role=\"group\"` ancestor (with `aria-labelledby` pointing\n // at the label) carries the final accessible reading — the\n // animated frames are decorative only.\n <span\n ref={countUp.ref}\n aria-live=\"off\"\n className={valueVariants({ size, variant, intent })}\n >\n {countUp.value}\n </span>\n ) : (\n <span className={valueVariants({ size, variant, intent })}>\n {staticValue}\n </span>\n )}\n {trend != null && delta != null && (\n <StatTrend\n trend={trend}\n delta={delta}\n deltaFormat={deltaFormat}\n locale={locale}\n polarity={trendPolarity}\n />\n )}\n </div>\n );\n },\n);\n\nStat.displayName = 'Stat';\n"],"names":["statVariants","cva","valueVariants","trendVariants","ARROW","TREND_KEY","StatTrend","trend","delta","deltaFormat","locale","polarity","t","i18n","useTranslation","formattedDelta","tone","jsxs","jsx","parseStatValue","raw","trimmed","sign","body","suffix","suffixMatch","group","decimal","probe","part","usStyleMatch","direct","normalised","numeric","Stat","forwardRef","label","value","format","currency","trendPolarity","icon","loading","animate","animateOnEveryView","animateDurationMs","animateLocale","animateSeparators","variant","size","align","intent","className","props","ref","labelId","useId","lang","staticValue","useCallback","animationLocale","useRef","parsed","useMemo","shouldAnimate","target","formatter","n","magnitudeNF","magnitudeStr","abs","intPart","fracPart","groupGlyph","intStr","fracStr","decimalGlyph","resolvedSign","countUp","useCountUp"],"mappings":"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"}
|
|
@@ -124,7 +124,11 @@ const K = [
|
|
|
124
124
|
"ds:group-data-[state=open]/item:rotate-180"
|
|
125
125
|
].join(" "), sr = [
|
|
126
126
|
"type-meta ds:text-[var(--muted-foreground)]",
|
|
127
|
-
|
|
127
|
+
// Indented under the step title from 448px of accordion width (px, not
|
|
128
|
+
// rem: a container query in rem follows the host's root font size); narrower
|
|
129
|
+
// (a phone) the content takes the full width so a form or a list in it
|
|
130
|
+
// is not squeezed beside the step number.
|
|
131
|
+
"ds:ps-[var(--spacing-md)] ds:@[448px]/stepper:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]",
|
|
128
132
|
"ds:pe-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]",
|
|
129
133
|
"ds:group-data-[state=open]/item:hidden"
|
|
130
134
|
].join(" "), ar = [
|
|
@@ -132,11 +136,18 @@ const K = [
|
|
|
132
136
|
"ds:data-[state=open]:animate-[accordion-down_var(--animation-duration)_var(--ease-out)]",
|
|
133
137
|
"ds:data-[state=closed]:animate-[accordion-up_var(--animation-duration)_var(--ease-in)]"
|
|
134
138
|
].join(" "), tr = [
|
|
135
|
-
|
|
139
|
+
// Indented under the step title from 448px of accordion width (px, not
|
|
140
|
+
// rem: a container query in rem follows the host's root font size); narrower
|
|
141
|
+
// (a phone) the content takes the full width so a form or a list in it
|
|
142
|
+
// is not squeezed beside the step number.
|
|
143
|
+
"ds:ps-[var(--spacing-md)] ds:@[448px]/stepper:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]",
|
|
136
144
|
"ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-md)]"
|
|
137
|
-
].join(" "), nr = b(
|
|
138
|
-
|
|
139
|
-
|
|
145
|
+
].join(" "), nr = b(
|
|
146
|
+
"ds:@container/stepper ds:flex ds:w-full ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-sm)]",
|
|
147
|
+
{
|
|
148
|
+
variants: {}
|
|
149
|
+
}
|
|
150
|
+
), or = P(
|
|
140
151
|
({
|
|
141
152
|
activeStep: s,
|
|
142
153
|
steps: i,
|
|
@@ -248,4 +259,4 @@ or.displayName = "StepperAccordion";
|
|
|
248
259
|
export {
|
|
249
260
|
or as S
|
|
250
261
|
};
|
|
251
|
-
//# sourceMappingURL=stepper-accordion-
|
|
262
|
+
//# sourceMappingURL=stepper-accordion-DDTSOUHc.js.map
|