@alfadocs/ui-kit-debug 0.68.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{accordion-9lJSMMsZ.js → accordion-DnIa7OHX.js} +69 -47
- package/dist/_chunks/accordion-DnIa7OHX.js.map +1 -0
- package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js +2061 -0
- package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +1 -0
- package/dist/_chunks/address-autocomplete-BEX9PXty.js +496 -0
- package/dist/_chunks/address-autocomplete-BEX9PXty.js.map +1 -0
- package/dist/_chunks/{agenda-card.agent-B_R47-c9.js → agenda-card.agent-mTCrkKSZ.js} +6 -1
- package/dist/_chunks/{agenda-card.agent-B_R47-c9.js.map → agenda-card.agent-mTCrkKSZ.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-T-BumlGZ.js → agenda-tray-g0kg7HwB.js} +36 -24
- package/dist/_chunks/agenda-tray-g0kg7HwB.js.map +1 -0
- package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js → ai-consent-banner-CXlsNX1c.js} +3 -3
- package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js.map → ai-consent-banner-CXlsNX1c.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-BwEACCPm.js → ai-prompt-input-CuhTo9mh.js} +80 -61
- package/dist/_chunks/ai-prompt-input-CuhTo9mh.js.map +1 -0
- package/dist/_chunks/{ai-tools-rail-CInA_1-E.js → ai-tools-rail-BA_sqy1A.js} +87 -70
- package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js → alia-sidebar-B47qRQb5.js} +5 -5
- package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js.map → alia-sidebar-B47qRQb5.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-N8pIKWuS.js → anamnesis-card-DRmE24OQ.js} +2 -2
- package/dist/_chunks/{anamnesis-card-N8pIKWuS.js.map → anamnesis-card-DRmE24OQ.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-BMl89NPW.js → appointment-tray-CZtvtaH-.js} +32 -20
- package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +1 -0
- package/dist/_chunks/{audio-recorder-DjXLP4aF.js → audio-recorder-DYXXnGug.js} +59 -56
- package/dist/_chunks/audio-recorder-DYXXnGug.js.map +1 -0
- package/dist/_chunks/{autocomplete-CcCFlVf-.js → autocomplete-DOeGouCL.js} +157 -132
- package/dist/_chunks/autocomplete-DOeGouCL.js.map +1 -0
- package/dist/_chunks/bishop-score-PJI3AXzA.js +304 -0
- package/dist/_chunks/bishop-score-PJI3AXzA.js.map +1 -0
- package/dist/_chunks/bmi-calculator-BZtIJ53x.js +434 -0
- package/dist/_chunks/bmi-calculator-BZtIJ53x.js.map +1 -0
- package/dist/_chunks/{booking-L8-YP8BJ.js → booking-C3VqFReX.js} +420 -397
- package/dist/_chunks/booking-C3VqFReX.js.map +1 -0
- package/dist/_chunks/{breadcrumb-OTbaY70e.js → breadcrumb-CchdeG7d.js} +42 -28
- package/dist/_chunks/breadcrumb-CchdeG7d.js.map +1 -0
- package/dist/_chunks/{calculator-dialog-CFk4I91b.js → calculator-dialog-BR5iU0kf.js} +2 -2
- package/dist/_chunks/{calculator-dialog-CFk4I91b.js.map → calculator-dialog-BR5iU0kf.js.map} +1 -1
- package/dist/_chunks/{calendar-oYWOCrnf.js → calendar-CZUjL8SZ.js} +258 -201
- package/dist/_chunks/calendar-CZUjL8SZ.js.map +1 -0
- package/dist/_chunks/{care-plan-card-BwVUyUBb.js → care-plan-card-CvFGXa2z.js} +10 -6
- package/dist/_chunks/care-plan-card-CvFGXa2z.js.map +1 -0
- package/dist/_chunks/{care-plan-entry-card-VzdQHcOL.js → care-plan-entry-card-C3E_gClk.js} +17 -13
- package/dist/_chunks/care-plan-entry-card-C3E_gClk.js.map +1 -0
- package/dist/_chunks/{carousel.agent-vt21A_el.js → carousel.agent-4v8Emr9E.js} +219 -198
- package/dist/_chunks/{carousel.agent-vt21A_el.js.map → carousel.agent-4v8Emr9E.js.map} +1 -1
- package/dist/_chunks/{chart-Cg3e9EH9.js → chart-CMr3eW62.js} +150 -109
- package/dist/_chunks/chart-CMr3eW62.js.map +1 -0
- package/dist/_chunks/{chat-container-ogB4OskO.js → chat-container-DWho5hPR.js} +47 -34
- package/dist/_chunks/chat-container-DWho5hPR.js.map +1 -0
- package/dist/_chunks/{chat-input-B5zjNEUN.js → chat-input-BcXTetgM.js} +57 -41
- package/dist/_chunks/chat-input-BcXTetgM.js.map +1 -0
- package/dist/_chunks/{checkbox-DRcOdmXv.js → checkbox-BuZ1u__2.js} +41 -27
- package/dist/_chunks/checkbox-BuZ1u__2.js.map +1 -0
- package/dist/_chunks/{checkbox-group-CpUwlHug.js → checkbox-group-PqNmQ-cE.js} +3 -3
- package/dist/_chunks/{checkbox-group-CpUwlHug.js.map → checkbox-group-PqNmQ-cE.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-gtrxv6zn.js → clinical-note-card-DqQYf_D4.js} +2 -2
- package/dist/_chunks/{clinical-note-card-gtrxv6zn.js.map → clinical-note-card-DqQYf_D4.js.map} +1 -1
- package/dist/_chunks/{collapsible-X3oaLPU3.js → collapsible-BrnRiCC6.js} +26 -23
- package/dist/_chunks/collapsible-BrnRiCC6.js.map +1 -0
- package/dist/_chunks/{color-picker-FXpItIaF.js → color-picker-C_fZl6sA.js} +124 -112
- package/dist/_chunks/color-picker-C_fZl6sA.js.map +1 -0
- package/dist/_chunks/{combobox-BC-DFx8G.js → combobox-Clum7gJ1.js} +165 -128
- package/dist/_chunks/combobox-Clum7gJ1.js.map +1 -0
- package/dist/_chunks/{command-palette-BiPAAno-.js → command-palette-CJzmc5pC.js} +87 -64
- package/dist/_chunks/command-palette-CJzmc5pC.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-7BMB85T6.js → contact-profile-card-Dramqa9C.js} +13 -11
- package/dist/_chunks/contact-profile-card-Dramqa9C.js.map +1 -0
- package/dist/_chunks/{copy-field-CCq7j6Zc.js → copy-field-Bjw9u2cV.js} +42 -35
- package/dist/_chunks/copy-field-Bjw9u2cV.js.map +1 -0
- package/dist/_chunks/counter-dRlTNC_y.js +55 -0
- package/dist/_chunks/counter-dRlTNC_y.js.map +1 -0
- package/dist/_chunks/{cycle-calculator-BF0ointe.js → cycle-calculator-DmRGJNaT.js} +3 -3
- package/dist/_chunks/{cycle-calculator-BF0ointe.js.map → cycle-calculator-DmRGJNaT.js.map} +1 -1
- package/dist/_chunks/{date-picker-oGg5BnXL.js → date-picker-Dl9RKxaV.js} +76 -57
- package/dist/_chunks/{date-picker-oGg5BnXL.js.map → date-picker-Dl9RKxaV.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-C5BWfH_T.js → date-range-picker-CTUeR6Bj.js} +73 -46
- package/dist/_chunks/date-range-picker-CTUeR6Bj.js.map +1 -0
- package/dist/_chunks/{date-time-picker-Ze1My59T.js → date-time-picker-BhoogS5Q.js} +64 -40
- package/dist/_chunks/date-time-picker-BhoogS5Q.js.map +1 -0
- package/dist/_chunks/{dependent-selector-DpzGtr_J.js → dependent-selector-CG_FOHya.js} +44 -30
- package/dist/_chunks/dependent-selector-CG_FOHya.js.map +1 -0
- package/dist/_chunks/{dialog-DMGnSelc.js → dialog-ZNuboNmy.js} +35 -28
- package/dist/_chunks/dialog-ZNuboNmy.js.map +1 -0
- package/dist/_chunks/{document-scanner-D2qehl3-.js → document-scanner-CTubA0-N.js} +12 -4
- package/dist/_chunks/document-scanner-CTubA0-N.js.map +1 -0
- package/dist/_chunks/{dropdown-menu-DwwPovMZ.js → dropdown-menu-qrxjymfw.js} +94 -93
- package/dist/_chunks/dropdown-menu-qrxjymfw.js.map +1 -0
- package/dist/_chunks/{due-date-calculator-DU9AEWNy.js → due-date-calculator-BTmsIQqD.js} +4 -4
- package/dist/_chunks/{due-date-calculator-DU9AEWNy.js.map → due-date-calculator-BTmsIQqD.js.map} +1 -1
- package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +448 -0
- package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +1 -0
- package/dist/_chunks/{email-input-lQivsFrw.js → email-input-B_Y55f5G.js} +3 -3
- package/dist/_chunks/{email-input-lQivsFrw.js.map → email-input-B_Y55f5G.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-BVSzOhuR.js → fetal-weight-CRz7KE2D.js} +2 -2
- package/dist/_chunks/{fetal-weight-BVSzOhuR.js.map → fetal-weight-CRz7KE2D.js.map} +1 -1
- package/dist/_chunks/{file-upload-BosbPDb1.js → file-upload-5ScQd4fE.js} +118 -100
- package/dist/_chunks/file-upload-5ScQd4fE.js.map +1 -0
- package/dist/_chunks/{fiscal-code-input-DPtqluVb.js → fiscal-code-input-Cf-8O4Fj.js} +76 -63
- package/dist/_chunks/fiscal-code-input-Cf-8O4Fj.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-CkWjv3o6.js → freemium-paywall-DZ2mBS3w.js} +78 -71
- package/dist/_chunks/freemium-paywall-DZ2mBS3w.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js → gestational-age-calculator-BleUdhbI.js} +5 -5
- package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js.map → gestational-age-calculator-BleUdhbI.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-if4Q8aSX.js → hcg-doubling-CnjDXX6U.js} +3 -3
- package/dist/_chunks/{hcg-doubling-if4Q8aSX.js.map → hcg-doubling-CnjDXX6U.js.map} +1 -1
- package/dist/_chunks/{header-settings-CNOqIhoW.js → header-settings-DJqoAl5m.js} +86 -46
- package/dist/_chunks/header-settings-DJqoAl5m.js.map +1 -0
- package/dist/_chunks/{index.modern-D2LGACWg.js → index.modern-Zta-A4Jm.js} +3 -3
- package/dist/_chunks/{index.modern-D2LGACWg.js.map → index.modern-Zta-A4Jm.js.map} +1 -1
- package/dist/_chunks/{list-BOwqwy03.js → list-DgE1xWBM.js} +99 -84
- package/dist/_chunks/list-DgE1xWBM.js.map +1 -0
- package/dist/_chunks/{locale-picker-C9JmBht3.js → locale-picker-ChYYSX2N.js} +47 -35
- package/dist/_chunks/locale-picker-ChYYSX2N.js.map +1 -0
- package/dist/_chunks/{map-view-Tb5VfK9Y.js → map-view-BkOoGoX2.js} +160 -115
- package/dist/_chunks/map-view-BkOoGoX2.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js → marketplace-app-shell-6T9W4Knl.js} +4 -4
- package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js.map → marketplace-app-shell-6T9W4Knl.js.map} +1 -1
- package/dist/_chunks/{message-card.agent-4IeIgrnJ.js → message-card.agent-ZLhx3Bs5.js} +6 -1
- package/dist/_chunks/message-card.agent-ZLhx3Bs5.js.map +1 -0
- package/dist/_chunks/{message-tray-CVyJajVJ.js → message-tray-DwrBLJlf.js} +90 -48
- package/dist/_chunks/message-tray-DwrBLJlf.js.map +1 -0
- package/dist/_chunks/{multi-select-BcPylvHR.js → multi-select-BdHHDrRN.js} +196 -153
- package/dist/_chunks/multi-select-BdHHDrRN.js.map +1 -0
- package/dist/_chunks/{navigation-menu-C6lBYVv9.js → navigation-menu-DRUi6sSj.js} +75 -42
- package/dist/_chunks/navigation-menu-DRUi6sSj.js.map +1 -0
- package/dist/_chunks/{notification-card.agent-Rqt3ofk9.js → notification-card.agent-DxGBZb8T.js} +5 -1
- package/dist/_chunks/notification-card.agent-DxGBZb8T.js.map +1 -0
- package/dist/_chunks/{notification-tray-DlgenTEe.js → notification-tray-Btb9oQeZ.js} +112 -97
- package/dist/_chunks/notification-tray-Btb9oQeZ.js.map +1 -0
- package/dist/_chunks/{number-input-Dj5L3pXK.js → number-input-DxphVG_A.js} +36 -27
- package/dist/_chunks/number-input-DxphVG_A.js.map +1 -0
- package/dist/_chunks/{operator-hero-f_KaRhw5.js → operator-hero-CP2Nhupm.js} +12 -8
- package/dist/_chunks/operator-hero-CP2Nhupm.js.map +1 -0
- package/dist/_chunks/{otp-input-xQ4Ps5VY.js → otp-input-DzBQ-CpE.js} +52 -33
- package/dist/_chunks/otp-input-DzBQ-CpE.js.map +1 -0
- package/dist/_chunks/{pagination-DQOgnxxw.js → pagination-D58kglCr.js} +181 -162
- package/dist/_chunks/pagination-D58kglCr.js.map +1 -0
- package/dist/_chunks/{patient-search-DR9XUYRQ.js → patient-search-CBC_ySF6.js} +69 -60
- package/dist/_chunks/patient-search-CBC_ySF6.js.map +1 -0
- package/dist/_chunks/{patient-shell-BfgufL_q.js → patient-shell-DV3XEtIB.js} +3 -3
- package/dist/_chunks/{patient-shell-BfgufL_q.js.map → patient-shell-DV3XEtIB.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-hEmr4eTW.js → patient-summary-card-B836_fDB.js} +95 -103
- package/dist/_chunks/patient-summary-card-B836_fDB.js.map +1 -0
- package/dist/_chunks/patient-table-CDuosVru.js +889 -0
- package/dist/_chunks/patient-table-CDuosVru.js.map +1 -0
- package/dist/_chunks/{payment-form-nXocS_MX.js → payment-form-DvjwYVIT.js} +56 -44
- package/dist/_chunks/payment-form-DvjwYVIT.js.map +1 -0
- package/dist/_chunks/{payment-request-card-CYE5vhZ0.js → payment-request-card-DioWKBUq.js} +2 -2
- package/dist/_chunks/{payment-request-card-CYE5vhZ0.js.map → payment-request-card-DioWKBUq.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-GsfNqeeT.js → pdf-viewer-D6BPfW2D.js} +205 -157
- package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +1 -0
- package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js → periodontal-chart-card-BuDEMbHE.js} +2 -2
- package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js.map → periodontal-chart-card-BuDEMbHE.js.map} +1 -1
- package/dist/_chunks/{phone-input-DVXhNlIl.js → phone-input-DjU-XmO_.js} +64 -47
- package/dist/_chunks/phone-input-DjU-XmO_.js.map +1 -0
- package/dist/_chunks/{popover-DTbfAuR0.js → popover-B2qCDhJC.js} +37 -32
- package/dist/_chunks/popover-B2qCDhJC.js.map +1 -0
- package/dist/_chunks/{practice-results-DND2SAt7.js → practice-results-KrTHqZua.js} +278 -242
- package/dist/_chunks/practice-results-KrTHqZua.js.map +1 -0
- package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js → pregnancy-dating-DORUAOHB.js} +6 -6
- package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js.map → pregnancy-dating-DORUAOHB.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js → pregnancy-weight-gain-DVz4rr7-.js} +3 -3
- package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-DVz4rr7-.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-C7JyMf0y.js → privacy-lock-BzMLQu-j.js} +32 -28
- package/dist/_chunks/privacy-lock-BzMLQu-j.js.map +1 -0
- package/dist/_chunks/{product-hub-panel-CAXDFeGP.js → product-hub-panel-e6pW220e.js} +45 -27
- package/dist/_chunks/product-hub-panel-e6pW220e.js.map +1 -0
- package/dist/_chunks/{progress-kzIRcdaq.js → progress-DA413-zn.js} +2 -2
- package/dist/_chunks/{progress-kzIRcdaq.js.map → progress-DA413-zn.js.map} +1 -1
- package/dist/_chunks/{public-footer.agent-CfXuW1x6.js → public-footer.agent-D0cFbjWl.js} +151 -146
- package/dist/_chunks/public-footer.agent-D0cFbjWl.js.map +1 -0
- package/dist/_chunks/{public-header.agent-BOhJgZEU.js → public-header.agent-DqkqA-ca.js} +107 -102
- package/dist/_chunks/{public-header.agent-BOhJgZEU.js.map → public-header.agent-DqkqA-ca.js.map} +1 -1
- package/dist/_chunks/{qr-code-DNXhi6se.js → qr-code-CPkEs5mG.js} +52 -46
- package/dist/_chunks/qr-code-CPkEs5mG.js.map +1 -0
- package/dist/_chunks/{radio-group-CLjK-SlK.js → radio-group-BPt7pKZW.js} +5 -5
- package/dist/_chunks/{radio-group-CLjK-SlK.js.map → radio-group-BPt7pKZW.js.map} +1 -1
- package/dist/_chunks/{recaptcha-widget-BCNHsgqt.js → recaptcha-widget-BC-4To9b.js} +9 -2
- package/dist/_chunks/recaptcha-widget-BC-4To9b.js.map +1 -0
- package/dist/_chunks/registry-DvAUVLHh.js +51 -0
- package/dist/_chunks/registry-DvAUVLHh.js.map +1 -0
- package/dist/_chunks/{resizable-3vzqDlg6.js → resizable-DVGcfOrk.js} +193 -173
- package/dist/_chunks/resizable-DVGcfOrk.js.map +1 -0
- package/dist/_chunks/{reviews-panel-DBktKm7i.js → reviews-panel-Dq7LMDcH.js} +87 -68
- package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-VawKN1FI.js → rich-text-editor-BsV7zUdg.js} +736 -647
- package/dist/_chunks/rich-text-editor-BsV7zUdg.js.map +1 -0
- package/dist/_chunks/{search-bar-SY2BcV2N.js → search-bar-C_T3pBJn.js} +105 -78
- package/dist/_chunks/search-bar-C_T3pBJn.js.map +1 -0
- package/dist/_chunks/{search-input-DbxrnHkW.js → search-input-DQvGxR74.js} +2 -2
- package/dist/_chunks/{search-input-DbxrnHkW.js.map → search-input-DQvGxR74.js.map} +1 -1
- package/dist/_chunks/{search-input.agent-CfZvViOd.js → search-input.agent-DRH54coT.js} +19 -4
- package/dist/_chunks/search-input.agent-DRH54coT.js.map +1 -0
- package/dist/_chunks/{select-CEtRcon5.js → select-DMLG44F5.js} +72 -56
- package/dist/_chunks/select-DMLG44F5.js.map +1 -0
- package/dist/_chunks/{session-countdown-LPnhTHjn.js → session-countdown-X1Ki6i0M.js} +3 -3
- package/dist/_chunks/{session-countdown-LPnhTHjn.js.map → session-countdown-X1Ki6i0M.js.map} +1 -1
- package/dist/_chunks/{sheet-taJer-Ha.js → sheet-BxsE7eQm.js} +59 -45
- package/dist/_chunks/sheet-BxsE7eQm.js.map +1 -0
- package/dist/_chunks/{sidebar-DaB4ulxH.js → sidebar-DY9jGjgt.js} +254 -248
- package/dist/_chunks/sidebar-DY9jGjgt.js.map +1 -0
- package/dist/_chunks/{sign-document-CdAiHiCh.js → sign-document-B4DeRhTe.js} +75 -49
- package/dist/_chunks/sign-document-B4DeRhTe.js.map +1 -0
- package/dist/_chunks/{signature-capture-COi0Uiqu.js → signature-capture-Ct_4Md4e.js} +138 -104
- package/dist/_chunks/signature-capture-Ct_4Md4e.js.map +1 -0
- package/dist/_chunks/{slider-BHWzXdjt.js → slider-DN1CWkKB.js} +85 -65
- package/dist/_chunks/slider-DN1CWkKB.js.map +1 -0
- package/dist/_chunks/{sparkline-DGhCSw8M.js → sparkline-iOXYgvJe.js} +75 -53
- package/dist/_chunks/sparkline-iOXYgvJe.js.map +1 -0
- package/dist/_chunks/{stepper-accordion.agent-C4quJ-MD.js → stepper-accordion.agent-cmEguIdx.js} +7 -1
- package/dist/_chunks/stepper-accordion.agent-cmEguIdx.js.map +1 -0
- package/dist/_chunks/{stepper-progress-DDjq5nei.js → stepper-progress-Bv0njx4g.js} +30 -24
- package/dist/_chunks/stepper-progress-Bv0njx4g.js.map +1 -0
- package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js → suggestion-chip.agent-Brn3CiFE.js} +9 -8
- package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js.map → suggestion-chip.agent-Brn3CiFE.js.map} +1 -1
- package/dist/_chunks/{switch-BJ6HD3Mn.js → switch-OILsBLWo.js} +25 -19
- package/dist/_chunks/switch-OILsBLWo.js.map +1 -0
- package/dist/_chunks/{tabs-BIQ0ew1T.js → tabs-BxcOziCo.js} +67 -58
- package/dist/_chunks/tabs-BxcOziCo.js.map +1 -0
- package/dist/_chunks/{task-card.agent-CUPKYd7w.js → task-card.agent-Bt14CzUd.js} +4 -1
- package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +1 -0
- package/dist/_chunks/{task-tray-CAncV-QQ.js → task-tray-qOEQflu4.js} +74 -57
- package/dist/_chunks/task-tray-qOEQflu4.js.map +1 -0
- package/dist/_chunks/{text-area-BIx0tZ05.js → text-area-Bt3p7Pt0.js} +41 -34
- package/dist/_chunks/text-area-Bt3p7Pt0.js.map +1 -0
- package/dist/_chunks/{text-input-BaClJL8Y.js → text-input-B-OWQ1Je.js} +15 -8
- package/dist/_chunks/text-input-B-OWQ1Je.js.map +1 -0
- package/dist/_chunks/{theme-toggle-DETmSu_h.js → theme-toggle-XB6o_lgs.js} +38 -26
- package/dist/_chunks/theme-toggle-XB6o_lgs.js.map +1 -0
- package/dist/_chunks/{time-picker-B5umYwfv.js → time-picker-BPlJWm8w.js} +41 -31
- package/dist/_chunks/time-picker-BPlJWm8w.js.map +1 -0
- package/dist/_chunks/{timeline-DQa5Tyz4.js → timeline-CqA4nKTI.js} +33 -25
- package/dist/_chunks/timeline-CqA4nKTI.js.map +1 -0
- package/dist/_chunks/{toast.agent-vuLRRn2a.js → toast.agent-57UzyR9U.js} +62 -45
- package/dist/_chunks/{toast.agent-vuLRRn2a.js.map → toast.agent-57UzyR9U.js.map} +1 -1
- package/dist/_chunks/{tooth-scheme-BIx1O2aJ.js → tooth-scheme-yBr53cvv.js} +421 -348
- package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +1 -0
- package/dist/_chunks/{transcript-panel-CLHmv83g.js → transcript-panel-3THQX6nJ.js} +47 -33
- package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +1 -0
- package/dist/_chunks/unit-converter-YEpD9evj.js +337 -0
- package/dist/_chunks/unit-converter-YEpD9evj.js.map +1 -0
- package/dist/_chunks/{use-password-requirements-DsgduV1x.js → use-password-requirements-BXvS2MBS.js} +131 -117
- package/dist/_chunks/use-password-requirements-BXvS2MBS.js.map +1 -0
- package/dist/_chunks/users-MBVtUzwd.js +17 -0
- package/dist/_chunks/users-MBVtUzwd.js.map +1 -0
- package/dist/_chunks/warning-stack-BsgaEbL8.js +283 -0
- package/dist/_chunks/warning-stack-BsgaEbL8.js.map +1 -0
- package/dist/_chunks/{whatsapp-button-DUjlWGKf.js → whatsapp-button-BIy6NaJK.js} +6 -3
- package/dist/_chunks/whatsapp-button-BIy6NaJK.js.map +1 -0
- package/dist/_chunks/{workflow-map-JAZryZJr.js → workflow-map-Bdam9pGp.js} +99 -88
- package/dist/_chunks/workflow-map-Bdam9pGp.js.map +1 -0
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +36 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/registry.d.ts +33 -0
- package/dist/agent/registry.d.ts.map +1 -1
- package/dist/agent/types.d.ts +78 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent-catalog.json +6905 -509
- package/dist/agent-i18n/en.json +1175 -0
- package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts +4 -0
- package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts.map +1 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts +18 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.d.ts +2 -1
- package/dist/components/address-autocomplete/index.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.js +3 -2
- package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -1
- package/dist/components/ai-tools-rail/index.js +1 -1
- package/dist/components/anamnesis-card/index.js +1 -1
- package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -1
- package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
- package/dist/components/appointment-card/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/bishop-score/bishop-score.agent.d.ts +4 -0
- package/dist/components/bishop-score/bishop-score.agent.d.ts.map +1 -0
- package/dist/components/bishop-score/bishop-score.d.ts +17 -1
- package/dist/components/bishop-score/bishop-score.d.ts.map +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts +4 -0
- package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts.map +1 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts +26 -0
- package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/booking.agent.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/calculator-dialog/index.js +1 -1
- package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/carousel/carousel.agent.d.ts.map +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/chart/chart.agent.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/contact-profile-card/contact-profile-card.agent.d.ts.map +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/copy-field/copy-field.agent.d.ts.map +1 -1
- package/dist/components/copy-field/index.js +1 -1
- package/dist/components/counter/counter.d.ts +22 -0
- package/dist/components/counter/counter.d.ts.map +1 -0
- package/dist/components/counter/index.d.ts +3 -0
- package/dist/components/counter/index.d.ts.map +1 -0
- package/dist/components/counter/index.js +5 -0
- package/dist/components/counter/index.js.map +1 -0
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/data-table.agent.d.ts.map +1 -1
- package/dist/components/data-table/index.js +31 -30
- package/dist/components/data-table/index.js.map +1 -1
- package/dist/components/data-table/toolbar.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -1
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -1
- package/dist/components/document-scanner/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/email-input/index.js +1 -1
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -1
- package/dist/components/fiscal-code-input/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts +6 -0
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.agent.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-card/message-card.agent.d.ts.map +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +1 -1
- package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.agent.d.ts.map +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/operator-hero/operator-hero.agent.d.ts.map +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/password-input/password-input.agent.d.ts.map +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
- package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts +13 -0
- package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts +43 -0
- package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +45 -0
- package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts +24 -0
- package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts.map +1 -0
- package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +26 -0
- package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +1 -0
- package/dist/components/patient-table/columns.d.ts +102 -0
- package/dist/components/patient-table/columns.d.ts.map +1 -0
- package/dist/components/patient-table/index.d.ts +24 -0
- package/dist/components/patient-table/index.d.ts.map +1 -0
- package/dist/components/patient-table/index.js +13 -0
- package/dist/components/patient-table/index.js.map +1 -0
- package/dist/components/patient-table/patient-table.d.ts +138 -0
- package/dist/components/patient-table/patient-table.d.ts.map +1 -0
- package/dist/components/patient-table/types.d.ts +172 -0
- package/dist/components/patient-table/types.d.ts.map +1 -0
- package/dist/components/patient-table/use-responsive-columns.d.ts +109 -0
- package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -0
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.agent.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/product-hub-tray/product-hub-panel.agent.d.ts.map +1 -1
- package/dist/components/product-hub-tray/product-hub-tray.agent.d.ts.map +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -1
- package/dist/components/public-footer/public-footer.d.ts.map +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/public-header/public-header.agent.d.ts.map +1 -1
- package/dist/components/qr-code/index.js +1 -1
- package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -1
- package/dist/components/radio-group/index.js +1 -1
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
- package/dist/components/resizable/resizable.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -1
- package/dist/components/search-input/index.js +2 -2
- package/dist/components/search-input/search-input.agent.d.ts.map +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.agent.d.ts.map +1 -1
- package/dist/components/session-countdown/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar.d.ts +7 -0
- package/dist/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/sign-document/sign-document.agent.d.ts.map +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/slider.agent.d.ts.map +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/switch/switch.agent.d.ts.map +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.agent.d.ts.map +1 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-area/text-area.agent.d.ts.map +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/text-input/text-input.agent.d.ts.map +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.agent.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toast/toast.agent.d.ts.map +1 -1
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/unit-converter/unit-converter.agent.d.ts +4 -0
- package/dist/components/unit-converter/unit-converter.agent.d.ts.map +1 -0
- package/dist/components/unit-converter/unit-converter.d.ts +27 -0
- package/dist/components/unit-converter/unit-converter.d.ts.map +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/warning-stack/warning-stack.d.ts +9 -0
- package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
- package/dist/components/whatsapp-button/index.d.ts +1 -1
- package/dist/components/whatsapp-button/index.d.ts.map +1 -1
- package/dist/components/whatsapp-button/index.js +3 -2
- package/dist/components/whatsapp-button/whatsapp-button.d.ts +3 -0
- package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow/workflow.agent.d.ts.map +1 -1
- package/dist/i18n/locales/ar.d.ts +72 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +73 -1
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +72 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +73 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +72 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +73 -1
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +90 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +91 -1
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +72 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +73 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +72 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +73 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +72 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +73 -1
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +72 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +73 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +72 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +73 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +72 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +73 -1
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +72 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +73 -1
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +72 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +73 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +72 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +73 -1
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +72 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +73 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +72 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +73 -1
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +72 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +73 -1
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +72 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +73 -1
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +72 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +73 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +688 -673
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +73 -1
- package/dist/locales/de.json +73 -1
- package/dist/locales/el.json +73 -1
- package/dist/locales/en.json +73 -1
- package/dist/locales/es.json +73 -1
- package/dist/locales/fr.json +73 -1
- package/dist/locales/hi.json +73 -1
- package/dist/locales/it.json +73 -1
- package/dist/locales/ja.json +73 -1
- package/dist/locales/nl.json +73 -1
- package/dist/locales/pl.json +73 -1
- package/dist/locales/pt.json +73 -1
- package/dist/locales/ro.json +73 -1
- package/dist/locales/ru.json +73 -1
- package/dist/locales/sq.json +73 -1
- package/dist/locales/sv.json +73 -1
- package/dist/locales/tr.json +73 -1
- package/dist/locales/zh.json +73 -1
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +3 -2
- package/package.json +14 -1
- package/dist/_chunks/accordion-9lJSMMsZ.js.map +0 -1
- package/dist/_chunks/address-autocomplete-CT-9AOli.js +0 -358
- package/dist/_chunks/address-autocomplete-CT-9AOli.js.map +0 -1
- package/dist/_chunks/agenda-tray-T-BumlGZ.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-BwEACCPm.js.map +0 -1
- package/dist/_chunks/ai-tools-rail-CInA_1-E.js.map +0 -1
- package/dist/_chunks/appointment-tray-BMl89NPW.js.map +0 -1
- package/dist/_chunks/audio-recorder-DjXLP4aF.js.map +0 -1
- package/dist/_chunks/autocomplete-CcCFlVf-.js.map +0 -1
- package/dist/_chunks/bishop-score-CjsB9bM-.js +0 -185
- package/dist/_chunks/bishop-score-CjsB9bM-.js.map +0 -1
- package/dist/_chunks/bmi-calculator-n-823_1V.js +0 -258
- package/dist/_chunks/bmi-calculator-n-823_1V.js.map +0 -1
- package/dist/_chunks/booking-L8-YP8BJ.js.map +0 -1
- package/dist/_chunks/breadcrumb-OTbaY70e.js.map +0 -1
- package/dist/_chunks/calendar-oYWOCrnf.js.map +0 -1
- package/dist/_chunks/care-plan-card-BwVUyUBb.js.map +0 -1
- package/dist/_chunks/care-plan-entry-card-VzdQHcOL.js.map +0 -1
- package/dist/_chunks/chart-Cg3e9EH9.js.map +0 -1
- package/dist/_chunks/chat-container-ogB4OskO.js.map +0 -1
- package/dist/_chunks/chat-input-B5zjNEUN.js.map +0 -1
- package/dist/_chunks/checkbox-DRcOdmXv.js.map +0 -1
- package/dist/_chunks/collapsible-X3oaLPU3.js.map +0 -1
- package/dist/_chunks/color-picker-FXpItIaF.js.map +0 -1
- package/dist/_chunks/combobox-BC-DFx8G.js.map +0 -1
- package/dist/_chunks/command-palette-BiPAAno-.js.map +0 -1
- package/dist/_chunks/contact-profile-card-7BMB85T6.js.map +0 -1
- package/dist/_chunks/copy-field-CCq7j6Zc.js.map +0 -1
- package/dist/_chunks/date-range-picker-C5BWfH_T.js.map +0 -1
- package/dist/_chunks/date-time-picker-Ze1My59T.js.map +0 -1
- package/dist/_chunks/dependent-selector-DpzGtr_J.js.map +0 -1
- package/dist/_chunks/dialog-DMGnSelc.js.map +0 -1
- package/dist/_chunks/document-scanner-D2qehl3-.js.map +0 -1
- package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +0 -1
- package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js +0 -2409
- package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js.map +0 -1
- package/dist/_chunks/file-upload-BosbPDb1.js.map +0 -1
- package/dist/_chunks/fiscal-code-input-DPtqluVb.js.map +0 -1
- package/dist/_chunks/freemium-paywall-CkWjv3o6.js.map +0 -1
- package/dist/_chunks/header-settings-CNOqIhoW.js.map +0 -1
- package/dist/_chunks/list-BOwqwy03.js.map +0 -1
- package/dist/_chunks/locale-picker-C9JmBht3.js.map +0 -1
- package/dist/_chunks/map-view-Tb5VfK9Y.js.map +0 -1
- package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
- package/dist/_chunks/message-tray-CVyJajVJ.js.map +0 -1
- package/dist/_chunks/multi-select-BcPylvHR.js.map +0 -1
- package/dist/_chunks/navigation-menu-C6lBYVv9.js.map +0 -1
- package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
- package/dist/_chunks/notification-tray-DlgenTEe.js.map +0 -1
- package/dist/_chunks/number-input-Dj5L3pXK.js.map +0 -1
- package/dist/_chunks/operator-hero-f_KaRhw5.js.map +0 -1
- package/dist/_chunks/otp-input-xQ4Ps5VY.js.map +0 -1
- package/dist/_chunks/pagination-DQOgnxxw.js.map +0 -1
- package/dist/_chunks/patient-search-DR9XUYRQ.js.map +0 -1
- package/dist/_chunks/patient-summary-card-hEmr4eTW.js.map +0 -1
- package/dist/_chunks/payment-form-nXocS_MX.js.map +0 -1
- package/dist/_chunks/pdf-viewer-GsfNqeeT.js.map +0 -1
- package/dist/_chunks/phone-input-DVXhNlIl.js.map +0 -1
- package/dist/_chunks/popover-DTbfAuR0.js.map +0 -1
- package/dist/_chunks/practice-results-DND2SAt7.js.map +0 -1
- package/dist/_chunks/privacy-lock-C7JyMf0y.js.map +0 -1
- package/dist/_chunks/product-hub-panel-CAXDFeGP.js.map +0 -1
- package/dist/_chunks/public-footer.agent-CfXuW1x6.js.map +0 -1
- package/dist/_chunks/qr-code-DNXhi6se.js.map +0 -1
- package/dist/_chunks/recaptcha-widget-BCNHsgqt.js.map +0 -1
- package/dist/_chunks/registry-nPAVE19X.js +0 -21
- package/dist/_chunks/registry-nPAVE19X.js.map +0 -1
- package/dist/_chunks/resizable-3vzqDlg6.js.map +0 -1
- package/dist/_chunks/reviews-panel-DBktKm7i.js.map +0 -1
- package/dist/_chunks/rich-text-editor-VawKN1FI.js.map +0 -1
- package/dist/_chunks/search-bar-SY2BcV2N.js.map +0 -1
- package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
- package/dist/_chunks/select-CEtRcon5.js.map +0 -1
- package/dist/_chunks/sheet-taJer-Ha.js.map +0 -1
- package/dist/_chunks/sidebar-DaB4ulxH.js.map +0 -1
- package/dist/_chunks/sign-document-CdAiHiCh.js.map +0 -1
- package/dist/_chunks/signature-capture-COi0Uiqu.js.map +0 -1
- package/dist/_chunks/slider-BHWzXdjt.js.map +0 -1
- package/dist/_chunks/sparkline-DGhCSw8M.js.map +0 -1
- package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +0 -1
- package/dist/_chunks/stepper-progress-DDjq5nei.js.map +0 -1
- package/dist/_chunks/switch-BJ6HD3Mn.js.map +0 -1
- package/dist/_chunks/tabs-BIQ0ew1T.js.map +0 -1
- package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
- package/dist/_chunks/task-tray-CAncV-QQ.js.map +0 -1
- package/dist/_chunks/text-area-BIx0tZ05.js.map +0 -1
- package/dist/_chunks/text-input-BaClJL8Y.js.map +0 -1
- package/dist/_chunks/theme-toggle-DETmSu_h.js.map +0 -1
- package/dist/_chunks/time-picker-B5umYwfv.js.map +0 -1
- package/dist/_chunks/timeline-DQa5Tyz4.js.map +0 -1
- package/dist/_chunks/tooth-scheme-BIx1O2aJ.js.map +0 -1
- package/dist/_chunks/transcript-panel-CLHmv83g.js.map +0 -1
- package/dist/_chunks/unit-converter-C1V3ACM9.js +0 -196
- package/dist/_chunks/unit-converter-C1V3ACM9.js.map +0 -1
- package/dist/_chunks/use-password-requirements-DsgduV1x.js.map +0 -1
- package/dist/_chunks/warning-stack-Cv4fr5zo.js +0 -220
- package/dist/_chunks/warning-stack-Cv4fr5zo.js.map +0 -1
- package/dist/_chunks/whatsapp-button-DUjlWGKf.js.map +0 -1
- package/dist/_chunks/workflow-map-JAZryZJr.js.map +0 -1
package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-DVz4rr7-.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pregnancy-weight-gain-DOJXXNYP.js","sources":["../../src/components/pregnancy-weight-gain/weight-gain.ts","../../src/components/pregnancy-weight-gain/pregnancy-weight-gain.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* Pregnancy weight-gain guidance — pure, framework-free, testable. */\n/* */\n/* Recommended ranges follow the US IOM/NAM (2009) guidelines, keyed off */\n/* pre-pregnancy BMI category. Singletons use the published total-gain */\n/* band plus a first-trimester gain (≤13 wk) and a per-week 2nd/3rd- */\n/* trimester rate. Twins use the IOM twin total bands, pro-rated linearly */\n/* for the \"to date\" estimate (the IOM does not publish a twin weekly */\n/* rate). The IOM provides NO range for triplets, and none for */\n/* underweight twins — those cases return `null` so the UI can say so */\n/* rather than invent a number. */\n/* */\n/* Guidance only — not a substitute for clinical judgement. */\n/* ------------------------------------------------------------------ */\n\nimport { type BmiCategory, bmiCategory } from '../bmi-calculator/bmi';\nimport type { Plurality } from '../_shared/obstetrics';\n\nexport interface GainBand {\n /** Lower bound, kg. */\n min: number;\n /** Upper bound, kg. */\n max: number;\n}\n\nexport type GainStatus = 'below' | 'within' | 'above';\n\n/** IOM (2009) total recommended gain for a singleton pregnancy, kg. */\nexport const TOTAL_GAIN_BANDS: Record<BmiCategory, GainBand> = {\n underweight: { min: 12.5, max: 18 },\n normal: { min: 11.5, max: 16 },\n overweight: { min: 7, max: 11.5 },\n obese: { min: 5, max: 9 },\n};\n\n/**\n * IOM (2009) total recommended gain for a TWIN pregnancy, kg. The IOM gives\n * no firm range for underweight twins (insufficient evidence), so that\n * category is intentionally absent and resolves to `null`. There is no IOM\n * range for triplets at all.\n */\nexport const TWIN_TOTAL_GAIN_BANDS: Partial<Record<BmiCategory, GainBand>> = {\n normal: { min: 16.8, max: 24.5 },\n overweight: { min: 14.1, max: 22.7 },\n obese: { min: 11.3, max: 19.1 },\n};\n\n/** Resolve the total-gain band for a category + plurality, or `null` if the IOM gives none. */\nexport function totalGainBand(\n category: BmiCategory,\n plurality: Plurality = 'singleton',\n): GainBand | null {\n if (plurality === 'triplet') return null; // no IOM guideline for triplets\n if (plurality === 'twin') return TWIN_TOTAL_GAIN_BANDS[category] ?? null;\n return TOTAL_GAIN_BANDS[category];\n}\n\n/** IOM (2009) mean rate of gain in the 2nd/3rd trimester, kg per week. */\nexport const RATE_BANDS: Record<BmiCategory, GainBand> = {\n underweight: { min: 0.44, max: 0.58 },\n normal: { min: 0.35, max: 0.5 },\n overweight: { min: 0.23, max: 0.33 },\n obese: { min: 0.17, max: 0.27 },\n};\n\n/** First-trimester total gain band, kg (category-independent in IOM). */\nexport const FIRST_TRIMESTER_GAIN: GainBand = { min: 0.5, max: 2 };\n/** Completed weeks counted as the first trimester for gain purposes. */\nexport const FIRST_TRIMESTER_WEEKS = 13;\n\nexport interface WeightGainInput {\n /** Pre-pregnancy BMI (kg/m²) — drives the category. */\n prePregnancyBmi: number;\n /** Pre-pregnancy weight, kg. */\n prePregnancyWeightKg: number;\n /** Current weight, kg. */\n currentWeightKg: number;\n /** Completed gestational weeks. */\n gestationalWeeks: number;\n /** Number of babies. Defaults to `'singleton'`. */\n plurality?: Plurality;\n}\n\nexport interface WeightGainResult {\n category: BmiCategory;\n /** Number of babies the assessment was computed for. */\n plurality: Plurality;\n /**\n * Recommended TOTAL gain across the whole pregnancy, or `null` when the IOM\n * publishes no range (triplets, and underweight twins).\n */\n totalRange: GainBand | null;\n /** Recommended gain accumulated by the current week, or `null` (see above). */\n recommendedToDate: GainBand | null;\n /** Actual gain so far (current − pre-pregnancy), kg. */\n actualGainKg: number;\n /** Where the actual gain sits against the to-date recommendation, or `null`. */\n status: GainStatus | null;\n /**\n * Estimated 2nd/3rd-trimester average weekly gain to date (kg/week), or `null`\n * before week 14 / when no singleton rate band applies. A snapshot estimate\n * (assumes the mid first-trimester gain), not a between-visit measurement.\n */\n weeklyRate: number | null;\n /** Where the weekly rate sits against the IOM rate band, or `null`. */\n rateStatus: GainStatus | null;\n}\n\n/** Mid-point of the category-independent first-trimester gain band, kg. */\nconst FIRST_TRIMESTER_MIDPOINT =\n (FIRST_TRIMESTER_GAIN.min + FIRST_TRIMESTER_GAIN.max) / 2;\n\n/* Singleton (default) keeps a non-null return; multiples may be null. */\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality?: 'singleton',\n): GainBand;\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality: Plurality,\n): GainBand | null;\n/** Recommended cumulative gain by a given gestational week. */\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality: Plurality = 'singleton',\n): GainBand | null {\n if (plurality !== 'singleton') {\n // Twins/triplets: no IOM weekly rate is published, so pro-rate the total\n // band linearly across the 40 weeks. `null` total ⇒ no guideline.\n const total = totalGainBand(category, plurality);\n if (!total) return null;\n if (weeks <= 0) return { min: 0, max: 0 };\n const frac = Math.min(weeks, 40) / 40;\n return { min: total.min * frac, max: total.max * frac };\n }\n if (weeks <= 0) return { min: 0, max: 0 };\n if (weeks <= FIRST_TRIMESTER_WEEKS) {\n const frac = weeks / FIRST_TRIMESTER_WEEKS;\n return {\n min: FIRST_TRIMESTER_GAIN.min * frac,\n max: FIRST_TRIMESTER_GAIN.max * frac,\n };\n }\n const extraWeeks = Math.min(weeks, 40) - FIRST_TRIMESTER_WEEKS;\n const rate = RATE_BANDS[category];\n return {\n min: FIRST_TRIMESTER_GAIN.min + rate.min * extraWeeks,\n max: FIRST_TRIMESTER_GAIN.max + rate.max * extraWeeks,\n };\n}\n\nexport function assessWeightGain(input: WeightGainInput): WeightGainResult {\n const category = bmiCategory(input.prePregnancyBmi);\n const plurality = input.plurality ?? 'singleton';\n const totalRange = totalGainBand(category, plurality);\n const recommendedToDate = totalRange\n ? recommendedGainToDate(category, input.gestationalWeeks, plurality)\n : null;\n const actualGainKg = input.currentWeightKg - input.prePregnancyWeightKg;\n const status: GainStatus | null = recommendedToDate\n ? actualGainKg < recommendedToDate.min\n ? 'below'\n : actualGainKg > recommendedToDate.max\n ? 'above'\n : 'within'\n : null;\n\n // 2nd/3rd-trimester average weekly rate to date — singleton only (the IOM\n // publishes weekly rate bands only for singletons), and only after week 13.\n let weeklyRate: number | null = null;\n let rateStatus: GainStatus | null = null;\n if (\n plurality === 'singleton' &&\n input.gestationalWeeks > FIRST_TRIMESTER_WEEKS\n ) {\n const weeks = input.gestationalWeeks - FIRST_TRIMESTER_WEEKS;\n weeklyRate = (actualGainKg - FIRST_TRIMESTER_MIDPOINT) / weeks;\n const band = RATE_BANDS[category];\n rateStatus =\n weeklyRate < band.min\n ? 'below'\n : weeklyRate > band.max\n ? 'above'\n : 'within';\n }\n\n return {\n category,\n plurality,\n totalRange,\n recommendedToDate,\n actualGainKg,\n status,\n weeklyRate,\n rateStatus,\n };\n}\n","/* ------------------------------------------------------------------ */\n/* PregnancyWeightGain — actual vs IOM-recommended gestational weight */\n/* gain, keyed off pre-pregnancy BMI. */\n/* */\n/* Composes the BMI maths from bmi-calculator and the IOM bands in */\n/* `./weight-gain` (both pure, separately tested). Metric only. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport { computeBmi } from '../bmi-calculator/bmi';\nimport type { Plurality } from '../_shared/obstetrics';\nimport {\n type WeightGainResult,\n type GainStatus,\n type GainBand,\n assessWeightGain,\n} from './weight-gain';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\nconst STATUS_BADGE: Record<GainStatus, 'info' | 'success' | 'warning'> = {\n below: 'warning',\n within: 'success',\n above: 'warning',\n};\n\n/**\n * DS token NAME backing each gain-status chip — the solid-fill companion of the\n * on-screen `STATUS_BADGE` variant (Badge `warning` fills `--warning`,\n * `success` fills `--success`). Passed as the card's `highlightToken` so the\n * inserted PNG chip matches the on-screen status badge; `InsertButton` resolves\n * the name to a concrete colour at raster time.\n */\nconst STATUS_HIGHLIGHT_TOKEN: Record<GainStatus, string> = {\n below: '--warning-readable',\n within: '--success',\n above: '--warning-readable',\n};\n\n/**\n * Gain-status chip token. The `below` / `above` statuses resolve to\n * `--warning-readable`, which the result card's colour probe resolves in the live\n * themed DOM: orange-600 in light, non-accessible mode (where bare `--warning`\n * yellow only reaches ~3.2:1 on the white card) and `--warning` elsewhere, whose\n * deepened ramp already clears contrast. Resolving the token NAME at the card\n * means the choice tracks the live theme regardless of where the theme class\n * lives. The `within` (`--success`) status is unchanged.\n */\nfunction statusHighlightToken(status: GainStatus): string {\n return STATUS_HIGHLIGHT_TOKEN[status];\n}\n\nexport interface PregnancyWeightGainProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** Pre-fill the height (cm) — e.g. shared from a BMI measurement. */\n defaultHeightCm?: number;\n /** Pre-fill the pre-pregnancy weight (kg) from the patient record. */\n defaultPrePregnancyKg?: number;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: WeightGainResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Verb the result-action buttons perform. Defaults to `'insert'` (editor\n * extension). Pass `'copy'` from an app shell to copy the result to the\n * clipboard instead.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyWeightGain = forwardRef<\n HTMLDivElement,\n PregnancyWeightGainProps\n>(\n (\n {\n defaultPlurality = 'singleton',\n defaultHeightCm,\n defaultPrePregnancyKg,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [heightCm, setHeightCm] = useState<number | null>(\n defaultHeightCm ?? null,\n );\n const [prePregnancyKg, setPrePregnancyKg] = useState<number | null>(\n defaultPrePregnancyKg ?? null,\n );\n const [currentKg, setCurrentKg] = useState<number | null>(null);\n const [weeks, setWeeks] = useState<number | null>(null);\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n\n const prePregnancyBmi = computeBmi(prePregnancyKg, heightCm);\n\n const result = useMemo<WeightGainResult | null>(() => {\n if (\n prePregnancyBmi === null ||\n prePregnancyKg === null ||\n currentKg === null ||\n weeks === null\n ) {\n return null;\n }\n return assessWeightGain({\n prePregnancyBmi,\n prePregnancyWeightKg: prePregnancyKg,\n currentWeightKg: currentKg,\n gestationalWeeks: weeks,\n plurality,\n });\n }, [prePregnancyBmi, prePregnancyKg, currentKg, weeks, plurality]);\n\n const kg = useMemo(\n () =>\n new Intl.NumberFormat(i18n.language, {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const unit = t('pregnancyWeightGain.units.kg');\n const band = (b: GainBand): string =>\n `${kg.format(b.min)} – ${kg.format(b.max)} ${unit}`;\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-weight-gain\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={`${t('pregnancyWeightGain.height')} (${t('pregnancyWeightGain.units.cm')})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.5}\n value={heightCm}\n onChange={setHeightCm}\n />\n </FormField>\n <FormField\n label={`${t('pregnancyWeightGain.prePregnancyWeight')} (${unit})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={prePregnancyKg}\n onChange={setPrePregnancyKg}\n />\n </FormField>\n <FormField\n label={`${t('pregnancyWeightGain.currentWeight')} (${unit})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={currentKg}\n onChange={setCurrentKg}\n />\n </FormField>\n <FormField label={t('pregnancyWeightGain.gestationalWeeks')}>\n <NumberInput\n mode=\"integer\"\n min={0}\n max={42}\n value={weeks}\n onChange={setWeeks}\n />\n </FormField>\n </div>\n\n <RadioGroup\n label={t('pregnancyWeightGain.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('pregnancyWeightGain.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio label={t('pregnancyWeightGain.plurality.twin')} value=\"twin\" />\n <Radio\n label={t('pregnancyWeightGain.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyWeightGain.actualGain')}: ${kg.format(\n result.actualGainKg,\n )} ${unit}.${\n result.status\n ? ` ${t(`pregnancyWeightGain.status.${result.status}`)}.`\n : ` ${t('pregnancyWeightGain.noGuideline')}`\n }`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.prePregnancyBmi')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {kg.format(prePregnancyBmi ?? 0)} ·{' '}\n {t(`pregnancyWeightGain.category.${result.category}`)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.actualGain')}\n </dt>\n <dd className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-metric ds:text-foreground\">\n {kg.format(result.actualGainKg)} {unit}\n </span>\n {result.status ? (\n <Badge variant={STATUS_BADGE[result.status]} size=\"lg\">\n {t(`pregnancyWeightGain.status.${result.status}`)}\n </Badge>\n ) : null}\n </dd>\n </div>\n {result.recommendedToDate && result.totalRange ? (\n <>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.recommendedToDate')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {band(result.recommendedToDate)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.recommendedTotal')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {band(result.totalRange)}\n </dd>\n </div>\n </>\n ) : null}\n </dl>\n {result.totalRange ? null : (\n <p className=\"type-body ds:text-foreground\">\n {t('pregnancyWeightGain.noGuideline')}\n </p>\n )}\n {result.weeklyRate !== null && result.rateStatus ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.weeklyRate')}\n </span>\n <span className=\"type-body ds:text-foreground\">\n {t('pregnancyWeightGain.perWeek', {\n value: kg.format(result.weeklyRate),\n })}\n </span>\n <Badge variant={STATUS_BADGE[result.rateStatus]}>\n {t(`pregnancyWeightGain.status.${result.rateStatus}`)}\n </Badge>\n </div>\n ) : null}\n <p className=\"type-body-sm ds:text-muted-foreground\">\n {t(\n plurality === 'singleton'\n ? 'pregnancyWeightGain.disclaimer'\n : 'pregnancyWeightGain.disclaimerMultiple',\n )}\n </p>\n {result.status &&\n result.recommendedToDate &&\n result.totalRange &&\n (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.weightGain'),\n icon: 'baby',\n highlight: t(`pregnancyWeightGain.status.${result.status}`),\n // Chip shares the gain-status semantic token so the\n // inserted PNG chip matches the on-screen status badge —\n // with the contrast-safe orange override for the\n // `--warning` below/above statuses.\n highlightToken: statusHighlightToken(result.status),\n brand: insertBrand,\n fields: [\n {\n // Actual gain is the headline trend → trending-up glyph.\n icon: 'trending-up',\n label: t('pregnancyWeightGain.actualGain'),\n value: `${kg.format(result.actualGainKg)} ${unit}`,\n },\n {\n // Recommended weight band → scale glyph.\n icon: 'scale',\n label: t('pregnancyWeightGain.recommendedToDate'),\n value: band(result.recommendedToDate),\n },\n {\n // Recommended total weight band → scale glyph.\n icon: 'scale',\n label: t('pregnancyWeightGain.recommendedTotal'),\n value: band(result.totalRange),\n },\n ],\n }}\n />\n ) : null}\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyWeightGain.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nPregnancyWeightGain.displayName = 'PregnancyWeightGain';\n"],"names":["TOTAL_GAIN_BANDS","TWIN_TOTAL_GAIN_BANDS","totalGainBand","category","plurality","RATE_BANDS","FIRST_TRIMESTER_GAIN","FIRST_TRIMESTER_WEEKS","FIRST_TRIMESTER_MIDPOINT","recommendedGainToDate","weeks","total","frac","extraWeeks","rate","assessWeightGain","input","bmiCategory","totalRange","recommendedToDate","actualGainKg","status","weeklyRate","rateStatus","band","rootVariants","cva","STATUS_BADGE","STATUS_HIGHLIGHT_TOKEN","statusHighlightToken","PregnancyWeightGain","forwardRef","defaultPlurality","defaultHeightCm","defaultPrePregnancyKg","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","id","width","className","ref","t","i18n","useTranslation","heightCm","setHeightCm","useState","prePregnancyKg","setPrePregnancyKg","currentKg","setCurrentKg","setWeeks","setPlurality","prePregnancyBmi","computeBmi","result","useMemo","kg","useEffect","unit","b","jsxs","jsx","FormField","NumberInput","RadioGroup","next","Radio","Card","Badge","Fragment","InsertButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pregnancy-weight-gain-DVz4rr7-.js","sources":["../../src/components/pregnancy-weight-gain/weight-gain.ts","../../src/components/pregnancy-weight-gain/pregnancy-weight-gain.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* Pregnancy weight-gain guidance — pure, framework-free, testable. */\n/* */\n/* Recommended ranges follow the US IOM/NAM (2009) guidelines, keyed off */\n/* pre-pregnancy BMI category. Singletons use the published total-gain */\n/* band plus a first-trimester gain (≤13 wk) and a per-week 2nd/3rd- */\n/* trimester rate. Twins use the IOM twin total bands, pro-rated linearly */\n/* for the \"to date\" estimate (the IOM does not publish a twin weekly */\n/* rate). The IOM provides NO range for triplets, and none for */\n/* underweight twins — those cases return `null` so the UI can say so */\n/* rather than invent a number. */\n/* */\n/* Guidance only — not a substitute for clinical judgement. */\n/* ------------------------------------------------------------------ */\n\nimport { type BmiCategory, bmiCategory } from '../bmi-calculator/bmi';\nimport type { Plurality } from '../_shared/obstetrics';\n\nexport interface GainBand {\n /** Lower bound, kg. */\n min: number;\n /** Upper bound, kg. */\n max: number;\n}\n\nexport type GainStatus = 'below' | 'within' | 'above';\n\n/** IOM (2009) total recommended gain for a singleton pregnancy, kg. */\nexport const TOTAL_GAIN_BANDS: Record<BmiCategory, GainBand> = {\n underweight: { min: 12.5, max: 18 },\n normal: { min: 11.5, max: 16 },\n overweight: { min: 7, max: 11.5 },\n obese: { min: 5, max: 9 },\n};\n\n/**\n * IOM (2009) total recommended gain for a TWIN pregnancy, kg. The IOM gives\n * no firm range for underweight twins (insufficient evidence), so that\n * category is intentionally absent and resolves to `null`. There is no IOM\n * range for triplets at all.\n */\nexport const TWIN_TOTAL_GAIN_BANDS: Partial<Record<BmiCategory, GainBand>> = {\n normal: { min: 16.8, max: 24.5 },\n overweight: { min: 14.1, max: 22.7 },\n obese: { min: 11.3, max: 19.1 },\n};\n\n/** Resolve the total-gain band for a category + plurality, or `null` if the IOM gives none. */\nexport function totalGainBand(\n category: BmiCategory,\n plurality: Plurality = 'singleton',\n): GainBand | null {\n if (plurality === 'triplet') return null; // no IOM guideline for triplets\n if (plurality === 'twin') return TWIN_TOTAL_GAIN_BANDS[category] ?? null;\n return TOTAL_GAIN_BANDS[category];\n}\n\n/** IOM (2009) mean rate of gain in the 2nd/3rd trimester, kg per week. */\nexport const RATE_BANDS: Record<BmiCategory, GainBand> = {\n underweight: { min: 0.44, max: 0.58 },\n normal: { min: 0.35, max: 0.5 },\n overweight: { min: 0.23, max: 0.33 },\n obese: { min: 0.17, max: 0.27 },\n};\n\n/** First-trimester total gain band, kg (category-independent in IOM). */\nexport const FIRST_TRIMESTER_GAIN: GainBand = { min: 0.5, max: 2 };\n/** Completed weeks counted as the first trimester for gain purposes. */\nexport const FIRST_TRIMESTER_WEEKS = 13;\n\nexport interface WeightGainInput {\n /** Pre-pregnancy BMI (kg/m²) — drives the category. */\n prePregnancyBmi: number;\n /** Pre-pregnancy weight, kg. */\n prePregnancyWeightKg: number;\n /** Current weight, kg. */\n currentWeightKg: number;\n /** Completed gestational weeks. */\n gestationalWeeks: number;\n /** Number of babies. Defaults to `'singleton'`. */\n plurality?: Plurality;\n}\n\nexport interface WeightGainResult {\n category: BmiCategory;\n /** Number of babies the assessment was computed for. */\n plurality: Plurality;\n /**\n * Recommended TOTAL gain across the whole pregnancy, or `null` when the IOM\n * publishes no range (triplets, and underweight twins).\n */\n totalRange: GainBand | null;\n /** Recommended gain accumulated by the current week, or `null` (see above). */\n recommendedToDate: GainBand | null;\n /** Actual gain so far (current − pre-pregnancy), kg. */\n actualGainKg: number;\n /** Where the actual gain sits against the to-date recommendation, or `null`. */\n status: GainStatus | null;\n /**\n * Estimated 2nd/3rd-trimester average weekly gain to date (kg/week), or `null`\n * before week 14 / when no singleton rate band applies. A snapshot estimate\n * (assumes the mid first-trimester gain), not a between-visit measurement.\n */\n weeklyRate: number | null;\n /** Where the weekly rate sits against the IOM rate band, or `null`. */\n rateStatus: GainStatus | null;\n}\n\n/** Mid-point of the category-independent first-trimester gain band, kg. */\nconst FIRST_TRIMESTER_MIDPOINT =\n (FIRST_TRIMESTER_GAIN.min + FIRST_TRIMESTER_GAIN.max) / 2;\n\n/* Singleton (default) keeps a non-null return; multiples may be null. */\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality?: 'singleton',\n): GainBand;\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality: Plurality,\n): GainBand | null;\n/** Recommended cumulative gain by a given gestational week. */\nexport function recommendedGainToDate(\n category: BmiCategory,\n weeks: number,\n plurality: Plurality = 'singleton',\n): GainBand | null {\n if (plurality !== 'singleton') {\n // Twins/triplets: no IOM weekly rate is published, so pro-rate the total\n // band linearly across the 40 weeks. `null` total ⇒ no guideline.\n const total = totalGainBand(category, plurality);\n if (!total) return null;\n if (weeks <= 0) return { min: 0, max: 0 };\n const frac = Math.min(weeks, 40) / 40;\n return { min: total.min * frac, max: total.max * frac };\n }\n if (weeks <= 0) return { min: 0, max: 0 };\n if (weeks <= FIRST_TRIMESTER_WEEKS) {\n const frac = weeks / FIRST_TRIMESTER_WEEKS;\n return {\n min: FIRST_TRIMESTER_GAIN.min * frac,\n max: FIRST_TRIMESTER_GAIN.max * frac,\n };\n }\n const extraWeeks = Math.min(weeks, 40) - FIRST_TRIMESTER_WEEKS;\n const rate = RATE_BANDS[category];\n return {\n min: FIRST_TRIMESTER_GAIN.min + rate.min * extraWeeks,\n max: FIRST_TRIMESTER_GAIN.max + rate.max * extraWeeks,\n };\n}\n\nexport function assessWeightGain(input: WeightGainInput): WeightGainResult {\n const category = bmiCategory(input.prePregnancyBmi);\n const plurality = input.plurality ?? 'singleton';\n const totalRange = totalGainBand(category, plurality);\n const recommendedToDate = totalRange\n ? recommendedGainToDate(category, input.gestationalWeeks, plurality)\n : null;\n const actualGainKg = input.currentWeightKg - input.prePregnancyWeightKg;\n const status: GainStatus | null = recommendedToDate\n ? actualGainKg < recommendedToDate.min\n ? 'below'\n : actualGainKg > recommendedToDate.max\n ? 'above'\n : 'within'\n : null;\n\n // 2nd/3rd-trimester average weekly rate to date — singleton only (the IOM\n // publishes weekly rate bands only for singletons), and only after week 13.\n let weeklyRate: number | null = null;\n let rateStatus: GainStatus | null = null;\n if (\n plurality === 'singleton' &&\n input.gestationalWeeks > FIRST_TRIMESTER_WEEKS\n ) {\n const weeks = input.gestationalWeeks - FIRST_TRIMESTER_WEEKS;\n weeklyRate = (actualGainKg - FIRST_TRIMESTER_MIDPOINT) / weeks;\n const band = RATE_BANDS[category];\n rateStatus =\n weeklyRate < band.min\n ? 'below'\n : weeklyRate > band.max\n ? 'above'\n : 'within';\n }\n\n return {\n category,\n plurality,\n totalRange,\n recommendedToDate,\n actualGainKg,\n status,\n weeklyRate,\n rateStatus,\n };\n}\n","/* ------------------------------------------------------------------ */\n/* PregnancyWeightGain — actual vs IOM-recommended gestational weight */\n/* gain, keyed off pre-pregnancy BMI. */\n/* */\n/* Composes the BMI maths from bmi-calculator and the IOM bands in */\n/* `./weight-gain` (both pure, separately tested). Metric only. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport { computeBmi } from '../bmi-calculator/bmi';\nimport type { Plurality } from '../_shared/obstetrics';\nimport {\n type WeightGainResult,\n type GainStatus,\n type GainBand,\n assessWeightGain,\n} from './weight-gain';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\nconst STATUS_BADGE: Record<GainStatus, 'info' | 'success' | 'warning'> = {\n below: 'warning',\n within: 'success',\n above: 'warning',\n};\n\n/**\n * DS token NAME backing each gain-status chip — the solid-fill companion of the\n * on-screen `STATUS_BADGE` variant (Badge `warning` fills `--warning`,\n * `success` fills `--success`). Passed as the card's `highlightToken` so the\n * inserted PNG chip matches the on-screen status badge; `InsertButton` resolves\n * the name to a concrete colour at raster time.\n */\nconst STATUS_HIGHLIGHT_TOKEN: Record<GainStatus, string> = {\n below: '--warning-readable',\n within: '--success',\n above: '--warning-readable',\n};\n\n/**\n * Gain-status chip token. The `below` / `above` statuses resolve to\n * `--warning-readable`, which the result card's colour probe resolves in the live\n * themed DOM: orange-600 in light, non-accessible mode (where bare `--warning`\n * yellow only reaches ~3.2:1 on the white card) and `--warning` elsewhere, whose\n * deepened ramp already clears contrast. Resolving the token NAME at the card\n * means the choice tracks the live theme regardless of where the theme class\n * lives. The `within` (`--success`) status is unchanged.\n */\nfunction statusHighlightToken(status: GainStatus): string {\n return STATUS_HIGHLIGHT_TOKEN[status];\n}\n\nexport interface PregnancyWeightGainProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** Pre-fill the height (cm) — e.g. shared from a BMI measurement. */\n defaultHeightCm?: number;\n /** Pre-fill the pre-pregnancy weight (kg) from the patient record. */\n defaultPrePregnancyKg?: number;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: WeightGainResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Verb the result-action buttons perform. Defaults to `'insert'` (editor\n * extension). Pass `'copy'` from an app shell to copy the result to the\n * clipboard instead.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyWeightGain = forwardRef<\n HTMLDivElement,\n PregnancyWeightGainProps\n>(\n (\n {\n defaultPlurality = 'singleton',\n defaultHeightCm,\n defaultPrePregnancyKg,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [heightCm, setHeightCm] = useState<number | null>(\n defaultHeightCm ?? null,\n );\n const [prePregnancyKg, setPrePregnancyKg] = useState<number | null>(\n defaultPrePregnancyKg ?? null,\n );\n const [currentKg, setCurrentKg] = useState<number | null>(null);\n const [weeks, setWeeks] = useState<number | null>(null);\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n\n const prePregnancyBmi = computeBmi(prePregnancyKg, heightCm);\n\n const result = useMemo<WeightGainResult | null>(() => {\n if (\n prePregnancyBmi === null ||\n prePregnancyKg === null ||\n currentKg === null ||\n weeks === null\n ) {\n return null;\n }\n return assessWeightGain({\n prePregnancyBmi,\n prePregnancyWeightKg: prePregnancyKg,\n currentWeightKg: currentKg,\n gestationalWeeks: weeks,\n plurality,\n });\n }, [prePregnancyBmi, prePregnancyKg, currentKg, weeks, plurality]);\n\n const kg = useMemo(\n () =>\n new Intl.NumberFormat(i18n.language, {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const unit = t('pregnancyWeightGain.units.kg');\n const band = (b: GainBand): string =>\n `${kg.format(b.min)} – ${kg.format(b.max)} ${unit}`;\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-weight-gain\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={`${t('pregnancyWeightGain.height')} (${t('pregnancyWeightGain.units.cm')})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.5}\n value={heightCm}\n onChange={setHeightCm}\n />\n </FormField>\n <FormField\n label={`${t('pregnancyWeightGain.prePregnancyWeight')} (${unit})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={prePregnancyKg}\n onChange={setPrePregnancyKg}\n />\n </FormField>\n <FormField\n label={`${t('pregnancyWeightGain.currentWeight')} (${unit})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={currentKg}\n onChange={setCurrentKg}\n />\n </FormField>\n <FormField label={t('pregnancyWeightGain.gestationalWeeks')}>\n <NumberInput\n mode=\"integer\"\n min={0}\n max={42}\n value={weeks}\n onChange={setWeeks}\n />\n </FormField>\n </div>\n\n <RadioGroup\n label={t('pregnancyWeightGain.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('pregnancyWeightGain.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio label={t('pregnancyWeightGain.plurality.twin')} value=\"twin\" />\n <Radio\n label={t('pregnancyWeightGain.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyWeightGain.actualGain')}: ${kg.format(\n result.actualGainKg,\n )} ${unit}.${\n result.status\n ? ` ${t(`pregnancyWeightGain.status.${result.status}`)}.`\n : ` ${t('pregnancyWeightGain.noGuideline')}`\n }`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.prePregnancyBmi')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {kg.format(prePregnancyBmi ?? 0)} ·{' '}\n {t(`pregnancyWeightGain.category.${result.category}`)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.actualGain')}\n </dt>\n <dd className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-metric ds:text-foreground\">\n {kg.format(result.actualGainKg)} {unit}\n </span>\n {result.status ? (\n <Badge variant={STATUS_BADGE[result.status]} size=\"lg\">\n {t(`pregnancyWeightGain.status.${result.status}`)}\n </Badge>\n ) : null}\n </dd>\n </div>\n {result.recommendedToDate && result.totalRange ? (\n <>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.recommendedToDate')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {band(result.recommendedToDate)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.recommendedTotal')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {band(result.totalRange)}\n </dd>\n </div>\n </>\n ) : null}\n </dl>\n {result.totalRange ? null : (\n <p className=\"type-body ds:text-foreground\">\n {t('pregnancyWeightGain.noGuideline')}\n </p>\n )}\n {result.weeklyRate !== null && result.rateStatus ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyWeightGain.weeklyRate')}\n </span>\n <span className=\"type-body ds:text-foreground\">\n {t('pregnancyWeightGain.perWeek', {\n value: kg.format(result.weeklyRate),\n })}\n </span>\n <Badge variant={STATUS_BADGE[result.rateStatus]}>\n {t(`pregnancyWeightGain.status.${result.rateStatus}`)}\n </Badge>\n </div>\n ) : null}\n <p className=\"type-body-sm ds:text-muted-foreground\">\n {t(\n plurality === 'singleton'\n ? 'pregnancyWeightGain.disclaimer'\n : 'pregnancyWeightGain.disclaimerMultiple',\n )}\n </p>\n {result.status &&\n result.recommendedToDate &&\n result.totalRange &&\n (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.weightGain'),\n icon: 'baby',\n highlight: t(`pregnancyWeightGain.status.${result.status}`),\n // Chip shares the gain-status semantic token so the\n // inserted PNG chip matches the on-screen status badge —\n // with the contrast-safe orange override for the\n // `--warning` below/above statuses.\n highlightToken: statusHighlightToken(result.status),\n brand: insertBrand,\n fields: [\n {\n // Actual gain is the headline trend → trending-up glyph.\n icon: 'trending-up',\n label: t('pregnancyWeightGain.actualGain'),\n value: `${kg.format(result.actualGainKg)} ${unit}`,\n },\n {\n // Recommended weight band → scale glyph.\n icon: 'scale',\n label: t('pregnancyWeightGain.recommendedToDate'),\n value: band(result.recommendedToDate),\n },\n {\n // Recommended total weight band → scale glyph.\n icon: 'scale',\n label: t('pregnancyWeightGain.recommendedTotal'),\n value: band(result.totalRange),\n },\n ],\n }}\n />\n ) : null}\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyWeightGain.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nPregnancyWeightGain.displayName = 'PregnancyWeightGain';\n"],"names":["TOTAL_GAIN_BANDS","TWIN_TOTAL_GAIN_BANDS","totalGainBand","category","plurality","RATE_BANDS","FIRST_TRIMESTER_GAIN","FIRST_TRIMESTER_WEEKS","FIRST_TRIMESTER_MIDPOINT","recommendedGainToDate","weeks","total","frac","extraWeeks","rate","assessWeightGain","input","bmiCategory","totalRange","recommendedToDate","actualGainKg","status","weeklyRate","rateStatus","band","rootVariants","cva","STATUS_BADGE","STATUS_HIGHLIGHT_TOKEN","statusHighlightToken","PregnancyWeightGain","forwardRef","defaultPlurality","defaultHeightCm","defaultPrePregnancyKg","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","id","width","className","ref","t","i18n","useTranslation","heightCm","setHeightCm","useState","prePregnancyKg","setPrePregnancyKg","currentKg","setCurrentKg","setWeeks","setPlurality","prePregnancyBmi","computeBmi","result","useMemo","kg","useEffect","unit","b","jsxs","jsx","FormField","NumberInput","RadioGroup","next","Radio","Card","Badge","Fragment","InsertButton"],"mappings":"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"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { jsxs as n, jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as q, useState as G, useCallback as g, useRef as L, useImperativeHandle as J, useMemo as Q } from "react";
|
|
3
3
|
import { useTranslation as V } from "react-i18next";
|
|
4
|
-
import * as
|
|
4
|
+
import * as a from "@radix-ui/react-dialog";
|
|
5
5
|
import { B as u } from "./button-DD_0Xdmr.js";
|
|
6
6
|
import { I as W } from "./icon-button-LqoiKcUN.js";
|
|
7
7
|
import { L as X } from "./logo-1FuSGx0n.js";
|
|
8
|
-
import { u as Y } from "./registry-
|
|
8
|
+
import { u as Y } from "./registry-DvAUVLHh.js";
|
|
9
9
|
import { E as h } from "./eye-off-xEXDAh5z.js";
|
|
10
10
|
import { U as Z } from "./user-CPxpqFjJ.js";
|
|
11
11
|
import { L as _ } from "./log-out-616hnn2-.js";
|
|
12
12
|
const $ = {
|
|
13
13
|
id: "privacy-lock",
|
|
14
|
-
|
|
14
|
+
// lock() opens the privacy overlay → `open`; unlock() closes it → `dismiss`.
|
|
15
|
+
// There is no form to submit, so the previous `submit` capability is dropped.
|
|
16
|
+
capabilities: ["open", "dismiss"],
|
|
15
17
|
state: {
|
|
16
18
|
isLocked: {
|
|
17
19
|
type: "boolean",
|
|
@@ -22,7 +24,8 @@ const $ = {
|
|
|
22
24
|
},
|
|
23
25
|
actions: {
|
|
24
26
|
lock: {
|
|
25
|
-
safety: "
|
|
27
|
+
safety: "read",
|
|
28
|
+
idempotent: !0,
|
|
26
29
|
descriptionKey: "ui.agent.privacyLock.actions.lock",
|
|
27
30
|
description: "Open the privacy overlay.",
|
|
28
31
|
invoke: (t) => {
|
|
@@ -30,7 +33,8 @@ const $ = {
|
|
|
30
33
|
}
|
|
31
34
|
},
|
|
32
35
|
unlock: {
|
|
33
|
-
safety: "
|
|
36
|
+
safety: "read",
|
|
37
|
+
idempotent: !0,
|
|
34
38
|
descriptionKey: "ui.agent.privacyLock.actions.unlock",
|
|
35
39
|
description: "Close the privacy overlay (consumer-confirmed action).",
|
|
36
40
|
invoke: (t) => {
|
|
@@ -58,18 +62,18 @@ const $ = {
|
|
|
58
62
|
onUnlock: b,
|
|
59
63
|
onAccountPage: m,
|
|
60
64
|
onSignOut: v,
|
|
61
|
-
triggerIcon:
|
|
62
|
-
triggerAriaLabel:
|
|
63
|
-
triggerTooltip:
|
|
64
|
-
title:
|
|
65
|
-
description:
|
|
66
|
-
unlockLabel:
|
|
65
|
+
triggerIcon: D,
|
|
66
|
+
triggerAriaLabel: P,
|
|
67
|
+
triggerTooltip: T,
|
|
68
|
+
title: I,
|
|
69
|
+
description: O,
|
|
70
|
+
unlockLabel: w,
|
|
67
71
|
accountPageLabel: A,
|
|
68
72
|
signOutLabel: N,
|
|
69
73
|
className: R,
|
|
70
74
|
...c
|
|
71
75
|
}, j) => {
|
|
72
|
-
const { t: r } = V(), [z, C] = G(x), d = t !== void 0, l = d ? t : z,
|
|
76
|
+
const { t: r } = V(), [z, C] = G(x), d = t !== void 0, l = d ? t : z, i = g(
|
|
73
77
|
(e) => {
|
|
74
78
|
d || C(e), s == null || s(e);
|
|
75
79
|
},
|
|
@@ -81,10 +85,10 @@ const $ = {
|
|
|
81
85
|
const U = Q(
|
|
82
86
|
() => ({
|
|
83
87
|
isLocked: () => f.current,
|
|
84
|
-
lock: () =>
|
|
85
|
-
unlock: () =>
|
|
88
|
+
lock: () => i(!0),
|
|
89
|
+
unlock: () => i(!1)
|
|
86
90
|
}),
|
|
87
|
-
[
|
|
91
|
+
[i]
|
|
88
92
|
);
|
|
89
93
|
Y(
|
|
90
94
|
$,
|
|
@@ -93,19 +97,19 @@ const $ = {
|
|
|
93
97
|
);
|
|
94
98
|
const p = g(
|
|
95
99
|
(e) => (F) => {
|
|
96
|
-
e == null || e(), F.defaultPrevented ||
|
|
100
|
+
e == null || e(), F.defaultPrevented || i(!1);
|
|
97
101
|
},
|
|
98
|
-
[
|
|
99
|
-
), K =
|
|
102
|
+
[i]
|
|
103
|
+
), K = P ?? r("privacyLock.triggerAriaLabel", "Lock screen for privacy"), B = T ?? r("privacyLock.triggerTooltip", "Lock screen"), k = I ?? r("privacyLock.title", "Screen locked for privacy"), E = O ?? r(
|
|
100
104
|
"privacyLock.description",
|
|
101
105
|
"Locking the screen helps protect the privacy of your data."
|
|
102
|
-
), H =
|
|
103
|
-
return /* @__PURE__ */ n(
|
|
104
|
-
/* @__PURE__ */ o(
|
|
106
|
+
), H = w ?? r("privacyLock.unlock", "Unlock screen"), S = A ?? r("privacyLock.accountPage", "Account page"), M = N ?? r("privacyLock.signOut", "Log out");
|
|
107
|
+
return /* @__PURE__ */ n(a.Root, { open: l, onOpenChange: i, children: [
|
|
108
|
+
/* @__PURE__ */ o(a.Trigger, { asChild: !0, children: /* @__PURE__ */ o(
|
|
105
109
|
W,
|
|
106
110
|
{
|
|
107
111
|
ref: y,
|
|
108
|
-
icon:
|
|
112
|
+
icon: D ?? /* @__PURE__ */ o(h, { "aria-hidden": !0 }),
|
|
109
113
|
"aria-label": K,
|
|
110
114
|
tooltip: B,
|
|
111
115
|
className: R,
|
|
@@ -114,9 +118,9 @@ const $ = {
|
|
|
114
118
|
...c
|
|
115
119
|
}
|
|
116
120
|
) }),
|
|
117
|
-
/* @__PURE__ */ n(
|
|
121
|
+
/* @__PURE__ */ n(a.Portal, { children: [
|
|
118
122
|
/* @__PURE__ */ o(
|
|
119
|
-
|
|
123
|
+
a.Overlay,
|
|
120
124
|
{
|
|
121
125
|
className: [
|
|
122
126
|
"ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]",
|
|
@@ -130,7 +134,7 @@ const $ = {
|
|
|
130
134
|
}
|
|
131
135
|
),
|
|
132
136
|
/* @__PURE__ */ o(
|
|
133
|
-
|
|
137
|
+
a.Content,
|
|
134
138
|
{
|
|
135
139
|
"aria-label": k,
|
|
136
140
|
onEscapeKeyDown: (e) => e.preventDefault(),
|
|
@@ -147,7 +151,7 @@ const $ = {
|
|
|
147
151
|
].join(" "),
|
|
148
152
|
children: /* @__PURE__ */ n("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-lg)] ds:w-[min(22rem,calc(100vw-var(--spacing-xl)))] ds:text-center", children: [
|
|
149
153
|
/* @__PURE__ */ o(X, { size: "xl", decorative: !0 }),
|
|
150
|
-
/* @__PURE__ */ o(
|
|
154
|
+
/* @__PURE__ */ o(a.Title, { className: "ds:sr-only", children: k }),
|
|
151
155
|
/* @__PURE__ */ n("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full", children: [
|
|
152
156
|
/* @__PURE__ */ o(
|
|
153
157
|
u,
|
|
@@ -177,7 +181,7 @@ const $ = {
|
|
|
177
181
|
}
|
|
178
182
|
) : null
|
|
179
183
|
] }),
|
|
180
|
-
/* @__PURE__ */ o(
|
|
184
|
+
/* @__PURE__ */ o(a.Description, { className: "type-body-sm ds:opacity-90", children: E })
|
|
181
185
|
] })
|
|
182
186
|
}
|
|
183
187
|
)
|
|
@@ -190,4 +194,4 @@ export {
|
|
|
190
194
|
ee as P,
|
|
191
195
|
$ as p
|
|
192
196
|
};
|
|
193
|
-
//# sourceMappingURL=privacy-lock-
|
|
197
|
+
//# sourceMappingURL=privacy-lock-BzMLQu-j.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy-lock-BzMLQu-j.js","sources":["../../src/components/privacy-lock/privacy-lock.agent.ts","../../src/components/privacy-lock/privacy-lock.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PrivacyLock. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PrivacyLockHandle } from './privacy-lock';\n\nexport const privacyLockAgent: AgentAdapter<PrivacyLockHandle> = {\n id: 'privacy-lock',\n // lock() opens the privacy overlay → `open`; unlock() closes it → `dismiss`.\n // There is no form to submit, so the previous `submit` capability is dropped.\n capabilities: ['open', 'dismiss'],\n state: {\n isLocked: {\n type: 'boolean',\n descriptionKey: 'ui.agent.privacyLock.state.isLocked',\n description: 'True when the privacy overlay is open.',\n read: (handle) => handle.isLocked(),\n },\n },\n actions: {\n lock: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.privacyLock.actions.lock',\n description: 'Open the privacy overlay.',\n invoke: (handle) => {\n handle.lock();\n },\n },\n unlock: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.privacyLock.actions.unlock',\n description: 'Close the privacy overlay (consumer-confirmed action).',\n invoke: (handle) => {\n handle.unlock();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'privacy-lock',\n description: 'Marks the PrivacyLock trigger.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* PrivacyLock — a one-click \"lock my screen\" dialog for operator */\n/* workstations on shared clinic hardware. Clicking the trigger paints */\n/* a full-viewport privacy overlay (blurred backdrop + centred card); */\n/* the only ways out are the three action buttons the consumer wires. */\n/* */\n/* Composed of one `IconButton` trigger and a Radix Dialog overlay. The */\n/* dialog is intentionally *not* dismissible via Escape or outside-click */\n/* — the whole point is to make the screen unreadable until the user */\n/* takes an explicit action. */\n/* */\n/* See `src/components/privacy-lock/privacy-lock.mdx` for usage. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { EyeOff, LogOut, User } from 'lucide-react';\nimport { Button } from '../button';\nimport { IconButton } from '../button/icon-button';\nimport { Logo } from '../logo';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { privacyLockAgent } from './privacy-lock.agent';\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface PrivacyLockHandle {\n isLocked: () => boolean;\n lock: () => void;\n unlock: () => void;\n}\n\nexport interface PrivacyLockProps {\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n /** Uncontrolled initial state. Ignored when `open` is provided. */\n defaultOpen?: boolean;\n /** Fires whenever the dialog opens or closes — trigger click, action button, etc. */\n onOpenChange?: (open: boolean) => void;\n\n /** Fires when the \"Unlock screen\" button is activated. Dialog closes automatically. */\n onUnlock?: () => void;\n /** Fires when \"Account page\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onAccountPage?: () => void;\n /** Fires when \"Log out\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onSignOut?: () => void;\n\n /** Override the trigger icon. Default: `lucide-react` `<EyeOff />`. */\n triggerIcon?: ReactNode;\n /** Accessible name for the trigger. Default: t('privacyLock.triggerAriaLabel'). */\n triggerAriaLabel?: string;\n /** Tooltip for the trigger. Default: t('privacyLock.triggerTooltip'). */\n triggerTooltip?: string;\n\n /** Accessible title of the dialog (visually hidden). Default: t('privacyLock.title'). */\n title?: string;\n /** Visible supporting text under the action buttons. Default: t('privacyLock.description'). */\n description?: string;\n /** Label for the \"Unlock screen\" button. Default: t('privacyLock.unlock'). */\n unlockLabel?: string;\n /** Label for the \"Account page\" button. Default: t('privacyLock.accountPage'). */\n accountPageLabel?: string;\n /** Label for the \"Log out\" button. Default: t('privacyLock.signOut'). */\n signOutLabel?: string;\n\n /** Extra classes on the trigger `IconButton`. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PrivacyLock = forwardRef<HTMLButtonElement, PrivacyLockProps>(\n (\n {\n open,\n defaultOpen = false,\n onOpenChange,\n onUnlock,\n onAccountPage,\n onSignOut,\n triggerIcon,\n triggerAriaLabel,\n triggerTooltip,\n title,\n description,\n unlockLabel,\n accountPageLabel,\n signOutLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const latestOpenRef = useRef(isOpen);\n latestOpenRef.current = isOpen;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement, []);\n\n const agentHandle = useMemo<PrivacyLockHandle>(\n () => ({\n isLocked: () => latestOpenRef.current,\n lock: () => setOpen(true),\n unlock: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(\n privacyLockAgent,\n agentHandle,\n (rest as { id?: string }).id,\n );\n\n // Every action closes the dialog after firing the consumer's\n // callback. Consumers that need to keep the dialog open (e.g.\n // confirmation step) should control `open` themselves and skip the\n // close on the relevant callback.\n const handleAction = useCallback(\n (callback?: () => void) => (event: MouseEvent<HTMLButtonElement>) => {\n callback?.();\n // Only close if the consumer didn't preventDefault — lets a\n // controlled consumer stop the auto-close for guarded actions.\n if (!event.defaultPrevented) setOpen(false);\n },\n [setOpen],\n );\n\n const resolvedTriggerAriaLabel =\n triggerAriaLabel ??\n t('privacyLock.triggerAriaLabel', 'Lock screen for privacy');\n const resolvedTriggerTooltip =\n triggerTooltip ?? t('privacyLock.triggerTooltip', 'Lock screen');\n const resolvedTitle =\n title ?? t('privacyLock.title', 'Screen locked for privacy');\n const resolvedDescription =\n description ??\n t(\n 'privacyLock.description',\n 'Locking the screen helps protect the privacy of your data.',\n );\n const resolvedUnlockLabel =\n unlockLabel ?? t('privacyLock.unlock', 'Unlock screen');\n const resolvedAccountPageLabel =\n accountPageLabel ?? t('privacyLock.accountPage', 'Account page');\n const resolvedSignOutLabel =\n signOutLabel ?? t('privacyLock.signOut', 'Log out');\n\n return (\n <RadixDialog.Root open={isOpen} onOpenChange={setOpen}>\n <RadixDialog.Trigger asChild>\n <IconButton\n ref={triggerRef}\n icon={triggerIcon ?? <EyeOff aria-hidden />}\n aria-label={resolvedTriggerAriaLabel}\n tooltip={resolvedTriggerTooltip}\n className={className}\n data-component=\"privacy-lock\"\n data-component-id={(rest as { id?: string }).id}\n {...rest}\n />\n </RadixDialog.Trigger>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/40 ds:backdrop-blur-xl',\n // Fade-in / fade-out via Radix data-state. Gated on\n // motion-reduce per accessibility requirements.\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n />\n <RadixDialog.Content\n aria-label={resolvedTitle}\n // Make the overlay non-dismissible by ambient input. The only\n // way out is an explicit action button — preserving the\n // \"locked\" contract. Screen readers + assistive tech still\n // reach the buttons via Tab.\n onEscapeKeyDown={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n // Radix's default closes the dialog and returns focus to the\n // trigger (per the WAI-ARIA Dialog pattern). Stacked with\n // Radix Tooltip — which opens on focus per the WAI-ARIA\n // Tooltip pattern — that produces a tooltip stuck on the\n // lock icon every time the user unlocks. PrivacyLock's UX\n // contract is \"unlock and get out of the user's way\" (cf.\n // macOS / Windows / 1Password unlock flows: focus returns to\n // the page, not the unlock control), so we opt out of\n // Radix's auto-focus return and let focus fall to the body.\n onCloseAutoFocus={(event) => event.preventDefault()}\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal)]',\n 'ds:flex ds:items-center ds:justify-center',\n 'ds:focus:outline-none',\n 'ds:text-[color:var(--foreground)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n >\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-lg)] ds:w-[min(22rem,calc(100vw-var(--spacing-xl)))] ds:text-center\">\n <Logo size=\"xl\" decorative />\n <RadixDialog.Title className=\"ds:sr-only\">\n {resolvedTitle}\n </RadixDialog.Title>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full\">\n <Button\n intent=\"primary\"\n startIcon={<EyeOff aria-hidden />}\n onClick={handleAction(onUnlock)}\n >\n {resolvedUnlockLabel}\n </Button>\n {onAccountPage ? (\n <Button\n intent=\"secondary\"\n startIcon={<User aria-hidden />}\n onClick={handleAction(onAccountPage)}\n >\n {resolvedAccountPageLabel}\n </Button>\n ) : null}\n {onSignOut ? (\n <Button\n intent=\"secondary\"\n startIcon={<LogOut aria-hidden />}\n onClick={handleAction(onSignOut)}\n >\n {resolvedSignOutLabel}\n </Button>\n ) : null}\n </div>\n <RadixDialog.Description className=\"type-body-sm ds:opacity-90\">\n {resolvedDescription}\n </RadixDialog.Description>\n </div>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n },\n);\nPrivacyLock.displayName = 'PrivacyLock';\n"],"names":["privacyLockAgent","handle","PrivacyLock","forwardRef","open","defaultOpen","onOpenChange","onUnlock","onAccountPage","onSignOut","triggerIcon","triggerAriaLabel","triggerTooltip","title","description","unlockLabel","accountPageLabel","signOutLabel","className","rest","ref","t","useTranslation","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","setOpen","useCallback","next","latestOpenRef","useRef","triggerRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","handleAction","callback","event","resolvedTriggerAriaLabel","resolvedTriggerTooltip","resolvedTitle","resolvedDescription","resolvedUnlockLabel","resolvedAccountPageLabel","resolvedSignOutLabel","RadixDialog","jsx","IconButton","EyeOff","jsxs","Logo","Button","User","LogOut"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { c as b } from "./index-D2ZczOXr.js";
|
|
|
4
4
|
import { useTranslation as R } from "react-i18next";
|
|
5
5
|
import { E as se } from "./empty-state-BLy7tigq.js";
|
|
6
6
|
import { L as Q } from "./link-DrD_cRUg.js";
|
|
7
|
-
import { S as
|
|
8
|
-
import { i as
|
|
9
|
-
import { u as X } from "./registry-
|
|
7
|
+
import { S as W } from "./separator-CYU_bGFn.js";
|
|
8
|
+
import { i as _ } from "./is-safe-url-DkETxeHz.js";
|
|
9
|
+
import { u as X } from "./registry-DvAUVLHh.js";
|
|
10
10
|
import * as C from "@radix-ui/react-popover";
|
|
11
11
|
import { u as ae } from "./use-controllable-state-BiY4xTzM.js";
|
|
12
12
|
import { I as te } from "./icon-button-LqoiKcUN.js";
|
|
@@ -42,6 +42,7 @@ const oe = [
|
|
|
42
42
|
actions: {
|
|
43
43
|
open: {
|
|
44
44
|
safety: "read",
|
|
45
|
+
idempotent: !0,
|
|
45
46
|
descriptionKey: "ui.agent.productHubTray.actions.open",
|
|
46
47
|
description: "Open the product-updates panel.",
|
|
47
48
|
invoke: (s) => {
|
|
@@ -50,6 +51,7 @@ const oe = [
|
|
|
50
51
|
},
|
|
51
52
|
close: {
|
|
52
53
|
safety: "read",
|
|
54
|
+
idempotent: !0,
|
|
53
55
|
descriptionKey: "ui.agent.productHubTray.actions.close",
|
|
54
56
|
description: "Close the product-updates panel.",
|
|
55
57
|
invoke: (s) => {
|
|
@@ -194,7 +196,7 @@ function Y({
|
|
|
194
196
|
className: l,
|
|
195
197
|
...u
|
|
196
198
|
}) {
|
|
197
|
-
const { t: p } = R(), m = de(s.imageUrl),
|
|
199
|
+
const { t: p } = R(), m = de(s.imageUrl), y = !!s.url && _(s.url), d = !!s.unseen, f = d ? /* @__PURE__ */ e("span", { className: "ds:sr-only", children: p("productHubTray.unseenLabel", ", new") }) : null;
|
|
198
200
|
return /* @__PURE__ */ r(
|
|
199
201
|
"div",
|
|
200
202
|
{
|
|
@@ -233,7 +235,7 @@ function Y({
|
|
|
233
235
|
className: "ds:inline-block ds:size-1.5 ds:shrink-0 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--primary)] ds:forced-colors:bg-[Highlight]"
|
|
234
236
|
}
|
|
235
237
|
) : null,
|
|
236
|
-
|
|
238
|
+
y ? (
|
|
237
239
|
// A real (non-display:contents) anchor so the row is reliably
|
|
238
240
|
// keyboard-focusable; the ::after stretch keeps the whole row
|
|
239
241
|
// clickable and carries the focus ring.
|
|
@@ -348,7 +350,7 @@ const ge = F(
|
|
|
348
350
|
unseenCount: u,
|
|
349
351
|
onOpenChange: p,
|
|
350
352
|
onItemActivate: m,
|
|
351
|
-
triggerLabel:
|
|
353
|
+
triggerLabel: y,
|
|
352
354
|
maxVisible: d = 10,
|
|
353
355
|
emptyState: f,
|
|
354
356
|
defaultOpen: I = !1,
|
|
@@ -362,31 +364,31 @@ const ge = F(
|
|
|
362
364
|
const { t: n } = R(), [v, g] = ae({
|
|
363
365
|
defaultValue: I,
|
|
364
366
|
onChange: p
|
|
365
|
-
}), k = v ?? !1, t = u ?? a.filter((h) => h.unseen).length, P =
|
|
367
|
+
}), k = v ?? !1, t = u ?? a.filter((h) => h.unseen).length, P = y ?? (t > 0 ? n("productHubTray.triggerLabel", {
|
|
366
368
|
count: t,
|
|
367
369
|
defaultValue: "What's new, {{count}} unseen updates"
|
|
368
370
|
}) : n("productHubTray.triggerLabelNone", "What's new")), U = fe(
|
|
369
371
|
t,
|
|
370
372
|
n("productHubTray.badgeCountOverflow", "99+")
|
|
371
|
-
), K = a.slice(0, Math.max(0, d)), A = !l && !i && K.length > 0,
|
|
372
|
-
|
|
373
|
+
), K = a.slice(0, Math.max(0, d)), A = !l && !i && K.length > 0, q = o && _(o) ? o : void 0, E = w(a);
|
|
374
|
+
E.current = a;
|
|
373
375
|
const B = w(u);
|
|
374
376
|
B.current = u;
|
|
375
377
|
const ee = G(
|
|
376
378
|
() => ({
|
|
377
379
|
open: () => g(!0),
|
|
378
380
|
close: () => g(!1),
|
|
379
|
-
getUnseenCount: () => B.current ??
|
|
381
|
+
getUnseenCount: () => B.current ?? E.current.filter((h) => h.unseen).length
|
|
380
382
|
}),
|
|
381
383
|
[g]
|
|
382
384
|
), D = w(null);
|
|
383
385
|
J(T, () => D.current, []), X(ie, ee, s);
|
|
384
|
-
let
|
|
385
|
-
return l ?
|
|
386
|
+
let x;
|
|
387
|
+
return l ? x = /* @__PURE__ */ e(Z, { children: l }) : i ? x = /* @__PURE__ */ r(S, { children: [
|
|
386
388
|
/* @__PURE__ */ e(j, {}),
|
|
387
389
|
/* @__PURE__ */ e(j, {}),
|
|
388
390
|
/* @__PURE__ */ e(j, {})
|
|
389
|
-
] }) : K.length === 0 ?
|
|
391
|
+
] }) : K.length === 0 ? x = f ?? /* @__PURE__ */ e(ve, {}) : x = K.map((h) => /* @__PURE__ */ e(
|
|
390
392
|
Y,
|
|
391
393
|
{
|
|
392
394
|
item: h,
|
|
@@ -435,19 +437,19 @@ const ge = F(
|
|
|
435
437
|
className: ce({ size: c }),
|
|
436
438
|
children: [
|
|
437
439
|
/* @__PURE__ */ e("div", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]", children: /* @__PURE__ */ e("h3", { className: "ds:m-0 type-title-card ds:text-[color:var(--foreground)]", children: n("productHubTray.panelTitle", "What's new") }) }),
|
|
438
|
-
/* @__PURE__ */ e(
|
|
440
|
+
/* @__PURE__ */ e(W, {}),
|
|
439
441
|
/* @__PURE__ */ e(
|
|
440
442
|
"div",
|
|
441
443
|
{
|
|
442
444
|
role: A ? "list" : void 0,
|
|
443
445
|
"data-max-visible": d,
|
|
444
446
|
className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:overflow-y-auto ds:pt-[var(--spacing-xs)] ds:flex-1 ds:sm:flex-none ds:sm:[max-block-size:var(--product-hub-tray-max-block-size,24rem)]",
|
|
445
|
-
children:
|
|
447
|
+
children: x
|
|
446
448
|
}
|
|
447
449
|
),
|
|
448
|
-
|
|
449
|
-
/* @__PURE__ */ e(
|
|
450
|
-
/* @__PURE__ */ e("div", { className: "ds:flex ds:justify-center ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]", children: /* @__PURE__ */ e(Q, { href:
|
|
450
|
+
q ? /* @__PURE__ */ r(S, { children: [
|
|
451
|
+
/* @__PURE__ */ e(W, {}),
|
|
452
|
+
/* @__PURE__ */ e("div", { className: "ds:flex ds:justify-center ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]", children: /* @__PURE__ */ e(Q, { href: q, external: !0, children: n("productHubTray.openHub", "Open in Product Hub") }) })
|
|
451
453
|
] }) : null
|
|
452
454
|
]
|
|
453
455
|
}
|
|
@@ -460,7 +462,9 @@ const ge = F(
|
|
|
460
462
|
ge.displayName = "ProductHubTray";
|
|
461
463
|
const he = {
|
|
462
464
|
id: "product-hub-panel",
|
|
463
|
-
|
|
465
|
+
// selectItem activates one release row (fires the host hook) without
|
|
466
|
+
// persisting a stored selection → `pick`, not `select_single`.
|
|
467
|
+
capabilities: ["pick"],
|
|
464
468
|
state: {
|
|
465
469
|
items: {
|
|
466
470
|
type: "Array<{ id: string; unseen: boolean }>",
|
|
@@ -479,8 +483,22 @@ const he = {
|
|
|
479
483
|
select_item: {
|
|
480
484
|
safety: "read",
|
|
481
485
|
argsType: "{ id: string }",
|
|
486
|
+
argsSchema: {
|
|
487
|
+
type: "object",
|
|
488
|
+
properties: {
|
|
489
|
+
id: {
|
|
490
|
+
type: "string",
|
|
491
|
+
description: "Stable release id (the data-update-id of the row)."
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
required: ["id"]
|
|
495
|
+
},
|
|
496
|
+
idempotent: !0,
|
|
482
497
|
descriptionKey: "ui.agent.productHubPanel.actions.selectItem",
|
|
483
498
|
description: "Activate the release with the given id (fires the host analytics hook).",
|
|
499
|
+
examples: [
|
|
500
|
+
{ args: { id: "rel-0680" }, note: "Activate a specific release row." }
|
|
501
|
+
],
|
|
484
502
|
invoke: (s, a) => {
|
|
485
503
|
s.selectItem(a.id);
|
|
486
504
|
}
|
|
@@ -522,7 +540,7 @@ const he = {
|
|
|
522
540
|
surface: "elevated"
|
|
523
541
|
}
|
|
524
542
|
}
|
|
525
|
-
),
|
|
543
|
+
), ye = F(
|
|
526
544
|
({
|
|
527
545
|
id: s,
|
|
528
546
|
items: a,
|
|
@@ -532,16 +550,16 @@ const he = {
|
|
|
532
550
|
title: u,
|
|
533
551
|
description: p,
|
|
534
552
|
maxVisible: m = 5,
|
|
535
|
-
emptyState:
|
|
553
|
+
emptyState: y,
|
|
536
554
|
onItemActivate: d,
|
|
537
555
|
locale: f,
|
|
538
556
|
surface: I = "elevated",
|
|
539
557
|
className: L,
|
|
540
558
|
...O
|
|
541
559
|
}, M) => {
|
|
542
|
-
const { t: c } = R(), N = u ?? c("productHubPanel.title", "What's new"), H = a.slice(0, Math.max(0, m)), T = o &&
|
|
560
|
+
const { t: c } = R(), N = u ?? c("productHubPanel.title", "What's new"), H = a.slice(0, Math.max(0, m)), T = o && _(o) ? o : void 0;
|
|
543
561
|
let n;
|
|
544
|
-
l ? n = /* @__PURE__ */ e(Z, { children: l }) : i ? n = /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0", children: [0, 1, 2].map((t) => /* @__PURE__ */ e(j, { density: "panel" }, t)) }) : H.length === 0 ? n =
|
|
562
|
+
l ? n = /* @__PURE__ */ e(Z, { children: l }) : i ? n = /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-[var(--spacing-sm)] ds:pt-0", children: [0, 1, 2].map((t) => /* @__PURE__ */ e(j, { density: "panel" }, t)) }) : H.length === 0 ? n = y ?? /* @__PURE__ */ e("div", { className: "ds:p-[var(--spacing-md)]", children: /* @__PURE__ */ e(
|
|
545
563
|
se,
|
|
546
564
|
{
|
|
547
565
|
variant: "first-use",
|
|
@@ -602,7 +620,7 @@ const he = {
|
|
|
602
620
|
] }),
|
|
603
621
|
n,
|
|
604
622
|
T ? /* @__PURE__ */ r(S, { children: [
|
|
605
|
-
/* @__PURE__ */ e(
|
|
623
|
+
/* @__PURE__ */ e(W, {}),
|
|
606
624
|
/* @__PURE__ */ e("div", { className: "ds:flex ds:justify-center ds:p-[var(--spacing-sm)]", children: /* @__PURE__ */ e(Q, { href: T, external: !0, children: c("productHubPanel.openHub", "Open in Product Hub") }) })
|
|
607
625
|
] }) : null
|
|
608
626
|
]
|
|
@@ -610,11 +628,11 @@ const he = {
|
|
|
610
628
|
);
|
|
611
629
|
}
|
|
612
630
|
);
|
|
613
|
-
|
|
631
|
+
ye.displayName = "ProductHubPanel";
|
|
614
632
|
export {
|
|
615
|
-
|
|
633
|
+
ye as P,
|
|
616
634
|
ge as a,
|
|
617
635
|
ie as b,
|
|
618
636
|
he as p
|
|
619
637
|
};
|
|
620
|
-
//# sourceMappingURL=product-hub-panel-
|
|
638
|
+
//# sourceMappingURL=product-hub-panel-e6pW220e.js.map
|