@alfadocs/ui-kit 1.54.3 → 1.56.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.
Files changed (642) hide show
  1. package/dist/_chunks/{accordion-C11v9ouP.js → accordion-Ch3xp0mX.js} +9 -9
  2. package/dist/_chunks/{actions-cell-renderer-CjzSqMgn.js → actions-cell-renderer-Dj1ZkvJj.js} +4 -4
  3. package/dist/_chunks/{address-autocomplete-BBZ0u_U1.js → address-autocomplete-bPR2mNBt.js} +2 -2
  4. package/dist/_chunks/address-fields-BfjxS05Z.js +298 -0
  5. package/dist/_chunks/{agenda-card-CakEvwnM.js → agenda-card-DauvvKX6.js} +2 -2
  6. package/dist/_chunks/{agenda-tray-B8vuZKjH.js → agenda-tray-ZKhDxlfw.js} +24 -24
  7. package/dist/_chunks/{ai-credits-notice-D9_qP2xc.js → ai-credits-notice-BoNJtOuE.js} +4 -4
  8. package/dist/_chunks/ai-fab-pill-BOu96kCx.js +30 -0
  9. package/dist/_chunks/{ai-permission-notice-Cr6o1f0f.js → ai-permission-notice-5vpblPCx.js} +3 -3
  10. package/dist/_chunks/{ai-prompt-input-DkL8W-nt.js → ai-prompt-input-Beh-O_rJ.js} +4 -4
  11. package/dist/_chunks/{alia-sidebar-DSUQ2RpK.js → alia-sidebar-DOei4Iyu.js} +12 -12
  12. package/dist/_chunks/{anamnesis-card-BT1tMt5O.js → anamnesis-card-BSlAhaoG.js} +4 -4
  13. package/dist/_chunks/{anamnesis-summary-card-Bv0CZ-mk.js → anamnesis-summary-card-2YfIYY2j.js} +2 -2
  14. package/dist/_chunks/{anamnesis-summary-rows-Brru7JrH.js → anamnesis-summary-rows-CQ-XGr0T.js} +427 -426
  15. package/dist/_chunks/{antenatal-schedule-timeline-BZzgjfyd.js → antenatal-schedule-timeline-Kf2Yg8uo.js} +4 -4
  16. package/dist/_chunks/{app-frame-Cos-GSfw.js → app-frame-B-0O9CrU.js} +40 -38
  17. package/dist/_chunks/{appointment-card-CA2ynsmN.js → appointment-card-Dh3fAcyf.js} +12 -12
  18. package/dist/_chunks/{appointment-peek-Cbrg36wj.js → appointment-peek-BIZaDeCi.js} +6 -6
  19. package/dist/_chunks/{appointment-timeline-CssAJLpL.js → appointment-timeline-DmqYEIT9.js} +32 -33
  20. package/dist/_chunks/{appointment-tray-EQUjllVy.js → appointment-tray-CyI_p3zU.js} +28 -28
  21. package/dist/_chunks/{appointment-workflow-status-DrWCNLbB.js → appointment-workflow-status-DMjuIK90.js} +2 -2
  22. package/dist/_chunks/{audio-recorder-BM68r6fe.js → audio-recorder-DWKKjGPt.js} +5 -6
  23. package/dist/_chunks/{auth-form-parts-Celi-TLV.js → auth-form-parts-CravOf0L.js} +6 -5
  24. package/dist/_chunks/{autocomplete-BXm1rnT0.js → autocomplete-DosDnGie.js} +3 -3
  25. package/dist/_chunks/{avatar-DYtwj1-R.js → avatar-WZY3eGE7.js} +10 -10
  26. package/dist/_chunks/{balance-badge-cell-C5hmahoB.js → balance-badge-cell-DmDcXw0c.js} +5 -5
  27. package/dist/_chunks/{benefit-card-DB1Kdrmc.js → benefit-card-BWBClvdF.js} +46 -45
  28. package/dist/_chunks/{bishop-score-BzvVol-u.js → bishop-score-BxA20j9T.js} +5 -5
  29. package/dist/_chunks/{bmi-calculator-CDmQk0b5.js → bmi-calculator-C0UTxB7R.js} +6 -6
  30. package/dist/_chunks/{booking-BGY3LUi8.js → booking-WyNGKPE2.js} +1553 -1458
  31. package/dist/_chunks/{breadcrumb-xgVpPH2H.js → breadcrumb-Boan-5n8.js} +39 -39
  32. package/dist/_chunks/{button-CYPx2xFq.js → button-Bn16lcFM.js} +10 -7
  33. package/dist/_chunks/{button-group-CpEycMps.js → button-group-CWlwR-A5.js} +3 -3
  34. package/dist/_chunks/{calculator-dialog-BRjZMWuE.js → calculator-dialog-pCPWta7h.js} +2 -2
  35. package/dist/_chunks/{calendar-BwF5nQuW.js → calendar-6-24PQ1u.js} +4 -4
  36. package/dist/_chunks/{calendar-workspace-BJPhMb2c.js → calendar-workspace-Du2ryaI-.js} +870 -885
  37. package/dist/_chunks/{card-DPmk26CL.js → card-DMO2nkt4.js} +45 -42
  38. package/dist/_chunks/{care-plan-card-BqI-_B4T.js → care-plan-card-Ddjh5Doc.js} +5 -5
  39. package/dist/_chunks/{care-plan-entry-card-CbsZmfQM.js → care-plan-entry-card-0rpR-4Te.js} +5 -5
  40. package/dist/_chunks/{care-plan-header-BIS4CGcp.js → care-plan-header-DUX_SVvF.js} +3 -3
  41. package/dist/_chunks/{carousel.agent-DW9iPLdy.js → carousel.agent-D3xthzTf.js} +44 -45
  42. package/dist/_chunks/chart-HsF1KHbx.js +909 -0
  43. package/dist/_chunks/{chat-container-CAfyTxat.js → chat-container-baxzy8k8.js} +21 -22
  44. package/dist/_chunks/{chat-input-Bg99kcl3.js → chat-input-PtrSu1ZC.js} +27 -27
  45. package/dist/_chunks/{chat-message-D4rvLoIJ.js → chat-message-CmGUcajG.js} +4 -4
  46. package/dist/_chunks/city-input-BC_nYINn.js +185 -0
  47. package/dist/_chunks/{clinical-note-card-gmWXEwSu.js → clinical-note-card-14JIoUR0.js} +3 -3
  48. package/dist/_chunks/{code-block-CRVa-Thh.js → code-block-BQgK70mO.js} +2 -2
  49. package/dist/_chunks/{collapsible-CTjxzGuF.js → collapsible-DVPM46bq.js} +27 -27
  50. package/dist/_chunks/{color-picker-Bu0wM8xv.js → color-picker-BRQ4Y9SO.js} +3 -3
  51. package/dist/_chunks/{combobox-DppVSuUm.js → combobox-U5yfO6o0.js} +262 -218
  52. package/dist/_chunks/{connection-status-BwTnjnUj.js → connection-status-ncTjUPt6.js} +4 -4
  53. package/dist/_chunks/{contact-card-CIVCcicP.js → contact-card-CmK05vNb.js} +2 -2
  54. package/dist/_chunks/{contact-profile-card-B-HzocbB.js → contact-profile-card-Ci8lBQ6a.js} +4 -4
  55. package/dist/_chunks/{control-room-rail-g4vNSPFi.js → control-room-rail-Tx2jW250.js} +3 -3
  56. package/dist/_chunks/{copy-field-CiIuVbKe.js → copy-field-CvTIuA_p.js} +3 -3
  57. package/dist/_chunks/{country-select-r3QC7cVA.js → country-select-DF5Bd_mn.js} +2 -2
  58. package/dist/_chunks/{cycle-calculator-LjsQd9Gl.js → cycle-calculator-Dgfqr4Q4.js} +7 -7
  59. package/dist/_chunks/dashboard-grid-DfEY2qci.js +844 -0
  60. package/dist/_chunks/{data-table-BErtJzaT.js → data-table-D8fuhqO1.js} +244 -240
  61. package/dist/_chunks/{data-table-tabs-D5nFZKxg.js → data-table-tabs-Xhg5G0gU.js} +4 -4
  62. package/dist/_chunks/{date-picker-variants-B3AFKDSu.js → date-picker-variants-BnF-sHzq.js} +19 -10
  63. package/dist/_chunks/{date-picker-BnhBmcH6.js → date-picker-wRAcq2lt.js} +49 -49
  64. package/dist/_chunks/{date-range-picker-Dg050N1d.js → date-range-picker-CtUOI38x.js} +189 -183
  65. package/dist/_chunks/{date-time-picker-Ckl6ezCL.js → date-time-picker-CLeLKuv9.js} +5 -5
  66. package/dist/_chunks/{dependent-selector-CPiolWiw.js → dependent-selector-DgaAQc-c.js} +91 -86
  67. package/dist/_chunks/{description-list-BKQMUiXv.js → description-list-DkLeHiew.js} +2 -2
  68. package/dist/_chunks/{dev-bypass-button-Y1s7gPSD.js → dev-bypass-button-BhGn6evf.js} +2 -2
  69. package/dist/_chunks/{dialog-D52AI4nF.js → dialog-CUzbnKLw.js} +86 -69
  70. package/dist/_chunks/{document-preview-C_6R_VZK.js → document-preview-uoTekVR7.js} +5 -5
  71. package/dist/_chunks/{document-scanner-pADVX447.js → document-scanner-CQS9kv84.js} +17 -17
  72. package/dist/_chunks/{dropdown-menu-B5mgV1kV.js → dropdown-menu-BQSNVp4x.js} +2 -2
  73. package/dist/_chunks/{due-date-calculator-mDvGKmRV.js → due-date-calculator-CSjklbyw.js} +9 -9
  74. package/dist/_chunks/{editable-currency-cell-renderer-CfFp_1hI.js → editable-currency-cell-renderer-CmYcMuwi.js} +4 -4
  75. package/dist/_chunks/{editable-description-CCrAEJMq.js → editable-description-DuJlvltc.js} +3 -3
  76. package/dist/_chunks/editor-overlay-NMxzcO6J.js +90 -0
  77. package/dist/_chunks/{email-input-DQixfopu.js → email-input-C7THAwh2.js} +3 -3
  78. package/dist/_chunks/{empty-state-CgvmPPvW.js → empty-state-gNG3qYCX.js} +2 -2
  79. package/dist/_chunks/{entity-card-D1Yrh9wf.js → entity-card-fpm-KUKc.js} +26 -27
  80. package/dist/_chunks/{entity-summary-C3E4JKVr.js → entity-summary-DcB0fIiv.js} +5 -5
  81. package/dist/_chunks/{error-boundary-Bzjk9Q2l.js → error-boundary-ChowhO6w.js} +2 -2
  82. package/dist/_chunks/error-page-CpuYbpOB.js +344 -0
  83. package/dist/_chunks/{error-page-illustration-bFti0VEc.js → error-page-illustration-BdJLuMdV.js} +12 -12
  84. package/dist/_chunks/error-summary-BhM8FEkl.js +101 -0
  85. package/dist/_chunks/{face-scheme-Doodi6A6.js → face-scheme-BicuUA2K.js} +8 -8
  86. package/dist/_chunks/{fetal-weight-DBgEaMoJ.js → fetal-weight-BWaqqjea.js} +5 -5
  87. package/dist/_chunks/{field-array-DGiIHCdy.js → field-array-BO-kaKFK.js} +3 -3
  88. package/dist/_chunks/{file-manager-BDNSnr7f.js → file-manager-Cc_uO8r2.js} +54 -54
  89. package/dist/_chunks/{finished-terminal-BguGAUdg.js → finished-terminal-CPSDrIMB.js} +3 -3
  90. package/dist/_chunks/{fiscal-code-input-DNA_SbQx.js → fiscal-code-input-DesSQ6Fh.js} +168 -168
  91. package/dist/_chunks/floating-clearance-nIx9fFLy.js +20 -0
  92. package/dist/_chunks/forgot-password-form-DEx-M_QR.js +234 -0
  93. package/dist/_chunks/{form-field-Db0liyI8.js → form-field-Ani72sVY.js} +46 -44
  94. package/dist/_chunks/format-price-BKle6Xwt.js +52 -0
  95. package/dist/_chunks/{freemium-paywall-CtUCj-ND.js → freemium-paywall-DIKuhX8b.js} +88 -82
  96. package/dist/_chunks/{gestational-age-calculator-BVBz_5dm.js → gestational-age-calculator-DqVeJke2.js} +10 -10
  97. package/dist/_chunks/glass-surface-CPok0jEe.js +20 -0
  98. package/dist/_chunks/{hcg-doubling-BECrAUu3.js → hcg-doubling-BIYyI2Yo.js} +7 -7
  99. package/dist/_chunks/{header--a4ZTiM5.js → header-B9552pLh.js} +15 -14
  100. package/dist/_chunks/{header-settings-kkVm9VP3.js → header-settings-ge_3gYEq.js} +4 -4
  101. package/dist/_chunks/heatmap-Gf9r7Tn1.js +2865 -0
  102. package/dist/_chunks/{help-me-write-templates-B4Y8dBv1.js → help-me-write-templates-fV-Apf72.js} +29 -29
  103. package/dist/_chunks/{hover-card-CcRSI4gy.js → hover-card-BnTueNS2.js} +2 -2
  104. package/dist/_chunks/{iban-input-CpOUMMR-.js → iban-input-B9L2QDHh.js} +2 -2
  105. package/dist/_chunks/{icon-button-mKIvw90h.js → icon-button-COX76Jdj.js} +2 -2
  106. package/dist/_chunks/{icon-button-group-BsQkbCX4.js → icon-button-group-C5hhI-R5.js} +3 -3
  107. package/dist/_chunks/{icon-picker-JZzs1ol_.js → icon-picker-DWrqmI1c.js} +20 -20
  108. package/dist/_chunks/{image-cropper-CNBGkG7P.js → image-cropper-D0kkQ4lG.js} +2 -2
  109. package/dist/_chunks/{info-tip-Czh1izZ6.js → info-tip-B0jmIt6M.js} +2 -2
  110. package/dist/_chunks/{input-surface-xyERuLU_.js → input-surface-iBmxVBfr.js} +11 -12
  111. package/dist/_chunks/{insert-result-BuWQl11Z.js → insert-result-C1C2OCc3.js} +2 -2
  112. package/dist/_chunks/intl-locale-ySteXlDD.js +23 -0
  113. package/dist/_chunks/{kbd-BLovyx1R.js → kbd-Bx7eQv9f.js} +70 -66
  114. package/dist/_chunks/{key-value-pair-BkXjt88Z.js → key-value-pair-BNNITp6S.js} +26 -20
  115. package/dist/_chunks/{kit-extensions-GQHKTLWI.js → kit-extensions-Byfxy6sy.js} +6 -6
  116. package/dist/_chunks/{link-cell-renderer-D-xv2HMS.js → link-cell-renderer-TeJNvymP.js} +9 -9
  117. package/dist/_chunks/{locale-picker-BhNIgeXA.js → locale-picker-DfNSdOpy.js} +4 -4
  118. package/dist/_chunks/login-dev-card-DmZ1B0lB.js +309 -0
  119. package/dist/_chunks/{logo-CuaqxTGK.js → logo-hIsyVE96.js} +19 -19
  120. package/dist/_chunks/{map-view-CQmqQJwK.js → map-view-CO2v0hfp.js} +9 -9
  121. package/dist/_chunks/{marketplace-app-shell-DbEfoNxe.js → marketplace-app-shell-Dcx-JEjg.js} +11 -11
  122. package/dist/_chunks/{message-card-C1buKlzM.js → message-card-DVo8-dOm.js} +36 -28
  123. package/dist/_chunks/{message-tray-DyBVqlGj.js → message-tray-BB95DA82.js} +5 -5
  124. package/dist/_chunks/{money-GypsuFk2.js → money-CeClE1nH.js} +2 -2
  125. package/dist/_chunks/multi-select-BT23EnSA.js +688 -0
  126. package/dist/_chunks/{muscle-scheme-DfYQ0Z3v.js → muscle-scheme-BDgIaGeW.js} +2 -2
  127. package/dist/_chunks/{nav-grid-BPbmzHY0.js → nav-grid-BqCPH8sm.js} +16 -17
  128. package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js +65 -0
  129. package/dist/_chunks/{notes-panel-DWJY3WV8.js → notes-panel-DceRhthG.js} +54 -53
  130. package/dist/_chunks/{notification-card-DubeUbVJ.js → notification-card-BGCIL6Mu.js} +56 -48
  131. package/dist/_chunks/{notification-tray-DJ0gtfu6.js → notification-tray-__sJXnsz.js} +5 -5
  132. package/dist/_chunks/{number-input-DRDRYZJg.js → number-input-CVwI1ltI.js} +2 -2
  133. package/dist/_chunks/{operator-hero-BnBPxwOi.js → operator-hero-Dyd2IGbR.js} +4 -4
  134. package/dist/_chunks/{optical-prescription-DBvebioV.js → optical-prescription-Do6e3wfs.js} +5 -5
  135. package/dist/_chunks/option-row-Dc7BrbK8.js +37 -0
  136. package/dist/_chunks/{otp-input-BedEqmIV.js → otp-input-CGMu30_e.js} +2 -2
  137. package/dist/_chunks/{pagination-CzEkpfti.js → pagination-BR1_GfD_.js} +2 -2
  138. package/dist/_chunks/{panel-subview-D8HGXaUa.js → panel-subview-BT-Apwgb.js} +3 -3
  139. package/dist/_chunks/{parse-DeDYl04y.js → parse-jZ-i8Xgj.js} +2 -2
  140. package/dist/_chunks/{password-input-6Yl6x1IO.js → password-input-BokZ_rnT.js} +162 -140
  141. package/dist/_chunks/{patient-details-D7QlsGK1.js → patient-details-DsTtjpuX.js} +6 -6
  142. package/dist/_chunks/{patient-field-row-Dr-ndtG8.js → patient-field-row-BvZ9luz-.js} +212 -211
  143. package/dist/_chunks/{patient-search-Dm3w0jWw.js → patient-search-D5xlXmd2.js} +5 -5
  144. package/dist/_chunks/{patient-summary-card-A3WhxFwp.js → patient-summary-card-9nQWTQf6.js} +12 -8
  145. package/dist/_chunks/{payment-automation-upsell-DNiraNhF.js → payment-automation-upsell-DiHovmUL.js} +5 -5
  146. package/dist/_chunks/{payment-form-B08gHZIY.js → payment-form-v6zZuV1_.js} +60 -56
  147. package/dist/_chunks/{payment-request-card-CR7SjsRs.js → payment-request-card-CwDpwXUC.js} +5 -5
  148. package/dist/_chunks/{pdf-viewer-zv7pkUPA.js → pdf-viewer-C3minW5b.js} +5 -5
  149. package/dist/_chunks/periodontal-chart-DD5C0M3l.js +1413 -0
  150. package/dist/_chunks/{periodontal-chart-card-Djr3en8Q.js → periodontal-chart-card-CxdXvsPU.js} +3 -3
  151. package/dist/_chunks/{periodontal-diagnosis-DmVIqXtC.js → periodontal-diagnosis-D-PJv7KS.js} +3 -3
  152. package/dist/_chunks/{periodontal-risk-chart-C1Y5f-md.js → periodontal-risk-chart-D3DjIymT.js} +2 -2
  153. package/dist/_chunks/{phone-input-BzeUr49H.js → phone-input-DxkHMYmu.js} +139 -139
  154. package/dist/_chunks/{popover-9_v-7fJc.js → popover-BI3oV3eY.js} +2 -2
  155. package/dist/_chunks/{position-grid-D2D5_Tze.js → position-grid-CBB88EaH.js} +38 -36
  156. package/dist/_chunks/{postal-code-input-lCk8me6K.js → postal-code-input-CfZOnIkW.js} +2 -2
  157. package/dist/_chunks/{practice-profile-hero-Bc3AyBiM.js → practice-profile-hero-C8RPACCi.js} +3 -3
  158. package/dist/_chunks/{practice-results-D3liWOz1.js → practice-results-Dhbo-fc_.js} +9 -9
  159. package/dist/_chunks/{pregnancy-dating-BEmsMys4.js → pregnancy-dating-Bfu0Cq4H.js} +11 -11
  160. package/dist/_chunks/{pregnancy-weight-gain-DMVPvM3a.js → pregnancy-weight-gain-CUUrBTBo.js} +6 -6
  161. package/dist/_chunks/{privacy-lock-KDPKiTpH.js → privacy-lock-WkUgwIj_.js} +4 -4
  162. package/dist/_chunks/{privacy-mask-H8yYwgIb.js → privacy-mask-ChIjELJC.js} +3 -3
  163. package/dist/_chunks/{product-hub-panel-M5X3TYzq.js → product-hub-panel-BSSiGGG4.js} +49 -49
  164. package/dist/_chunks/{progress-TIAsNHQW.js → progress-D_g_Sl2g.js} +3 -5
  165. package/dist/_chunks/{province-select-DtF2ukoC.js → province-select-Bd20Z9Br.js} +2 -2
  166. package/dist/_chunks/{public-footer-Bfs81Qzp.js → public-footer-CxpG6J1M.js} +93 -90
  167. package/dist/_chunks/{public-header.agent-CrXkGtTF.js → public-header.agent-pr2hyiND.js} +3 -3
  168. package/dist/_chunks/{qr-code-Ofx7ryyu.js → qr-code-DHEma21c.js} +47 -48
  169. package/dist/_chunks/{radio-group-BT97ty7o.js → radio-group-DicxWJXP.js} +111 -106
  170. package/dist/_chunks/{radiograph-panel.agent-rS3Tegx6.js → radiograph-panel.agent-DkUokbEa.js} +9 -9
  171. package/dist/_chunks/registration-form-D7iNqMBF.js +819 -0
  172. package/dist/_chunks/{reviews-panel-CyxZ0VmZ.js → reviews-panel-CDcK6W3b.js} +6 -6
  173. package/dist/_chunks/{rich-text-editor-DmnWavgl.js → rich-text-editor-CkFfmA3v.js} +791 -799
  174. package/dist/_chunks/{scroll-area-BZOvUhwQ.js → scroll-area-ZtFCv9K7.js} +56 -46
  175. package/dist/_chunks/{search-bar-ORcfuK9A.js → search-bar-DQJS0wJN.js} +209 -199
  176. package/dist/_chunks/search-input-BAlDd05M.js +246 -0
  177. package/dist/_chunks/{section-card-XR2bW1Ie.js → section-card-ChJdOlBU.js} +2 -2
  178. package/dist/_chunks/{select-DHPmASkG.js → select-Ce5RMk93.js} +274 -236
  179. package/dist/_chunks/{session-countdown-DWUVDDox.js → session-countdown-CBINYw8H.js} +3 -3
  180. package/dist/_chunks/{sheet-BTgxkDJS.js → sheet-C7SwIxwB.js} +95 -79
  181. package/dist/_chunks/{sidebar-2GBc0ZUa.js → sidebar-DLsG2AIk.js} +123 -124
  182. package/dist/_chunks/{sign-document-B_3U-S6g.js → sign-document-B6HlyCGV.js} +22 -22
  183. package/dist/_chunks/{sign-in-with-alfadocs-button-DFmgQuDo.js → sign-in-with-alfadocs-button-D91_x8DX.js} +4 -4
  184. package/dist/_chunks/{signature-capture-F6KViBF_.js → signature-capture-Chqh62Pc.js} +19 -20
  185. package/dist/_chunks/{signature-field-DLDznGnB.js → signature-field-Y01UB5DA.js} +2 -2
  186. package/dist/_chunks/{signature-request-BdolmJk4.js → signature-request-DhbpB9N9.js} +9 -9
  187. package/dist/_chunks/{signed-out-frame-dz1rLJ65.js → signed-out-frame-B2GTIeqA.js} +51 -51
  188. package/dist/_chunks/sliders-horizontal-D-F97cnE.js +22 -0
  189. package/dist/_chunks/{slot-grid-kCDoV3k4.js → slot-grid-sVZriOiQ.js} +4 -4
  190. package/dist/_chunks/{social-sign-in-button-BMGNlUWs.js → social-sign-in-button-yUqwhnPZ.js} +2 -2
  191. package/dist/_chunks/{spinner-a0FTYX9Q.js → spinner-CoflYlEx.js} +2 -2
  192. package/dist/_chunks/{stat-Ce9ymEKm.js → stat-DmjGfXND.js} +116 -108
  193. package/dist/_chunks/state-backed-text-input-DECQy5aA.js +12 -0
  194. package/dist/_chunks/{stepper-accordion-BPNS6J6B.js → stepper-accordion-DDTSOUHc.js} +63 -52
  195. package/dist/_chunks/{streaming-text-BAPn_sZs.js → streaming-text-BKZmbW1Q.js} +31 -32
  196. package/dist/_chunks/subDays-DlMw8Xng.js +8 -0
  197. package/dist/_chunks/{tab-bar-DRKiomgj.js → tab-bar-Bm-rJB7Y.js} +7 -8
  198. package/dist/_chunks/{tabs-yIY-RySP.js → tabs-I2wf_nC7.js} +3 -3
  199. package/dist/_chunks/{task-card-C02Km4Gb.js → task-card-BMXMh3uE.js} +9 -9
  200. package/dist/_chunks/{task-editor-i-juLk76.js → task-editor-ByyRu29Y.js} +157 -159
  201. package/dist/_chunks/{task-tray-By6DPwbT.js → task-tray-DsBO-AaP.js} +31 -31
  202. package/dist/_chunks/{tasks-panel-BkN9sROF.js → tasks-panel-CdgZQQgG.js} +130 -131
  203. package/dist/_chunks/{text-area-CDuItrvL.js → text-area-COMVJ1yE.js} +106 -96
  204. package/dist/_chunks/text-input-CaG9ApoE.js +333 -0
  205. package/dist/_chunks/{theme-toggle-BAHz3itd.js → theme-toggle-PpFcFoYK.js} +4 -4
  206. package/dist/_chunks/time-picker-DVfyAR81.js +871 -0
  207. package/dist/_chunks/{timeline-CVLjybJ3.js → timeline-DG8wAlAx.js} +3 -3
  208. package/dist/_chunks/{toast-UMUvXFsA.js → toast-CPqguP7G.js} +2 -2
  209. package/dist/_chunks/{token-insert-menu-DgtBIbNu.js → token-insert-menu-B-pWFDKX.js} +3 -3
  210. package/dist/_chunks/{tool-rail-CwXN-sDC.js → tool-rail-Bwyuw_Ot.js} +113 -110
  211. package/dist/_chunks/{tooth-scheme-BAMhwCZe.js → tooth-scheme-BAO_voUO.js} +97 -97
  212. package/dist/_chunks/{transcript-panel-jOCW4Ycl.js → transcript-panel-CjsiDB1K.js} +4 -4
  213. package/dist/_chunks/{treatment-receipt-DF2Slh-x.js → treatment-receipt-BSVOfStA.js} +2 -2
  214. package/dist/_chunks/{typing-indicator-BmwMQSxw.js → typing-indicator-B1RkE8jD.js} +16 -15
  215. package/dist/_chunks/{unit-converter-Bvhj9r3m.js → unit-converter-DS4UB_59.js} +5 -5
  216. package/dist/_chunks/{use-appointment-details-read-B6dBBgDa.js → use-appointment-details-read-JsDM48tf.js} +214 -214
  217. package/dist/_chunks/use-dom-value-DTxHhQAN.js +16 -0
  218. package/dist/_chunks/{use-prism-DaspP8w-.js → use-prism-DBOiELx7.js} +9 -9
  219. package/dist/_chunks/use-registration-submit-eWAECgUC.js +171 -0
  220. package/dist/_chunks/use-select-on-arrow-Cr4iBuW5.js +26 -0
  221. package/dist/_chunks/use-state-backed-input-C7ESmxKB.js +59 -0
  222. package/dist/_chunks/voice-control-panel-Bg1eklL0.js +1009 -0
  223. package/dist/_chunks/{wallet-pay-button-Dew8Pmgq.js → wallet-pay-button-DFP5FW0D.js} +2 -2
  224. package/dist/_chunks/{warning-stack-B_v_qMBI.js → warning-stack-ubD0IZCy.js} +25 -25
  225. package/dist/_chunks/{widget-picker-Ck8HTsil.js → widget-picker-DXYBMTfe.js} +39 -39
  226. package/dist/_chunks/{workflow-map-PzamnfJK.js → workflow-map-Demlpy39.js} +8 -8
  227. package/dist/_chunks/{workflow-status-DDnsIrLt.js → workflow-status-BT27_fQp.js} +3 -3
  228. package/dist/agent-catalog.json +610 -23
  229. package/dist/agent-i18n/en.json +59 -17
  230. package/dist/components/_shared/ai-fab-pill.d.ts +18 -0
  231. package/dist/components/_shared/floating-clearance.d.ts +12 -0
  232. package/dist/components/_shared/glass-surface.d.ts +22 -0
  233. package/dist/components/_shared/input-surface.d.ts +1 -1
  234. package/dist/components/_shared/intl-locale.d.ts +7 -0
  235. package/dist/components/_shared/non-modal-tab-exit.d.ts +8 -0
  236. package/dist/components/_shared/option-row.d.ts +30 -0
  237. package/dist/components/_shared/option.d.ts +2 -0
  238. package/dist/components/_shared/state-backed-text-input.d.ts +16 -0
  239. package/dist/components/_shared/use-apex-chart-semantics.d.ts +6 -0
  240. package/dist/components/_shared/use-dom-value.d.ts +20 -0
  241. package/dist/components/_shared/use-select-on-arrow.d.ts +20 -0
  242. package/dist/components/_shared/use-state-backed-input.d.ts +31 -0
  243. package/dist/components/accordion/index.js +1 -1
  244. package/dist/components/address-autocomplete/index.js +1 -1
  245. package/dist/components/address-fields/address-fields.d.ts +4 -0
  246. package/dist/components/address-fields/index.js +1 -1
  247. package/dist/components/agenda-card/index.js +1 -1
  248. package/dist/components/agenda-tray/index.js +1 -1
  249. package/dist/components/ai-credits-notice/index.js +1 -1
  250. package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +34 -0
  251. package/dist/components/ai-permission-notice/index.d.ts +1 -1
  252. package/dist/components/ai-permission-notice/index.js +1 -1
  253. package/dist/components/ai-prompt-input/index.js +1 -1
  254. package/dist/components/anamnesis-card/index.js +1 -1
  255. package/dist/components/anamnesis-summary-card/index.js +1 -1
  256. package/dist/components/app-frame/index.js +1 -1
  257. package/dist/components/appointment-card/index.js +2 -2
  258. package/dist/components/appointment-details-panel/index.js +1 -1
  259. package/dist/components/appointment-peek/index.js +1 -1
  260. package/dist/components/appointment-timeline/index.js +1 -1
  261. package/dist/components/audio-recorder/index.js +1 -1
  262. package/dist/components/autocomplete/index.js +1 -1
  263. package/dist/components/avatar/index.js +1 -1
  264. package/dist/components/benefit-card/index.js +1 -1
  265. package/dist/components/bishop-score/index.js +1 -1
  266. package/dist/components/bmi-calculator/index.js +1 -1
  267. package/dist/components/booking/booking-types.d.ts +10 -5
  268. package/dist/components/booking/index.js +1 -1
  269. package/dist/components/booking/payment.d.ts +19 -0
  270. package/dist/components/breadcrumb/index.js +1 -1
  271. package/dist/components/button/index.js +2 -2
  272. package/dist/components/button-group/index.js +1 -1
  273. package/dist/components/calculator-dialog/index.js +1 -1
  274. package/dist/components/calendar/index.js +1 -1
  275. package/dist/components/card/index.js +1 -1
  276. package/dist/components/care-plan-card/index.js +1 -1
  277. package/dist/components/care-plan-entry-card/index.js +1 -1
  278. package/dist/components/care-plan-header/index.js +1 -1
  279. package/dist/components/carousel/index.js +1 -1
  280. package/dist/components/chart/chart.d.ts +10 -5
  281. package/dist/components/chart/index.js +1 -1
  282. package/dist/components/chat-container/index.js +1 -1
  283. package/dist/components/chat-input/index.js +1 -1
  284. package/dist/components/chat-message/index.js +1 -1
  285. package/dist/components/city-input/index.js +1 -1
  286. package/dist/components/clinical-note-card/index.js +1 -1
  287. package/dist/components/collapsible/index.js +1 -1
  288. package/dist/components/color-picker/index.js +1 -1
  289. package/dist/components/combobox/combobox.d.ts +6 -0
  290. package/dist/components/combobox/index.js +1 -1
  291. package/dist/components/connection-status/index.js +1 -1
  292. package/dist/components/contact-card/index.js +1 -1
  293. package/dist/components/contact-profile-card/index.js +1 -1
  294. package/dist/components/control-room-rail/index.js +1 -1
  295. package/dist/components/copy-field/index.js +1 -1
  296. package/dist/components/country-select/index.js +1 -1
  297. package/dist/components/cycle-calculator/index.js +1 -1
  298. package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts +22 -0
  299. package/dist/components/dashboard-grid/dashboard-grid.d.ts +48 -4
  300. package/dist/components/dashboard-grid/index.js +1 -1
  301. package/dist/components/data-table/index.js +4 -4
  302. package/dist/components/data-table-tabs/index.js +1 -1
  303. package/dist/components/date-picker/date-picker.d.ts +3 -3
  304. package/dist/components/date-picker/index.js +1 -1
  305. package/dist/components/date-range-picker/date-range-picker.d.ts +3 -3
  306. package/dist/components/date-range-picker/index.js +1 -1
  307. package/dist/components/date-time-picker/index.js +1 -1
  308. package/dist/components/dependent-selector/index.js +1 -1
  309. package/dist/components/description-list/index.js +1 -1
  310. package/dist/components/dev-bypass-button/index.js +1 -1
  311. package/dist/components/dialog/dialog.d.ts +2 -2
  312. package/dist/components/dialog/index.js +1 -1
  313. package/dist/components/document-preview/index.js +1 -1
  314. package/dist/components/document-scanner/index.js +1 -1
  315. package/dist/components/dropdown-menu/index.js +1 -1
  316. package/dist/components/due-date-calculator/index.js +2 -2
  317. package/dist/components/editable-description/index.js +1 -1
  318. package/dist/components/editor-overlay/index.js +1 -1
  319. package/dist/components/email-input/email-input.d.ts +1 -1
  320. package/dist/components/email-input/index.js +1 -1
  321. package/dist/components/empty-state/index.js +1 -1
  322. package/dist/components/entity-summary/index.js +1 -1
  323. package/dist/components/error-boundary/index.js +1 -1
  324. package/dist/components/error-summary/error-summary.d.ts +50 -0
  325. package/dist/components/error-summary/index.d.ts +2 -0
  326. package/dist/components/error-summary/index.js +5 -0
  327. package/dist/components/face-scheme/index.js +1 -1
  328. package/dist/components/fetal-weight/index.js +1 -1
  329. package/dist/components/field-array/index.js +1 -1
  330. package/dist/components/file-manager/index.js +1 -1
  331. package/dist/components/finished-terminal/index.js +1 -1
  332. package/dist/components/fiscal-code-input/index.js +1 -1
  333. package/dist/components/form-field/form-field.d.ts +9 -0
  334. package/dist/components/form-field/index.js +1 -1
  335. package/dist/components/freemium-paywall/index.js +1 -1
  336. package/dist/components/gestational-age-calculator/index.js +1 -1
  337. package/dist/components/hcg-doubling/index.js +1 -1
  338. package/dist/components/header/index.js +1 -1
  339. package/dist/components/header-settings/index.js +1 -1
  340. package/dist/components/heatmap/heatmap-context.d.ts +21 -0
  341. package/dist/components/heatmap/heatmap-format.d.ts +59 -0
  342. package/dist/components/heatmap/heatmap-grid.d.ts +66 -0
  343. package/dist/components/heatmap/heatmap-legend.d.ts +36 -0
  344. package/dist/components/heatmap/heatmap-model.d.ts +152 -0
  345. package/dist/components/heatmap/heatmap-scale.d.ts +125 -0
  346. package/dist/components/heatmap/heatmap-table-view.d.ts +35 -0
  347. package/dist/components/heatmap/heatmap-tooltip.d.ts +40 -0
  348. package/dist/components/heatmap/heatmap-variants.d.ts +87 -0
  349. package/dist/components/heatmap/heatmap-window.d.ts +54 -0
  350. package/dist/components/heatmap/heatmap.agent.d.ts +4 -0
  351. package/dist/components/heatmap/heatmap.d.ts +186 -0
  352. package/dist/components/heatmap/index.d.ts +8 -0
  353. package/dist/components/heatmap/index.js +8 -0
  354. package/dist/components/hover-card/index.js +1 -1
  355. package/dist/components/iban-input/index.js +1 -1
  356. package/dist/components/icon-button/index.js +1 -1
  357. package/dist/components/icon-button-group/index.js +1 -1
  358. package/dist/components/icon-picker/index.js +1 -1
  359. package/dist/components/image-cropper/index.js +1 -1
  360. package/dist/components/index.d.ts +3 -0
  361. package/dist/components/info-tip/index.js +1 -1
  362. package/dist/components/kbd/index.js +1 -1
  363. package/dist/components/key-value-pair/index.js +1 -1
  364. package/dist/components/locale-picker/index.js +1 -1
  365. package/dist/components/logo/index.js +1 -1
  366. package/dist/components/map-view/index.js +1 -1
  367. package/dist/components/message-card/index.js +1 -1
  368. package/dist/components/message-tray/index.js +1 -1
  369. package/dist/components/money/index.js +1 -1
  370. package/dist/components/multi-select/index.js +1 -1
  371. package/dist/components/multi-select/multi-select.d.ts +6 -0
  372. package/dist/components/muscle-scheme/index.js +1 -1
  373. package/dist/components/nav-grid/index.js +1 -1
  374. package/dist/components/notes-panel/index.js +1 -1
  375. package/dist/components/notification-card/index.js +1 -1
  376. package/dist/components/notification-tray/index.js +1 -1
  377. package/dist/components/number-input/index.js +1 -1
  378. package/dist/components/operator-hero/index.js +1 -1
  379. package/dist/components/optical-prescription/index.js +1 -1
  380. package/dist/components/otp-input/index.js +1 -1
  381. package/dist/components/pagination/index.js +1 -1
  382. package/dist/components/panel-subview/index.js +1 -1
  383. package/dist/components/password-input/index.js +1 -1
  384. package/dist/components/patient-details/index.js +1 -1
  385. package/dist/components/patient-search/index.js +1 -1
  386. package/dist/components/patient-summary-card/index.js +1 -1
  387. package/dist/components/patient-table/index.js +1 -1
  388. package/dist/components/payment-card/index.js +1 -1
  389. package/dist/components/payment-form/index.js +1 -1
  390. package/dist/components/pdf-viewer/index.js +1 -1
  391. package/dist/components/periodontal-chart/index.d.ts +1 -1
  392. package/dist/components/periodontal-chart/index.js +1 -1
  393. package/dist/components/periodontal-chart/periodontal-chart.d.ts +44 -1
  394. package/dist/components/periodontal-chart-card/index.js +1 -1
  395. package/dist/components/periodontal-diagnosis/index.js +1 -1
  396. package/dist/components/periodontal-risk-chart/index.js +1 -1
  397. package/dist/components/phone-input/index.js +1 -1
  398. package/dist/components/popover/index.js +1 -1
  399. package/dist/components/position-grid/index.js +1 -1
  400. package/dist/components/postal-code-input/index.js +1 -1
  401. package/dist/components/practice-profile-hero/index.js +1 -1
  402. package/dist/components/practice-results/index.js +1 -1
  403. package/dist/components/pregnancy-dating/index.js +1 -1
  404. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  405. package/dist/components/privacy-lock/index.js +1 -1
  406. package/dist/components/product-hub-tray/index.js +1 -1
  407. package/dist/components/progress/index.js +1 -1
  408. package/dist/components/province-select/index.js +1 -1
  409. package/dist/components/public-footer/index.js +1 -1
  410. package/dist/components/public-header/index.js +1 -1
  411. package/dist/components/qr-code/index.js +1 -1
  412. package/dist/components/radio-group/index.js +1 -1
  413. package/dist/components/radiograph-panel/index.js +1 -1
  414. package/dist/components/reviews-panel/index.js +1 -1
  415. package/dist/components/rich-text-editor/index.js +2 -2
  416. package/dist/components/rich-text-editor/rich-text-editor.d.ts +5 -20
  417. package/dist/components/scroll-area/index.js +1 -1
  418. package/dist/components/scroll-area/scroll-area.d.ts +17 -1
  419. package/dist/components/search-bar/index.js +1 -1
  420. package/dist/components/search-input/index.js +1 -1
  421. package/dist/components/section-card/index.js +1 -1
  422. package/dist/components/select/index.js +1 -1
  423. package/dist/components/select/select.d.ts +41 -0
  424. package/dist/components/session-countdown/index.js +1 -1
  425. package/dist/components/sheet/index.js +1 -1
  426. package/dist/components/sheet/sheet.d.ts +2 -2
  427. package/dist/components/sidebar/index.js +1 -1
  428. package/dist/components/sign-document/index.js +1 -1
  429. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  430. package/dist/components/signature-capture/index.js +1 -1
  431. package/dist/components/signature-field/index.js +1 -1
  432. package/dist/components/skeleton-scheme/index.js +1 -1
  433. package/dist/components/slot-grid/index.js +1 -1
  434. package/dist/components/social-sign-in-button/index.js +1 -1
  435. package/dist/components/spinner/index.js +1 -1
  436. package/dist/components/stat/index.d.ts +1 -1
  437. package/dist/components/stat/index.js +1 -1
  438. package/dist/components/stat/stat.d.ts +9 -0
  439. package/dist/components/stepper-accordion/index.js +1 -1
  440. package/dist/components/streaming-text/index.js +1 -1
  441. package/dist/components/tab-bar/index.js +1 -1
  442. package/dist/components/tabs/index.js +1 -1
  443. package/dist/components/task-card/index.js +1 -1
  444. package/dist/components/task-editor/index.js +1 -1
  445. package/dist/components/task-tray/index.js +1 -1
  446. package/dist/components/tasks-panel/index.js +1 -1
  447. package/dist/components/text-area/index.js +1 -1
  448. package/dist/components/text-input/index.js +1 -1
  449. package/dist/components/theme-toggle/index.js +1 -1
  450. package/dist/components/time-picker/index.js +1 -1
  451. package/dist/components/time-picker/time-picker.d.ts +26 -5
  452. package/dist/components/timeline/index.js +1 -1
  453. package/dist/components/toast/index.js +1 -1
  454. package/dist/components/token-insert-menu/index.js +1 -1
  455. package/dist/components/tool-rail/index.js +1 -1
  456. package/dist/components/tooth-scheme/index.js +1 -1
  457. package/dist/components/transcript-panel/index.js +1 -1
  458. package/dist/components/treatment-receipt/index.js +1 -1
  459. package/dist/components/typing-indicator/index.js +1 -1
  460. package/dist/components/unit-converter/index.js +1 -1
  461. package/dist/components/voice-control-panel/index.d.ts +5 -0
  462. package/dist/components/voice-control-panel/index.js +6 -0
  463. package/dist/components/voice-control-panel/voice-control-panel.agent.d.ts +4 -0
  464. package/dist/components/voice-control-panel/voice-control-panel.d.ts +179 -0
  465. package/dist/components/wallet-pay-button/index.js +1 -1
  466. package/dist/components/warning-stack/index.js +1 -1
  467. package/dist/components/widget-picker/index.js +1 -1
  468. package/dist/components/workflow/index.js +1 -1
  469. package/dist/components/workflow-status/index.js +2 -2
  470. package/dist/error-pages/400.ar.html +1 -1
  471. package/dist/error-pages/400.de.html +1 -1
  472. package/dist/error-pages/400.el.html +1 -1
  473. package/dist/error-pages/400.en.html +1 -1
  474. package/dist/error-pages/400.es.html +1 -1
  475. package/dist/error-pages/400.fr.html +1 -1
  476. package/dist/error-pages/400.hi.html +1 -1
  477. package/dist/error-pages/400.html +1 -1
  478. package/dist/error-pages/400.it.html +1 -1
  479. package/dist/error-pages/400.ja.html +1 -1
  480. package/dist/error-pages/400.nl.html +1 -1
  481. package/dist/error-pages/400.pl.html +1 -1
  482. package/dist/error-pages/400.pt.html +1 -1
  483. package/dist/error-pages/400.ro.html +1 -1
  484. package/dist/error-pages/400.ru.html +1 -1
  485. package/dist/error-pages/400.sq.html +1 -1
  486. package/dist/error-pages/400.sv.html +1 -1
  487. package/dist/error-pages/400.tr.html +1 -1
  488. package/dist/error-pages/400.zh.html +1 -1
  489. package/dist/error-pages/410.ar.html +1 -1
  490. package/dist/error-pages/410.de.html +1 -1
  491. package/dist/error-pages/410.el.html +1 -1
  492. package/dist/error-pages/410.en.html +1 -1
  493. package/dist/error-pages/410.es.html +1 -1
  494. package/dist/error-pages/410.fr.html +1 -1
  495. package/dist/error-pages/410.hi.html +1 -1
  496. package/dist/error-pages/410.html +1 -1
  497. package/dist/error-pages/410.it.html +1 -1
  498. package/dist/error-pages/410.ja.html +1 -1
  499. package/dist/error-pages/410.nl.html +1 -1
  500. package/dist/error-pages/410.pl.html +1 -1
  501. package/dist/error-pages/410.pt.html +1 -1
  502. package/dist/error-pages/410.ro.html +1 -1
  503. package/dist/error-pages/410.ru.html +1 -1
  504. package/dist/error-pages/410.sq.html +1 -1
  505. package/dist/error-pages/410.sv.html +1 -1
  506. package/dist/error-pages/410.tr.html +1 -1
  507. package/dist/error-pages/410.zh.html +1 -1
  508. package/dist/error-pages/419.ar.html +1 -1
  509. package/dist/error-pages/419.de.html +1 -1
  510. package/dist/error-pages/419.el.html +1 -1
  511. package/dist/error-pages/419.en.html +1 -1
  512. package/dist/error-pages/419.es.html +1 -1
  513. package/dist/error-pages/419.fr.html +1 -1
  514. package/dist/error-pages/419.hi.html +1 -1
  515. package/dist/error-pages/419.html +1 -1
  516. package/dist/error-pages/419.it.html +1 -1
  517. package/dist/error-pages/419.ja.html +1 -1
  518. package/dist/error-pages/419.nl.html +1 -1
  519. package/dist/error-pages/419.pl.html +1 -1
  520. package/dist/error-pages/419.pt.html +1 -1
  521. package/dist/error-pages/419.ro.html +1 -1
  522. package/dist/error-pages/419.ru.html +1 -1
  523. package/dist/error-pages/419.sq.html +1 -1
  524. package/dist/error-pages/419.sv.html +1 -1
  525. package/dist/error-pages/419.tr.html +1 -1
  526. package/dist/error-pages/419.zh.html +1 -1
  527. package/dist/error-pages/429.ar.html +1 -1
  528. package/dist/error-pages/429.de.html +1 -1
  529. package/dist/error-pages/429.el.html +1 -1
  530. package/dist/error-pages/429.en.html +1 -1
  531. package/dist/error-pages/429.es.html +1 -1
  532. package/dist/error-pages/429.fr.html +1 -1
  533. package/dist/error-pages/429.hi.html +1 -1
  534. package/dist/error-pages/429.html +1 -1
  535. package/dist/error-pages/429.it.html +1 -1
  536. package/dist/error-pages/429.ja.html +1 -1
  537. package/dist/error-pages/429.nl.html +1 -1
  538. package/dist/error-pages/429.pl.html +1 -1
  539. package/dist/error-pages/429.pt.html +1 -1
  540. package/dist/error-pages/429.ro.html +1 -1
  541. package/dist/error-pages/429.ru.html +1 -1
  542. package/dist/error-pages/429.sq.html +1 -1
  543. package/dist/error-pages/429.sv.html +1 -1
  544. package/dist/error-pages/429.tr.html +1 -1
  545. package/dist/error-pages/429.zh.html +1 -1
  546. package/dist/hooks/index.js +1 -1
  547. package/dist/host-compat.css +9 -2
  548. package/dist/host-legacy.css +97 -0
  549. package/dist/i18n/locales/ar.d.ts +120 -3
  550. package/dist/i18n/locales/ar.js +123 -6
  551. package/dist/i18n/locales/de.d.ts +120 -3
  552. package/dist/i18n/locales/de.js +123 -6
  553. package/dist/i18n/locales/el.d.ts +120 -3
  554. package/dist/i18n/locales/el.js +123 -6
  555. package/dist/i18n/locales/en.d.ts +120 -3
  556. package/dist/i18n/locales/en.js +123 -6
  557. package/dist/i18n/locales/es.d.ts +120 -3
  558. package/dist/i18n/locales/es.js +123 -6
  559. package/dist/i18n/locales/fr.d.ts +120 -3
  560. package/dist/i18n/locales/fr.js +123 -6
  561. package/dist/i18n/locales/hi.d.ts +120 -3
  562. package/dist/i18n/locales/hi.js +123 -6
  563. package/dist/i18n/locales/it.d.ts +120 -3
  564. package/dist/i18n/locales/it.js +123 -6
  565. package/dist/i18n/locales/ja.d.ts +120 -3
  566. package/dist/i18n/locales/ja.js +123 -6
  567. package/dist/i18n/locales/nl.d.ts +120 -3
  568. package/dist/i18n/locales/nl.js +123 -6
  569. package/dist/i18n/locales/pl.d.ts +120 -3
  570. package/dist/i18n/locales/pl.js +123 -6
  571. package/dist/i18n/locales/pt.d.ts +120 -3
  572. package/dist/i18n/locales/pt.js +123 -6
  573. package/dist/i18n/locales/ro.d.ts +120 -3
  574. package/dist/i18n/locales/ro.js +123 -6
  575. package/dist/i18n/locales/ru.d.ts +120 -3
  576. package/dist/i18n/locales/ru.js +123 -6
  577. package/dist/i18n/locales/sq.d.ts +120 -3
  578. package/dist/i18n/locales/sq.js +123 -6
  579. package/dist/i18n/locales/sv.d.ts +120 -3
  580. package/dist/i18n/locales/sv.js +123 -6
  581. package/dist/i18n/locales/tr.d.ts +120 -3
  582. package/dist/i18n/locales/tr.js +123 -6
  583. package/dist/i18n/locales/zh.d.ts +120 -3
  584. package/dist/i18n/locales/zh.js +123 -6
  585. package/dist/index.js +766 -756
  586. package/dist/locales/ar.json +123 -6
  587. package/dist/locales/de.json +123 -6
  588. package/dist/locales/el.json +123 -6
  589. package/dist/locales/en.json +123 -6
  590. package/dist/locales/es.json +123 -6
  591. package/dist/locales/fr.json +123 -6
  592. package/dist/locales/hi.json +123 -6
  593. package/dist/locales/it.json +123 -6
  594. package/dist/locales/ja.json +123 -6
  595. package/dist/locales/nl.json +123 -6
  596. package/dist/locales/pl.json +123 -6
  597. package/dist/locales/pt.json +123 -6
  598. package/dist/locales/ro.json +123 -6
  599. package/dist/locales/ru.json +123 -6
  600. package/dist/locales/sq.json +123 -6
  601. package/dist/locales/sv.json +123 -6
  602. package/dist/locales/tr.json +123 -6
  603. package/dist/locales/zh.json +123 -6
  604. package/dist/patterns/_shared/auth-form-parts.d.ts +4 -0
  605. package/dist/patterns/_shared/use-error-summary.d.ts +34 -0
  606. package/dist/patterns/alia-assistant/index.js +1 -1
  607. package/dist/patterns/anamnesis/index.js +1 -1
  608. package/dist/patterns/calendar/index.js +1 -1
  609. package/dist/patterns/error-page/error-page.d.ts +29 -5
  610. package/dist/patterns/error-page/index.js +2 -2
  611. package/dist/patterns/forgot-password-form/forgot-password-form.d.ts +3 -2
  612. package/dist/patterns/forgot-password-form/index.js +1 -1
  613. package/dist/patterns/help-me-write-templates/help-me-write-templates.d.ts +2 -2
  614. package/dist/patterns/help-me-write-templates/index.js +1 -1
  615. package/dist/patterns/login-form/index.js +1 -1
  616. package/dist/patterns/login-form/login-form.d.ts +5 -4
  617. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  618. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  619. package/dist/patterns/registration-form/index.js +1 -1
  620. package/dist/patterns/registration-form/registration-form.d.ts +3 -2
  621. package/dist/patterns/signature-request/index.js +1 -1
  622. package/dist/patterns/signed-out-frame/index.js +1 -1
  623. package/dist/tokens.css +22 -14
  624. package/package.json +19 -2
  625. package/dist/_chunks/address-fields-BaClzQLM.js +0 -292
  626. package/dist/_chunks/chart-C134Ibwm.js +0 -705
  627. package/dist/_chunks/city-input-BL5WsGJ3.js +0 -170
  628. package/dist/_chunks/dashboard-grid--rkojX6m.js +0 -691
  629. package/dist/_chunks/editor-overlay-CWV0chPV.js +0 -93
  630. package/dist/_chunks/error-page-C15GfNEj.js +0 -312
  631. package/dist/_chunks/forgot-password-form-Duu3pZDU.js +0 -203
  632. package/dist/_chunks/format-price-DAbh61Lz.js +0 -51
  633. package/dist/_chunks/intl-locale-CXM-B8EP.js +0 -16
  634. package/dist/_chunks/login-dev-card-DletSsX3.js +0 -275
  635. package/dist/_chunks/multi-select-CVb6PJOK.js +0 -638
  636. package/dist/_chunks/periodontal-chart-5nLsSuRM.js +0 -1305
  637. package/dist/_chunks/registration-form-Lz9iKrKo.js +0 -759
  638. package/dist/_chunks/search-input-6SoR2Rf4.js +0 -237
  639. package/dist/_chunks/subDays-XBMBTVOO.js +0 -8
  640. package/dist/_chunks/text-input-rzLEKhRU.js +0 -331
  641. package/dist/_chunks/time-picker-DKKmpFh3.js +0 -425
  642. package/dist/_chunks/use-registration-submit-DxCWic5_.js +0 -141
@@ -0,0 +1,1413 @@
1
+ import { jsx as o, jsxs as m } from "react/jsx-runtime";
2
+ import { forwardRef as pt, useRef as ie, useState as mt, useCallback as O, useEffect as Be, useMemo as He, useImperativeHandle as ht } from "react";
3
+ import { c as pe } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as gt } from "react-i18next";
5
+ import { u as ft } from "./registry-DvAUVLHh.js";
6
+ import { o as bt } from "./floating-clearance-nIx9fFLy.js";
7
+ import { P as Se, i as Te, h as vt, g as yt, f as xt, Y as Nt } from "./tooth-data-DR8Kdnup.js";
8
+ import { P as Ye } from "./periodontal-chart-card-CxdXvsPU.js";
9
+ const j = {
10
+ type: "string",
11
+ description: "FDI tooth id ('11'–'48' permanent, '51'–'85' primary)."
12
+ }, K = {
13
+ enum: ["db", "b", "mb", "dl", "l", "ml"],
14
+ description: "Probing site: (m/d)b = mesio-/disto-/mid buccal, (m/d)l = mesio-/disto-/mid lingual."
15
+ }, Ce = {
16
+ type: "integer",
17
+ description: "Whole millimetres — perio probing is recorded in integer mm."
18
+ }, kt = {
19
+ type: "object",
20
+ properties: {
21
+ meanPocketDepthMm: { type: ["number", "null"] },
22
+ meanAttachmentLevelMm: { type: ["number", "null"] },
23
+ plaquePercent: { type: ["number", "null"] },
24
+ bleedingPercent: { type: ["number", "null"] },
25
+ scoredSiteCount: { type: "number" },
26
+ deepPocketCount: { type: "number" }
27
+ }
28
+ }, Mt = {
29
+ type: "array",
30
+ description: "One entry per flagged tooth, in clinical order; each tooth’s pockets are deepest-first.",
31
+ items: {
32
+ type: "object",
33
+ properties: {
34
+ fdi: j,
35
+ status: {
36
+ enum: ["present", "missing", "implant"],
37
+ description: "Structural status of the tooth."
38
+ },
39
+ severity: {
40
+ enum: ["normal", "moderate", "severe"],
41
+ description: "Worst pocket severity band across the tooth."
42
+ },
43
+ maxPocketDepthMm: { type: ["integer", "null"] },
44
+ pockets: {
45
+ type: "array",
46
+ description: "Sites at/above the moderate threshold, deepest first.",
47
+ items: {
48
+ type: "object",
49
+ properties: {
50
+ site: K,
51
+ pocketDepthMm: Ce,
52
+ severity: { enum: ["moderate", "severe"] }
53
+ }
54
+ }
55
+ },
56
+ bleedingSites: { type: "array", items: K },
57
+ plaqueSites: { type: "array", items: K },
58
+ suppurationSites: { type: "array", items: K },
59
+ maxRecessionMm: { type: ["number", "null"] },
60
+ mobility: {
61
+ type: ["integer", "null"],
62
+ description: "Miller mobility grade 1–3, or null when none."
63
+ },
64
+ furcation: { type: "array", items: { enum: ["buccal", "lingual"] } }
65
+ }
66
+ }
67
+ };
68
+ function Ct(r) {
69
+ if (!r) return null;
70
+ const n = { ...r };
71
+ return delete n.note, n;
72
+ }
73
+ const wt = {
74
+ id: "periodontal-chart",
75
+ // pick — focus a measurement input (transient); set_value / edit_inline —
76
+ // record per-site probing readings and per-tooth flags.
77
+ capabilities: ["pick", "set_value", "edit_inline"],
78
+ state: {
79
+ indices: {
80
+ type: "object",
81
+ descriptionKey: "ui.agent.periodontalChart.state.indices",
82
+ description: "Derived whole-mouth indices: mean probing depth, mean attachment level, plaque %, bleeding %, scored-site and deep-pocket counts. Aggregates only — no per-site or patient data.",
83
+ read: (r) => r.getIndices()
84
+ },
85
+ findings: {
86
+ type: "object[]",
87
+ descriptionKey: "ui.agent.periodontalChart.state.findings",
88
+ description: "Narratable per-tooth problem list — one entry per flagged tooth (missing, implant, a pocket at/above the moderate threshold, bleeding, suppuration, mobility ≥ 1, or furcation), in clinical order with each tooth’s pockets deepest-first. Each entry carries fdi, status, severity, maxPocketDepthMm, pockets, bleeding/plaque/suppuration sites, maxRecessionMm, mobility and furcation. Read this to summarise the chart aloud. Structural readings + FDI ids only — never the free-text note or patient identity.",
89
+ read: (r) => r.getFindings()
90
+ },
91
+ missingTeeth: {
92
+ type: "string[]",
93
+ descriptionKey: "ui.agent.periodontalChart.state.missingTeeth",
94
+ description: "FDI ids of every tooth flagged as missing.",
95
+ read: (r) => r.missingTeeth()
96
+ },
97
+ chartedTeeth: {
98
+ type: "string[]",
99
+ descriptionKey: "ui.agent.periodontalChart.state.chartedTeeth",
100
+ description: "FDI ids of teeth carrying at least one probing reading or flag. Identifiers only — never patient identity or the free-text note.",
101
+ read: (r) => Object.entries(r.getValue()).filter(([, n]) => n.missing || n.implant || n.mobility != null || n.furcation && Object.keys(n.furcation).length > 0 ? !0 : (n.sites ? Object.values(n.sites) : []).some(
102
+ (d) => d != null && (d.pocketDepthMm != null || d.recessionMm != null || d.bleeding || d.plaque || d.suppuration)
103
+ )).map(([n]) => n)
104
+ }
105
+ },
106
+ actions: {
107
+ focus_site: {
108
+ safety: "read",
109
+ argsType: '{ fdi: string; site: PeriodontalSiteId; field: "pocketDepthMm" | "recessionMm" | "bleeding" | "plaque" }',
110
+ argsSchema: {
111
+ type: "object",
112
+ properties: {
113
+ fdi: j,
114
+ site: K,
115
+ field: {
116
+ enum: ["pocketDepthMm", "recessionMm", "bleeding", "plaque"]
117
+ }
118
+ },
119
+ required: ["fdi", "site", "field"]
120
+ },
121
+ idempotent: !0,
122
+ descriptionKey: "ui.agent.periodontalChart.actions.focusSite",
123
+ description: "Move focus to one per-site input: a probing measurement (pocket depth, recession) or the bleeding or plaque checkbox.",
124
+ invoke: (r, n) => {
125
+ r.focusSite(n.fdi, n.site, n.field);
126
+ }
127
+ },
128
+ get_tooth: {
129
+ safety: "read",
130
+ argsType: "{ fdi: string }",
131
+ argsSchema: {
132
+ type: "object",
133
+ properties: { fdi: j },
134
+ required: ["fdi"]
135
+ },
136
+ returns: "object | null",
137
+ returnsSchema: { type: ["object", "null"] },
138
+ idempotent: !0,
139
+ descriptionKey: "ui.agent.periodontalChart.actions.getTooth",
140
+ description: "Read one tooth’s structural readings (sites, flags, mobility, furcation). The free-text note is never returned.",
141
+ invoke: (r, n) => Ct(r.getTooth(n.fdi))
142
+ },
143
+ get_indices: {
144
+ safety: "read",
145
+ argsType: "{}",
146
+ argsSchema: { type: "object", properties: {} },
147
+ returns: "PeriodontalIndices",
148
+ returnsSchema: kt,
149
+ idempotent: !0,
150
+ descriptionKey: "ui.agent.periodontalChart.actions.getIndices",
151
+ description: "Read the derived whole-mouth summary indices.",
152
+ invoke: (r) => r.getIndices()
153
+ },
154
+ get_findings: {
155
+ safety: "read",
156
+ argsType: "{}",
157
+ argsSchema: { type: "object", properties: {} },
158
+ returns: "PeriodontalToothFinding[]",
159
+ returnsSchema: Mt,
160
+ idempotent: !0,
161
+ descriptionKey: "ui.agent.periodontalChart.actions.getFindings",
162
+ description: "Read the narratable per-tooth problem list (flagged teeth only). Use it to summarise the chart aloud — e.g. “46: 8 mm disto-buccal pocket, bleeding, grade 2 mobility”. Structural readings and FDI ids only; the free-text note is never returned.",
163
+ invoke: (r) => r.getFindings()
164
+ },
165
+ set_depth: {
166
+ safety: "write",
167
+ argsType: "{ fdi: string; site: PeriodontalSiteId; mm: number }",
168
+ argsSchema: {
169
+ type: "object",
170
+ properties: { fdi: j, site: K, mm: Ce },
171
+ required: ["fdi", "site", "mm"]
172
+ },
173
+ idempotent: !0,
174
+ descriptionKey: "ui.agent.periodontalChart.actions.setDepth",
175
+ description: "Record the probing pocket depth (mm) at a site.",
176
+ invoke: (r, n) => {
177
+ r.setSite(n.fdi, n.site, {
178
+ pocketDepthMm: Math.max(0, n.mm)
179
+ });
180
+ }
181
+ },
182
+ set_recession: {
183
+ safety: "write",
184
+ argsType: "{ fdi: string; site: PeriodontalSiteId; mm: number }",
185
+ argsSchema: {
186
+ type: "object",
187
+ properties: { fdi: j, site: K, mm: Ce },
188
+ required: ["fdi", "site", "mm"]
189
+ },
190
+ idempotent: !0,
191
+ descriptionKey: "ui.agent.periodontalChart.actions.setRecession",
192
+ description: "Record the gingival recession (mm) at a site.",
193
+ invoke: (r, n) => {
194
+ r.setSite(n.fdi, n.site, { recessionMm: n.mm });
195
+ }
196
+ },
197
+ toggle_bleeding: {
198
+ safety: "write",
199
+ argsType: "{ fdi: string; site: PeriodontalSiteId; value: boolean }",
200
+ argsSchema: {
201
+ type: "object",
202
+ properties: {
203
+ fdi: j,
204
+ site: K,
205
+ value: { type: "boolean" }
206
+ },
207
+ required: ["fdi", "site", "value"]
208
+ },
209
+ idempotent: !0,
210
+ descriptionKey: "ui.agent.periodontalChart.actions.toggleBleeding",
211
+ description: "Set bleeding on probing at a site.",
212
+ invoke: (r, n) => {
213
+ r.setSite(n.fdi, n.site, { bleeding: n.value });
214
+ }
215
+ },
216
+ toggle_plaque: {
217
+ safety: "write",
218
+ argsType: "{ fdi: string; site: PeriodontalSiteId; value: boolean }",
219
+ argsSchema: {
220
+ type: "object",
221
+ properties: {
222
+ fdi: j,
223
+ site: K,
224
+ value: { type: "boolean" }
225
+ },
226
+ required: ["fdi", "site", "value"]
227
+ },
228
+ idempotent: !0,
229
+ descriptionKey: "ui.agent.periodontalChart.actions.togglePlaque",
230
+ description: "Set plaque presence at a site.",
231
+ invoke: (r, n) => {
232
+ r.setSite(n.fdi, n.site, { plaque: n.value });
233
+ }
234
+ },
235
+ set_mobility: {
236
+ safety: "write",
237
+ argsType: "{ fdi: string; grade: 0 | 1 | 2 | 3 }",
238
+ argsSchema: {
239
+ type: "object",
240
+ properties: {
241
+ fdi: j,
242
+ grade: { enum: [0, 1, 2, 3] }
243
+ },
244
+ required: ["fdi", "grade"]
245
+ },
246
+ idempotent: !0,
247
+ descriptionKey: "ui.agent.periodontalChart.actions.setMobility",
248
+ description: "Set a tooth’s Miller mobility grade (0–3).",
249
+ invoke: (r, n) => {
250
+ r.setTooth(n.fdi, { mobility: n.grade });
251
+ }
252
+ },
253
+ set_missing: {
254
+ safety: "write",
255
+ argsType: "{ fdi: string; value: boolean }",
256
+ argsSchema: {
257
+ type: "object",
258
+ properties: { fdi: j, value: { type: "boolean" } },
259
+ required: ["fdi", "value"]
260
+ },
261
+ idempotent: !0,
262
+ descriptionKey: "ui.agent.periodontalChart.actions.setMissing",
263
+ description: "Flag a tooth present or absent.",
264
+ invoke: (r, n) => {
265
+ r.setTooth(n.fdi, { missing: n.value });
266
+ }
267
+ },
268
+ clear_tooth: {
269
+ safety: "destructive",
270
+ argsType: "{ fdi: string }",
271
+ argsSchema: {
272
+ type: "object",
273
+ properties: { fdi: j },
274
+ required: ["fdi"]
275
+ },
276
+ idempotent: !0,
277
+ descriptionKey: "ui.agent.periodontalChart.actions.clearTooth",
278
+ description: "Clear every reading from a tooth.",
279
+ invoke: (r, n) => {
280
+ r.clearTooth(n.fdi);
281
+ }
282
+ }
283
+ },
284
+ domHooks: {
285
+ root: {
286
+ attr: "data-component",
287
+ value: "periodontal-chart",
288
+ description: "Marks the PeriodontalChart root group."
289
+ },
290
+ instanceId: {
291
+ attr: "data-component-id",
292
+ sourceProp: "id",
293
+ description: "Sourced from the id prop."
294
+ },
295
+ item: {
296
+ attr: "data-fdi",
297
+ description: "Each tooth column header carries its FDI id as `data-fdi`. Every measurement input also carries `data-fdi` + `data-site` + `data-field`. The root `data-mode` exposes interactive vs display."
298
+ }
299
+ }
300
+ }, we = ["db", "b", "mb"], St = ["dl", "l", "ml"];
301
+ function ze(r) {
302
+ return r === "buccal" ? we : St;
303
+ }
304
+ const Pe = 4, me = 6, Tt = 20, Pt = 5;
305
+ function Xe(r, n = Pe, h = me) {
306
+ return r == null || !Number.isFinite(r) ? "normal" : r >= h ? "severe" : r >= n ? "moderate" : "normal";
307
+ }
308
+ const Et = {
309
+ 18: { buccal: 1, lingual: 2 },
310
+ 17: { buccal: 1, lingual: 2 },
311
+ 16: { buccal: 1, lingual: 2 },
312
+ 15: { buccal: 2, lingual: 2 },
313
+ 14: { buccal: 0, lingual: 2 },
314
+ 24: { buccal: 0, lingual: 2 },
315
+ 25: { buccal: 2, lingual: 2 },
316
+ 26: { buccal: 1, lingual: 2 },
317
+ 27: { buccal: 1, lingual: 2 },
318
+ 28: { buccal: 1, lingual: 2 },
319
+ 48: { buccal: 1, lingual: 1 },
320
+ 47: { buccal: 1, lingual: 1 },
321
+ 46: { buccal: 1, lingual: 1 },
322
+ 36: { buccal: 1, lingual: 1 },
323
+ 37: { buccal: 1, lingual: 1 },
324
+ 38: { buccal: 1, lingual: 1 }
325
+ };
326
+ function Dt(r, n) {
327
+ var h;
328
+ return ((h = Et[r]) == null ? void 0 : h[n]) ?? 0;
329
+ }
330
+ const Rt = Se.slice(0, 16), It = Se.slice(16), At = Te.slice(0, 10), _t = Te.slice(10);
331
+ function Qe(r) {
332
+ return r === "primary" ? { upper: At, lower: _t } : {
333
+ upper: Rt,
334
+ lower: It
335
+ };
336
+ }
337
+ function Ue(r, n) {
338
+ return n === "universal" ? vt[r] ?? r : n === "palmer" ? yt[r] ?? r : r;
339
+ }
340
+ function ue(r) {
341
+ const n = Math.round(r * 10) / 10;
342
+ return n === 0 ? 0 : n;
343
+ }
344
+ function We(r) {
345
+ let n = 0, h = 0, d = 0, f = 0, D = 0, S = 0;
346
+ for (const A of Object.values(r))
347
+ if (!(A.missing || !A.sites))
348
+ for (const T of Object.values(A.sites)) {
349
+ if (!T) continue;
350
+ const y = T.pocketDepthMm;
351
+ y == null || !Number.isFinite(y) || (d += 1, n += y, h += y + (T.recessionMm ?? 0), y >= me && (S += 1), T.bleeding && (f += 1), T.plaque && (D += 1));
352
+ }
353
+ return d === 0 ? {
354
+ meanPocketDepthMm: null,
355
+ meanAttachmentLevelMm: null,
356
+ plaquePercent: null,
357
+ bleedingPercent: null,
358
+ scoredSiteCount: 0,
359
+ deepPocketCount: 0
360
+ } : {
361
+ meanPocketDepthMm: ue(n / d),
362
+ meanAttachmentLevelMm: ue(h / d),
363
+ plaquePercent: ue(D / d * 100),
364
+ bleedingPercent: ue(f / d * 100),
365
+ scoredSiteCount: d,
366
+ deepPocketCount: S
367
+ };
368
+ }
369
+ const qt = [...Se, ...Te];
370
+ function Lt(r, n) {
371
+ var A, T;
372
+ const h = (n == null ? void 0 : n.moderate) ?? Pe, d = (n == null ? void 0 : n.severe) ?? me, f = /* @__PURE__ */ new Map();
373
+ qt.forEach((y, M) => f.set(y, M));
374
+ const D = Object.keys(r).sort(
375
+ (y, M) => (f.get(y) ?? Number.MAX_SAFE_INTEGER) - (f.get(M) ?? Number.MAX_SAFE_INTEGER)
376
+ ), S = [];
377
+ for (const y of D) {
378
+ const M = r[y];
379
+ if (!M) continue;
380
+ if (M.missing) {
381
+ S.push({
382
+ fdi: y,
383
+ status: "missing",
384
+ severity: "normal",
385
+ maxPocketDepthMm: null,
386
+ pockets: [],
387
+ bleedingSites: [],
388
+ plaqueSites: [],
389
+ suppurationSites: [],
390
+ maxRecessionMm: null,
391
+ mobility: null,
392
+ furcation: []
393
+ });
394
+ continue;
395
+ }
396
+ const X = M.implant ? "implant" : "present", L = [], ne = [], _ = [], z = [];
397
+ let $ = null, Q = null;
398
+ for (const a of Ye) {
399
+ const Z = (A = M.sites) == null ? void 0 : A[a];
400
+ if (!Z) continue;
401
+ const { pocketDepthMm: V, recessionMm: q, bleeding: oe, plaque: ge, suppuration: fe } = Z;
402
+ if (V != null && Number.isFinite(V)) {
403
+ $ = $ == null ? V : Math.max($, V);
404
+ const b = Xe(V, h, d);
405
+ b !== "normal" && L.push({ site: a, pocketDepthMm: V, severity: b });
406
+ }
407
+ q != null && Number.isFinite(q) && q > 0 && (Q = Q == null ? q : Math.max(Q, q)), oe && ne.push(a), ge && _.push(a), fe && z.push(a);
408
+ }
409
+ L.sort((a, Z) => Z.pocketDepthMm - a.pocketDepthMm);
410
+ const J = M.mobility != null && M.mobility >= 1 ? M.mobility : null, se = [];
411
+ if (M.furcation)
412
+ for (const a of ["buccal", "lingual"])
413
+ (T = M.furcation[a]) != null && T.some(Boolean) && se.push(a);
414
+ const he = L.some(
415
+ (a) => a.severity === "severe"
416
+ ) ? "severe" : L.length > 0 ? "moderate" : "normal";
417
+ (X === "implant" || L.length > 0 || ne.length > 0 || z.length > 0 || J != null || se.length > 0) && S.push({
418
+ fdi: y,
419
+ status: X,
420
+ severity: he,
421
+ maxPocketDepthMm: $,
422
+ pockets: L,
423
+ bleedingSites: ne,
424
+ plaqueSites: _,
425
+ suppurationSites: z,
426
+ maxRecessionMm: Q,
427
+ mobility: J,
428
+ furcation: se
429
+ });
430
+ }
431
+ return S;
432
+ }
433
+ function rr(r = "permanent") {
434
+ const { upper: n, lower: h } = Qe(r), d = {};
435
+ for (const f of [...n, ...h]) d[f] = {};
436
+ return d;
437
+ }
438
+ function nr(r) {
439
+ const n = [];
440
+ for (const [h, d] of Object.entries(r))
441
+ if (!(d.missing || !d.sites))
442
+ for (const f of Ye) {
443
+ const D = d.sites[f];
444
+ if (!D) continue;
445
+ const { pocketDepthMm: S, recessionMm: A, bleeding: T, suppuration: y } = D;
446
+ S == null && A == null && !T && !y || n.push({
447
+ tooth: h,
448
+ site: f,
449
+ pocketDepthMm: S,
450
+ recessionMm: A,
451
+ bleeding: T,
452
+ suppuration: y
453
+ });
454
+ }
455
+ return n;
456
+ }
457
+ function sr(r) {
458
+ const n = {};
459
+ for (const [h, d] of Object.entries(r))
460
+ d.mobility != null && (n[h] = d.mobility);
461
+ return n;
462
+ }
463
+ const Ft = pe(
464
+ "ds:w-full ds:flex ds:flex-col ds:gap-[var(--spacing-lg)] ds:text-[color:var(--foreground)]",
465
+ {
466
+ variants: {
467
+ // Disabled is conveyed by the inputs' own `disabled` state (native
468
+ // disabled controls are excluded from the axe contrast check). We must
469
+ // NOT dim the whole root with opacity — that would drop the legend,
470
+ // captions and headers below the AA contrast floor.
471
+ disabled: { true: "ds:cursor-not-allowed", false: "" }
472
+ },
473
+ defaultVariants: { disabled: !1 }
474
+ }
475
+ ), Ee = "ds:outline-[length:var(--focus-ring-width)] ds:outline-dashed ds:outline-[color:var(--ring)] ds:outline-offset-[length:var(--focus-ring-offset)]", Ot = pe(
476
+ "ds:h-6 ds:w-[3.5ch] ds:rounded-[var(--radius-sm)] ds:border ds:text-center ds:tabular-nums ds:[font-variant-numeric:var(--font-feature-tabular)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50",
477
+ {
478
+ variants: {
479
+ // The host cursor (e.g. voice control): the outline lives in the
480
+ // variant, never beside a base `outline-none`, so the two can't race on
481
+ // stylesheet order.
482
+ active: {
483
+ false: "ds:outline-none ds:bg-[var(--background)]",
484
+ true: `${Ee} ds:bg-[var(--background)]`
485
+ },
486
+ severity: {
487
+ normal: "ds:border-[color:var(--control-border)] ds:text-[color:var(--foreground)]",
488
+ moderate: "ds:border-[color:var(--warning)] ds:font-semibold ds:text-[color:var(--warning-foreground)]",
489
+ severe: "ds:border-[color:var(--destructive)] ds:font-bold ds:text-[color:var(--destructive)]"
490
+ }
491
+ },
492
+ defaultVariants: { severity: "normal", active: !1 }
493
+ }
494
+ ), jt = pe(
495
+ "ds:h-6 ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--control-border)] ds:text-[color:var(--foreground)] ds:text-center ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50",
496
+ {
497
+ variants: {
498
+ active: {
499
+ false: "ds:outline-none ds:bg-[var(--background)]",
500
+ true: `${Ee} ds:bg-[var(--background)]`
501
+ }
502
+ },
503
+ defaultVariants: { active: !1 }
504
+ }
505
+ ), $t = pe(
506
+ "ds:inline-flex ds:size-6 ds:cursor-pointer ds:items-center ds:justify-center ds:rounded-[var(--radius-sm)]",
507
+ {
508
+ variants: {
509
+ active: { false: "", true: Ee }
510
+ },
511
+ defaultVariants: { active: !1 }
512
+ }
513
+ ), Vt = {
514
+ pocketDepthMm: "data-perio-input",
515
+ recessionMm: "data-perio-input",
516
+ bleeding: "data-perio-toggle",
517
+ plaque: "data-perio-toggle"
518
+ };
519
+ function Ge(r) {
520
+ return `${r.fdi}:${r.site ?? ""}:${r.field}`;
521
+ }
522
+ function Kt(r, n) {
523
+ return !r || !n ? !1 : r.fdi === n.fdi && r.field === n.field && r.site === n.site;
524
+ }
525
+ function Bt(r, n, h) {
526
+ return { ...r, [n]: { ...r[n], ...h } };
527
+ }
528
+ function Ht(r, n, h, d) {
529
+ const f = r[n] ?? {}, D = f.sites ?? {};
530
+ return {
531
+ ...r,
532
+ [n]: {
533
+ ...f,
534
+ sites: { ...D, [h]: { ...D[h], ...d } }
535
+ }
536
+ };
537
+ }
538
+ function zt(r) {
539
+ return r === "severe" ? "ds:font-bold ds:text-[color:var(--destructive)]" : r === "moderate" ? "ds:font-semibold ds:text-[color:var(--warning-foreground)]" : "";
540
+ }
541
+ const Ut = {
542
+ db: "disto-buccal",
543
+ b: "buccal",
544
+ mb: "mesio-buccal",
545
+ dl: "disto-lingual",
546
+ l: "lingual",
547
+ ml: "mesio-lingual"
548
+ }, Wt = pt(
549
+ ({
550
+ value: r,
551
+ defaultValue: n,
552
+ onChange: h,
553
+ mode: d = "interactive",
554
+ disabled: f = !1,
555
+ dentition: D = "permanent",
556
+ numbering: S = "fdi",
557
+ showTeeth: A = !0,
558
+ assetBaseUrl: T = "/toothscheme/teeth",
559
+ showCurves: y = !0,
560
+ showIndices: M = !0,
561
+ moderatePocketMm: X = Pe,
562
+ severePocketMm: L = me,
563
+ locale: ne,
564
+ activeSite: _,
565
+ onActiveSiteChange: z,
566
+ scrollActiveSiteIntoView: $ = !1,
567
+ "aria-label": Q,
568
+ id: J,
569
+ className: se,
570
+ ...he
571
+ }, De) => {
572
+ const { t: a, i18n: Z } = gt("ui"), V = ne ?? Z.language ?? "en", q = ie(null), oe = r !== void 0, [ge, fe] = mt(
573
+ () => n ?? {}
574
+ ), b = oe ? r : ge, U = d === "display", F = ie(b);
575
+ F.current = b;
576
+ const ee = O(
577
+ (e) => {
578
+ F.current = e, oe || fe(e), h == null || h(e);
579
+ },
580
+ [oe, h]
581
+ ), le = O(
582
+ (e, t, s) => ee(Ht(F.current, e, t, s)),
583
+ [ee]
584
+ ), te = O(
585
+ (e, t) => ee(Bt(F.current, e, t)),
586
+ [ee]
587
+ ), Re = O(
588
+ (e) => {
589
+ const t = { ...F.current };
590
+ delete t[e], ee(t);
591
+ },
592
+ [ee]
593
+ ), Ie = O(
594
+ (e, t, s) => {
595
+ var l, u;
596
+ const i = Vt[s];
597
+ if (i)
598
+ try {
599
+ (u = (l = q.current) == null ? void 0 : l.querySelector(
600
+ `[${i}][data-fdi="${e}"][data-site="${t}"][data-field="${s}"]`
601
+ )) == null || u.focus();
602
+ } catch {
603
+ }
604
+ },
605
+ []
606
+ ), Ae = ie(_);
607
+ Ae.current = _;
608
+ const be = (e, t, s) => !U && _ != null && _.fdi === e && _.field === t && _.site === s, ve = ie(""), B = O(
609
+ (e) => {
610
+ z && (Kt(Ae.current, e) || (ve.current = Ge(e), z(e)));
611
+ },
612
+ [z]
613
+ ), H = _ ? Ge(_) : "", _e = ie(H);
614
+ Be(() => {
615
+ var s;
616
+ if (H === _e.current) return;
617
+ _e.current = H;
618
+ const e = H === ve.current;
619
+ if (ve.current = "", !$ || !H || e) return;
620
+ const t = (s = q.current) == null ? void 0 : s.querySelector("[data-active-site]");
621
+ t && typeof t.scrollIntoView == "function" && t.scrollIntoView({ block: "nearest", inline: "nearest" });
622
+ }, [$, H]), Be(() => {
623
+ if (!(!$ || !H))
624
+ return bt(() => {
625
+ var t;
626
+ const e = (t = q.current) == null ? void 0 : t.querySelector("[data-active-site]");
627
+ e && typeof e.scrollIntoView == "function" && e.scrollIntoView({ block: "nearest", inline: "nearest" });
628
+ });
629
+ }, [$, H]);
630
+ const R = He(
631
+ () => We(b),
632
+ [b]
633
+ ), ye = He(
634
+ () => ({
635
+ getValue: () => F.current,
636
+ getTooth: (e) => F.current[e],
637
+ getIndices: () => We(F.current),
638
+ getFindings: () => Lt(F.current, {
639
+ moderate: X,
640
+ severe: L
641
+ }),
642
+ missingTeeth: () => Object.entries(F.current).filter(([, e]) => e.missing).map(([e]) => e),
643
+ setSite: le,
644
+ setTooth: te,
645
+ clearTooth: Re,
646
+ focusSite: Ie
647
+ }),
648
+ [
649
+ le,
650
+ te,
651
+ Re,
652
+ Ie,
653
+ X,
654
+ L
655
+ ]
656
+ );
657
+ ht(De, () => ye, [ye]), ft(wt, ye, J);
658
+ const qe = Qe(D), Je = Q ?? a("periodontalChart.ariaLabel", "Periodontal chart"), ae = O(
659
+ (e) => {
660
+ try {
661
+ return new Intl.NumberFormat(V, {
662
+ maximumFractionDigits: 1
663
+ }).format(e);
664
+ } catch {
665
+ return String(e);
666
+ }
667
+ },
668
+ [V]
669
+ ), Le = O(
670
+ (e) => a(`periodontalChart.site.${e}`, {
671
+ defaultValue: Ut[e]
672
+ }),
673
+ [a]
674
+ ), W = O(
675
+ (e) => Ue(e, S),
676
+ [S]
677
+ ), I = /* @__PURE__ */ o(
678
+ "span",
679
+ {
680
+ "aria-hidden": "true",
681
+ className: "ds:text-[color:var(--muted-foreground)]",
682
+ children: a("periodontalChart.cell.empty", "–")
683
+ }
684
+ ), Ze = O((e) => {
685
+ var N;
686
+ const t = e.target;
687
+ if (!((N = t.matches) != null && N.call(t, "[data-perio-input]"))) return;
688
+ const s = e.key;
689
+ if (s !== "ArrowLeft" && s !== "ArrowRight" && s !== "ArrowUp" && s !== "ArrowDown")
690
+ return;
691
+ e.preventDefault();
692
+ const i = q.current;
693
+ if (!i) return;
694
+ if (s === "ArrowUp" || s === "ArrowDown") {
695
+ const v = t.getAttribute("data-fdi"), C = t.getAttribute("data-site"), k = t.getAttribute("data-field") === "pocketDepthMm" ? "recessionMm" : "pocketDepthMm", E = i.querySelector(
696
+ `[data-perio-input][data-fdi="${v}"][data-site="${C}"][data-field="${k}"]`
697
+ );
698
+ E == null || E.focus(), E == null || E.select();
699
+ return;
700
+ }
701
+ const l = Array.from(
702
+ i.querySelectorAll("[data-perio-input]")
703
+ ), u = l.indexOf(t);
704
+ if (u === -1) return;
705
+ const c = l[u + (s === "ArrowRight" ? 1 : -1)];
706
+ c == null || c.focus(), c == null || c.select();
707
+ }, []), P = "ds:px-[var(--spacing-2xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)]", G = "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", et = (e, t, s) => {
708
+ var N, v, C;
709
+ const i = (C = (v = (N = b[e]) == null ? void 0 : N.sites) == null ? void 0 : v[t]) == null ? void 0 : C[s], l = s === "pocketDepthMm" ? Xe(i, X, L) : "normal", u = a(`periodontalChart.input.${s}`, {
710
+ tooth: W(e),
711
+ site: Le(t),
712
+ defaultValue: s === "pocketDepthMm" ? "Tooth {{tooth}} {{site}} pocket depth, millimetres" : "Tooth {{tooth}} {{site}} recession, millimetres"
713
+ }), g = l === "severe" ? a("periodontalChart.flag.severe", "severe pocket") : l === "moderate" ? a("periodontalChart.flag.moderate", "moderate pocket") : "";
714
+ if (U)
715
+ return i == null || !Number.isFinite(i) ? /* @__PURE__ */ o("span", { className: "ds:inline-block ds:w-[3.5ch]", children: I }) : /* @__PURE__ */ m(
716
+ "span",
717
+ {
718
+ className: `ds:inline-block ds:w-[3.5ch] ds:tabular-nums ds:[font-variant-numeric:var(--font-feature-tabular)] ${zt(
719
+ l
720
+ )}`,
721
+ children: [
722
+ /* @__PURE__ */ o("span", { children: ae(i) }),
723
+ g ? /* @__PURE__ */ m("span", { className: "ds:sr-only", children: [
724
+ " ",
725
+ g
726
+ ] }) : null
727
+ ]
728
+ }
729
+ );
730
+ const c = be(e, s, t);
731
+ return /* @__PURE__ */ o(
732
+ "input",
733
+ {
734
+ type: "text",
735
+ inputMode: "numeric",
736
+ autoComplete: "off",
737
+ disabled: f,
738
+ "aria-label": g ? `${u}, ${g}` : u,
739
+ "aria-current": c ? "true" : void 0,
740
+ "data-active-site": c ? "" : void 0,
741
+ "data-perio-input": "",
742
+ "data-fdi": e,
743
+ "data-site": t,
744
+ "data-field": s,
745
+ value: i == null ? "" : String(i),
746
+ onFocus: (x) => {
747
+ x.currentTarget.select(), B({ fdi: e, site: t, field: s });
748
+ },
749
+ onPointerDown: () => B({ fdi: e, site: t, field: s }),
750
+ onChange: (x) => {
751
+ B({ fdi: e, site: t, field: s });
752
+ const k = x.target.value.trim();
753
+ let E;
754
+ if (k === "" || k === "-")
755
+ E = void 0;
756
+ else {
757
+ const Y = Number(k);
758
+ if (!Number.isFinite(Y)) return;
759
+ E = s === "pocketDepthMm" ? Math.max(0, Y) : Y;
760
+ }
761
+ le(
762
+ e,
763
+ t,
764
+ s === "pocketDepthMm" ? { pocketDepthMm: E } : { recessionMm: E }
765
+ );
766
+ },
767
+ className: Ot({ severity: l, active: c })
768
+ }
769
+ );
770
+ }, tt = (e, t, s) => {
771
+ var c, N, v;
772
+ const i = !!((v = (N = (c = b[e]) == null ? void 0 : c.sites) == null ? void 0 : N[t]) != null && v[s]), l = a(`periodontalChart.toggle.${s}`, {
773
+ tooth: W(e),
774
+ site: Le(t),
775
+ defaultValue: s === "bleeding" ? "Tooth {{tooth}} {{site}} bleeding on probing" : "Tooth {{tooth}} {{site}} plaque"
776
+ }), u = s === "bleeding" ? "ds:accent-[var(--destructive)]" : "ds:accent-[var(--warning)]";
777
+ if (U)
778
+ return i ? /* @__PURE__ */ o(
779
+ "span",
780
+ {
781
+ role: "img",
782
+ "aria-label": l,
783
+ className: `ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ${s === "bleeding" ? "ds:bg-[var(--destructive)]" : "ds:bg-[var(--warning)]"}`
784
+ }
785
+ ) : /* @__PURE__ */ o("span", { className: "ds:inline-block ds:size-6", children: I });
786
+ const g = be(e, s, t);
787
+ return /* @__PURE__ */ m(
788
+ "label",
789
+ {
790
+ className: $t({ active: g }),
791
+ "data-active-site": g ? "" : void 0,
792
+ children: [
793
+ /* @__PURE__ */ o("span", { className: "ds:sr-only", children: l }),
794
+ /* @__PURE__ */ o(
795
+ "input",
796
+ {
797
+ type: "checkbox",
798
+ disabled: f,
799
+ checked: i,
800
+ "aria-current": g ? "true" : void 0,
801
+ "data-perio-toggle": "",
802
+ "data-fdi": e,
803
+ "data-site": t,
804
+ "data-field": s,
805
+ onFocus: () => B({ fdi: e, site: t, field: s }),
806
+ onChange: (C) => {
807
+ B({ fdi: e, site: t, field: s }), le(
808
+ e,
809
+ t,
810
+ s === "bleeding" ? { bleeding: C.target.checked } : { plaque: C.target.checked }
811
+ );
812
+ },
813
+ className: `ds:size-4 ${u} ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50`
814
+ }
815
+ )
816
+ ]
817
+ }
818
+ );
819
+ }, rt = (e, t) => {
820
+ var u;
821
+ const s = b[e], i = Dt(e, t);
822
+ if (s != null && s.missing || i === 0) return I;
823
+ const l = ((u = s == null ? void 0 : s.furcation) == null ? void 0 : u[t]) ?? [];
824
+ return /* @__PURE__ */ o("span", { className: "ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]", children: Array.from({ length: i }, (g, c) => {
825
+ const N = !!l[c], v = a("periodontalChart.toggle.furcation", {
826
+ tooth: W(e),
827
+ side: a(`periodontalChart.side.${t}`, {
828
+ defaultValue: t === "buccal" ? "buccal" : "lingual"
829
+ }),
830
+ n: c + 1,
831
+ defaultValue: "Tooth {{tooth}} {{side}} furcation {{n}}"
832
+ });
833
+ return U ? N ? /* @__PURE__ */ o(
834
+ "span",
835
+ {
836
+ role: "img",
837
+ "aria-label": v,
838
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--primary)]"
839
+ },
840
+ c
841
+ ) : /* @__PURE__ */ o(
842
+ "span",
843
+ {
844
+ "aria-hidden": "true",
845
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:border ds:border-[color:var(--border)]"
846
+ },
847
+ c
848
+ ) : /* @__PURE__ */ m(
849
+ "label",
850
+ {
851
+ className: "ds:inline-flex ds:size-6 ds:cursor-pointer ds:items-center ds:justify-center",
852
+ children: [
853
+ /* @__PURE__ */ o("span", { className: "ds:sr-only", children: v }),
854
+ /* @__PURE__ */ o(
855
+ "input",
856
+ {
857
+ type: "checkbox",
858
+ disabled: f,
859
+ checked: N,
860
+ onChange: (C) => {
861
+ var k;
862
+ const x = [...((k = s == null ? void 0 : s.furcation) == null ? void 0 : k[t]) ?? []];
863
+ for (; x.length < i; ) x.push(!1);
864
+ x[c] = C.target.checked, te(e, {
865
+ furcation: { ...s == null ? void 0 : s.furcation, [t]: x }
866
+ });
867
+ },
868
+ className: "ds:size-4 ds:accent-[var(--primary)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50"
869
+ }
870
+ )
871
+ ]
872
+ },
873
+ c
874
+ );
875
+ }) });
876
+ }, ce = (e, t, s, i, l) => /* @__PURE__ */ m("tr", { children: [
877
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a(t, s) }),
878
+ e.map((u) => {
879
+ var g;
880
+ return /* @__PURE__ */ o("td", { className: P, children: (g = b[u]) != null && g.missing ? I : /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]", children: ze(i).map((c) => /* @__PURE__ */ o("span", { children: et(u, c, l) }, c)) }) }, u);
881
+ })
882
+ ] }), de = (e, t, s, i, l) => /* @__PURE__ */ m("tr", { children: [
883
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a(t, s) }),
884
+ e.map((u) => {
885
+ var g;
886
+ return /* @__PURE__ */ o("td", { className: P, children: (g = b[u]) != null && g.missing ? I : /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:justify-center ds:gap-[var(--spacing-2xs)]", children: ze(i).map((c) => /* @__PURE__ */ o("span", { children: tt(u, c, l) }, c)) }) }, u);
887
+ })
888
+ ] }), Fe = (e, t) => /* @__PURE__ */ m("tr", { children: [
889
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a("periodontalChart.row.furcation", "Furcation") }),
890
+ e.map((s) => /* @__PURE__ */ o("td", { className: P, children: rt(s, t) }, s))
891
+ ] }), Oe = (e, t, s, i) => /* @__PURE__ */ m("tr", { children: [
892
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a(t, s) }),
893
+ e.map((l) => {
894
+ var c, N;
895
+ if (i === "implant" && ((c = b[l]) != null && c.missing))
896
+ return /* @__PURE__ */ o("td", { className: P, children: I }, l);
897
+ const u = !!((N = b[l]) != null && N[i]), g = a(`periodontalChart.flag.${i}Label`, {
898
+ tooth: W(l),
899
+ defaultValue: i === "missing" ? "Tooth {{tooth}} missing" : "Tooth {{tooth}} implant"
900
+ });
901
+ return /* @__PURE__ */ o("td", { className: P, children: U ? u ? /* @__PURE__ */ o(
902
+ "span",
903
+ {
904
+ role: "img",
905
+ "aria-label": g,
906
+ className: "type-meta ds:font-semibold",
907
+ children: i === "missing" ? a("periodontalChart.flag.missingShort", "×") : a("periodontalChart.flag.implantShort", "I")
908
+ }
909
+ ) : I : /* @__PURE__ */ m("label", { className: "ds:inline-flex ds:size-6 ds:cursor-pointer ds:items-center ds:justify-center", children: [
910
+ /* @__PURE__ */ o("span", { className: "ds:sr-only", children: g }),
911
+ /* @__PURE__ */ o(
912
+ "input",
913
+ {
914
+ type: "checkbox",
915
+ disabled: f,
916
+ checked: u,
917
+ onChange: (v) => te(
918
+ l,
919
+ i === "missing" ? { missing: v.target.checked } : { implant: v.target.checked }
920
+ ),
921
+ className: "ds:size-4 ds:accent-[var(--primary)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50"
922
+ }
923
+ )
924
+ ] }) }, l);
925
+ })
926
+ ] }), nt = (e) => /* @__PURE__ */ m("tr", { children: [
927
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a("periodontalChart.row.mobility", "Mobility") }),
928
+ e.map((t) => {
929
+ var u, g;
930
+ if ((u = b[t]) != null && u.missing)
931
+ return /* @__PURE__ */ o("td", { className: P, children: I }, t);
932
+ const s = (g = b[t]) == null ? void 0 : g.mobility, i = a("periodontalChart.mobility.label", {
933
+ tooth: W(t),
934
+ defaultValue: "Tooth {{tooth}} mobility grade"
935
+ });
936
+ if (U)
937
+ return /* @__PURE__ */ o("td", { className: P, children: s == null ? I : /* @__PURE__ */ o("span", { role: "img", "aria-label": i, className: "type-meta", children: s }) }, t);
938
+ const l = be(t, "mobility");
939
+ return /* @__PURE__ */ o("td", { className: P, children: /* @__PURE__ */ m(
940
+ "select",
941
+ {
942
+ disabled: f,
943
+ "aria-label": i,
944
+ "aria-current": l ? "true" : void 0,
945
+ "data-active-site": l ? "" : void 0,
946
+ "data-perio-mobility": "",
947
+ "data-fdi": t,
948
+ "data-field": "mobility",
949
+ onFocus: () => B({ fdi: t, field: "mobility" }),
950
+ onPointerDown: () => B({ fdi: t, field: "mobility" }),
951
+ value: s == null ? "" : String(s),
952
+ onChange: (c) => {
953
+ B({ fdi: t, field: "mobility" }), te(t, {
954
+ mobility: c.target.value === "" ? void 0 : Number(c.target.value)
955
+ });
956
+ },
957
+ className: jt({ active: l }),
958
+ children: [
959
+ /* @__PURE__ */ o("option", { value: "", children: a("periodontalChart.mobility.none", "–") }),
960
+ /* @__PURE__ */ o("option", { value: "0", children: "0" }),
961
+ /* @__PURE__ */ o("option", { value: "1", children: "1" }),
962
+ /* @__PURE__ */ o("option", { value: "2", children: "2" }),
963
+ /* @__PURE__ */ o("option", { value: "3", children: "3" })
964
+ ]
965
+ }
966
+ ) }, t);
967
+ })
968
+ ] }), st = (e) => /* @__PURE__ */ m("tr", { children: [
969
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a("periodontalChart.row.note", "Note") }),
970
+ e.map((t) => {
971
+ var l, u;
972
+ if ((l = b[t]) != null && l.missing)
973
+ return /* @__PURE__ */ o("td", { className: P, children: I }, t);
974
+ const s = ((u = b[t]) == null ? void 0 : u.note) ?? "", i = a("periodontalChart.note.label", {
975
+ tooth: W(t),
976
+ defaultValue: "Tooth {{tooth}} note"
977
+ });
978
+ return U ? /* @__PURE__ */ o("td", { className: `${P} ds:text-start`, children: s ? /* @__PURE__ */ o("span", { className: "type-meta", children: s }) : I }, t) : /* @__PURE__ */ o("td", { className: P, children: /* @__PURE__ */ o(
979
+ "input",
980
+ {
981
+ type: "text",
982
+ disabled: f,
983
+ "aria-label": i,
984
+ value: s,
985
+ onChange: (g) => te(t, { note: g.target.value }),
986
+ className: "ds:h-6 ds:w-[6ch] ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--control-border)] ds:bg-[var(--background)] ds:text-[color:var(--foreground)] ds:px-[var(--spacing-2xs)] ds:outline-none ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:disabled:cursor-not-allowed ds:disabled:opacity-50"
987
+ }
988
+ ) }, t);
989
+ })
990
+ ] }), ot = (e) => /* @__PURE__ */ m("tr", { children: [
991
+ /* @__PURE__ */ o("th", { scope: "row", className: G, children: a("periodontalChart.row.tooth", "Tooth") }),
992
+ e.map((t) => {
993
+ const s = b[t], i = xt[t];
994
+ if (s != null && s.missing || !i)
995
+ return /* @__PURE__ */ o("td", { className: P, children: I }, t);
996
+ const l = s != null && s.implant ? "implant" : "default";
997
+ return /* @__PURE__ */ o("td", { className: P, children: /* @__PURE__ */ o(
998
+ "img",
999
+ {
1000
+ src: Nt(i, T, l, "side"),
1001
+ alt: "",
1002
+ "aria-hidden": "true",
1003
+ loading: "lazy",
1004
+ className: "ds:mx-auto ds:h-12 ds:w-auto ds:max-w-full ds:object-contain"
1005
+ }
1006
+ ) }, t);
1007
+ })
1008
+ ] }), at = (e) => {
1009
+ var $e, Ve, Ke;
1010
+ const c = (p) => 38 + Math.min(Math.max(0, p), 13) * 6, N = (p) => 38 - Math.min(Math.max(0, p), 5) * 6, v = [], C = [];
1011
+ let x = [], k = [];
1012
+ const E = () => {
1013
+ x.length && v.push(x), k.length && C.push(k), x = [], k = [];
1014
+ };
1015
+ let Y = 12;
1016
+ for (const p of e) {
1017
+ const w = ($e = b[p]) == null ? void 0 : $e.missing;
1018
+ for (const ut of we) {
1019
+ const re = w || (Ke = (Ve = b[p]) == null ? void 0 : Ve.sites) == null ? void 0 : Ke[ut], ke = re == null ? void 0 : re.pocketDepthMm, Me = re == null ? void 0 : re.recessionMm;
1020
+ ke != null && Number.isFinite(ke) ? x.push({ x: Y, y: c(ke) }) : x.length && (v.push(x), x = []), Me != null && Number.isFinite(Me) ? k.push({ x: Y, y: N(Me) }) : k.length && (C.push(k), k = []), Y += 24;
1021
+ }
1022
+ }
1023
+ E();
1024
+ const xe = e.length * we.length * 24, Ne = (p) => p.map((w) => `${w.x},${w.y}`).join(" "), ct = v.flat(), dt = C.flat();
1025
+ return /* @__PURE__ */ m(
1026
+ "svg",
1027
+ {
1028
+ viewBox: `0 0 ${xe} 124`,
1029
+ className: "ds:h-[132px] ds:w-full",
1030
+ preserveAspectRatio: "none",
1031
+ "aria-hidden": "true",
1032
+ focusable: "false",
1033
+ children: [
1034
+ [3, 6, 9, 12].map((p) => /* @__PURE__ */ o(
1035
+ "line",
1036
+ {
1037
+ x1: 0,
1038
+ x2: xe,
1039
+ y1: c(p),
1040
+ y2: c(p),
1041
+ stroke: "var(--border)",
1042
+ strokeWidth: 1,
1043
+ strokeDasharray: "2 4"
1044
+ },
1045
+ p
1046
+ )),
1047
+ /* @__PURE__ */ o(
1048
+ "line",
1049
+ {
1050
+ x1: 0,
1051
+ x2: xe,
1052
+ y1: 38,
1053
+ y2: 38,
1054
+ stroke: "var(--border)",
1055
+ strokeWidth: 1.5
1056
+ }
1057
+ ),
1058
+ v.map(
1059
+ (p, w) => p.length >= 2 ? /* @__PURE__ */ o(
1060
+ "polygon",
1061
+ {
1062
+ points: `${p[0].x},38 ${Ne(p)} ${p[p.length - 1].x},38`,
1063
+ fill: "var(--success)",
1064
+ fillOpacity: 0.14
1065
+ },
1066
+ `fill-${w}`
1067
+ ) : null
1068
+ ),
1069
+ v.map(
1070
+ (p, w) => p.length >= 2 ? /* @__PURE__ */ o(
1071
+ "polyline",
1072
+ {
1073
+ points: Ne(p),
1074
+ fill: "none",
1075
+ stroke: "var(--success)",
1076
+ strokeWidth: 2.5,
1077
+ strokeLinejoin: "round",
1078
+ strokeLinecap: "round"
1079
+ },
1080
+ `depth-${w}`
1081
+ ) : null
1082
+ ),
1083
+ C.map(
1084
+ (p, w) => p.length >= 2 ? /* @__PURE__ */ o(
1085
+ "polyline",
1086
+ {
1087
+ points: Ne(p),
1088
+ fill: "none",
1089
+ stroke: "var(--accent)",
1090
+ strokeWidth: 2.5,
1091
+ strokeLinejoin: "round",
1092
+ strokeLinecap: "round"
1093
+ },
1094
+ `margin-${w}`
1095
+ ) : null
1096
+ ),
1097
+ ct.map((p, w) => /* @__PURE__ */ o(
1098
+ "circle",
1099
+ {
1100
+ cx: p.x,
1101
+ cy: p.y,
1102
+ r: 2,
1103
+ fill: "var(--success)"
1104
+ },
1105
+ `dp-${w}`
1106
+ )),
1107
+ dt.map((p, w) => /* @__PURE__ */ o(
1108
+ "circle",
1109
+ {
1110
+ cx: p.x,
1111
+ cy: p.y,
1112
+ r: 2,
1113
+ fill: "var(--accent)"
1114
+ },
1115
+ `mp-${w}`
1116
+ ))
1117
+ ]
1118
+ }
1119
+ );
1120
+ }, je = (e, t, s) => /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: /* @__PURE__ */ m(
1121
+ "div",
1122
+ {
1123
+ tabIndex: 0,
1124
+ role: "group",
1125
+ dir: "ltr",
1126
+ "aria-label": a(t, s),
1127
+ className: "ds:overflow-x-auto ds:rounded-[var(--radius-sm)] ds:outline-none ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
1128
+ children: [
1129
+ /* @__PURE__ */ m("table", { className: "type-body-sm ds:w-full ds:border-collapse", children: [
1130
+ /* @__PURE__ */ o("caption", { className: "type-label ds:text-start ds:mb-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]", children: a(t, s) }),
1131
+ /* @__PURE__ */ o("thead", { children: /* @__PURE__ */ m("tr", { children: [
1132
+ /* @__PURE__ */ o(
1133
+ "th",
1134
+ {
1135
+ scope: "col",
1136
+ className: "ds:px-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)] ds:text-start ds:border-b ds:border-[color:var(--border)]",
1137
+ children: a("periodontalChart.column.measure", "Measurement")
1138
+ }
1139
+ ),
1140
+ e.map((i) => /* @__PURE__ */ m(
1141
+ "th",
1142
+ {
1143
+ scope: "col",
1144
+ "data-fdi": i,
1145
+ className: "ds:px-[var(--spacing-2xs)] ds:py-[var(--spacing-2xs)] ds:text-center ds:border-b ds:border-[color:var(--border)] ds:tabular-nums ds:[font-variant-numeric:var(--font-feature-tabular)]",
1146
+ children: [
1147
+ /* @__PURE__ */ o("span", { className: "ds:sr-only", children: a("periodontalChart.toothHeader", {
1148
+ tooth: W(i),
1149
+ defaultValue: "Tooth {{tooth}}"
1150
+ }) }),
1151
+ /* @__PURE__ */ o("span", { "aria-hidden": "true", children: Ue(i, S) })
1152
+ ]
1153
+ },
1154
+ i
1155
+ ))
1156
+ ] }) }),
1157
+ /* @__PURE__ */ m("tbody", { children: [
1158
+ Oe(
1159
+ e,
1160
+ "periodontalChart.row.missing",
1161
+ "Missing",
1162
+ "missing"
1163
+ ),
1164
+ Oe(
1165
+ e,
1166
+ "periodontalChart.row.implant",
1167
+ "Implant",
1168
+ "implant"
1169
+ ),
1170
+ nt(e),
1171
+ ce(
1172
+ e,
1173
+ "periodontalChart.row.pocketDepthBuccal",
1174
+ "Pocket depth — buccal",
1175
+ "buccal",
1176
+ "pocketDepthMm"
1177
+ ),
1178
+ ce(
1179
+ e,
1180
+ "periodontalChart.row.recessionBuccal",
1181
+ "Recession — buccal",
1182
+ "buccal",
1183
+ "recessionMm"
1184
+ ),
1185
+ de(
1186
+ e,
1187
+ "periodontalChart.row.bleedingBuccal",
1188
+ "Bleeding — buccal",
1189
+ "buccal",
1190
+ "bleeding"
1191
+ ),
1192
+ de(
1193
+ e,
1194
+ "periodontalChart.row.plaqueBuccal",
1195
+ "Plaque — buccal",
1196
+ "buccal",
1197
+ "plaque"
1198
+ ),
1199
+ Fe(e, "buccal"),
1200
+ A ? ot(e) : null,
1201
+ ce(
1202
+ e,
1203
+ "periodontalChart.row.pocketDepthLingual",
1204
+ "Pocket depth — lingual",
1205
+ "lingual",
1206
+ "pocketDepthMm"
1207
+ ),
1208
+ ce(
1209
+ e,
1210
+ "periodontalChart.row.recessionLingual",
1211
+ "Recession — lingual",
1212
+ "lingual",
1213
+ "recessionMm"
1214
+ ),
1215
+ de(
1216
+ e,
1217
+ "periodontalChart.row.bleedingLingual",
1218
+ "Bleeding — lingual",
1219
+ "lingual",
1220
+ "bleeding"
1221
+ ),
1222
+ de(
1223
+ e,
1224
+ "periodontalChart.row.plaqueLingual",
1225
+ "Plaque — lingual",
1226
+ "lingual",
1227
+ "plaque"
1228
+ ),
1229
+ Fe(e, "lingual"),
1230
+ st(e)
1231
+ ] })
1232
+ ] }),
1233
+ y ? /* @__PURE__ */ o(
1234
+ "figure",
1235
+ {
1236
+ className: "ds:m-0 ds:mt-[var(--spacing-2xs)]",
1237
+ "aria-label": a("periodontalChart.curve.label", {
1238
+ arch: a(t, s),
1239
+ defaultValue: "{{arch}} probing depth and recession profile"
1240
+ }),
1241
+ children: at(e)
1242
+ }
1243
+ ) : null
1244
+ ]
1245
+ }
1246
+ ) }), it = () => {
1247
+ const e = [
1248
+ {
1249
+ key: "meanPd",
1250
+ label: a("periodontalChart.index.meanPocketDepth", "Mean PD"),
1251
+ value: R.meanPocketDepthMm == null ? "–" : a("periodontalChart.unit.mm", {
1252
+ value: ae(R.meanPocketDepthMm),
1253
+ defaultValue: "{{value}} mm"
1254
+ }),
1255
+ elevated: !1
1256
+ },
1257
+ {
1258
+ key: "meanCal",
1259
+ label: a("periodontalChart.index.meanAttachment", "Mean CAL"),
1260
+ value: R.meanAttachmentLevelMm == null ? "–" : a("periodontalChart.unit.mm", {
1261
+ value: ae(R.meanAttachmentLevelMm),
1262
+ defaultValue: "{{value}} mm"
1263
+ }),
1264
+ elevated: !1
1265
+ },
1266
+ {
1267
+ key: "plaque",
1268
+ label: a("periodontalChart.index.plaque", "Plaque"),
1269
+ value: R.plaquePercent == null ? "–" : a("periodontalChart.unit.percent", {
1270
+ value: ae(R.plaquePercent),
1271
+ defaultValue: "{{value}}%"
1272
+ }),
1273
+ elevated: R.plaquePercent != null && R.plaquePercent > Tt
1274
+ },
1275
+ {
1276
+ key: "bleeding",
1277
+ label: a("periodontalChart.index.bleeding", "BoP"),
1278
+ value: R.bleedingPercent == null ? "–" : a("periodontalChart.unit.percent", {
1279
+ value: ae(R.bleedingPercent),
1280
+ defaultValue: "{{value}}%"
1281
+ }),
1282
+ elevated: R.bleedingPercent != null && R.bleedingPercent > Pt
1283
+ }
1284
+ ];
1285
+ return /* @__PURE__ */ o(
1286
+ "dl",
1287
+ {
1288
+ className: "type-body-sm ds:flex ds:flex-wrap ds:gap-[var(--spacing-lg)] ds:m-0",
1289
+ "aria-label": a("periodontalChart.index.label", "Summary indices"),
1290
+ children: e.map((t) => /* @__PURE__ */ m(
1291
+ "div",
1292
+ {
1293
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]",
1294
+ children: [
1295
+ /* @__PURE__ */ o("dt", { className: "type-meta ds:text-[color:var(--muted-foreground)]", children: t.label }),
1296
+ /* @__PURE__ */ m(
1297
+ "dd",
1298
+ {
1299
+ className: `ds:m-0 ds:tabular-nums ds:[font-variant-numeric:var(--font-feature-tabular)] ${t.elevated ? "ds:font-bold ds:text-[color:var(--destructive)]" : "ds:text-[color:var(--foreground)]"}`,
1300
+ children: [
1301
+ /* @__PURE__ */ o("span", { children: t.value }),
1302
+ t.elevated ? /* @__PURE__ */ m("span", { className: "ds:sr-only", children: [
1303
+ " ",
1304
+ a("periodontalChart.index.elevated", "elevated")
1305
+ ] }) : null
1306
+ ]
1307
+ }
1308
+ )
1309
+ ]
1310
+ },
1311
+ t.key
1312
+ ))
1313
+ }
1314
+ );
1315
+ }, lt = /* @__PURE__ */ m(
1316
+ "div",
1317
+ {
1318
+ role: "group",
1319
+ "aria-label": a("periodontalChart.legend.label", "Chart legend"),
1320
+ className: "type-meta ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-md)] ds:text-[color:var(--muted-foreground)]",
1321
+ children: [
1322
+ /* @__PURE__ */ m("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
1323
+ /* @__PURE__ */ o(
1324
+ "span",
1325
+ {
1326
+ "aria-hidden": "true",
1327
+ className: "ds:inline-block ds:h-[2px] ds:w-4 ds:bg-[var(--success)]"
1328
+ }
1329
+ ),
1330
+ a("periodontalChart.legend.depth", "Pocket depth")
1331
+ ] }),
1332
+ /* @__PURE__ */ m("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
1333
+ /* @__PURE__ */ o(
1334
+ "span",
1335
+ {
1336
+ "aria-hidden": "true",
1337
+ className: "ds:inline-block ds:h-[2px] ds:w-4 ds:bg-[var(--accent)]"
1338
+ }
1339
+ ),
1340
+ a("periodontalChart.legend.recession", "Recession")
1341
+ ] }),
1342
+ /* @__PURE__ */ m("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
1343
+ /* @__PURE__ */ o(
1344
+ "span",
1345
+ {
1346
+ "aria-hidden": "true",
1347
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--destructive)]"
1348
+ }
1349
+ ),
1350
+ a("periodontalChart.legend.bleeding", "Bleeding on probing")
1351
+ ] }),
1352
+ /* @__PURE__ */ m("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
1353
+ /* @__PURE__ */ o(
1354
+ "span",
1355
+ {
1356
+ "aria-hidden": "true",
1357
+ className: "ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[var(--warning)]"
1358
+ }
1359
+ ),
1360
+ a("periodontalChart.legend.plaque", "Plaque")
1361
+ ] })
1362
+ ]
1363
+ }
1364
+ );
1365
+ return (
1366
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- roving-tabindex arrow-key nav across the chart group; each input is individually focusable and labelled
1367
+ /* @__PURE__ */ m(
1368
+ "div",
1369
+ {
1370
+ ref: q,
1371
+ role: "group",
1372
+ "aria-label": Je,
1373
+ "data-component": "periodontal-chart",
1374
+ "data-component-id": J,
1375
+ "data-mode": d,
1376
+ id: J,
1377
+ ...he,
1378
+ onKeyDown: Ze,
1379
+ className: Ft({ disabled: f, className: se }),
1380
+ children: [
1381
+ M ? it() : null,
1382
+ je(qe.upper, "periodontalChart.arch.upper", "Upper arch"),
1383
+ je(qe.lower, "periodontalChart.arch.lower", "Lower arch"),
1384
+ lt
1385
+ ]
1386
+ }
1387
+ )
1388
+ );
1389
+ }
1390
+ );
1391
+ Wt.displayName = "PeriodontalChart";
1392
+ export {
1393
+ Pt as B,
1394
+ Pe as M,
1395
+ we as P,
1396
+ me as S,
1397
+ Et as a,
1398
+ St as b,
1399
+ Tt as c,
1400
+ Wt as d,
1401
+ Lt as e,
1402
+ We as f,
1403
+ rr as g,
1404
+ Dt as h,
1405
+ wt as i,
1406
+ Ue as j,
1407
+ Xe as k,
1408
+ nr as l,
1409
+ Qe as p,
1410
+ ze as s,
1411
+ sr as t
1412
+ };
1413
+ //# sourceMappingURL=periodontal-chart-DD5C0M3l.js.map