@alfadocs/ui-kit-debug 0.46.0 → 0.48.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/{agenda-card-CFyWSX7Z.js → agenda-card-BaSfVfrL.js} +25 -29
- package/dist/_chunks/agenda-card-BaSfVfrL.js.map +1 -0
- package/dist/_chunks/{agenda-tray-Dyj9ChHC.js → agenda-tray-DQayYmQ0.js} +50 -67
- package/dist/_chunks/agenda-tray-DQayYmQ0.js.map +1 -0
- package/dist/_chunks/ai-consent-banner-DO5ingMq.js +169 -0
- package/dist/_chunks/ai-consent-banner-DO5ingMq.js.map +1 -0
- package/dist/_chunks/ai-tools-rail-CxYG04cw.js +280 -0
- package/dist/_chunks/ai-tools-rail-CxYG04cw.js.map +1 -0
- package/dist/_chunks/alia-sidebar-DlvyXgVC.js +1126 -0
- package/dist/_chunks/alia-sidebar-DlvyXgVC.js.map +1 -0
- package/dist/_chunks/anamnesis-card-CmkBVAln.js +156 -0
- package/dist/_chunks/anamnesis-card-CmkBVAln.js.map +1 -0
- package/dist/_chunks/appointment-tray-BwDHhWWC.js +419 -0
- package/dist/_chunks/appointment-tray-BwDHhWWC.js.map +1 -0
- package/dist/_chunks/{audio-recorder-C1rhKhSN.js → audio-recorder-DC-v9YFW.js} +81 -91
- package/dist/_chunks/audio-recorder-DC-v9YFW.js.map +1 -0
- package/dist/_chunks/{bmi-calculator-CQqXTVNL.js → bmi-calculator-DdylQzT6.js} +2 -2
- package/dist/_chunks/{bmi-calculator-CQqXTVNL.js.map → bmi-calculator-DdylQzT6.js.map} +1 -1
- package/dist/_chunks/{booking-DlDVuWMd.js → booking-WV2GSru5.js} +291 -303
- package/dist/_chunks/booking-WV2GSru5.js.map +1 -0
- package/dist/_chunks/{calculator-dialog-D-nfvteH.js → calculator-dialog-CFk4I91b.js} +2 -2
- package/dist/_chunks/{calculator-dialog-D-nfvteH.js.map → calculator-dialog-CFk4I91b.js.map} +1 -1
- package/dist/_chunks/calendar-days-C4BmpCZg.js +23 -0
- package/dist/_chunks/calendar-days-C4BmpCZg.js.map +1 -0
- package/dist/_chunks/{calendar-YHFknAGv.js → calendar-oYWOCrnf.js} +195 -210
- package/dist/_chunks/calendar-oYWOCrnf.js.map +1 -0
- package/dist/_chunks/care-plan-card-QmNpGggC.js +252 -0
- package/dist/_chunks/care-plan-card-QmNpGggC.js.map +1 -0
- package/dist/_chunks/care-plan-entry-card-Cnra7vUc.js +318 -0
- package/dist/_chunks/care-plan-entry-card-Cnra7vUc.js.map +1 -0
- package/dist/_chunks/{chat-input-CQe7nR_v.js → chat-input-CFwc7JxL.js} +2 -1
- package/dist/_chunks/{chat-input-CQe7nR_v.js.map → chat-input-CFwc7JxL.js.map} +1 -1
- package/dist/_chunks/{chat-message-ASgGtj-L.js → chat-message-Dm8U2RY1.js} +81 -74
- package/dist/_chunks/chat-message-Dm8U2RY1.js.map +1 -0
- package/dist/_chunks/clinical-note-card-BYo437dU.js +333 -0
- package/dist/_chunks/clinical-note-card-BYo437dU.js.map +1 -0
- package/dist/_chunks/code-block-HoddNOKJ.js +106 -0
- package/dist/_chunks/code-block-HoddNOKJ.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-DHyuAPXM.js → contact-profile-card-DvvVfAA2.js} +102 -115
- package/dist/_chunks/contact-profile-card-DvvVfAA2.js.map +1 -0
- package/dist/_chunks/{cycle-calculator-KxA8dqDf.js → cycle-calculator-DYvGm_m1.js} +2 -2
- package/dist/_chunks/{cycle-calculator-KxA8dqDf.js.map → cycle-calculator-DYvGm_m1.js.map} +1 -1
- package/dist/_chunks/{dialog-BTpZV6It.js → dialog-DMGnSelc.js} +55 -55
- package/dist/_chunks/dialog-DMGnSelc.js.map +1 -0
- package/dist/_chunks/download-CDF1sbL9.js +16 -0
- package/dist/_chunks/download-CDF1sbL9.js.map +1 -0
- package/dist/_chunks/{due-date-calculator-mFxpHLml.js → due-date-calculator-BXd3ANj7.js} +2 -2
- package/dist/_chunks/{due-date-calculator-mFxpHLml.js.map → due-date-calculator-BXd3ANj7.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-BEBUQl9P.js → editable-currency-cell-renderer-CLil9B29.js} +283 -293
- package/dist/_chunks/editable-currency-cell-renderer-CLil9B29.js.map +1 -0
- package/dist/_chunks/entity-card-COhmqHly.js +69 -0
- package/dist/_chunks/entity-card-COhmqHly.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-gWI_uRA1.js → gestational-age-calculator-Crj6FgZw.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-gWI_uRA1.js.map → gestational-age-calculator-Crj6FgZw.js.map} +1 -1
- package/dist/_chunks/{insert-result-C5ABnzDl.js → insert-result-DNdi_JYW.js} +140 -168
- package/dist/_chunks/insert-result-DNdi_JYW.js.map +1 -0
- package/dist/_chunks/is-safe-url-DkETxeHz.js +7 -0
- package/dist/_chunks/is-safe-url-DkETxeHz.js.map +1 -0
- package/dist/_chunks/languages-DsVf_WzT.js +19 -0
- package/dist/_chunks/languages-DsVf_WzT.js.map +1 -0
- package/dist/_chunks/layers-pzGcbLPj.js +34 -0
- package/dist/_chunks/layers-pzGcbLPj.js.map +1 -0
- package/dist/_chunks/{message-card-DSPw5ghw.js → message-card-Dvl1TgaN.js} +15 -19
- package/dist/_chunks/message-card-Dvl1TgaN.js.map +1 -0
- package/dist/_chunks/{message-tray-hSQff9u4.js → message-tray-Dl6GQaaV.js} +2 -2
- package/dist/_chunks/{message-tray-hSQff9u4.js.map → message-tray-Dl6GQaaV.js.map} +1 -1
- package/dist/_chunks/mic-B4Gog3Gi.js +16 -0
- package/dist/_chunks/mic-B4Gog3Gi.js.map +1 -0
- package/dist/_chunks/operator-hero-CM8949Hd.js +198 -0
- package/dist/_chunks/operator-hero-CM8949Hd.js.map +1 -0
- package/dist/_chunks/patient-summary-card-BnTqxcTr.js +443 -0
- package/dist/_chunks/patient-summary-card-BnTqxcTr.js.map +1 -0
- package/dist/_chunks/payment-request-card-B_lyobd0.js +478 -0
- package/dist/_chunks/payment-request-card-B_lyobd0.js.map +1 -0
- package/dist/_chunks/{pdf-viewer-CWEXTlwq.js → pdf-viewer-G8SU6Azw.js} +3 -3
- package/dist/_chunks/pdf-viewer-G8SU6Azw.js.map +1 -0
- package/dist/_chunks/pencil-CfQX-0Qc.js +21 -0
- package/dist/_chunks/pencil-CfQX-0Qc.js.map +1 -0
- package/dist/_chunks/periodontal-chart-card-BYs9hax1.js +455 -0
- package/dist/_chunks/periodontal-chart-card-BYs9hax1.js.map +1 -0
- package/dist/_chunks/phone-Bi5yUm4I.js +20 -0
- package/dist/_chunks/phone-Bi5yUm4I.js.map +1 -0
- package/dist/_chunks/{practice-results-DDi-kvaD.js → practice-results-BFL_mcDW.js} +3 -2
- package/dist/_chunks/{practice-results-DDi-kvaD.js.map → practice-results-BFL_mcDW.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-BtEHaSqy.js → pregnancy-weight-gain-C7dK89jE.js} +2 -2
- package/dist/_chunks/{pregnancy-weight-gain-BtEHaSqy.js.map → pregnancy-weight-gain-C7dK89jE.js.map} +1 -1
- package/dist/_chunks/scan-line-lGioFwLC.js +18 -0
- package/dist/_chunks/scan-line-lGioFwLC.js.map +1 -0
- package/dist/_chunks/shield-check-BjCGH_Sr.js +21 -0
- package/dist/_chunks/shield-check-BjCGH_Sr.js.map +1 -0
- package/dist/_chunks/{sign-document-BCyLpFHJ.js → sign-document-DPI2pY9V.js} +2 -2
- package/dist/_chunks/{sign-document-BCyLpFHJ.js.map → sign-document-DPI2pY9V.js.map} +1 -1
- package/dist/_chunks/{streaming-text-GH07yIYh.js → streaming-text-CfhDqtIT.js} +49 -45
- package/dist/_chunks/streaming-text-CfhDqtIT.js.map +1 -0
- package/dist/_chunks/{transaction-chip-B8ujzowA.js → transaction-chip-BZCa6XDn.js} +8 -6
- package/dist/_chunks/{transaction-chip-B8ujzowA.js.map → transaction-chip-BZCa6XDn.js.map} +1 -1
- package/dist/_chunks/{unit-converter-u3CwNDpP.js → unit-converter-jWp3Z85y.js} +2 -2
- package/dist/_chunks/{unit-converter-u3CwNDpP.js.map → unit-converter-jWp3Z85y.js.map} +1 -1
- package/dist/_chunks/user-cog-BS_qc8nA.js +24 -0
- package/dist/_chunks/user-cog-BS_qc8nA.js.map +1 -0
- package/dist/_chunks/video-BAeICxCT.js +21 -0
- package/dist/_chunks/video-BAeICxCT.js.map +1 -0
- package/dist/_chunks/{workflow-map-BFNpzTiw.js → workflow-map-ZXw-zsZ8.js} +186 -219
- package/dist/_chunks/workflow-map-ZXw-zsZ8.js.map +1 -0
- package/dist/agent-catalog.json +324 -1
- package/dist/components/_shared/code-block.d.ts +39 -0
- package/dist/components/_shared/code-block.d.ts.map +1 -0
- package/dist/components/_shared/entity-card/entity-card.d.ts +40 -0
- package/dist/components/_shared/entity-card/entity-card.d.ts.map +1 -0
- package/dist/components/_shared/entity-card/index.d.ts +3 -0
- package/dist/components/_shared/entity-card/index.d.ts.map +1 -0
- package/dist/components/_shared/index.d.ts +2 -0
- package/dist/components/_shared/index.d.ts.map +1 -1
- package/dist/components/_shared/is-safe-url.d.ts +13 -0
- package/dist/components/_shared/is-safe-url.d.ts.map +1 -0
- package/dist/components/agenda-card/agenda-card.d.ts +1 -2
- package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
- package/dist/components/agenda-card/index.d.ts +2 -1
- package/dist/components/agenda-card/index.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +6 -5
- package/dist/components/agenda-card/index.js.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/ai-consent-banner.agent.d.ts +4 -0
- package/dist/components/ai-consent-banner/ai-consent-banner.agent.d.ts.map +1 -0
- package/dist/components/ai-consent-banner/ai-consent-banner.d.ts +45 -0
- package/dist/components/ai-consent-banner/ai-consent-banner.d.ts.map +1 -0
- package/dist/components/ai-consent-banner/index.d.ts +4 -0
- package/dist/components/ai-consent-banner/index.d.ts.map +1 -0
- package/dist/components/ai-consent-banner/index.js +6 -0
- package/dist/components/ai-consent-banner/index.js.map +1 -0
- package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts +4 -0
- package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -0
- package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +60 -0
- package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -0
- package/dist/components/ai-tools-rail/index.d.ts +4 -0
- package/dist/components/ai-tools-rail/index.d.ts.map +1 -0
- package/dist/components/ai-tools-rail/index.js +6 -0
- package/dist/components/ai-tools-rail/index.js.map +1 -0
- package/dist/components/anamnesis-card/anamnesis-card.d.ts +68 -0
- package/dist/components/anamnesis-card/anamnesis-card.d.ts.map +1 -0
- package/dist/components/anamnesis-card/index.d.ts +3 -0
- package/dist/components/anamnesis-card/index.d.ts.map +1 -0
- package/dist/components/anamnesis-card/index.js +5 -0
- package/dist/components/anamnesis-card/index.js.map +1 -0
- package/dist/components/appointment-card/appointment-card.agent.d.ts +3 -0
- package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -0
- package/dist/components/appointment-card/appointment-card.d.ts +93 -0
- package/dist/components/appointment-card/appointment-card.d.ts.map +1 -0
- package/dist/components/appointment-card/appointment-tray.agent.d.ts +4 -0
- package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -0
- package/dist/components/appointment-card/appointment-tray.d.ts +48 -0
- package/dist/components/appointment-card/appointment-tray.d.ts.map +1 -0
- package/dist/components/appointment-card/index.d.ts +8 -0
- package/dist/components/appointment-card/index.d.ts.map +1 -0
- package/dist/components/appointment-card/index.js +10 -0
- package/dist/components/appointment-card/index.js.map +1 -0
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/badge/badge.d.ts +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/calculator-dialog/index.js +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/card/card.d.ts +1 -1
- package/dist/components/care-plan-card/care-plan-card.agent.d.ts +4 -0
- package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -0
- package/dist/components/care-plan-card/care-plan-card.d.ts +102 -0
- package/dist/components/care-plan-card/care-plan-card.d.ts.map +1 -0
- package/dist/components/care-plan-card/index.d.ts +4 -0
- package/dist/components/care-plan-card/index.d.ts.map +1 -0
- package/dist/components/care-plan-card/index.js +6 -0
- package/dist/components/care-plan-card/index.js.map +1 -0
- package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts +4 -0
- package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -0
- package/dist/components/care-plan-entry-card/care-plan-entry-card.d.ts +110 -0
- package/dist/components/care-plan-entry-card/care-plan-entry-card.d.ts.map +1 -0
- package/dist/components/care-plan-entry-card/index.d.ts +4 -0
- package/dist/components/care-plan-entry-card/index.d.ts.map +1 -0
- package/dist/components/care-plan-entry-card/index.js +6 -0
- package/dist/components/care-plan-entry-card/index.js.map +1 -0
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/chat-message.d.ts +13 -0
- package/dist/components/chat-message/chat-message.d.ts.map +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/clinical-note-card/clinical-note-card.agent.d.ts +4 -0
- package/dist/components/clinical-note-card/clinical-note-card.agent.d.ts.map +1 -0
- package/dist/components/clinical-note-card/clinical-note-card.d.ts +98 -0
- package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -0
- package/dist/components/clinical-note-card/index.d.ts +4 -0
- package/dist/components/clinical-note-card/index.d.ts.map +1 -0
- package/dist/components/clinical-note-card/index.js +6 -0
- package/dist/components/clinical-note-card/index.js.map +1 -0
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/dialog/dialog.d.ts +7 -0
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/message-card/index.js +5 -4
- package/dist/components/message-card/index.js.map +1 -1
- package/dist/components/message-card/message-card.d.ts +1 -2
- package/dist/components/message-card/message-card.d.ts.map +1 -1
- package/dist/components/message-tray/index.js +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/operator-hero/operator-hero.d.ts +9 -0
- package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.d.ts +4 -0
- package/dist/components/patient-summary-card/index.d.ts.map +1 -0
- package/dist/components/patient-summary-card/index.js +6 -0
- package/dist/components/patient-summary-card/index.js.map +1 -0
- package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts +4 -0
- package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -0
- package/dist/components/patient-summary-card/patient-summary-card.d.ts +120 -0
- package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -0
- package/dist/components/payment-card/index.d.ts +7 -0
- package/dist/components/payment-card/index.d.ts.map +1 -0
- package/dist/components/payment-card/index.js +8 -0
- package/dist/components/payment-card/index.js.map +1 -0
- package/dist/components/payment-card/payment-card.agent.d.ts +4 -0
- package/dist/components/payment-card/payment-card.agent.d.ts.map +1 -0
- package/dist/components/payment-card/payment-card.d.ts +71 -0
- package/dist/components/payment-card/payment-card.d.ts.map +1 -0
- package/dist/components/payment-card/payment-request-card.agent.d.ts +4 -0
- package/dist/components/payment-card/payment-request-card.agent.d.ts.map +1 -0
- package/dist/components/payment-card/payment-request-card.d.ts +43 -0
- package/dist/components/payment-card/payment-request-card.d.ts.map +1 -0
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/periodontal-chart-card/index.d.ts +4 -0
- package/dist/components/periodontal-chart-card/index.d.ts.map +1 -0
- package/dist/components/periodontal-chart-card/index.js +7 -0
- package/dist/components/periodontal-chart-card/index.js.map +1 -0
- package/dist/components/periodontal-chart-card/periodontal-chart-card.agent.d.ts +4 -0
- package/dist/components/periodontal-chart-card/periodontal-chart-card.agent.d.ts.map +1 -0
- package/dist/components/periodontal-chart-card/periodontal-chart-card.d.ts +74 -0
- package/dist/components/periodontal-chart-card/periodontal-chart-card.d.ts.map +1 -0
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/public-header/public-header.d.ts +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/stat/stat.d.ts +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +1 -1
- package/dist/components/transaction-chip/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/i18n/locales/ar.d.ts +366 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +367 -1
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +366 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +367 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +366 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +367 -1
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +366 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +367 -1
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +366 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +367 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +366 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +367 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +366 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +367 -1
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +366 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +367 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +366 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +367 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +366 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +367 -1
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +366 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +367 -1
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +366 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +367 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +366 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +367 -1
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +366 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +367 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +366 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +367 -1
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +366 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +367 -1
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +366 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +367 -1
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +366 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +367 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +527 -491
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +367 -1
- package/dist/locales/de.json +367 -1
- package/dist/locales/el.json +367 -1
- package/dist/locales/en.json +367 -1
- package/dist/locales/es.json +367 -1
- package/dist/locales/fr.json +367 -1
- package/dist/locales/hi.json +367 -1
- package/dist/locales/it.json +367 -1
- package/dist/locales/ja.json +367 -1
- package/dist/locales/nl.json +367 -1
- package/dist/locales/pl.json +367 -1
- package/dist/locales/pt.json +367 -1
- package/dist/locales/ro.json +367 -1
- package/dist/locales/ru.json +367 -1
- package/dist/locales/sq.json +367 -1
- package/dist/locales/sv.json +367 -1
- package/dist/locales/tr.json +367 -1
- package/dist/locales/zh.json +367 -1
- package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-types.d.ts +76 -0
- package/dist/patterns/alia-assistant/alia-types.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +42 -1
- package/dist/_chunks/agenda-card-CFyWSX7Z.js.map +0 -1
- package/dist/_chunks/agenda-tray-Dyj9ChHC.js.map +0 -1
- package/dist/_chunks/alia-sidebar-Be8FhKYd.js +0 -837
- package/dist/_chunks/alia-sidebar-Be8FhKYd.js.map +0 -1
- package/dist/_chunks/audio-recorder-C1rhKhSN.js.map +0 -1
- package/dist/_chunks/booking-DlDVuWMd.js.map +0 -1
- package/dist/_chunks/calendar-YHFknAGv.js.map +0 -1
- package/dist/_chunks/chat-message-ASgGtj-L.js.map +0 -1
- package/dist/_chunks/contact-profile-card-DHyuAPXM.js.map +0 -1
- package/dist/_chunks/dialog-BTpZV6It.js.map +0 -1
- package/dist/_chunks/editable-currency-cell-renderer-BEBUQl9P.js.map +0 -1
- package/dist/_chunks/insert-result-C5ABnzDl.js.map +0 -1
- package/dist/_chunks/message-card-DSPw5ghw.js.map +0 -1
- package/dist/_chunks/operator-hero-7LiiP7zi.js +0 -171
- package/dist/_chunks/operator-hero-7LiiP7zi.js.map +0 -1
- package/dist/_chunks/pdf-viewer-CWEXTlwq.js.map +0 -1
- package/dist/_chunks/shield-check-C73ma9Cs.js +0 -36
- package/dist/_chunks/shield-check-C73ma9Cs.js.map +0 -1
- package/dist/_chunks/streaming-text-GH07yIYh.js.map +0 -1
- package/dist/_chunks/workflow-map-BFNpzTiw.js.map +0 -1
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { jsxs as o, jsx as e, Fragment as Z } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as ee, useId as te, useMemo as O } from "react";
|
|
3
|
+
import { c as R } from "./index-D2ZczOXr.js";
|
|
4
|
+
import { useTranslation as ae } from "react-i18next";
|
|
5
|
+
import { B as re } from "./badge-zsf5i5bH.js";
|
|
6
|
+
import { C as S } from "./card-DPmk26CL.js";
|
|
7
|
+
import { K as ne, a as se } from "./key-value-pair-CkQIb9EG.js";
|
|
8
|
+
import { u as oe } from "./registry-nPAVE19X.js";
|
|
9
|
+
const de = {
|
|
10
|
+
id: "periodontal-chart-card",
|
|
11
|
+
capabilities: [],
|
|
12
|
+
state: {
|
|
13
|
+
toothIds: {
|
|
14
|
+
type: "string[]",
|
|
15
|
+
descriptionKey: "ui.agent.periodontalChartCard.state.toothIds",
|
|
16
|
+
description: "FDI ids of the teeth currently charted. Tooth identifiers only — no patient identity.",
|
|
17
|
+
read: (d) => d.getToothIds()
|
|
18
|
+
},
|
|
19
|
+
siteCount: {
|
|
20
|
+
type: "number",
|
|
21
|
+
descriptionKey: "ui.agent.periodontalChartCard.state.siteCount",
|
|
22
|
+
description: "Total number of probing sites rendered.",
|
|
23
|
+
read: (d) => d.getSiteCount()
|
|
24
|
+
},
|
|
25
|
+
deepPocketCount: {
|
|
26
|
+
type: "number",
|
|
27
|
+
descriptionKey: "ui.agent.periodontalChartCard.state.deepPocketCount",
|
|
28
|
+
description: "Number of sites with a probing depth at or above the 6mm severe threshold.",
|
|
29
|
+
read: (d) => d.getDeepPocketCount()
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
actions: {},
|
|
33
|
+
domHooks: {
|
|
34
|
+
root: {
|
|
35
|
+
attr: "data-component",
|
|
36
|
+
value: "periodontal-chart-card",
|
|
37
|
+
description: "Marks the PeriodontalChartCard root region."
|
|
38
|
+
},
|
|
39
|
+
instanceId: {
|
|
40
|
+
attr: "data-component-id",
|
|
41
|
+
sourceProp: "id",
|
|
42
|
+
description: "Sourced from the id prop."
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}, le = R("ds:w-full ds:text-[color:var(--foreground)]", {
|
|
46
|
+
variants: {
|
|
47
|
+
// Matches the kit's other `surface` props. `elevated` wraps in
|
|
48
|
+
// `<Card variant="elevated">`; `flat` drops the chrome for use
|
|
49
|
+
// inside an existing Card / Sheet.
|
|
50
|
+
surface: {
|
|
51
|
+
flat: "",
|
|
52
|
+
elevated: ""
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
defaultVariants: { surface: "elevated" }
|
|
56
|
+
}), ie = R(
|
|
57
|
+
"ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums",
|
|
58
|
+
{
|
|
59
|
+
variants: {
|
|
60
|
+
severity: {
|
|
61
|
+
normal: "ds:text-[color:var(--foreground)]",
|
|
62
|
+
moderate: "ds:font-semibold ds:text-[color:var(--warning-foreground)]",
|
|
63
|
+
severe: "ds:font-bold ds:text-[color:var(--destructive)]"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
defaultVariants: { severity: "normal" }
|
|
67
|
+
}
|
|
68
|
+
), I = 4, N = 6, f = [
|
|
69
|
+
"db",
|
|
70
|
+
"b",
|
|
71
|
+
"mb",
|
|
72
|
+
"dl",
|
|
73
|
+
"l",
|
|
74
|
+
"ml"
|
|
75
|
+
], ce = {
|
|
76
|
+
db: "Disto-buccal",
|
|
77
|
+
b: "Buccal",
|
|
78
|
+
mb: "Mesio-buccal",
|
|
79
|
+
dl: "Disto-lingual",
|
|
80
|
+
l: "Lingual",
|
|
81
|
+
ml: "Mesio-lingual"
|
|
82
|
+
}, L = ["1", "2", "3", "4"];
|
|
83
|
+
function pe(d) {
|
|
84
|
+
return d == null || !Number.isFinite(d) ? "normal" : d >= N ? "severe" : d >= I ? "moderate" : "normal";
|
|
85
|
+
}
|
|
86
|
+
function ue(d) {
|
|
87
|
+
return d === "severe" ? "∗∗" : d === "moderate" ? "∗" : "";
|
|
88
|
+
}
|
|
89
|
+
function A(d) {
|
|
90
|
+
const m = d.trim().charAt(0);
|
|
91
|
+
return L.includes(m) ? m : null;
|
|
92
|
+
}
|
|
93
|
+
const he = ee(
|
|
94
|
+
({
|
|
95
|
+
sites: d,
|
|
96
|
+
dateIso: m,
|
|
97
|
+
dentition: y = "permanent",
|
|
98
|
+
mobility: v,
|
|
99
|
+
summary: u,
|
|
100
|
+
locale: q,
|
|
101
|
+
surface: P = "elevated",
|
|
102
|
+
"aria-label": F,
|
|
103
|
+
id: b,
|
|
104
|
+
className: _,
|
|
105
|
+
...B
|
|
106
|
+
}, K) => {
|
|
107
|
+
const { t: a, i18n: Q } = ae(), k = te(), C = q ?? Q.language ?? "en", { quadrants: D, toothIds: U, siteCount: j, deepPocketCount: z } = O(() => {
|
|
108
|
+
const t = /* @__PURE__ */ new Map();
|
|
109
|
+
let h = 0, p = 0;
|
|
110
|
+
for (const n of d) {
|
|
111
|
+
h += 1, (n.pocketDepthMm ?? 0) >= N && (p += 1);
|
|
112
|
+
let c = t.get(n.tooth);
|
|
113
|
+
c || (c = { tooth: n.tooth, sites: {} }, t.set(n.tooth, c)), c.sites[n.site] = n;
|
|
114
|
+
}
|
|
115
|
+
const l = Array.from(t.values()), i = L.map((n) => ({
|
|
116
|
+
quadrant: n,
|
|
117
|
+
teeth: l.filter((c) => A(c.tooth) === n).sort((c, Y) => c.tooth.localeCompare(Y.tooth, "en"))
|
|
118
|
+
})).filter((n) => n.teeth.length > 0), r = l.filter((n) => A(n.tooth) === null);
|
|
119
|
+
r.length > 0 && i.push({ quadrant: null, teeth: r });
|
|
120
|
+
const s = i.flatMap((n) => n.teeth.map((c) => c.tooth));
|
|
121
|
+
return {
|
|
122
|
+
quadrants: i,
|
|
123
|
+
toothIds: s,
|
|
124
|
+
siteCount: h,
|
|
125
|
+
deepPocketCount: p
|
|
126
|
+
};
|
|
127
|
+
}, [d]);
|
|
128
|
+
oe(
|
|
129
|
+
de,
|
|
130
|
+
{
|
|
131
|
+
getToothIds: () => U,
|
|
132
|
+
getSiteCount: () => j,
|
|
133
|
+
getDeepPocketCount: () => z
|
|
134
|
+
},
|
|
135
|
+
b
|
|
136
|
+
);
|
|
137
|
+
const w = O(() => {
|
|
138
|
+
if (!m) return;
|
|
139
|
+
const t = new Date(m);
|
|
140
|
+
if (!Number.isNaN(t.getTime()))
|
|
141
|
+
try {
|
|
142
|
+
return new Intl.DateTimeFormat(C, {
|
|
143
|
+
dateStyle: "medium"
|
|
144
|
+
}).format(t);
|
|
145
|
+
} catch {
|
|
146
|
+
return t.toISOString().slice(0, 10);
|
|
147
|
+
}
|
|
148
|
+
}, [m, C]), M = a(
|
|
149
|
+
"periodontalChartCard.heading",
|
|
150
|
+
"Periodontal chart"
|
|
151
|
+
), $ = F ?? M, H = {
|
|
152
|
+
permanent: "Permanent dentition",
|
|
153
|
+
primary: "Primary dentition",
|
|
154
|
+
mixed: "Mixed dentition"
|
|
155
|
+
}, T = a(`periodontalChartCard.dentition.${y}`, {
|
|
156
|
+
defaultValue: H[y]
|
|
157
|
+
}), x = (t) => {
|
|
158
|
+
try {
|
|
159
|
+
return new Intl.NumberFormat(C, {
|
|
160
|
+
maximumFractionDigits: 1
|
|
161
|
+
}).format(t);
|
|
162
|
+
} catch {
|
|
163
|
+
return String(t);
|
|
164
|
+
}
|
|
165
|
+
}, g = [];
|
|
166
|
+
(u == null ? void 0 : u.meanPocketDepthMm) != null && g.push({
|
|
167
|
+
key: "meanPocketDepth",
|
|
168
|
+
label: a(
|
|
169
|
+
"periodontalChartCard.summary.meanPocketDepth",
|
|
170
|
+
"Mean probing depth"
|
|
171
|
+
),
|
|
172
|
+
value: a("periodontalChartCard.unit.mm", {
|
|
173
|
+
value: x(u.meanPocketDepthMm),
|
|
174
|
+
defaultValue: "{{value}} mm"
|
|
175
|
+
})
|
|
176
|
+
}), (u == null ? void 0 : u.bleedingOnProbingPercent) != null && g.push({
|
|
177
|
+
key: "bleedingOnProbing",
|
|
178
|
+
label: a(
|
|
179
|
+
"periodontalChartCard.summary.bleedingOnProbing",
|
|
180
|
+
"Bleeding on probing"
|
|
181
|
+
),
|
|
182
|
+
value: a("periodontalChartCard.unit.percent", {
|
|
183
|
+
value: x(u.bleedingOnProbingPercent),
|
|
184
|
+
defaultValue: "{{value}}%"
|
|
185
|
+
})
|
|
186
|
+
});
|
|
187
|
+
const E = (t, h) => {
|
|
188
|
+
if (t == null || !Number.isFinite(t))
|
|
189
|
+
return /* @__PURE__ */ e(
|
|
190
|
+
"span",
|
|
191
|
+
{
|
|
192
|
+
"aria-hidden": "true",
|
|
193
|
+
className: "ds:text-[color:var(--muted-foreground)]",
|
|
194
|
+
children: a("periodontalChartCard.cell.empty", "–")
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
const p = h === "pocket" ? pe(t) : "normal", l = h === "pocket" ? ue(p) : "", i = x(t), r = p === "severe" ? ` ${a("periodontalChartCard.flag.severe", "severe pocket")}` : p === "moderate" ? ` ${a("periodontalChartCard.flag.moderate", "moderate pocket")}` : "";
|
|
198
|
+
return /* @__PURE__ */ o("span", { className: ie({ severity: p }), children: [
|
|
199
|
+
/* @__PURE__ */ e("span", { children: i }),
|
|
200
|
+
l ? /* @__PURE__ */ e("span", { "aria-hidden": "true", children: l }) : null,
|
|
201
|
+
r ? /* @__PURE__ */ e("span", { className: "ds:sr-only", children: r }) : null
|
|
202
|
+
] });
|
|
203
|
+
}, G = (t) => !t || !t.bleeding && !t.suppuration ? /* @__PURE__ */ e(
|
|
204
|
+
"span",
|
|
205
|
+
{
|
|
206
|
+
"aria-hidden": "true",
|
|
207
|
+
className: "ds:text-[color:var(--muted-foreground)]",
|
|
208
|
+
children: a("periodontalChartCard.cell.empty", "–")
|
|
209
|
+
}
|
|
210
|
+
) : /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
211
|
+
t.bleeding ? /* @__PURE__ */ e(
|
|
212
|
+
"span",
|
|
213
|
+
{
|
|
214
|
+
role: "img",
|
|
215
|
+
"aria-label": a(
|
|
216
|
+
"periodontalChartCard.sign.bleeding",
|
|
217
|
+
"Bleeding on probing"
|
|
218
|
+
),
|
|
219
|
+
className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]"
|
|
220
|
+
}
|
|
221
|
+
) : null,
|
|
222
|
+
t.suppuration ? /* @__PURE__ */ e(
|
|
223
|
+
"span",
|
|
224
|
+
{
|
|
225
|
+
role: "img",
|
|
226
|
+
"aria-label": a(
|
|
227
|
+
"periodontalChartCard.sign.suppuration",
|
|
228
|
+
"Suppuration"
|
|
229
|
+
),
|
|
230
|
+
className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]"
|
|
231
|
+
}
|
|
232
|
+
) : null
|
|
233
|
+
] }), J = (t) => {
|
|
234
|
+
const h = {
|
|
235
|
+
1: "Upper right (Q1)",
|
|
236
|
+
2: "Upper left (Q2)",
|
|
237
|
+
3: "Lower left (Q3)",
|
|
238
|
+
4: "Lower right (Q4)"
|
|
239
|
+
}, p = t.quadrant != null ? a(`periodontalChartCard.quadrant.${t.quadrant}`, {
|
|
240
|
+
defaultValue: h[t.quadrant]
|
|
241
|
+
}) : a("periodontalChartCard.quadrant.other", "Other teeth"), l = "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)]", i = "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:font-medium ds:border-b ds:border-[color:var(--border)] ds:whitespace-nowrap";
|
|
242
|
+
return /* @__PURE__ */ e(
|
|
243
|
+
"div",
|
|
244
|
+
{
|
|
245
|
+
className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:overflow-x-auto",
|
|
246
|
+
children: /* @__PURE__ */ o("table", { className: "type-body-sm ds:w-full ds:border-collapse", children: [
|
|
247
|
+
/* @__PURE__ */ e("caption", { className: "type-label ds:text-start ds:mb-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]", children: p }),
|
|
248
|
+
/* @__PURE__ */ e("thead", { children: /* @__PURE__ */ o("tr", { children: [
|
|
249
|
+
/* @__PURE__ */ e(
|
|
250
|
+
"th",
|
|
251
|
+
{
|
|
252
|
+
scope: "col",
|
|
253
|
+
className: "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:border-b ds:border-[color:var(--border)]",
|
|
254
|
+
children: a("periodontalChartCard.column.measure", "Measurement")
|
|
255
|
+
}
|
|
256
|
+
),
|
|
257
|
+
t.teeth.map((r) => /* @__PURE__ */ o(
|
|
258
|
+
"th",
|
|
259
|
+
{
|
|
260
|
+
scope: "col",
|
|
261
|
+
"data-tooth-id": r.tooth,
|
|
262
|
+
className: "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)] ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums",
|
|
263
|
+
children: [
|
|
264
|
+
/* @__PURE__ */ e("span", { className: "ds:sr-only", children: a("periodontalChartCard.toothHeader", {
|
|
265
|
+
tooth: r.tooth,
|
|
266
|
+
defaultValue: "Tooth {{tooth}}"
|
|
267
|
+
}) }),
|
|
268
|
+
/* @__PURE__ */ e("span", { "aria-hidden": "true", children: r.tooth })
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
r.tooth
|
|
272
|
+
))
|
|
273
|
+
] }) }),
|
|
274
|
+
/* @__PURE__ */ o("tbody", { children: [
|
|
275
|
+
/* @__PURE__ */ o("tr", { children: [
|
|
276
|
+
/* @__PURE__ */ e("th", { scope: "row", className: i, children: a(
|
|
277
|
+
"periodontalChartCard.row.pocketDepth",
|
|
278
|
+
"Pocket depth (PD)"
|
|
279
|
+
) }),
|
|
280
|
+
t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
281
|
+
f.map((s) => /* @__PURE__ */ e("span", { className: "ds:sr-only", children: a(`periodontalChartCard.site.${s}`, {
|
|
282
|
+
defaultValue: ce[s]
|
|
283
|
+
}) }, s)),
|
|
284
|
+
/* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)]", children: f.map((s) => {
|
|
285
|
+
var n;
|
|
286
|
+
return /* @__PURE__ */ e("span", { children: E(
|
|
287
|
+
(n = r.sites[s]) == null ? void 0 : n.pocketDepthMm,
|
|
288
|
+
"pocket"
|
|
289
|
+
) }, s);
|
|
290
|
+
}) })
|
|
291
|
+
] }) }, r.tooth))
|
|
292
|
+
] }),
|
|
293
|
+
/* @__PURE__ */ o("tr", { children: [
|
|
294
|
+
/* @__PURE__ */ e("th", { scope: "row", className: i, children: a("periodontalChartCard.row.recession", "Recession (REC)") }),
|
|
295
|
+
t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center", children: f.map((s) => {
|
|
296
|
+
var n;
|
|
297
|
+
return /* @__PURE__ */ e("span", { children: E(
|
|
298
|
+
(n = r.sites[s]) == null ? void 0 : n.recessionMm,
|
|
299
|
+
"recession"
|
|
300
|
+
) }, s);
|
|
301
|
+
}) }) }, r.tooth))
|
|
302
|
+
] }),
|
|
303
|
+
/* @__PURE__ */ o("tr", { children: [
|
|
304
|
+
/* @__PURE__ */ e("th", { scope: "row", className: i, children: a(
|
|
305
|
+
"periodontalChartCard.row.signs",
|
|
306
|
+
"Bleeding / suppuration"
|
|
307
|
+
) }),
|
|
308
|
+
t.teeth.map((r) => /* @__PURE__ */ e("td", { className: l, children: /* @__PURE__ */ e("span", { className: "ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center", children: f.map((s) => /* @__PURE__ */ e("span", { children: G(r.sites[s]) }, s)) }) }, r.tooth))
|
|
309
|
+
] }),
|
|
310
|
+
v && t.teeth.some((r) => v[r.tooth] != null) ? /* @__PURE__ */ o("tr", { children: [
|
|
311
|
+
/* @__PURE__ */ e("th", { scope: "row", className: i, children: a("periodontalChartCard.row.mobility", "Mobility") }),
|
|
312
|
+
t.teeth.map((r) => {
|
|
313
|
+
const s = v[r.tooth];
|
|
314
|
+
return /* @__PURE__ */ e("td", { className: l, children: s != null ? /* @__PURE__ */ e(
|
|
315
|
+
re,
|
|
316
|
+
{
|
|
317
|
+
variant: s >= 2 ? "warning" : "neutral",
|
|
318
|
+
size: "sm",
|
|
319
|
+
"aria-label": a(
|
|
320
|
+
"periodontalChartCard.mobility.label",
|
|
321
|
+
{
|
|
322
|
+
grade: s,
|
|
323
|
+
defaultValue: "Mobility grade {{grade}}"
|
|
324
|
+
}
|
|
325
|
+
),
|
|
326
|
+
children: s
|
|
327
|
+
}
|
|
328
|
+
) : /* @__PURE__ */ e(
|
|
329
|
+
"span",
|
|
330
|
+
{
|
|
331
|
+
"aria-hidden": "true",
|
|
332
|
+
className: "ds:text-[color:var(--muted-foreground)]",
|
|
333
|
+
children: a("periodontalChartCard.cell.empty", "–")
|
|
334
|
+
}
|
|
335
|
+
) }, r.tooth);
|
|
336
|
+
})
|
|
337
|
+
] }) : null
|
|
338
|
+
] })
|
|
339
|
+
] })
|
|
340
|
+
},
|
|
341
|
+
t.quadrant ?? "other"
|
|
342
|
+
);
|
|
343
|
+
}, W = /* @__PURE__ */ o(
|
|
344
|
+
"div",
|
|
345
|
+
{
|
|
346
|
+
role: "group",
|
|
347
|
+
className: "type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)] ds:text-[color:var(--muted-foreground)]",
|
|
348
|
+
"aria-label": a("periodontalChartCard.legend.label", "Chart legend"),
|
|
349
|
+
children: [
|
|
350
|
+
/* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
351
|
+
/* @__PURE__ */ e(
|
|
352
|
+
"span",
|
|
353
|
+
{
|
|
354
|
+
"aria-hidden": "true",
|
|
355
|
+
className: "ds:font-semibold ds:text-[color:var(--warning-foreground)]",
|
|
356
|
+
children: "∗"
|
|
357
|
+
}
|
|
358
|
+
),
|
|
359
|
+
a("periodontalChartCard.legend.moderate", {
|
|
360
|
+
threshold: I,
|
|
361
|
+
defaultValue: "PD ≥ {{threshold}} mm"
|
|
362
|
+
})
|
|
363
|
+
] }),
|
|
364
|
+
/* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
365
|
+
/* @__PURE__ */ e(
|
|
366
|
+
"span",
|
|
367
|
+
{
|
|
368
|
+
"aria-hidden": "true",
|
|
369
|
+
className: "ds:font-bold ds:text-[color:var(--destructive)]",
|
|
370
|
+
children: "∗∗"
|
|
371
|
+
}
|
|
372
|
+
),
|
|
373
|
+
a("periodontalChartCard.legend.severe", {
|
|
374
|
+
threshold: N,
|
|
375
|
+
defaultValue: "PD ≥ {{threshold}} mm"
|
|
376
|
+
})
|
|
377
|
+
] }),
|
|
378
|
+
/* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
379
|
+
/* @__PURE__ */ e(
|
|
380
|
+
"span",
|
|
381
|
+
{
|
|
382
|
+
"aria-hidden": "true",
|
|
383
|
+
className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]"
|
|
384
|
+
}
|
|
385
|
+
),
|
|
386
|
+
a("periodontalChartCard.sign.bleeding", "Bleeding on probing")
|
|
387
|
+
] }),
|
|
388
|
+
/* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
389
|
+
/* @__PURE__ */ e(
|
|
390
|
+
"span",
|
|
391
|
+
{
|
|
392
|
+
"aria-hidden": "true",
|
|
393
|
+
className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]"
|
|
394
|
+
}
|
|
395
|
+
),
|
|
396
|
+
a("periodontalChartCard.sign.suppuration", "Suppuration")
|
|
397
|
+
] })
|
|
398
|
+
]
|
|
399
|
+
}
|
|
400
|
+
), X = D.length === 0, V = /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
|
|
401
|
+
/* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
|
|
402
|
+
/* @__PURE__ */ e(
|
|
403
|
+
"h2",
|
|
404
|
+
{
|
|
405
|
+
id: k,
|
|
406
|
+
className: "type-title-card ds:m-0 ds:text-[color:var(--foreground)]",
|
|
407
|
+
children: M
|
|
408
|
+
}
|
|
409
|
+
),
|
|
410
|
+
/* @__PURE__ */ e("p", { className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]", children: w ? a("periodontalChartCard.subtitle.dated", {
|
|
411
|
+
dentition: T,
|
|
412
|
+
date: w,
|
|
413
|
+
defaultValue: "{{dentition}} · {{date}}"
|
|
414
|
+
}) : T })
|
|
415
|
+
] }),
|
|
416
|
+
g.length > 0 ? /* @__PURE__ */ e(ne, { rowGap: "sm", children: g.map((t) => /* @__PURE__ */ e(se, { label: t.label, value: t.value }, t.key)) }) : null,
|
|
417
|
+
X ? /* @__PURE__ */ e(
|
|
418
|
+
"p",
|
|
419
|
+
{
|
|
420
|
+
role: "status",
|
|
421
|
+
className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]",
|
|
422
|
+
children: a(
|
|
423
|
+
"periodontalChartCard.empty",
|
|
424
|
+
"No periodontal readings recorded."
|
|
425
|
+
)
|
|
426
|
+
}
|
|
427
|
+
) : /* @__PURE__ */ o(Z, { children: [
|
|
428
|
+
/* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: D.map((t) => J(t)) }),
|
|
429
|
+
W
|
|
430
|
+
] })
|
|
431
|
+
] });
|
|
432
|
+
return /* @__PURE__ */ e(
|
|
433
|
+
"div",
|
|
434
|
+
{
|
|
435
|
+
ref: K,
|
|
436
|
+
role: "region",
|
|
437
|
+
"aria-label": $,
|
|
438
|
+
"aria-labelledby": k,
|
|
439
|
+
"data-component": "periodontal-chart-card",
|
|
440
|
+
"data-component-id": b,
|
|
441
|
+
id: b,
|
|
442
|
+
className: le({ surface: P, className: _ }),
|
|
443
|
+
...B,
|
|
444
|
+
children: P === "elevated" ? /* @__PURE__ */ e(S, { variant: "elevated", children: /* @__PURE__ */ e(S.Body, { children: V }) }) : V
|
|
445
|
+
}
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
);
|
|
449
|
+
he.displayName = "PeriodontalChartCard";
|
|
450
|
+
export {
|
|
451
|
+
f as P,
|
|
452
|
+
he as a,
|
|
453
|
+
de as p
|
|
454
|
+
};
|
|
455
|
+
//# sourceMappingURL=periodontal-chart-card-BYs9hax1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"periodontal-chart-card-BYs9hax1.js","sources":["../../src/components/periodontal-chart-card/periodontal-chart-card.agent.ts","../../src/components/periodontal-chart-card/periodontal-chart-card.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { PeriodontalChartCardHandle } from './periodontal-chart-card';\n\n/* -------------------------------------------------------------------- */\n/* PeriodontalChartCard — agent adapter */\n/* */\n/* Read-only clinical chart. The handle returns STRUCTURAL state only — */\n/* the set of charted FDI tooth ids, how many probing sites breach the */\n/* 4mm / 6mm thresholds, and the chart date. NEVER patient identity, */\n/* names, or any free-text PHI — the chart never holds those. */\n/* -------------------------------------------------------------------- */\n\nexport const periodontalChartCardAgent: AgentAdapter<PeriodontalChartCardHandle> =\n {\n id: 'periodontal-chart-card',\n capabilities: [],\n state: {\n toothIds: {\n type: 'string[]',\n descriptionKey: 'ui.agent.periodontalChartCard.state.toothIds',\n description:\n 'FDI ids of the teeth currently charted. Tooth identifiers only — no patient identity.',\n read: (handle) => handle.getToothIds(),\n },\n siteCount: {\n type: 'number',\n descriptionKey: 'ui.agent.periodontalChartCard.state.siteCount',\n description: 'Total number of probing sites rendered.',\n read: (handle) => handle.getSiteCount(),\n },\n deepPocketCount: {\n type: 'number',\n descriptionKey: 'ui.agent.periodontalChartCard.state.deepPocketCount',\n description:\n 'Number of sites with a probing depth at or above the 6mm severe threshold.',\n read: (handle) => handle.getDeepPocketCount(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'periodontal-chart-card',\n description: 'Marks the PeriodontalChartCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n };\n","import {\n forwardRef,\n useId,\n useMemo,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '../badge/badge';\nimport { Card } from '../card/card';\nimport { KeyValueList, KeyValuePair } from '../key-value-pair/key-value-pair';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { periodontalChartCardAgent } from './periodontal-chart-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* PeriodontalChartCard */\n/* */\n/* A DISPLAY-ONLY periodontal (gum) chart. There is no kit equivalent — */\n/* the dental ToothScheme charts caries/restorations per tooth, whereas */\n/* a perio chart records probing measurements per SITE (6 sites/tooth): */\n/* pocket depth (PD), gingival recession (REC), bleeding on probing */\n/* (BoP), suppuration, and tooth mobility. */\n/* */\n/* It renders a compact per-quadrant TABLE (real <table>/<th> semantics */\n/* + scope + caption — NOT a colour-only grid) of teeth x sites. Pocket */\n/* depths >= 4mm are flagged with the warning token, >= 6mm with the */\n/* destructive token, and EACH flag also carries a non-colour cue */\n/* (bold weight + an asterisk / double-asterisk) so the severity is */\n/* legible without colour. Bleeding and suppuration render as small */\n/* glyphs WITH an accessible per-cell label. */\n/* */\n/* The component owns no editing affordance — it is a passive read */\n/* surface for a chart captured elsewhere. */\n/* */\n/* All visible text flows through `useTranslation('ui')` against the */\n/* `periodontalChartCard.*` namespace. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n // Matches the kit's other `surface` props. `elevated` wraps in\n // `<Card variant=\"elevated\">`; `flat` drops the chrome for use\n // inside an existing Card / Sheet.\n surface: {\n flat: '',\n elevated: '',\n },\n },\n defaultVariants: { surface: 'elevated' },\n});\n\n// Per-measurement-cell severity. The colour is paired with a weight bump\n// so the flag survives greyscale / forced-colors — colour is never the\n// sole cue (the asterisk in the cell content carries the same signal).\nconst measureVariants = cva(\n 'ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums',\n {\n variants: {\n severity: {\n normal: 'ds:text-[color:var(--foreground)]',\n moderate: 'ds:font-semibold ds:text-[color:var(--warning-foreground)]',\n severe: 'ds:font-bold ds:text-[color:var(--destructive)]',\n },\n },\n defaultVariants: { severity: 'normal' },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Constants */\n/* -------------------------------------------------------------------- */\n\n/** Probing depth (mm) at/above which a site is flagged moderate. */\nconst MODERATE_POCKET_MM = 4;\n/** Probing depth (mm) at/above which a site is flagged severe. */\nconst SEVERE_POCKET_MM = 6;\n\n/** The six standard probing sites, in buccal-then-lingual display order. */\nexport const PERIODONTAL_SITE_ORDER = [\n 'db',\n 'b',\n 'mb',\n 'dl',\n 'l',\n 'ml',\n] as const;\n\nexport type PeriodontalSiteId = (typeof PERIODONTAL_SITE_ORDER)[number];\n\n/** English fallback labels for the six probing sites (belt-and-braces). */\nconst SITE_DEFAULT: Record<PeriodontalSiteId, string> = {\n db: 'Disto-buccal',\n b: 'Buccal',\n mb: 'Mesio-buccal',\n dl: 'Disto-lingual',\n l: 'Lingual',\n ml: 'Mesio-lingual',\n};\n\n/** FDI quadrant ids (first digit of the FDI tooth number). */\nconst QUADRANT_ORDER = ['1', '2', '3', '4'] as const;\ntype QuadrantId = (typeof QUADRANT_ORDER)[number];\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/** One probing-site reading. */\nexport interface PeriodontalSite {\n /** FDI tooth number, e.g. `'11'`, `'46'`. */\n tooth: string;\n /** Probing site: mesio-/disto- buccal/lingual, mid buccal/lingual. */\n site: PeriodontalSiteId;\n /** Pocket depth in millimetres. */\n pocketDepthMm?: number;\n /** Gingival recession in millimetres. */\n recessionMm?: number;\n /** Bleeding on probing at this site. */\n bleeding?: boolean;\n /** Suppuration (pus) at this site. */\n suppuration?: boolean;\n}\n\n/** Aggregate chart summary, consumer-supplied. */\nexport interface PeriodontalChartSummary {\n /** Whole-mouth mean probing depth in millimetres. */\n meanPocketDepthMm?: number;\n /** Bleeding-on-probing as a percentage of sites (0–100). */\n bleedingOnProbingPercent?: number;\n}\n\n/** Tooth-mobility grade (Miller 0–3). */\nexport type PeriodontalMobility = 0 | 1 | 2 | 3;\n\n/** Imperative handle — structural state only, never PHI. */\nexport interface PeriodontalChartCardHandle {\n /** FDI ids of the charted teeth, in display order. */\n getToothIds: () => string[];\n /** Total probing sites rendered. */\n getSiteCount: () => number;\n /** Count of sites at/above the 6mm severe threshold. */\n getDeepPocketCount: () => number;\n}\n\nexport interface PeriodontalChartCardProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children'\n> {\n /** Probing-site readings. Sites are grouped per tooth automatically. */\n sites: PeriodontalSite[];\n /**\n * ISO-8601 date the chart was captured. Rendered as a localised date in\n * the header and exposed as the table caption context. Optional.\n */\n dateIso?: string;\n /**\n * Dentition the chart covers. Drives only the localised header label —\n * tooth grouping is derived from the FDI numbers in `sites`.\n */\n dentition?: 'permanent' | 'primary' | 'mixed';\n /** Per-tooth Miller mobility grade, keyed by FDI tooth number. */\n mobility?: Record<string, PeriodontalMobility>;\n /** Aggregate summary stats rendered above the per-quadrant tables. */\n summary?: PeriodontalChartSummary;\n\n /* ----- i18n / formatting ----- */\n\n /** Locale for date + number formatting. Falls back to `i18n.language`. */\n locale?: string;\n\n /* ----- Styling ----- */\n\n /**\n * `'elevated'` (default) wraps in `<Card variant=\"elevated\">`. `'flat'`\n * drops the Card — use inside another card / sheet.\n */\n surface?: 'flat' | 'elevated';\n\n /* ----- a11y ----- */\n\n /** Override the default region aria-label. */\n 'aria-label'?: string;\n /** Agent-readiness consumer id, surfaced as `data-component-id`. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\n/** Classify a pocket depth into a severity band. */\nfunction pocketSeverity(\n depth: number | undefined,\n): 'normal' | 'moderate' | 'severe' {\n if (depth == null || !Number.isFinite(depth)) return 'normal';\n if (depth >= SEVERE_POCKET_MM) return 'severe';\n if (depth >= MODERATE_POCKET_MM) return 'moderate';\n return 'normal';\n}\n\n/** Non-colour severity cue appended to the measurement (`''`/`*`/`**`). */\nfunction severityMarker(severity: 'normal' | 'moderate' | 'severe'): string {\n if (severity === 'severe') return '∗∗';\n if (severity === 'moderate') return '∗';\n return '';\n}\n\n/** FDI quadrant (first digit) of a tooth number, or null if unparseable. */\nfunction quadrantOf(tooth: string): QuadrantId | null {\n const first = tooth.trim().charAt(0);\n return (QUADRANT_ORDER as readonly string[]).includes(first)\n ? (first as QuadrantId)\n : null;\n}\n\ninterface ToothRow {\n tooth: string;\n sites: Partial<Record<PeriodontalSiteId, PeriodontalSite>>;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const PeriodontalChartCard = forwardRef<\n HTMLDivElement,\n PeriodontalChartCardProps\n>(\n (\n {\n sites,\n dateIso,\n dentition = 'permanent',\n mobility,\n summary,\n locale,\n surface = 'elevated',\n 'aria-label': ariaLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const headingId = useId();\n const resolvedLocale = locale ?? i18n.language ?? 'en';\n\n // Group sites by tooth, then bucket teeth into FDI quadrants. The\n // grouping is derived purely from the FDI numbers — the consumer\n // passes a flat site list and the kit owns the layout.\n const { quadrants, toothIds, siteCount, deepPocketCount } = useMemo(() => {\n const byTooth = new Map<string, ToothRow>();\n let sCount = 0;\n let deep = 0;\n for (const site of sites) {\n sCount += 1;\n if ((site.pocketDepthMm ?? 0) >= SEVERE_POCKET_MM) deep += 1;\n let row = byTooth.get(site.tooth);\n if (!row) {\n row = { tooth: site.tooth, sites: {} };\n byTooth.set(site.tooth, row);\n }\n row.sites[site.site] = site;\n }\n\n // Sort teeth within a quadrant by their FDI position digit (2nd\n // char) ascending; keep insertion order as a stable fallback.\n const rows = Array.from(byTooth.values());\n const grouped: Array<{\n quadrant: QuadrantId | null;\n teeth: ToothRow[];\n }> = QUADRANT_ORDER.map((q) => ({\n quadrant: q as QuadrantId | null,\n teeth: rows\n .filter((r) => quadrantOf(r.tooth) === q)\n .sort((a, b) => a.tooth.localeCompare(b.tooth, 'en')),\n })).filter((g) => g.teeth.length > 0);\n\n // Teeth with an unparseable FDI quadrant render in their own group\n // so nothing is silently dropped.\n const unassigned = rows.filter((r) => quadrantOf(r.tooth) === null);\n if (unassigned.length > 0) {\n grouped.push({ quadrant: null, teeth: unassigned });\n }\n\n const ids = grouped.flatMap((g) => g.teeth.map((tt) => tt.tooth));\n return {\n quadrants: grouped,\n toothIds: ids,\n siteCount: sCount,\n deepPocketCount: deep,\n };\n }, [sites]);\n\n useAgentRegistration(\n periodontalChartCardAgent,\n {\n getToothIds: () => toothIds,\n getSiteCount: () => siteCount,\n getDeepPocketCount: () => deepPocketCount,\n },\n id,\n );\n\n const formattedDate = useMemo(() => {\n if (!dateIso) return undefined;\n const parsed = new Date(dateIso);\n if (Number.isNaN(parsed.getTime())) return undefined;\n try {\n return new Intl.DateTimeFormat(resolvedLocale, {\n dateStyle: 'medium',\n }).format(parsed);\n } catch {\n return parsed.toISOString().slice(0, 10);\n }\n }, [dateIso, resolvedLocale]);\n\n const resolvedHeading = t(\n 'periodontalChartCard.heading',\n 'Periodontal chart',\n );\n const resolvedAriaLabel = ariaLabel ?? resolvedHeading;\n\n const DENTITION_DEFAULT: Record<typeof dentition, string> = {\n permanent: 'Permanent dentition',\n primary: 'Primary dentition',\n mixed: 'Mixed dentition',\n };\n const dentitionLabel = t(`periodontalChartCard.dentition.${dentition}`, {\n defaultValue: DENTITION_DEFAULT[dentition],\n });\n\n const formatNumber = (n: number): string => {\n try {\n return new Intl.NumberFormat(resolvedLocale, {\n maximumFractionDigits: 1,\n }).format(n);\n } catch {\n return String(n);\n }\n };\n\n /* ------------------------------------------------------------ */\n /* Summary rows */\n /* ------------------------------------------------------------ */\n\n const summaryRows: Array<{ key: string; label: string; value: ReactNode }> =\n [];\n if (summary?.meanPocketDepthMm != null) {\n summaryRows.push({\n key: 'meanPocketDepth',\n label: t(\n 'periodontalChartCard.summary.meanPocketDepth',\n 'Mean probing depth',\n ),\n value: t('periodontalChartCard.unit.mm', {\n value: formatNumber(summary.meanPocketDepthMm),\n defaultValue: '{{value}} mm',\n }),\n });\n }\n if (summary?.bleedingOnProbingPercent != null) {\n summaryRows.push({\n key: 'bleedingOnProbing',\n label: t(\n 'periodontalChartCard.summary.bleedingOnProbing',\n 'Bleeding on probing',\n ),\n value: t('periodontalChartCard.unit.percent', {\n value: formatNumber(summary.bleedingOnProbingPercent),\n defaultValue: '{{value}}%',\n }),\n });\n }\n\n /* ------------------------------------------------------------ */\n /* Render a single measurement cell */\n /* ------------------------------------------------------------ */\n\n const renderMeasure = (\n depth: number | undefined,\n kind: 'pocket' | 'recession',\n ): ReactNode => {\n if (depth == null || !Number.isFinite(depth)) {\n return (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-[color:var(--muted-foreground)]\"\n >\n {t('periodontalChartCard.cell.empty', '–')}\n </span>\n );\n }\n const severity = kind === 'pocket' ? pocketSeverity(depth) : 'normal';\n const marker = kind === 'pocket' ? severityMarker(severity) : '';\n const numeric = formatNumber(depth);\n // The flag is announced as a worded suffix for SR users; sighted\n // users get the colour + bold + asterisk. The asterisk itself is\n // aria-hidden so it isn't read as punctuation.\n const srSuffix =\n severity === 'severe'\n ? ` ${t('periodontalChartCard.flag.severe', 'severe pocket')}`\n : severity === 'moderate'\n ? ` ${t('periodontalChartCard.flag.moderate', 'moderate pocket')}`\n : '';\n return (\n <span className={measureVariants({ severity })}>\n <span>{numeric}</span>\n {marker ? <span aria-hidden=\"true\">{marker}</span> : null}\n {srSuffix ? <span className=\"ds:sr-only\">{srSuffix}</span> : null}\n </span>\n );\n };\n\n /* ------------------------------------------------------------ */\n /* Render bleeding / suppuration indicator cell */\n /* ------------------------------------------------------------ */\n\n const renderSigns = (site: PeriodontalSite | undefined): ReactNode => {\n if (!site || (!site.bleeding && !site.suppuration)) {\n return (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-[color:var(--muted-foreground)]\"\n >\n {t('periodontalChartCard.cell.empty', '–')}\n </span>\n );\n }\n return (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n {site.bleeding ? (\n <span\n role=\"img\"\n aria-label={t(\n 'periodontalChartCard.sign.bleeding',\n 'Bleeding on probing',\n )}\n className=\"ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]\"\n />\n ) : null}\n {site.suppuration ? (\n <span\n role=\"img\"\n aria-label={t(\n 'periodontalChartCard.sign.suppuration',\n 'Suppuration',\n )}\n className=\"ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]\"\n />\n ) : null}\n </span>\n );\n };\n\n /* ------------------------------------------------------------ */\n /* One quadrant table */\n /* ------------------------------------------------------------ */\n\n const renderQuadrant = (group: {\n quadrant: QuadrantId | null;\n teeth: ToothRow[];\n }): ReactNode => {\n const QUADRANT_DEFAULT: Record<QuadrantId, string> = {\n '1': 'Upper right (Q1)',\n '2': 'Upper left (Q2)',\n '3': 'Lower left (Q3)',\n '4': 'Lower right (Q4)',\n };\n const captionText =\n group.quadrant != null\n ? t(`periodontalChartCard.quadrant.${group.quadrant}`, {\n defaultValue: QUADRANT_DEFAULT[group.quadrant],\n })\n : t('periodontalChartCard.quadrant.other', 'Other teeth');\n const cellClass =\n 'ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)]';\n const rowHeaderClass =\n 'ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:font-medium ds:border-b ds:border-[color:var(--border)] ds:whitespace-nowrap';\n return (\n <div\n key={group.quadrant ?? 'other'}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:overflow-x-auto\"\n >\n <table className=\"type-body-sm ds:w-full ds:border-collapse\">\n <caption className=\"type-label ds:text-start ds:mb-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]\">\n {captionText}\n </caption>\n <thead>\n <tr>\n <th\n scope=\"col\"\n className=\"ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:border-b ds:border-[color:var(--border)]\"\n >\n {t('periodontalChartCard.column.measure', 'Measurement')}\n </th>\n {group.teeth.map((row) => (\n <th\n key={row.tooth}\n scope=\"col\"\n data-tooth-id={row.tooth}\n className=\"ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)] ds:[font-variant-numeric:var(--font-feature-tabular)] ds:tabular-nums\"\n >\n <span className=\"ds:sr-only\">\n {t('periodontalChartCard.toothHeader', {\n tooth: row.tooth,\n defaultValue: 'Tooth {{tooth}}',\n })}\n </span>\n <span aria-hidden=\"true\">{row.tooth}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {/* Pocket depth row */}\n <tr>\n <th scope=\"row\" className={rowHeaderClass}>\n {t(\n 'periodontalChartCard.row.pocketDepth',\n 'Pocket depth (PD)',\n )}\n </th>\n {group.teeth.map((row) => (\n <td key={row.tooth} className={cellClass}>\n <span className=\"ds:flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]\">\n {PERIODONTAL_SITE_ORDER.map((siteId) => (\n <span key={siteId} className=\"ds:sr-only\">\n {t(`periodontalChartCard.site.${siteId}`, {\n defaultValue: SITE_DEFAULT[siteId],\n })}\n </span>\n ))}\n <span className=\"ds:flex ds:gap-[var(--spacing-2xs)]\">\n {PERIODONTAL_SITE_ORDER.map((siteId) => (\n <span key={siteId}>\n {renderMeasure(\n row.sites[siteId]?.pocketDepthMm,\n 'pocket',\n )}\n </span>\n ))}\n </span>\n </span>\n </td>\n ))}\n </tr>\n {/* Recession row */}\n <tr>\n <th scope=\"row\" className={rowHeaderClass}>\n {t('periodontalChartCard.row.recession', 'Recession (REC)')}\n </th>\n {group.teeth.map((row) => (\n <td key={row.tooth} className={cellClass}>\n <span className=\"ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center\">\n {PERIODONTAL_SITE_ORDER.map((siteId) => (\n <span key={siteId}>\n {renderMeasure(\n row.sites[siteId]?.recessionMm,\n 'recession',\n )}\n </span>\n ))}\n </span>\n </td>\n ))}\n </tr>\n {/* Bleeding / suppuration row */}\n <tr>\n <th scope=\"row\" className={rowHeaderClass}>\n {t(\n 'periodontalChartCard.row.signs',\n 'Bleeding / suppuration',\n )}\n </th>\n {group.teeth.map((row) => (\n <td key={row.tooth} className={cellClass}>\n <span className=\"ds:flex ds:gap-[var(--spacing-2xs)] ds:justify-center\">\n {PERIODONTAL_SITE_ORDER.map((siteId) => (\n <span key={siteId}>\n {renderSigns(row.sites[siteId])}\n </span>\n ))}\n </span>\n </td>\n ))}\n </tr>\n {/* Mobility row — only when any tooth in the quadrant has a grade */}\n {mobility &&\n group.teeth.some((row) => mobility[row.tooth] != null) ? (\n <tr>\n <th scope=\"row\" className={rowHeaderClass}>\n {t('periodontalChartCard.row.mobility', 'Mobility')}\n </th>\n {group.teeth.map((row) => {\n const grade = mobility[row.tooth];\n return (\n <td key={row.tooth} className={cellClass}>\n {grade != null ? (\n <Badge\n variant={grade >= 2 ? 'warning' : 'neutral'}\n size=\"sm\"\n aria-label={t(\n 'periodontalChartCard.mobility.label',\n {\n grade,\n defaultValue: 'Mobility grade {{grade}}',\n },\n )}\n >\n {grade}\n </Badge>\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-[color:var(--muted-foreground)]\"\n >\n {t('periodontalChartCard.cell.empty', '–')}\n </span>\n )}\n </td>\n );\n })}\n </tr>\n ) : null}\n </tbody>\n </table>\n </div>\n );\n };\n\n /* ------------------------------------------------------------ */\n /* Legend — explains the non-colour cues */\n /* ------------------------------------------------------------ */\n\n const legend = (\n <div\n role=\"group\"\n className=\"type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)] ds:text-[color:var(--muted-foreground)]\"\n aria-label={t('periodontalChartCard.legend.label', 'Chart legend')}\n >\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <span\n aria-hidden=\"true\"\n className=\"ds:font-semibold ds:text-[color:var(--warning-foreground)]\"\n >\n {'∗'}\n </span>\n {t('periodontalChartCard.legend.moderate', {\n threshold: MODERATE_POCKET_MM,\n defaultValue: 'PD ≥ {{threshold}} mm',\n })}\n </span>\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <span\n aria-hidden=\"true\"\n className=\"ds:font-bold ds:text-[color:var(--destructive)]\"\n >\n {'∗∗'}\n </span>\n {t('periodontalChartCard.legend.severe', {\n threshold: SEVERE_POCKET_MM,\n defaultValue: 'PD ≥ {{threshold}} mm',\n })}\n </span>\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]\"\n />\n {t('periodontalChartCard.sign.bleeding', 'Bleeding on probing')}\n </span>\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]\"\n />\n {t('periodontalChartCard.sign.suppuration', 'Suppuration')}\n </span>\n </div>\n );\n\n const isEmpty = quadrants.length === 0;\n\n const inner = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <h2\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {resolvedHeading}\n </h2>\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {formattedDate\n ? t('periodontalChartCard.subtitle.dated', {\n dentition: dentitionLabel,\n date: formattedDate,\n defaultValue: '{{dentition}} · {{date}}',\n })\n : dentitionLabel}\n </p>\n </div>\n\n {summaryRows.length > 0 ? (\n <KeyValueList rowGap=\"sm\">\n {summaryRows.map((row) => (\n <KeyValuePair key={row.key} label={row.label} value={row.value} />\n ))}\n </KeyValueList>\n ) : null}\n\n {isEmpty ? (\n <p\n role=\"status\"\n className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\"\n >\n {t(\n 'periodontalChartCard.empty',\n 'No periodontal readings recorded.',\n )}\n </p>\n ) : (\n <>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {quadrants.map((group) => renderQuadrant(group))}\n </div>\n {legend}\n </>\n )}\n </div>\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={resolvedAriaLabel}\n aria-labelledby={headingId}\n data-component=\"periodontal-chart-card\"\n data-component-id={id}\n id={id}\n className={rootVariants({ surface, className })}\n {...rest}\n >\n {surface === 'elevated' ? (\n <Card variant=\"elevated\">\n <Card.Body>{inner}</Card.Body>\n </Card>\n ) : (\n inner\n )}\n </div>\n );\n },\n);\n\nPeriodontalChartCard.displayName = 'PeriodontalChartCard';\n\nexport type PeriodontalChartCardSurface = NonNullable<\n VariantProps<typeof rootVariants>['surface']\n>;\n"],"names":["periodontalChartCardAgent","handle","rootVariants","cva","measureVariants","MODERATE_POCKET_MM","SEVERE_POCKET_MM","PERIODONTAL_SITE_ORDER","SITE_DEFAULT","QUADRANT_ORDER","pocketSeverity","depth","severityMarker","severity","quadrantOf","tooth","first","PeriodontalChartCard","forwardRef","sites","dateIso","dentition","mobility","summary","locale","surface","ariaLabel","id","className","rest","ref","t","i18n","useTranslation","headingId","useId","resolvedLocale","quadrants","toothIds","siteCount","deepPocketCount","useMemo","byTooth","sCount","deep","site","row","rows","grouped","q","r","a","b","g","unassigned","ids","tt","useAgentRegistration","formattedDate","parsed","resolvedHeading","resolvedAriaLabel","DENTITION_DEFAULT","dentitionLabel","formatNumber","n","summaryRows","renderMeasure","kind","jsx","marker","numeric","srSuffix","renderSigns","jsxs","renderQuadrant","group","QUADRANT_DEFAULT","captionText","cellClass","rowHeaderClass","siteId","_a","grade","Badge","legend","isEmpty","inner","KeyValueList","KeyValuePair","Fragment","Card"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { c as a } from "./createLucideIcon-CrFbzy84.js";
|
|
2
|
+
/**
|
|
3
|
+
* @license lucide-react v1.8.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
const o = [
|
|
9
|
+
[
|
|
10
|
+
"path",
|
|
11
|
+
{
|
|
12
|
+
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
|
13
|
+
key: "9njp5v"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
], c = a("phone", o);
|
|
17
|
+
export {
|
|
18
|
+
c as P
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=phone-Bi5yUm4I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-Bi5yUm4I.js","sources":["../../node_modules/lucide-react/dist/esm/icons/phone.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.js.map\n"],"names":["__iconNode","Phone","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,GACMC,IAAQC,EAAiB,SAASF,CAAU;","x_google_ignoreList":[0]}
|
|
@@ -19,7 +19,8 @@ import { c as nt } from "./createLucideIcon-CrFbzy84.js";
|
|
|
19
19
|
import { R as at } from "./refresh-cw-CC8jSKMr.js";
|
|
20
20
|
import { C as Ne } from "./chevron-down-BX_NP2Yh.js";
|
|
21
21
|
import { M as te } from "./map-pin-B8STOPMJ.js";
|
|
22
|
-
import { L as Se
|
|
22
|
+
import { L as Se } from "./languages-DsVf_WzT.js";
|
|
23
|
+
import { S as Pe } from "./shield-check-BjCGH_Sr.js";
|
|
23
24
|
import { H as Me } from "./heart-C0faivFf.js";
|
|
24
25
|
import { C as Ae } from "./calendar-clock-CYkcqdwl.js";
|
|
25
26
|
/**
|
|
@@ -1569,4 +1570,4 @@ export {
|
|
|
1569
1570
|
Ct as P,
|
|
1570
1571
|
rt as p
|
|
1571
1572
|
};
|
|
1572
|
-
//# sourceMappingURL=practice-results-
|
|
1573
|
+
//# sourceMappingURL=practice-results-BFL_mcDW.js.map
|