@alfadocs/ui-kit-debug 0.68.0 → 0.70.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 (930) hide show
  1. package/dist/_chunks/{accordion-9lJSMMsZ.js → accordion-DnIa7OHX.js} +69 -47
  2. package/dist/_chunks/accordion-DnIa7OHX.js.map +1 -0
  3. package/dist/_chunks/address-autocomplete-BEX9PXty.js +496 -0
  4. package/dist/_chunks/address-autocomplete-BEX9PXty.js.map +1 -0
  5. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  6. package/dist/_chunks/{agenda-card-BxSFkqgY.js.map → agenda-card-BQ-IKAru.js.map} +1 -1
  7. package/dist/_chunks/{agenda-card.agent-B_R47-c9.js → agenda-card.agent-mTCrkKSZ.js} +6 -1
  8. package/dist/_chunks/{agenda-card.agent-B_R47-c9.js.map → agenda-card.agent-mTCrkKSZ.js.map} +1 -1
  9. package/dist/_chunks/{agenda-tray-T-BumlGZ.js → agenda-tray-CGXRk58j.js} +37 -25
  10. package/dist/_chunks/agenda-tray-CGXRk58j.js.map +1 -0
  11. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js → ai-consent-banner-Be-h9mRI.js} +5 -5
  12. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js.map → ai-consent-banner-Be-h9mRI.js.map} +1 -1
  13. package/dist/_chunks/{ai-prompt-input-BwEACCPm.js → ai-prompt-input-CuhTo9mh.js} +80 -61
  14. package/dist/_chunks/ai-prompt-input-CuhTo9mh.js.map +1 -0
  15. package/dist/_chunks/ai-tools-rail-B5NEghsp.js +511 -0
  16. package/dist/_chunks/ai-tools-rail-B5NEghsp.js.map +1 -0
  17. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  18. package/dist/_chunks/alert-CHYZ96tR.js.map +1 -0
  19. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js → alia-sidebar-B47qRQb5.js} +5 -5
  20. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js.map → alia-sidebar-B47qRQb5.js.map} +1 -1
  21. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js → anamnesis-card-DvYCa16e.js} +3 -3
  22. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js.map → anamnesis-card-DvYCa16e.js.map} +1 -1
  23. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js +2445 -0
  24. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js.map +1 -0
  25. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  26. package/dist/_chunks/annotation-marker-qt5R9WZX.js.map +1 -0
  27. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  28. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js.map → antenatal-schedule-timeline-CwXrQRm1.js.map} +1 -1
  29. package/dist/_chunks/appointment-card-C06aZqA7.js +310 -0
  30. package/dist/_chunks/appointment-card-C06aZqA7.js.map +1 -0
  31. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js +386 -0
  32. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js.map +1 -0
  33. package/dist/_chunks/appointment-tray-DRRw5ROi.js +193 -0
  34. package/dist/_chunks/appointment-tray-DRRw5ROi.js.map +1 -0
  35. package/dist/_chunks/{audio-recorder-DjXLP4aF.js → audio-recorder-Cpdk5qpQ.js} +60 -57
  36. package/dist/_chunks/audio-recorder-Cpdk5qpQ.js.map +1 -0
  37. package/dist/_chunks/{autocomplete-CcCFlVf-.js → autocomplete-DOeGouCL.js} +157 -132
  38. package/dist/_chunks/autocomplete-DOeGouCL.js.map +1 -0
  39. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  40. package/dist/_chunks/badge-DCOqV9mI.js.map +1 -0
  41. package/dist/_chunks/bishop-score-DnYWtZa_.js +304 -0
  42. package/dist/_chunks/bishop-score-DnYWtZa_.js.map +1 -0
  43. package/dist/_chunks/bmi-calculator-zjeY4E7J.js +434 -0
  44. package/dist/_chunks/bmi-calculator-zjeY4E7J.js.map +1 -0
  45. package/dist/_chunks/{booking-L8-YP8BJ.js → booking-DUBI0oqt.js} +422 -399
  46. package/dist/_chunks/booking-DUBI0oqt.js.map +1 -0
  47. package/dist/_chunks/{breadcrumb-OTbaY70e.js → breadcrumb-CchdeG7d.js} +42 -28
  48. package/dist/_chunks/breadcrumb-CchdeG7d.js.map +1 -0
  49. package/dist/_chunks/{calculator-dialog-CFk4I91b.js → calculator-dialog-BR5iU0kf.js} +2 -2
  50. package/dist/_chunks/{calculator-dialog-CFk4I91b.js.map → calculator-dialog-BR5iU0kf.js.map} +1 -1
  51. package/dist/_chunks/{calendar-oYWOCrnf.js → calendar-CZUjL8SZ.js} +258 -201
  52. package/dist/_chunks/calendar-CZUjL8SZ.js.map +1 -0
  53. package/dist/_chunks/{care-plan-card-BwVUyUBb.js → care-plan-card-C5sTfY9G.js} +13 -9
  54. package/dist/_chunks/care-plan-card-C5sTfY9G.js.map +1 -0
  55. package/dist/_chunks/{care-plan-entry-card-VzdQHcOL.js → care-plan-entry-card-CXnxGCWA.js} +20 -16
  56. package/dist/_chunks/care-plan-entry-card-CXnxGCWA.js.map +1 -0
  57. package/dist/_chunks/care-plan-header-BUwqDTtz.js +206 -0
  58. package/dist/_chunks/care-plan-header-BUwqDTtz.js.map +1 -0
  59. package/dist/_chunks/{carousel.agent-vt21A_el.js → carousel.agent-4v8Emr9E.js} +219 -198
  60. package/dist/_chunks/{carousel.agent-vt21A_el.js.map → carousel.agent-4v8Emr9E.js.map} +1 -1
  61. package/dist/_chunks/{chart-Cg3e9EH9.js → chart-CMr3eW62.js} +150 -109
  62. package/dist/_chunks/chart-CMr3eW62.js.map +1 -0
  63. package/dist/_chunks/{chat-container-ogB4OskO.js → chat-container-DWho5hPR.js} +47 -34
  64. package/dist/_chunks/chat-container-DWho5hPR.js.map +1 -0
  65. package/dist/_chunks/{chat-input-B5zjNEUN.js → chat-input-BcXTetgM.js} +57 -41
  66. package/dist/_chunks/chat-input-BcXTetgM.js.map +1 -0
  67. package/dist/_chunks/{checkbox-DRcOdmXv.js → checkbox-BuZ1u__2.js} +41 -27
  68. package/dist/_chunks/checkbox-BuZ1u__2.js.map +1 -0
  69. package/dist/_chunks/{checkbox-group-CpUwlHug.js → checkbox-group-PqNmQ-cE.js} +3 -3
  70. package/dist/_chunks/{checkbox-group-CpUwlHug.js.map → checkbox-group-PqNmQ-cE.js.map} +1 -1
  71. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  72. package/dist/_chunks/clinical-note-card-BUvNMNGL.js.map +1 -0
  73. package/dist/_chunks/{collapsible-X3oaLPU3.js → collapsible-BrnRiCC6.js} +26 -23
  74. package/dist/_chunks/collapsible-BrnRiCC6.js.map +1 -0
  75. package/dist/_chunks/{color-picker-FXpItIaF.js → color-picker-C_fZl6sA.js} +124 -112
  76. package/dist/_chunks/color-picker-C_fZl6sA.js.map +1 -0
  77. package/dist/_chunks/{combobox-BC-DFx8G.js → combobox-Clum7gJ1.js} +165 -128
  78. package/dist/_chunks/combobox-Clum7gJ1.js.map +1 -0
  79. package/dist/_chunks/{command-palette-BiPAAno-.js → command-palette-CJzmc5pC.js} +87 -64
  80. package/dist/_chunks/command-palette-CJzmc5pC.js.map +1 -0
  81. package/dist/_chunks/{contact-profile-card-7BMB85T6.js → contact-profile-card-DDPwRFiP.js} +13 -11
  82. package/dist/_chunks/contact-profile-card-DDPwRFiP.js.map +1 -0
  83. package/dist/_chunks/control-room-rail-Y8ryLYsP.js +229 -0
  84. package/dist/_chunks/control-room-rail-Y8ryLYsP.js.map +1 -0
  85. package/dist/_chunks/{copy-field-CCq7j6Zc.js → copy-field-Bjw9u2cV.js} +42 -35
  86. package/dist/_chunks/copy-field-Bjw9u2cV.js.map +1 -0
  87. package/dist/_chunks/counter-dRlTNC_y.js +55 -0
  88. package/dist/_chunks/counter-dRlTNC_y.js.map +1 -0
  89. package/dist/_chunks/{cycle-calculator-BF0ointe.js → cycle-calculator-CCmPwcBl.js} +4 -4
  90. package/dist/_chunks/{cycle-calculator-BF0ointe.js.map → cycle-calculator-CCmPwcBl.js.map} +1 -1
  91. package/dist/_chunks/{date-picker-oGg5BnXL.js → date-picker-Dl9RKxaV.js} +76 -57
  92. package/dist/_chunks/{date-picker-oGg5BnXL.js.map → date-picker-Dl9RKxaV.js.map} +1 -1
  93. package/dist/_chunks/{date-range-picker-C5BWfH_T.js → date-range-picker-CTUeR6Bj.js} +73 -46
  94. package/dist/_chunks/date-range-picker-CTUeR6Bj.js.map +1 -0
  95. package/dist/_chunks/{date-time-picker-Ze1My59T.js → date-time-picker-BhoogS5Q.js} +64 -40
  96. package/dist/_chunks/date-time-picker-BhoogS5Q.js.map +1 -0
  97. package/dist/_chunks/{dependent-selector-DpzGtr_J.js → dependent-selector-DUV4thxX.js} +45 -31
  98. package/dist/_chunks/dependent-selector-DUV4thxX.js.map +1 -0
  99. package/dist/_chunks/{dialog-DMGnSelc.js → dialog-ZNuboNmy.js} +35 -28
  100. package/dist/_chunks/dialog-ZNuboNmy.js.map +1 -0
  101. package/dist/_chunks/{document-scanner-D2qehl3-.js → document-scanner-C_AxLooF.js} +13 -5
  102. package/dist/_chunks/document-scanner-C_AxLooF.js.map +1 -0
  103. package/dist/_chunks/{dropdown-menu-DwwPovMZ.js → dropdown-menu-qrxjymfw.js} +94 -93
  104. package/dist/_chunks/dropdown-menu-qrxjymfw.js.map +1 -0
  105. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js → due-date-calculator-Brdj-euS.js} +6 -6
  106. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js.map → due-date-calculator-Brdj-euS.js.map} +1 -1
  107. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js +328 -0
  108. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js.map +1 -0
  109. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  110. package/dist/_chunks/{email-input-lQivsFrw.js.map → email-input-DJ7EXklP.js.map} +1 -1
  111. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-9_62gY7l.js} +38 -20
  112. package/dist/_chunks/{entity-card-COhmqHly.js.map → entity-card-9_62gY7l.js.map} +1 -1
  113. package/dist/_chunks/entity-summary-BxRjFh_4.js +138 -0
  114. package/dist/_chunks/entity-summary-BxRjFh_4.js.map +1 -0
  115. package/dist/_chunks/{fetal-weight-BVSzOhuR.js → fetal-weight-DNCkyeVo.js} +3 -3
  116. package/dist/_chunks/{fetal-weight-BVSzOhuR.js.map → fetal-weight-DNCkyeVo.js.map} +1 -1
  117. package/dist/_chunks/field-value-NXYczdpO.js +415 -0
  118. package/dist/_chunks/field-value-NXYczdpO.js.map +1 -0
  119. package/dist/_chunks/{file-upload-BosbPDb1.js → file-upload-DwZcAK8D.js} +119 -100
  120. package/dist/_chunks/file-upload-DwZcAK8D.js.map +1 -0
  121. package/dist/_chunks/{fiscal-code-input-DPtqluVb.js → fiscal-code-input-Cf-8O4Fj.js} +76 -63
  122. package/dist/_chunks/fiscal-code-input-Cf-8O4Fj.js.map +1 -0
  123. package/dist/_chunks/{freemium-paywall-CkWjv3o6.js → freemium-paywall-WYlNO7yT.js} +78 -71
  124. package/dist/_chunks/freemium-paywall-WYlNO7yT.js.map +1 -0
  125. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js → gestational-age-calculator-CF2ISaYQ.js} +7 -7
  126. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js.map → gestational-age-calculator-CF2ISaYQ.js.map} +1 -1
  127. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  128. package/dist/_chunks/hash-CysBBS_N.js.map +1 -0
  129. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js → hcg-doubling-C7bmuaU3.js} +4 -4
  130. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js.map → hcg-doubling-C7bmuaU3.js.map} +1 -1
  131. package/dist/_chunks/{header-settings-CNOqIhoW.js → header-settings-DJqoAl5m.js} +86 -46
  132. package/dist/_chunks/header-settings-DJqoAl5m.js.map +1 -0
  133. package/dist/_chunks/{index.modern-D2LGACWg.js → index.modern-Zta-A4Jm.js} +3 -3
  134. package/dist/_chunks/{index.modern-D2LGACWg.js.map → index.modern-Zta-A4Jm.js.map} +1 -1
  135. package/dist/_chunks/link-cell-renderer-CTXqtXV-.js +2184 -0
  136. package/dist/_chunks/link-cell-renderer-CTXqtXV-.js.map +1 -0
  137. package/dist/_chunks/{list-BOwqwy03.js → list-DgE1xWBM.js} +99 -84
  138. package/dist/_chunks/list-DgE1xWBM.js.map +1 -0
  139. package/dist/_chunks/{locale-picker-C9JmBht3.js → locale-picker-ChYYSX2N.js} +47 -35
  140. package/dist/_chunks/locale-picker-ChYYSX2N.js.map +1 -0
  141. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  142. package/dist/_chunks/lock-CKOIn0IK.js.map +1 -0
  143. package/dist/_chunks/{map-view-Tb5VfK9Y.js → map-view-BkOoGoX2.js} +160 -115
  144. package/dist/_chunks/map-view-BkOoGoX2.js.map +1 -0
  145. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js → marketplace-app-shell-Skhfp6vK.js} +6 -6
  146. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js.map → marketplace-app-shell-Skhfp6vK.js.map} +1 -1
  147. package/dist/_chunks/{message-card.agent-4IeIgrnJ.js → message-card.agent-ZLhx3Bs5.js} +6 -1
  148. package/dist/_chunks/message-card.agent-ZLhx3Bs5.js.map +1 -0
  149. package/dist/_chunks/{message-tray-CVyJajVJ.js → message-tray-DwrBLJlf.js} +90 -48
  150. package/dist/_chunks/message-tray-DwrBLJlf.js.map +1 -0
  151. package/dist/_chunks/{multi-select-BcPylvHR.js → multi-select-BdHHDrRN.js} +196 -153
  152. package/dist/_chunks/multi-select-BdHHDrRN.js.map +1 -0
  153. package/dist/_chunks/{navigation-menu-C6lBYVv9.js → navigation-menu-DRUi6sSj.js} +75 -42
  154. package/dist/_chunks/navigation-menu-DRUi6sSj.js.map +1 -0
  155. package/dist/_chunks/notes-panel-ay8_lPrA.js +158 -0
  156. package/dist/_chunks/notes-panel-ay8_lPrA.js.map +1 -0
  157. package/dist/_chunks/{notification-card-BiESdm8q.js → notification-card-D2jiKSJJ.js} +27 -23
  158. package/dist/_chunks/notification-card-D2jiKSJJ.js.map +1 -0
  159. package/dist/_chunks/{notification-card.agent-Rqt3ofk9.js → notification-card.agent-DxGBZb8T.js} +5 -1
  160. package/dist/_chunks/notification-card.agent-DxGBZb8T.js.map +1 -0
  161. package/dist/_chunks/{notification-tray-DlgenTEe.js → notification-tray-AEun6DN2.js} +112 -97
  162. package/dist/_chunks/notification-tray-AEun6DN2.js.map +1 -0
  163. package/dist/_chunks/{number-input-Dj5L3pXK.js → number-input-DxphVG_A.js} +36 -27
  164. package/dist/_chunks/number-input-DxphVG_A.js.map +1 -0
  165. package/dist/_chunks/{operator-hero-f_KaRhw5.js → operator-hero-CR0Rqh4-.js} +14 -10
  166. package/dist/_chunks/operator-hero-CR0Rqh4-.js.map +1 -0
  167. package/dist/_chunks/{otp-input-xQ4Ps5VY.js → otp-input-DzBQ-CpE.js} +52 -33
  168. package/dist/_chunks/otp-input-DzBQ-CpE.js.map +1 -0
  169. package/dist/_chunks/{pagination-DQOgnxxw.js → pagination-D58kglCr.js} +181 -162
  170. package/dist/_chunks/pagination-D58kglCr.js.map +1 -0
  171. package/dist/_chunks/patient-details-Dlhqb5ig.js +675 -0
  172. package/dist/_chunks/patient-details-Dlhqb5ig.js.map +1 -0
  173. package/dist/_chunks/{patient-search-DR9XUYRQ.js → patient-search-Be6cLrHR.js} +70 -61
  174. package/dist/_chunks/patient-search-Be6cLrHR.js.map +1 -0
  175. package/dist/_chunks/{patient-shell-BfgufL_q.js → patient-shell-DV3XEtIB.js} +3 -3
  176. package/dist/_chunks/{patient-shell-BfgufL_q.js.map → patient-shell-DV3XEtIB.js.map} +1 -1
  177. package/dist/_chunks/patient-summary-card-WySCMwwA.js +437 -0
  178. package/dist/_chunks/patient-summary-card-WySCMwwA.js.map +1 -0
  179. package/dist/_chunks/patient-table-CHxf3Oqk.js +1110 -0
  180. package/dist/_chunks/patient-table-CHxf3Oqk.js.map +1 -0
  181. package/dist/_chunks/{payment-form-nXocS_MX.js → payment-form-CxqIXqw7.js} +57 -45
  182. package/dist/_chunks/payment-form-CxqIXqw7.js.map +1 -0
  183. package/dist/_chunks/{payment-request-card-CYE5vhZ0.js → payment-request-card-BcZJwu9z.js} +125 -136
  184. package/dist/_chunks/payment-request-card-BcZJwu9z.js.map +1 -0
  185. package/dist/_chunks/{pdf-viewer-GsfNqeeT.js → pdf-viewer-QfebdLOd.js} +317 -291
  186. package/dist/_chunks/pdf-viewer-QfebdLOd.js.map +1 -0
  187. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js → periodontal-chart-card-hRRJY1NN.js} +3 -3
  188. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js.map → periodontal-chart-card-hRRJY1NN.js.map} +1 -1
  189. package/dist/_chunks/{phone-input-DVXhNlIl.js → phone-input-DjU-XmO_.js} +64 -47
  190. package/dist/_chunks/phone-input-DjU-XmO_.js.map +1 -0
  191. package/dist/_chunks/{popover-DTbfAuR0.js → popover-B2qCDhJC.js} +37 -32
  192. package/dist/_chunks/popover-B2qCDhJC.js.map +1 -0
  193. package/dist/_chunks/{practice-results-DND2SAt7.js → practice-results-C6qDfxos.js} +280 -244
  194. package/dist/_chunks/practice-results-C6qDfxos.js.map +1 -0
  195. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js → pregnancy-dating-CRVWswD-.js} +8 -8
  196. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js.map → pregnancy-dating-CRVWswD-.js.map} +1 -1
  197. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js → pregnancy-weight-gain-BUNpTsH-.js} +4 -4
  198. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-BUNpTsH-.js.map} +1 -1
  199. package/dist/_chunks/{privacy-lock-C7JyMf0y.js → privacy-lock-BzMLQu-j.js} +32 -28
  200. package/dist/_chunks/privacy-lock-BzMLQu-j.js.map +1 -0
  201. package/dist/_chunks/{product-hub-panel-CAXDFeGP.js → product-hub-panel-e6pW220e.js} +45 -27
  202. package/dist/_chunks/product-hub-panel-e6pW220e.js.map +1 -0
  203. package/dist/_chunks/{progress-kzIRcdaq.js → progress-DA413-zn.js} +2 -2
  204. package/dist/_chunks/{progress-kzIRcdaq.js.map → progress-DA413-zn.js.map} +1 -1
  205. package/dist/_chunks/{public-footer.agent-CfXuW1x6.js → public-footer.agent-D0cFbjWl.js} +151 -146
  206. package/dist/_chunks/public-footer.agent-D0cFbjWl.js.map +1 -0
  207. package/dist/_chunks/{public-header.agent-BOhJgZEU.js → public-header.agent-DqkqA-ca.js} +107 -102
  208. package/dist/_chunks/{public-header.agent-BOhJgZEU.js.map → public-header.agent-DqkqA-ca.js.map} +1 -1
  209. package/dist/_chunks/{qr-code-DNXhi6se.js → qr-code-CPkEs5mG.js} +52 -46
  210. package/dist/_chunks/qr-code-CPkEs5mG.js.map +1 -0
  211. package/dist/_chunks/{radio-group-CLjK-SlK.js → radio-group-BPt7pKZW.js} +5 -5
  212. package/dist/_chunks/{radio-group-CLjK-SlK.js.map → radio-group-BPt7pKZW.js.map} +1 -1
  213. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js +558 -0
  214. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js.map +1 -0
  215. package/dist/_chunks/{recaptcha-widget-BCNHsgqt.js → recaptcha-widget-BC-4To9b.js} +9 -2
  216. package/dist/_chunks/recaptcha-widget-BC-4To9b.js.map +1 -0
  217. package/dist/_chunks/registry-DvAUVLHh.js +51 -0
  218. package/dist/_chunks/registry-DvAUVLHh.js.map +1 -0
  219. package/dist/_chunks/{resizable-3vzqDlg6.js → resizable-DVGcfOrk.js} +193 -173
  220. package/dist/_chunks/resizable-DVGcfOrk.js.map +1 -0
  221. package/dist/_chunks/{reviews-panel-DBktKm7i.js → reviews-panel-Dq7LMDcH.js} +87 -68
  222. package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +1 -0
  223. package/dist/_chunks/{rich-text-editor-VawKN1FI.js → rich-text-editor-DlCqPixb.js} +833 -728
  224. package/dist/_chunks/rich-text-editor-DlCqPixb.js.map +1 -0
  225. package/dist/_chunks/{search-bar-SY2BcV2N.js → search-bar-C_T3pBJn.js} +105 -78
  226. package/dist/_chunks/search-bar-C_T3pBJn.js.map +1 -0
  227. package/dist/_chunks/{search-input-DbxrnHkW.js → search-input-DQvGxR74.js} +2 -2
  228. package/dist/_chunks/{search-input-DbxrnHkW.js.map → search-input-DQvGxR74.js.map} +1 -1
  229. package/dist/_chunks/{search-input.agent-CfZvViOd.js → search-input.agent-DRH54coT.js} +19 -4
  230. package/dist/_chunks/search-input.agent-DRH54coT.js.map +1 -0
  231. package/dist/_chunks/{select-CEtRcon5.js → select-DMLG44F5.js} +72 -56
  232. package/dist/_chunks/select-DMLG44F5.js.map +1 -0
  233. package/dist/_chunks/{session-countdown-LPnhTHjn.js → session-countdown-X1Ki6i0M.js} +3 -3
  234. package/dist/_chunks/{session-countdown-LPnhTHjn.js.map → session-countdown-X1Ki6i0M.js.map} +1 -1
  235. package/dist/_chunks/{sheet-taJer-Ha.js → sheet-BxsE7eQm.js} +59 -45
  236. package/dist/_chunks/sheet-BxsE7eQm.js.map +1 -0
  237. package/dist/_chunks/{sidebar-DaB4ulxH.js → sidebar-DY9jGjgt.js} +254 -248
  238. package/dist/_chunks/sidebar-DY9jGjgt.js.map +1 -0
  239. package/dist/_chunks/{sign-document-CdAiHiCh.js → sign-document-By6hMOra.js} +75 -49
  240. package/dist/_chunks/sign-document-By6hMOra.js.map +1 -0
  241. package/dist/_chunks/{signature-capture-COi0Uiqu.js → signature-capture-Ct_4Md4e.js} +138 -104
  242. package/dist/_chunks/signature-capture-Ct_4Md4e.js.map +1 -0
  243. package/dist/_chunks/{slider-BHWzXdjt.js → slider-DN1CWkKB.js} +85 -65
  244. package/dist/_chunks/slider-DN1CWkKB.js.map +1 -0
  245. package/dist/_chunks/{sparkline-DGhCSw8M.js → sparkline-iOXYgvJe.js} +75 -53
  246. package/dist/_chunks/sparkline-iOXYgvJe.js.map +1 -0
  247. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  248. package/dist/_chunks/stepper-accordion-DC-H-8v4.js.map +1 -0
  249. package/dist/_chunks/{stepper-accordion.agent-C4quJ-MD.js → stepper-accordion.agent-cmEguIdx.js} +7 -1
  250. package/dist/_chunks/stepper-accordion.agent-cmEguIdx.js.map +1 -0
  251. package/dist/_chunks/{stepper-progress-DDjq5nei.js → stepper-progress-Bv0njx4g.js} +30 -24
  252. package/dist/_chunks/stepper-progress-Bv0njx4g.js.map +1 -0
  253. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js → suggestion-chip.agent-Brn3CiFE.js} +9 -8
  254. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js.map → suggestion-chip.agent-Brn3CiFE.js.map} +1 -1
  255. package/dist/_chunks/{switch-BJ6HD3Mn.js → switch-OILsBLWo.js} +25 -19
  256. package/dist/_chunks/switch-OILsBLWo.js.map +1 -0
  257. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  258. package/dist/_chunks/tab-bar-Bv9nGNdO.js.map +1 -0
  259. package/dist/_chunks/{tabs-BIQ0ew1T.js → tabs-BxcOziCo.js} +67 -58
  260. package/dist/_chunks/tabs-BxcOziCo.js.map +1 -0
  261. package/dist/_chunks/{task-card.agent-CUPKYd7w.js → task-card.agent-Bt14CzUd.js} +4 -1
  262. package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +1 -0
  263. package/dist/_chunks/{task-tray-CAncV-QQ.js → task-tray-qOEQflu4.js} +74 -57
  264. package/dist/_chunks/task-tray-qOEQflu4.js.map +1 -0
  265. package/dist/_chunks/{text-area-BIx0tZ05.js → text-area-Bt3p7Pt0.js} +41 -34
  266. package/dist/_chunks/text-area-Bt3p7Pt0.js.map +1 -0
  267. package/dist/_chunks/{text-input-BaClJL8Y.js → text-input-B-OWQ1Je.js} +15 -8
  268. package/dist/_chunks/text-input-B-OWQ1Je.js.map +1 -0
  269. package/dist/_chunks/{theme-toggle-DETmSu_h.js → theme-toggle-XB6o_lgs.js} +38 -26
  270. package/dist/_chunks/theme-toggle-XB6o_lgs.js.map +1 -0
  271. package/dist/_chunks/{time-picker-B5umYwfv.js → time-picker-BPlJWm8w.js} +41 -31
  272. package/dist/_chunks/time-picker-BPlJWm8w.js.map +1 -0
  273. package/dist/_chunks/{timeline-DQa5Tyz4.js → timeline-CqA4nKTI.js} +33 -25
  274. package/dist/_chunks/timeline-CqA4nKTI.js.map +1 -0
  275. package/dist/_chunks/{toast.agent-vuLRRn2a.js → toast.agent-57UzyR9U.js} +62 -45
  276. package/dist/_chunks/{toast.agent-vuLRRn2a.js.map → toast.agent-57UzyR9U.js.map} +1 -1
  277. package/dist/_chunks/tooth-scheme-BhQoPNBD.js +2131 -0
  278. package/dist/_chunks/tooth-scheme-BhQoPNBD.js.map +1 -0
  279. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  280. package/dist/_chunks/transaction-chip-CscoQbxF.js.map +1 -0
  281. package/dist/_chunks/{transcript-panel-CLHmv83g.js → transcript-panel-3THQX6nJ.js} +47 -33
  282. package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +1 -0
  283. package/dist/_chunks/unit-converter-YEpD9evj.js +337 -0
  284. package/dist/_chunks/unit-converter-YEpD9evj.js.map +1 -0
  285. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  286. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js.map +1 -0
  287. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  288. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js.map +1 -0
  289. package/dist/_chunks/{use-password-requirements-DsgduV1x.js → use-password-requirements-BXvS2MBS.js} +131 -117
  290. package/dist/_chunks/use-password-requirements-BXvS2MBS.js.map +1 -0
  291. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  292. package/dist/_chunks/use-persistent-state-nZwZAnE9.js.map +1 -0
  293. package/dist/_chunks/users-MBVtUzwd.js +17 -0
  294. package/dist/_chunks/users-MBVtUzwd.js.map +1 -0
  295. package/dist/_chunks/warning-stack--sTrrBDA.js +268 -0
  296. package/dist/_chunks/warning-stack--sTrrBDA.js.map +1 -0
  297. package/dist/_chunks/{whatsapp-button-DUjlWGKf.js → whatsapp-button-BIy6NaJK.js} +6 -3
  298. package/dist/_chunks/whatsapp-button-BIy6NaJK.js.map +1 -0
  299. package/dist/_chunks/{workflow-map-JAZryZJr.js → workflow-map-Dy8mLCqF.js} +101 -90
  300. package/dist/_chunks/workflow-map-Dy8mLCqF.js.map +1 -0
  301. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  302. package/dist/_chunks/zoom-out-CgVtf2Wx.js.map +1 -0
  303. package/dist/agent/index.d.ts +4 -4
  304. package/dist/agent/index.d.ts.map +1 -1
  305. package/dist/agent/index.js +37 -0
  306. package/dist/agent/index.js.map +1 -0
  307. package/dist/agent/registry.d.ts +33 -0
  308. package/dist/agent/registry.d.ts.map +1 -1
  309. package/dist/agent/types.d.ts +97 -4
  310. package/dist/agent/types.d.ts.map +1 -1
  311. package/dist/agent-catalog.json +8081 -518
  312. package/dist/agent-i18n/en.json +1277 -0
  313. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  314. package/dist/components/_shared/entity-card/entity-card.d.ts.map +1 -1
  315. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  316. package/dist/components/_shared/entity-card/index.d.ts.map +1 -1
  317. package/dist/components/_shared/field-value.d.ts +21 -0
  318. package/dist/components/_shared/field-value.d.ts.map +1 -0
  319. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  320. package/dist/components/_shared/field-visibility-cog.d.ts.map +1 -0
  321. package/dist/components/_shared/field-visibility.d.ts +36 -0
  322. package/dist/components/_shared/field-visibility.d.ts.map +1 -0
  323. package/dist/components/_shared/patient-fields.d.ts +119 -0
  324. package/dist/components/_shared/patient-fields.d.ts.map +1 -0
  325. package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
  326. package/dist/components/accordion/accordion.d.ts.map +1 -1
  327. package/dist/components/accordion/index.js +1 -1
  328. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts +4 -0
  329. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts.map +1 -0
  330. package/dist/components/address-autocomplete/address-autocomplete.d.ts +18 -0
  331. package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
  332. package/dist/components/address-autocomplete/index.d.ts +2 -1
  333. package/dist/components/address-autocomplete/index.d.ts.map +1 -1
  334. package/dist/components/address-autocomplete/index.js +3 -2
  335. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
  336. package/dist/components/agenda-card/index.js +2 -2
  337. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -1
  338. package/dist/components/agenda-tray/index.js +1 -1
  339. package/dist/components/ai-consent-banner/index.js +1 -1
  340. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -1
  341. package/dist/components/ai-prompt-input/index.js +1 -1
  342. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -1
  343. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +75 -0
  344. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -1
  345. package/dist/components/ai-tools-rail/index.js +1 -1
  346. package/dist/components/alert/alert.d.ts +5 -0
  347. package/dist/components/alert/alert.d.ts.map +1 -1
  348. package/dist/components/alert/index.js +1 -1
  349. package/dist/components/anamnesis-card/index.js +1 -1
  350. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  351. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts.map +1 -0
  352. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  353. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts.map +1 -0
  354. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  355. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts.map +1 -0
  356. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  357. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts.map +1 -0
  358. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  359. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts.map +1 -0
  360. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  361. package/dist/components/anatomy-scheme/index.d.ts.map +1 -0
  362. package/dist/components/anatomy-scheme/index.js +17 -0
  363. package/dist/components/anatomy-scheme/index.js.map +1 -0
  364. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  365. package/dist/components/annotation-marker/annotation-marker.d.ts.map +1 -0
  366. package/dist/components/annotation-marker/index.d.ts +3 -0
  367. package/dist/components/annotation-marker/index.d.ts.map +1 -0
  368. package/dist/components/annotation-marker/index.js +7 -0
  369. package/dist/components/annotation-marker/index.js.map +1 -0
  370. package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -1
  371. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  372. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  373. package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
  374. package/dist/components/appointment-card/index.js +6 -5
  375. package/dist/components/appointment-card/index.js.map +1 -1
  376. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  377. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts.map +1 -0
  378. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  379. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -0
  380. package/dist/components/appointment-timeline/index.d.ts +4 -0
  381. package/dist/components/appointment-timeline/index.d.ts.map +1 -0
  382. package/dist/components/appointment-timeline/index.js +6 -0
  383. package/dist/components/appointment-timeline/index.js.map +1 -0
  384. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -1
  385. package/dist/components/audio-recorder/index.js +1 -1
  386. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  387. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  388. package/dist/components/autocomplete/index.js +1 -1
  389. package/dist/components/badge/badge.d.ts +6 -2
  390. package/dist/components/badge/badge.d.ts.map +1 -1
  391. package/dist/components/badge/index.js +1 -1
  392. package/dist/components/bishop-score/bishop-score.agent.d.ts +4 -0
  393. package/dist/components/bishop-score/bishop-score.agent.d.ts.map +1 -0
  394. package/dist/components/bishop-score/bishop-score.d.ts +17 -1
  395. package/dist/components/bishop-score/bishop-score.d.ts.map +1 -1
  396. package/dist/components/bishop-score/index.js +1 -1
  397. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts +4 -0
  398. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts.map +1 -0
  399. package/dist/components/bmi-calculator/bmi-calculator.d.ts +26 -0
  400. package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
  401. package/dist/components/bmi-calculator/index.js +1 -1
  402. package/dist/components/booking/booking.agent.d.ts.map +1 -1
  403. package/dist/components/booking/index.js +1 -1
  404. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -1
  405. package/dist/components/breadcrumb/index.js +1 -1
  406. package/dist/components/calculator-dialog/index.js +1 -1
  407. package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
  408. package/dist/components/calendar/index.js +1 -1
  409. package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -1
  410. package/dist/components/care-plan-card/index.js +1 -1
  411. package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -1
  412. package/dist/components/care-plan-entry-card/index.js +1 -1
  413. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  414. package/dist/components/care-plan-header/care-plan-header.agent.d.ts.map +1 -0
  415. package/dist/components/care-plan-header/care-plan-header.d.ts +100 -0
  416. package/dist/components/care-plan-header/care-plan-header.d.ts.map +1 -0
  417. package/dist/components/care-plan-header/index.d.ts +4 -0
  418. package/dist/components/care-plan-header/index.d.ts.map +1 -0
  419. package/dist/components/care-plan-header/index.js +6 -0
  420. package/dist/components/care-plan-header/index.js.map +1 -0
  421. package/dist/components/carousel/carousel.agent.d.ts.map +1 -1
  422. package/dist/components/carousel/index.js +1 -1
  423. package/dist/components/chart/chart.agent.d.ts.map +1 -1
  424. package/dist/components/chart/index.js +1 -1
  425. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  426. package/dist/components/chat-container/index.js +1 -1
  427. package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -1
  428. package/dist/components/chat-input/index.js +1 -1
  429. package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -1
  430. package/dist/components/checkbox/index.js +1 -1
  431. package/dist/components/checkbox-group/index.js +1 -1
  432. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  433. package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
  434. package/dist/components/clinical-note-card/index.js +1 -1
  435. package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -1
  436. package/dist/components/collapsible/index.js +1 -1
  437. package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -1
  438. package/dist/components/color-picker/index.js +1 -1
  439. package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
  440. package/dist/components/combobox/combobox.d.ts.map +1 -1
  441. package/dist/components/combobox/index.js +1 -1
  442. package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
  443. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  444. package/dist/components/command-palette/index.js +1 -1
  445. package/dist/components/contact-profile-card/contact-profile-card.agent.d.ts.map +1 -1
  446. package/dist/components/contact-profile-card/index.js +1 -1
  447. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  448. package/dist/components/control-room-rail/control-room-context.d.ts.map +1 -0
  449. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  450. package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -0
  451. package/dist/components/control-room-rail/index.d.ts +5 -0
  452. package/dist/components/control-room-rail/index.d.ts.map +1 -0
  453. package/dist/components/control-room-rail/index.js +9 -0
  454. package/dist/components/control-room-rail/index.js.map +1 -0
  455. package/dist/components/copy-field/copy-field.agent.d.ts.map +1 -1
  456. package/dist/components/copy-field/index.js +1 -1
  457. package/dist/components/counter/counter.d.ts +22 -0
  458. package/dist/components/counter/counter.d.ts.map +1 -0
  459. package/dist/components/counter/index.d.ts +3 -0
  460. package/dist/components/counter/index.d.ts.map +1 -0
  461. package/dist/components/counter/index.js +5 -0
  462. package/dist/components/counter/index.js.map +1 -0
  463. package/dist/components/cycle-calculator/index.js +1 -1
  464. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  465. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +1 -1
  466. package/dist/components/data-table/data-table.agent.d.ts.map +1 -1
  467. package/dist/components/data-table/index.d.ts +1 -1
  468. package/dist/components/data-table/index.d.ts.map +1 -1
  469. package/dist/components/data-table/index.js +32 -30
  470. package/dist/components/data-table/index.js.map +1 -1
  471. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  472. package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -1
  473. package/dist/components/date-picker/index.js +1 -1
  474. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -1
  475. package/dist/components/date-range-picker/index.js +1 -1
  476. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -1
  477. package/dist/components/date-time-picker/index.js +1 -1
  478. package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -1
  479. package/dist/components/dependent-selector/index.js +1 -1
  480. package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
  481. package/dist/components/dialog/index.js +1 -1
  482. package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -1
  483. package/dist/components/document-scanner/index.js +1 -1
  484. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
  485. package/dist/components/dropdown-menu/index.js +1 -1
  486. package/dist/components/due-date-calculator/index.js +2 -2
  487. package/dist/components/email-input/email-input.d.ts.map +1 -1
  488. package/dist/components/email-input/index.js +1 -1
  489. package/dist/components/entity-summary/entity-summary.d.ts +43 -0
  490. package/dist/components/entity-summary/entity-summary.d.ts.map +1 -0
  491. package/dist/components/entity-summary/index.d.ts +3 -0
  492. package/dist/components/entity-summary/index.d.ts.map +1 -0
  493. package/dist/components/entity-summary/index.js +5 -0
  494. package/dist/components/entity-summary/index.js.map +1 -0
  495. package/dist/components/fetal-weight/index.js +1 -1
  496. package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
  497. package/dist/components/file-upload/index.js +1 -1
  498. package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -1
  499. package/dist/components/fiscal-code-input/index.js +1 -1
  500. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -1
  501. package/dist/components/freemium-paywall/freemium-paywall.d.ts +6 -0
  502. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  503. package/dist/components/freemium-paywall/index.js +1 -1
  504. package/dist/components/gestational-age-calculator/index.js +1 -1
  505. package/dist/components/hcg-doubling/index.js +1 -1
  506. package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
  507. package/dist/components/header-settings/index.js +1 -1
  508. package/dist/components/index.d.ts +11 -0
  509. package/dist/components/index.d.ts.map +1 -1
  510. package/dist/components/list/index.js +1 -1
  511. package/dist/components/list/list.agent.d.ts.map +1 -1
  512. package/dist/components/locale-picker/index.js +1 -1
  513. package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
  514. package/dist/components/map-view/index.js +1 -1
  515. package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
  516. package/dist/components/message-card/index.js +1 -1
  517. package/dist/components/message-card/message-card.agent.d.ts.map +1 -1
  518. package/dist/components/message-tray/index.js +1 -1
  519. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
  520. package/dist/components/multi-select/index.js +1 -1
  521. package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
  522. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  523. package/dist/components/navigation-menu/index.js +1 -1
  524. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -1
  525. package/dist/components/notes-panel/index.d.ts +3 -0
  526. package/dist/components/notes-panel/index.d.ts.map +1 -0
  527. package/dist/components/notes-panel/index.js +5 -0
  528. package/dist/components/notes-panel/index.js.map +1 -0
  529. package/dist/components/notes-panel/notes-panel.d.ts +64 -0
  530. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -0
  531. package/dist/components/notification-card/index.js +2 -2
  532. package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -1
  533. package/dist/components/notification-card/notification-card.d.ts.map +1 -1
  534. package/dist/components/notification-tray/index.js +1 -1
  535. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
  536. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  537. package/dist/components/number-input/index.js +1 -1
  538. package/dist/components/number-input/number-input.agent.d.ts.map +1 -1
  539. package/dist/components/operator-hero/index.js +1 -1
  540. package/dist/components/operator-hero/operator-hero.agent.d.ts.map +1 -1
  541. package/dist/components/otp-input/index.js +1 -1
  542. package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -1
  543. package/dist/components/pagination/index.js +1 -1
  544. package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
  545. package/dist/components/password-input/index.js +1 -1
  546. package/dist/components/password-input/password-input.agent.d.ts.map +1 -1
  547. package/dist/components/patient-details/index.d.ts +5 -0
  548. package/dist/components/patient-details/index.d.ts.map +1 -0
  549. package/dist/components/patient-details/index.js +6 -0
  550. package/dist/components/patient-details/index.js.map +1 -0
  551. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  552. package/dist/components/patient-details/patient-details.agent.d.ts.map +1 -0
  553. package/dist/components/patient-details/patient-details.d.ts +96 -0
  554. package/dist/components/patient-details/patient-details.d.ts.map +1 -0
  555. package/dist/components/patient-search/index.js +1 -1
  556. package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -1
  557. package/dist/components/patient-summary-card/index.js +1 -1
  558. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
  559. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  560. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  561. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts +13 -0
  562. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts.map +1 -0
  563. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts +43 -0
  564. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts.map +1 -0
  565. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts +24 -0
  566. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts.map +1 -0
  567. package/dist/components/patient-table/columns.d.ts +131 -0
  568. package/dist/components/patient-table/columns.d.ts.map +1 -0
  569. package/dist/components/patient-table/index.d.ts +20 -0
  570. package/dist/components/patient-table/index.d.ts.map +1 -0
  571. package/dist/components/patient-table/index.js +12 -0
  572. package/dist/components/patient-table/index.js.map +1 -0
  573. package/dist/components/patient-table/patient-table.d.ts +172 -0
  574. package/dist/components/patient-table/patient-table.d.ts.map +1 -0
  575. package/dist/components/patient-table/types.d.ts +222 -0
  576. package/dist/components/patient-table/types.d.ts.map +1 -0
  577. package/dist/components/patient-table/use-responsive-columns.d.ts +111 -0
  578. package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -0
  579. package/dist/components/payment-card/index.js +1 -1
  580. package/dist/components/payment-form/index.js +1 -1
  581. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  582. package/dist/components/pdf-viewer/index.js +1 -1
  583. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  584. package/dist/components/periodontal-chart-card/index.js +1 -1
  585. package/dist/components/phone-input/index.js +1 -1
  586. package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -1
  587. package/dist/components/popover/index.js +1 -1
  588. package/dist/components/popover/popover.agent.d.ts.map +1 -1
  589. package/dist/components/practice-results/index.js +1 -1
  590. package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -1
  591. package/dist/components/pregnancy-dating/index.js +1 -1
  592. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  593. package/dist/components/privacy-lock/index.js +1 -1
  594. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -1
  595. package/dist/components/product-hub-tray/index.js +1 -1
  596. package/dist/components/product-hub-tray/product-hub-panel.agent.d.ts.map +1 -1
  597. package/dist/components/product-hub-tray/product-hub-tray.agent.d.ts.map +1 -1
  598. package/dist/components/progress/index.js +1 -1
  599. package/dist/components/public-footer/index.js +1 -1
  600. package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -1
  601. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  602. package/dist/components/public-header/index.js +1 -1
  603. package/dist/components/public-header/public-header.agent.d.ts.map +1 -1
  604. package/dist/components/qr-code/index.js +1 -1
  605. package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -1
  606. package/dist/components/radio-group/index.js +1 -1
  607. package/dist/components/radiograph-panel/index.d.ts +4 -0
  608. package/dist/components/radiograph-panel/index.d.ts.map +1 -0
  609. package/dist/components/radiograph-panel/index.js +7 -0
  610. package/dist/components/radiograph-panel/index.js.map +1 -0
  611. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  612. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts.map +1 -0
  613. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  614. package/dist/components/radiograph-panel/radiograph-panel.d.ts.map +1 -0
  615. package/dist/components/recaptcha-widget/index.js +1 -1
  616. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -1
  617. package/dist/components/resizable/index.js +1 -1
  618. package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
  619. package/dist/components/resizable/resizable.d.ts.map +1 -1
  620. package/dist/components/reviews-panel/index.js +1 -1
  621. package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -1
  622. package/dist/components/rich-text-editor/index.js +1 -1
  623. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  624. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  625. package/dist/components/search-bar/index.js +1 -1
  626. package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -1
  627. package/dist/components/search-input/index.js +2 -2
  628. package/dist/components/search-input/search-input.agent.d.ts.map +1 -1
  629. package/dist/components/select/index.js +1 -1
  630. package/dist/components/select/select.agent.d.ts.map +1 -1
  631. package/dist/components/session-countdown/index.js +1 -1
  632. package/dist/components/sheet/index.js +1 -1
  633. package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
  634. package/dist/components/sidebar/index.js +2 -2
  635. package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
  636. package/dist/components/sidebar/sidebar.d.ts +7 -0
  637. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  638. package/dist/components/sign-document/index.js +1 -1
  639. package/dist/components/sign-document/sign-document.agent.d.ts.map +1 -1
  640. package/dist/components/signature-capture/index.js +1 -1
  641. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
  642. package/dist/components/slider/index.js +1 -1
  643. package/dist/components/slider/slider.agent.d.ts.map +1 -1
  644. package/dist/components/sparkline/index.js +1 -1
  645. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  646. package/dist/components/stepper-accordion/index.js +2 -2
  647. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -1
  648. package/dist/components/stepper-progress/index.js +1 -1
  649. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -1
  650. package/dist/components/suggestion-chip/index.js +1 -1
  651. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -1
  652. package/dist/components/switch/index.js +1 -1
  653. package/dist/components/switch/switch.agent.d.ts.map +1 -1
  654. package/dist/components/tab-bar/index.js +1 -1
  655. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  656. package/dist/components/tab-bar/tab-bar.d.ts.map +1 -1
  657. package/dist/components/tabs/index.js +1 -1
  658. package/dist/components/tabs/tabs.agent.d.ts.map +1 -1
  659. package/dist/components/tabs/tabs.d.ts.map +1 -1
  660. package/dist/components/task-card/index.js +1 -1
  661. package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
  662. package/dist/components/task-tray/index.js +1 -1
  663. package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -1
  664. package/dist/components/text-area/index.js +1 -1
  665. package/dist/components/text-area/text-area.agent.d.ts.map +1 -1
  666. package/dist/components/text-input/index.js +1 -1
  667. package/dist/components/text-input/text-input.agent.d.ts.map +1 -1
  668. package/dist/components/theme-toggle/index.js +1 -1
  669. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -1
  670. package/dist/components/time-picker/index.js +1 -1
  671. package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -1
  672. package/dist/components/timeline/index.js +1 -1
  673. package/dist/components/timeline/timeline.agent.d.ts.map +1 -1
  674. package/dist/components/toast/index.js +1 -1
  675. package/dist/components/toast/toast.agent.d.ts.map +1 -1
  676. package/dist/components/toast/toast.d.ts.map +1 -1
  677. package/dist/components/tooth-scheme/index.d.ts +2 -2
  678. package/dist/components/tooth-scheme/index.d.ts.map +1 -1
  679. package/dist/components/tooth-scheme/index.js +30 -23
  680. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  681. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -1
  682. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  683. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  684. package/dist/components/tooth-scheme/tooth-scheme.d.ts +75 -11
  685. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  686. package/dist/components/transaction-chip/index.js +1 -1
  687. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  688. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  689. package/dist/components/transcript-panel/index.js +1 -1
  690. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -1
  691. package/dist/components/unit-converter/index.js +1 -1
  692. package/dist/components/unit-converter/unit-converter.agent.d.ts +4 -0
  693. package/dist/components/unit-converter/unit-converter.agent.d.ts.map +1 -0
  694. package/dist/components/unit-converter/unit-converter.d.ts +27 -0
  695. package/dist/components/unit-converter/unit-converter.d.ts.map +1 -1
  696. package/dist/components/warning-stack/index.js +1 -1
  697. package/dist/components/warning-stack/warning-stack.d.ts +14 -2
  698. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  699. package/dist/components/whatsapp-button/index.d.ts +1 -1
  700. package/dist/components/whatsapp-button/index.d.ts.map +1 -1
  701. package/dist/components/whatsapp-button/index.js +3 -2
  702. package/dist/components/whatsapp-button/whatsapp-button.d.ts +3 -0
  703. package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
  704. package/dist/components/workflow/index.js +1 -1
  705. package/dist/components/workflow/workflow.agent.d.ts.map +1 -1
  706. package/dist/hooks/index.d.ts +1 -0
  707. package/dist/hooks/index.d.ts.map +1 -1
  708. package/dist/hooks/index.js +24 -22
  709. package/dist/hooks/index.js.map +1 -1
  710. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  711. package/dist/hooks/use-clamp-overflow.d.ts.map +1 -0
  712. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  713. package/dist/hooks/use-overflow-collapse.d.ts.map +1 -0
  714. package/dist/hooks/use-persistent-state.d.ts +7 -1
  715. package/dist/hooks/use-persistent-state.d.ts.map +1 -1
  716. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  717. package/dist/hooks/use-scroll-overflow.d.ts.map +1 -0
  718. package/dist/i18n/locales/ar.d.ts +356 -0
  719. package/dist/i18n/locales/ar.d.ts.map +1 -1
  720. package/dist/i18n/locales/ar.js +370 -3
  721. package/dist/i18n/locales/ar.js.map +1 -1
  722. package/dist/i18n/locales/de.d.ts +356 -0
  723. package/dist/i18n/locales/de.d.ts.map +1 -1
  724. package/dist/i18n/locales/de.js +370 -3
  725. package/dist/i18n/locales/de.js.map +1 -1
  726. package/dist/i18n/locales/el.d.ts +356 -0
  727. package/dist/i18n/locales/el.d.ts.map +1 -1
  728. package/dist/i18n/locales/el.js +370 -3
  729. package/dist/i18n/locales/el.js.map +1 -1
  730. package/dist/i18n/locales/en.d.ts +367 -0
  731. package/dist/i18n/locales/en.d.ts.map +1 -1
  732. package/dist/i18n/locales/en.js +381 -3
  733. package/dist/i18n/locales/en.js.map +1 -1
  734. package/dist/i18n/locales/es.d.ts +356 -0
  735. package/dist/i18n/locales/es.d.ts.map +1 -1
  736. package/dist/i18n/locales/es.js +370 -3
  737. package/dist/i18n/locales/es.js.map +1 -1
  738. package/dist/i18n/locales/fr.d.ts +356 -0
  739. package/dist/i18n/locales/fr.d.ts.map +1 -1
  740. package/dist/i18n/locales/fr.js +370 -3
  741. package/dist/i18n/locales/fr.js.map +1 -1
  742. package/dist/i18n/locales/hi.d.ts +356 -0
  743. package/dist/i18n/locales/hi.d.ts.map +1 -1
  744. package/dist/i18n/locales/hi.js +370 -3
  745. package/dist/i18n/locales/hi.js.map +1 -1
  746. package/dist/i18n/locales/it.d.ts +356 -0
  747. package/dist/i18n/locales/it.d.ts.map +1 -1
  748. package/dist/i18n/locales/it.js +370 -3
  749. package/dist/i18n/locales/it.js.map +1 -1
  750. package/dist/i18n/locales/ja.d.ts +356 -0
  751. package/dist/i18n/locales/ja.d.ts.map +1 -1
  752. package/dist/i18n/locales/ja.js +370 -3
  753. package/dist/i18n/locales/ja.js.map +1 -1
  754. package/dist/i18n/locales/nl.d.ts +356 -0
  755. package/dist/i18n/locales/nl.d.ts.map +1 -1
  756. package/dist/i18n/locales/nl.js +370 -3
  757. package/dist/i18n/locales/nl.js.map +1 -1
  758. package/dist/i18n/locales/pl.d.ts +356 -0
  759. package/dist/i18n/locales/pl.d.ts.map +1 -1
  760. package/dist/i18n/locales/pl.js +370 -3
  761. package/dist/i18n/locales/pl.js.map +1 -1
  762. package/dist/i18n/locales/pt.d.ts +356 -0
  763. package/dist/i18n/locales/pt.d.ts.map +1 -1
  764. package/dist/i18n/locales/pt.js +370 -3
  765. package/dist/i18n/locales/pt.js.map +1 -1
  766. package/dist/i18n/locales/ro.d.ts +356 -0
  767. package/dist/i18n/locales/ro.d.ts.map +1 -1
  768. package/dist/i18n/locales/ro.js +370 -3
  769. package/dist/i18n/locales/ro.js.map +1 -1
  770. package/dist/i18n/locales/ru.d.ts +356 -0
  771. package/dist/i18n/locales/ru.d.ts.map +1 -1
  772. package/dist/i18n/locales/ru.js +370 -3
  773. package/dist/i18n/locales/ru.js.map +1 -1
  774. package/dist/i18n/locales/sq.d.ts +356 -0
  775. package/dist/i18n/locales/sq.d.ts.map +1 -1
  776. package/dist/i18n/locales/sq.js +370 -3
  777. package/dist/i18n/locales/sq.js.map +1 -1
  778. package/dist/i18n/locales/sv.d.ts +356 -0
  779. package/dist/i18n/locales/sv.d.ts.map +1 -1
  780. package/dist/i18n/locales/sv.js +370 -3
  781. package/dist/i18n/locales/sv.js.map +1 -1
  782. package/dist/i18n/locales/tr.d.ts +356 -0
  783. package/dist/i18n/locales/tr.d.ts.map +1 -1
  784. package/dist/i18n/locales/tr.js +370 -3
  785. package/dist/i18n/locales/tr.js.map +1 -1
  786. package/dist/i18n/locales/zh.d.ts +356 -0
  787. package/dist/i18n/locales/zh.d.ts.map +1 -1
  788. package/dist/i18n/locales/zh.js +370 -3
  789. package/dist/i18n/locales/zh.js.map +1 -1
  790. package/dist/index.js +740 -676
  791. package/dist/index.js.map +1 -1
  792. package/dist/locales/ar.json +359 -3
  793. package/dist/locales/de.json +359 -3
  794. package/dist/locales/el.json +359 -3
  795. package/dist/locales/en.json +359 -3
  796. package/dist/locales/es.json +359 -3
  797. package/dist/locales/fr.json +359 -3
  798. package/dist/locales/hi.json +359 -3
  799. package/dist/locales/it.json +359 -3
  800. package/dist/locales/ja.json +359 -3
  801. package/dist/locales/nl.json +359 -3
  802. package/dist/locales/pl.json +359 -3
  803. package/dist/locales/pt.json +359 -3
  804. package/dist/locales/ro.json +359 -3
  805. package/dist/locales/ru.json +359 -3
  806. package/dist/locales/sq.json +359 -3
  807. package/dist/locales/sv.json +359 -3
  808. package/dist/locales/tr.json +359 -3
  809. package/dist/locales/zh.json +359 -3
  810. package/dist/patterns/alia-assistant/index.js +1 -1
  811. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  812. package/dist/patterns/patient-shell/index.js +1 -1
  813. package/dist/tokens.css +3 -2
  814. package/package.json +50 -1
  815. package/dist/_chunks/accordion-9lJSMMsZ.js.map +0 -1
  816. package/dist/_chunks/address-autocomplete-CT-9AOli.js +0 -358
  817. package/dist/_chunks/address-autocomplete-CT-9AOli.js.map +0 -1
  818. package/dist/_chunks/agenda-tray-T-BumlGZ.js.map +0 -1
  819. package/dist/_chunks/ai-prompt-input-BwEACCPm.js.map +0 -1
  820. package/dist/_chunks/ai-tools-rail-CInA_1-E.js +0 -356
  821. package/dist/_chunks/ai-tools-rail-CInA_1-E.js.map +0 -1
  822. package/dist/_chunks/alert-_mUKLmwA.js.map +0 -1
  823. package/dist/_chunks/appointment-tray-BMl89NPW.js +0 -419
  824. package/dist/_chunks/appointment-tray-BMl89NPW.js.map +0 -1
  825. package/dist/_chunks/audio-recorder-DjXLP4aF.js.map +0 -1
  826. package/dist/_chunks/autocomplete-CcCFlVf-.js.map +0 -1
  827. package/dist/_chunks/badge-CqGsX32l.js.map +0 -1
  828. package/dist/_chunks/bishop-score-CjsB9bM-.js +0 -185
  829. package/dist/_chunks/bishop-score-CjsB9bM-.js.map +0 -1
  830. package/dist/_chunks/bmi-calculator-n-823_1V.js +0 -258
  831. package/dist/_chunks/bmi-calculator-n-823_1V.js.map +0 -1
  832. package/dist/_chunks/booking-L8-YP8BJ.js.map +0 -1
  833. package/dist/_chunks/breadcrumb-OTbaY70e.js.map +0 -1
  834. package/dist/_chunks/calendar-oYWOCrnf.js.map +0 -1
  835. package/dist/_chunks/care-plan-card-BwVUyUBb.js.map +0 -1
  836. package/dist/_chunks/care-plan-entry-card-VzdQHcOL.js.map +0 -1
  837. package/dist/_chunks/chart-Cg3e9EH9.js.map +0 -1
  838. package/dist/_chunks/chat-container-ogB4OskO.js.map +0 -1
  839. package/dist/_chunks/chat-input-B5zjNEUN.js.map +0 -1
  840. package/dist/_chunks/checkbox-DRcOdmXv.js.map +0 -1
  841. package/dist/_chunks/clinical-note-card-gtrxv6zn.js +0 -333
  842. package/dist/_chunks/clinical-note-card-gtrxv6zn.js.map +0 -1
  843. package/dist/_chunks/collapsible-X3oaLPU3.js.map +0 -1
  844. package/dist/_chunks/color-picker-FXpItIaF.js.map +0 -1
  845. package/dist/_chunks/combobox-BC-DFx8G.js.map +0 -1
  846. package/dist/_chunks/command-palette-BiPAAno-.js.map +0 -1
  847. package/dist/_chunks/contact-profile-card-7BMB85T6.js.map +0 -1
  848. package/dist/_chunks/copy-field-CCq7j6Zc.js.map +0 -1
  849. package/dist/_chunks/date-range-picker-C5BWfH_T.js.map +0 -1
  850. package/dist/_chunks/date-time-picker-Ze1My59T.js.map +0 -1
  851. package/dist/_chunks/dependent-selector-DpzGtr_J.js.map +0 -1
  852. package/dist/_chunks/dialog-DMGnSelc.js.map +0 -1
  853. package/dist/_chunks/document-scanner-D2qehl3-.js.map +0 -1
  854. package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +0 -1
  855. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js +0 -2409
  856. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js.map +0 -1
  857. package/dist/_chunks/email-input-lQivsFrw.js +0 -396
  858. package/dist/_chunks/file-upload-BosbPDb1.js.map +0 -1
  859. package/dist/_chunks/fiscal-code-input-DPtqluVb.js.map +0 -1
  860. package/dist/_chunks/freemium-paywall-CkWjv3o6.js.map +0 -1
  861. package/dist/_chunks/header-settings-CNOqIhoW.js.map +0 -1
  862. package/dist/_chunks/list-BOwqwy03.js.map +0 -1
  863. package/dist/_chunks/locale-picker-C9JmBht3.js.map +0 -1
  864. package/dist/_chunks/map-view-Tb5VfK9Y.js.map +0 -1
  865. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
  866. package/dist/_chunks/message-tray-CVyJajVJ.js.map +0 -1
  867. package/dist/_chunks/multi-select-BcPylvHR.js.map +0 -1
  868. package/dist/_chunks/navigation-menu-C6lBYVv9.js.map +0 -1
  869. package/dist/_chunks/notification-card-BiESdm8q.js.map +0 -1
  870. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
  871. package/dist/_chunks/notification-tray-DlgenTEe.js.map +0 -1
  872. package/dist/_chunks/number-input-Dj5L3pXK.js.map +0 -1
  873. package/dist/_chunks/operator-hero-f_KaRhw5.js.map +0 -1
  874. package/dist/_chunks/otp-input-xQ4Ps5VY.js.map +0 -1
  875. package/dist/_chunks/pagination-DQOgnxxw.js.map +0 -1
  876. package/dist/_chunks/patient-search-DR9XUYRQ.js.map +0 -1
  877. package/dist/_chunks/patient-summary-card-hEmr4eTW.js +0 -443
  878. package/dist/_chunks/patient-summary-card-hEmr4eTW.js.map +0 -1
  879. package/dist/_chunks/payment-form-nXocS_MX.js.map +0 -1
  880. package/dist/_chunks/payment-request-card-CYE5vhZ0.js.map +0 -1
  881. package/dist/_chunks/pdf-viewer-GsfNqeeT.js.map +0 -1
  882. package/dist/_chunks/phone-input-DVXhNlIl.js.map +0 -1
  883. package/dist/_chunks/popover-DTbfAuR0.js.map +0 -1
  884. package/dist/_chunks/practice-results-DND2SAt7.js.map +0 -1
  885. package/dist/_chunks/privacy-lock-C7JyMf0y.js.map +0 -1
  886. package/dist/_chunks/product-hub-panel-CAXDFeGP.js.map +0 -1
  887. package/dist/_chunks/public-footer.agent-CfXuW1x6.js.map +0 -1
  888. package/dist/_chunks/qr-code-DNXhi6se.js.map +0 -1
  889. package/dist/_chunks/recaptcha-widget-BCNHsgqt.js.map +0 -1
  890. package/dist/_chunks/registry-nPAVE19X.js +0 -21
  891. package/dist/_chunks/registry-nPAVE19X.js.map +0 -1
  892. package/dist/_chunks/resizable-3vzqDlg6.js.map +0 -1
  893. package/dist/_chunks/reviews-panel-DBktKm7i.js.map +0 -1
  894. package/dist/_chunks/rich-text-editor-VawKN1FI.js.map +0 -1
  895. package/dist/_chunks/search-bar-SY2BcV2N.js.map +0 -1
  896. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
  897. package/dist/_chunks/select-CEtRcon5.js.map +0 -1
  898. package/dist/_chunks/sheet-taJer-Ha.js.map +0 -1
  899. package/dist/_chunks/sidebar-DaB4ulxH.js.map +0 -1
  900. package/dist/_chunks/sign-document-CdAiHiCh.js.map +0 -1
  901. package/dist/_chunks/signature-capture-COi0Uiqu.js.map +0 -1
  902. package/dist/_chunks/slider-BHWzXdjt.js.map +0 -1
  903. package/dist/_chunks/sparkline-DGhCSw8M.js.map +0 -1
  904. package/dist/_chunks/stepper-accordion-Dki6r9ZE.js.map +0 -1
  905. package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +0 -1
  906. package/dist/_chunks/stepper-progress-DDjq5nei.js.map +0 -1
  907. package/dist/_chunks/switch-BJ6HD3Mn.js.map +0 -1
  908. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  909. package/dist/_chunks/tab-bar-B1ovILzh.js.map +0 -1
  910. package/dist/_chunks/tabs-BIQ0ew1T.js.map +0 -1
  911. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
  912. package/dist/_chunks/task-tray-CAncV-QQ.js.map +0 -1
  913. package/dist/_chunks/text-area-BIx0tZ05.js.map +0 -1
  914. package/dist/_chunks/text-input-BaClJL8Y.js.map +0 -1
  915. package/dist/_chunks/theme-toggle-DETmSu_h.js.map +0 -1
  916. package/dist/_chunks/time-picker-B5umYwfv.js.map +0 -1
  917. package/dist/_chunks/timeline-DQa5Tyz4.js.map +0 -1
  918. package/dist/_chunks/tooth-scheme-BIx1O2aJ.js +0 -1257
  919. package/dist/_chunks/tooth-scheme-BIx1O2aJ.js.map +0 -1
  920. package/dist/_chunks/transaction-chip-DK84XCBU.js.map +0 -1
  921. package/dist/_chunks/transcript-panel-CLHmv83g.js.map +0 -1
  922. package/dist/_chunks/unit-converter-C1V3ACM9.js +0 -196
  923. package/dist/_chunks/unit-converter-C1V3ACM9.js.map +0 -1
  924. package/dist/_chunks/use-password-requirements-DsgduV1x.js.map +0 -1
  925. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  926. package/dist/_chunks/use-persistent-state-i23OWy6G.js.map +0 -1
  927. package/dist/_chunks/warning-stack-Cv4fr5zo.js +0 -220
  928. package/dist/_chunks/warning-stack-Cv4fr5zo.js.map +0 -1
  929. package/dist/_chunks/whatsapp-button-DUjlWGKf.js.map +0 -1
  930. package/dist/_chunks/workflow-map-JAZryZJr.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"sign-document-CdAiHiCh.js","sources":["../../src/components/sign-document/sign-document.agent.ts","../../src/components/sign-document/sign-document.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — SignDocument. */\n/* */\n/* State exposes only structural lifecycle info — never the signature */\n/* bytes (the signed consent is sensitive; persistence is the consumer's */\n/* concern). The single write action confirms the captured signature. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SignDocumentHandle } from './sign-document';\n\nexport const signDocumentAgent: AgentAdapter<SignDocumentHandle> = {\n id: 'sign-document',\n capabilities: ['submit'],\n state: {\n isReadComplete: {\n type: 'boolean',\n descriptionKey: 'signDocument.agent.state.isReadComplete',\n description:\n 'True when the reader has reached the last page (or read-gating is off).',\n read: (handle) => handle.isReadComplete(),\n },\n },\n actions: {\n submit: {\n safety: 'write',\n descriptionKey: 'signDocument.agent.actions.confirm',\n description:\n 'Confirm the current signature, emitting it via onSign. No-op if unsigned.',\n invoke: (handle) => handle.confirm(),\n },\n reset: {\n safety: 'destructive',\n descriptionKey: 'signDocument.agent.actions.reset',\n description: 'Clear the captured signature and return to unsigned.',\n invoke: (handle) => {\n handle.reset();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'sign-document',\n description: 'Marks the SignDocument wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* SignDocument — review a PDF document, then sign it. */\n/* */\n/* Fills the kit gap where consumers hand-composed PDFViewer + */\n/* SignatureCapture for consents (e.g. sign.alfadocs.com, HTP-4889). */\n/* This component owns the composition and the read-gate so the consent */\n/* flow is a single primitive: */\n/* */\n/* - PDFViewer (the document) renders above; the signing surface */\n/* renders below. */\n/* - When `requireReadToEnd` (default), the SignatureCapture pad and */\n/* the \"Confirm & sign\" button are gated until the reader reaches the */\n/* LAST page. We track this via PDFViewer's onLoadComplete (numPages) */\n/* + onPageChange (currentPage === numPages). NOTE: last-page-reached */\n/* is an APPROXIMATE read signal — a fit-page zoom can show the last */\n/* page without scrolling. That is acceptable for this gate; a */\n/* legal-grade \"read every page\" guarantee is the consumer's call. */\n/* - When `signedAt` is set the component renders an already-signed */\n/* read-only state (no pad) so re-sign-on-change consumers can show */\n/* signed status. */\n/* - Security: no fetch / XHR / storage / globals here. SignatureCapture */\n/* owns the export payload (PNG/SVG + sha256); the consumer owns */\n/* persistence via onSign. */\n/* - i18n: every authored string via `t('signDocument.*')` (bare keys */\n/* under the `ui` namespace). PDFViewer's `pdf.*` and */\n/* SignatureCapture's `signature.*` strings already exist. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CheckCircle2 } from 'lucide-react';\nimport { PDFViewer } from '../pdf-viewer';\nimport {\n SignatureCapture,\n type SignatureCaptureHandle,\n type SignatureConfirmPayload,\n} from '../signature-capture';\nimport { useAgentRegistration } from '../../agent';\nimport { signDocumentAgent } from './sign-document.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SignDocumentProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Document PDF — URL string, ArrayBuffer, or Uint8Array. Passed to PDFViewer. */\n src: string | ArrayBuffer | Uint8Array;\n /** Accessible name for the document region (also used as a heading). */\n documentTitle?: string;\n /**\n * Gate the signature + Confirm until the reader reaches the last page.\n * Default `true`. Last-page-reached is an approximate read signal (a\n * fit-page zoom can show the last page without scrolling) — adequate for\n * this gate; legal-grade read tracking is the consumer's concern.\n */\n requireReadToEnd?: boolean;\n /** Fired when the user captures a signature AND confirms. */\n onSign?: (payload: SignatureConfirmPayload) => void;\n /** Forwarded from PDFViewer on any load / render error. */\n onError?: (error: Error) => void;\n /**\n * When set, render the already-signed read-only state: shows \"Signed\" +\n * the signed date and hides the pad. Use for re-sign-on-change consumers\n * that surface signed status. `null` / `undefined` → unsigned.\n */\n signedAt?: string | null;\n /**\n * Optional on-behalf attribution. When both `signer` and `subject` are\n * given, a \"Signed by {signer} on behalf of {subject}\" note renders both\n * near the signature pad (so the signer sees who they're signing for) AND\n * inside the already-signed read-only banner. Omit (the default) and\n * nothing extra renders — the existing subject-agnostic API is unchanged.\n * Provide both to opt in; a lone `signer` or `subject` renders nothing.\n */\n signedByNote?: { signer: string; subject: string };\n /** Disable all controls (document still readable). */\n disabled?: boolean;\n /** Render read-only: the document is shown but the pad is suppressed. */\n readOnly?: boolean;\n /** Accessible label for the component's group region. */\n ariaLabel?: string;\n /** Extra class names merged onto the outermost wrapper. */\n className?: string;\n}\n\n/** Curated imperative handle for agent / external automation. */\nexport interface SignDocumentHandle {\n /** Clear the captured signature, returning to the unsigned state. */\n reset: () => void;\n /** Confirm the current signature; resolves the payload, or null if unsigned. */\n confirm: () => Promise<SignatureConfirmPayload | null>;\n /** True when the reader has reached the last page (or the gate is off). */\n isReadComplete: () => boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--card-border)]',\n 'ds:shadow-[var(--shadow-card)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:p-[var(--spacing-md)]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst headingVariants = cva(\n ['type-heading-sm ds:text-[var(--foreground)]'].join(' '),\n);\n\nconst signSectionVariants = cva(\n ['ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]'].join(' '),\n);\n\nconst sectionLabelVariants = cva(\n ['type-body-sm ds:font-medium ds:text-[var(--foreground)]'].join(' '),\n);\n\nconst progressVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n ].join(' '),\n);\n\n// The \"scroll to the end to sign\" hint uses --info as a low-emphasis\n// informational tint — tokenised, logical-property insets, no accent over\n// arbitrary content.\nconst hintVariants = cva(\n [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-body-sm',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:bg-[color-mix(in_srgb,var(--info)_10%,transparent)]',\n 'ds:text-[var(--foreground)]',\n 'ds:border ds:border-[color:color-mix(in_srgb,var(--info)_40%,transparent)]',\n ].join(' '),\n);\n\nconst confirmButtonVariants = cva(\n [\n 'ds:inline-flex ds:inline-size-full ds:items-center ds:justify-center',\n 'ds:[min-block-size:var(--min-target-size)]',\n 'ds:[min-inline-size:var(--min-target-size)]',\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:text-[length:var(--font-size-base)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--primary-hover)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:opacity-[var(--opacity-50)] ds:disabled:cursor-not-allowed',\n 'ds:disabled:hover:bg-[var(--primary)]',\n ].join(' '),\n);\n\n// The signed banner uses the semantic --success alias for the confirmed\n// state — never the raw ramp step (constraint §11).\nconst signedBannerVariants = cva(\n [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:bg-[color-mix(in_srgb,var(--success)_12%,transparent)]',\n 'ds:text-[var(--foreground)]',\n 'ds:border ds:border-[color:color-mix(in_srgb,var(--success)_45%,transparent)]',\n ].join(' '),\n);\n\n// The on-behalf attribution note. Low-emphasis muted text — it qualifies the\n// signature, it isn't an action. `placement` swaps the inset/spacing so the\n// same string reads correctly above the pad (a hint) and inside the signed\n// banner (a continuation of the signed copy).\nconst attributionVariants = cva(['type-body-sm'].join(' '), {\n variants: {\n placement: {\n pad: 'ds:text-[var(--muted-foreground)]',\n banner: 'ds:block ds:text-[var(--foreground)]',\n },\n },\n defaultVariants: { placement: 'pad' },\n});\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\n/**\n * Format an ISO timestamp using the active i18n locale. Falls back to the\n * raw string if it can't be parsed so a malformed `signedAt` never throws.\n */\nfunction formatSignedAt(iso: string, locale: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return iso;\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'long',\n timeStyle: 'short',\n }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* SignDocument */\n/* ------------------------------------------------------------------ */\n\nexport const SignDocument = forwardRef<SignDocumentHandle, SignDocumentProps>(\n (\n {\n id,\n src,\n documentTitle,\n requireReadToEnd = true,\n onSign,\n onError,\n signedAt = null,\n signedByNote,\n disabled = false,\n readOnly = false,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const rawId = useId();\n const idSafe = useMemo(\n () => `sign-doc-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const docHeadingId = `${idSafe}-doc-heading`;\n const signLabelId = `${idSafe}-sign-label`;\n const liveRegionId = `${idSafe}-live`;\n // Stable, static describedby target for the sign section + Confirm —\n // kept separate from the polite live region so describedby points at\n // unchanging text, not the transition announcer (which only carries\n // gate-met / signed announcements).\n const gateHintId = `${idSafe}-gate-hint`;\n\n const signatureRef = useRef<SignatureCaptureHandle>(null);\n\n const [numPages, setNumPages] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n // True once the reader has reached the last page at least once. Sticky:\n // scrolling back up does not re-lock the signature.\n const [reachedEnd, setReachedEnd] = useState(false);\n // Mirrors the pad's ink state so the Confirm button re-renders when a\n // signature lands. SignatureCapture's isEmpty() is a sync ref read (no\n // re-render) and its onStart only fires on a DRAWN stroke — not on the\n // typed fallback. We poll the handle so both paths gate Confirm\n // identically; onStart/onClear below are immediate-feedback hints.\n const [hasSignature, setHasSignature] = useState(false);\n\n const isSigned = signedAt != null;\n const inert = disabled || readOnly || isSigned;\n\n // Latest callbacks via refs so the async confirm path never closes over\n // a stale prop.\n const onSignRef = useRef(onSign);\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onSignRef.current = onSign;\n onErrorRef.current = onError;\n }, [onSign, onError]);\n\n /* ---- Per-document reset -------------------------------------- */\n // When the consumer swaps `src` to a NEW document, the previous \"read\n // complete\" state must NOT carry over — otherwise the new document\n // could be signed without being read. Reset the per-document state;\n // PDFViewer's onLoadComplete re-sets reachedEnd for single-page docs.\n useEffect(() => {\n setReachedEnd(false);\n setNumPages(0);\n setCurrentPage(1);\n setHasSignature(false);\n }, [src]);\n\n /* ---- Read-gate tracking -------------------------------------- */\n const handleLoadComplete = useCallback(\n (info: { numPages: number; title?: string }) => {\n setNumPages(info.numPages);\n // A single-page document is \"read to the end\" the moment it loads.\n if (info.numPages <= 1) setReachedEnd(true);\n },\n [],\n );\n\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page);\n setNumPages((total) => {\n if (total > 0 && page >= total) setReachedEnd(true);\n return total;\n });\n }, []);\n\n const handleError = useCallback((error: Error) => {\n onErrorRef.current?.(error);\n }, []);\n\n /* ---- Signature-presence polling ------------------------------ */\n // Poll the pad's isEmpty() while the signing surface is live so the\n // Confirm button reflects both drawn AND typed signatures. Cheap\n // (a single boolean ref read on an interval); torn down when signed,\n // read-only, or unmounted.\n const signLive = !isSigned && !readOnly;\n useEffect(() => {\n if (!signLive) return undefined;\n const tick = (): void => {\n const pad = signatureRef.current;\n if (!pad) return;\n setHasSignature(!pad.isEmpty());\n };\n tick();\n const interval = window.setInterval(tick, 200);\n return () => window.clearInterval(interval);\n }, [signLive]);\n\n // The gate is satisfied when reading isn't required, or the reader has\n // reached the last page at least once.\n const readComplete = !requireReadToEnd || reachedEnd;\n const canSign = !inert && readComplete;\n const confirmDisabled = !canSign || !hasSignature;\n\n /* ---- Confirm path -------------------------------------------- */\n // `onSign` fires from SignatureCapture's `onConfirm` (wired below) — the\n // single source of truth, so it fires once whether the user clicks the\n // pad's own Confirm or this component's \"Confirm & sign\". This handle\n // just proxies the pad's confirm() and returns its payload.\n const handleSigned = useCallback((payload: SignatureConfirmPayload) => {\n onSignRef.current?.(payload);\n }, []);\n\n const confirm =\n useCallback(async (): Promise<SignatureConfirmPayload | null> => {\n const pad = signatureRef.current;\n if (!pad) return null;\n return pad.confirm();\n }, []);\n\n const reset = useCallback(() => {\n signatureRef.current?.clear();\n setHasSignature(false);\n }, []);\n\n /* ---- Imperative handle + agent registration ------------------ */\n const agentHandle = useMemo<SignDocumentHandle>(\n () => ({\n reset,\n confirm,\n isReadComplete: () => readComplete,\n }),\n [reset, confirm, readComplete],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(signDocumentAgent, agentHandle, id);\n\n /* ---- Derived strings ----------------------------------------- */\n const regionLabel =\n ariaLabel ??\n (documentTitle\n ? t('signDocument.regionLabelNamed', { title: documentTitle })\n : t('signDocument.regionLabel'));\n const documentRegionLabel =\n documentTitle ?? t('signDocument.documentLabel');\n\n // Live region — ONLY transition announcements (gate met / signed).\n const liveText = isSigned\n ? t('signDocument.signedOn', {\n date: formatSignedAt(signedAt as string, i18n.language),\n })\n : readComplete\n ? t('signDocument.readyToSign')\n : '';\n\n // Static describedby target — always names WHY Confirm is unavailable\n // (or stays empty when it's actionable). Stable text, never live.\n const gateHintText = !readComplete\n ? t('signDocument.scrollToEnd')\n : !hasSignature\n ? t('signDocument.signToEnable')\n : '';\n\n // On-behalf attribution — only when BOTH signer and subject are present\n // (a lone half is meaningless). Rendered above the pad and in the signed\n // banner. Optional: undefined → no attribution, API unchanged.\n const attributionText =\n signedByNote?.signer && signedByNote?.subject\n ? t('signDocument.signedByOnBehalf', {\n signer: signedByNote.signer,\n subject: signedByNote.subject,\n })\n : null;\n\n return (\n <div\n role=\"group\"\n // Prefer labelling by the visible heading so the visible + accessible\n // names match; fall back to aria-label only when there's no heading.\n aria-labelledby={!ariaLabel && documentTitle ? docHeadingId : undefined}\n aria-label={ariaLabel || !documentTitle ? regionLabel : undefined}\n aria-disabled={disabled || undefined}\n className={[rootVariants(), className].filter(Boolean).join(' ')}\n data-component=\"sign-document\"\n data-component-id={id}\n data-signed={isSigned || undefined}\n >\n {/* Polite live region — ONLY transition announcements (gate met /\n signed). Static describedby text lives in the gate-hint span. */}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n data-testid=\"sign-document-live\"\n id={liveRegionId}\n >\n {liveText}\n </span>\n\n {/* Static, non-live describedby target for the sign group + Confirm:\n names why Confirm is unavailable (or empty when actionable). */}\n <span className=\"ds:sr-only\" id={gateHintId}>\n {gateHintText}\n </span>\n\n {documentTitle ? (\n <h2 id={docHeadingId} className={headingVariants()}>\n {documentTitle}\n </h2>\n ) : null}\n\n {/* The document. PDFViewer owns its own toolbar, a11y, and zoom. */}\n <PDFViewer\n src={src}\n ariaLabel={documentRegionLabel}\n onLoadComplete={handleLoadComplete}\n onPageChange={handlePageChange}\n onError={handleError}\n />\n\n {isSigned ? (\n /* ---- Already-signed, read-only ---- */\n <div\n className={signedBannerVariants()}\n data-testid=\"sign-document-signed\"\n >\n <CheckCircle2\n aria-hidden=\"true\"\n className=\"ds:size-5 ds:text-[var(--success)] ds:shrink-0\"\n />\n <span className=\"type-body-sm\">\n <strong className=\"ds:font-semibold\">\n {t('signDocument.signed')}\n </strong>\n {' — '}\n {t('signDocument.signedOn', {\n date: formatSignedAt(signedAt as string, i18n.language),\n })}\n {attributionText ? (\n <span\n className={attributionVariants({ placement: 'banner' })}\n data-testid=\"sign-document-attribution\"\n >\n {attributionText}\n </span>\n ) : null}\n </span>\n </div>\n ) : readOnly ? null : (\n /* ---- Sign surface ---- */\n <div\n className={signSectionVariants()}\n role=\"group\"\n aria-labelledby={signLabelId}\n aria-describedby={gateHintId}\n >\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span id={signLabelId} className={sectionLabelVariants()}>\n {t('signDocument.signatureSection')}\n </span>\n {numPages > 0 ? (\n <span\n className={progressVariants()}\n data-testid=\"sign-document-progress\"\n >\n {t('signDocument.pageProgress', {\n current: currentPage,\n total: numPages,\n })}\n </span>\n ) : null}\n </div>\n\n {attributionText ? (\n <p\n className={attributionVariants({ placement: 'pad' })}\n data-testid=\"sign-document-attribution\"\n >\n {attributionText}\n </p>\n ) : null}\n\n {requireReadToEnd && !readComplete ? (\n <p className={hintVariants()} data-testid=\"sign-document-hint\">\n {t('signDocument.scrollToEnd')}\n </p>\n ) : null}\n\n {/* The pad is always mounted so a keyboard user can prepare a\n typed signature; the Confirm button is the gate. When the\n read-gate is unmet the pad is disabled so it can't accept\n ink prematurely. */}\n <SignatureCapture\n ref={signatureRef}\n ariaLabel={t('signDocument.signatureSection')}\n disabled={disabled || !readComplete}\n onStart={() => setHasSignature(true)}\n onClear={() => setHasSignature(false)}\n onConfirm={handleSigned}\n />\n\n {/* Native `disabled` (not aria-disabled) so a gated Confirm\n leaves the tab order entirely — mirrors how Button gates a\n primary action. describedby names WHY it's unavailable. */}\n <button\n type=\"button\"\n onClick={() => {\n if (confirmDisabled) return;\n void confirm();\n }}\n disabled={confirmDisabled}\n aria-describedby={gateHintId}\n className={confirmButtonVariants()}\n data-testid=\"sign-document-confirm\"\n >\n <CheckCircle2 aria-hidden=\"true\" className=\"ds:size-4\" />\n {t('signDocument.confirm')}\n </button>\n </div>\n )}\n </div>\n );\n },\n);\n\nSignDocument.displayName = 'SignDocument';\n\nexport { rootVariants as signDocumentRootVariants };\n"],"names":["signDocumentAgent","handle","rootVariants","cva","headingVariants","signSectionVariants","sectionLabelVariants","progressVariants","hintVariants","confirmButtonVariants","signedBannerVariants","attributionVariants","formatSignedAt","iso","locale","date","SignDocument","forwardRef","id","src","documentTitle","requireReadToEnd","onSign","onError","signedAt","signedByNote","disabled","readOnly","ariaLabel","className","ref","t","i18n","useTranslation","rawId","useId","idSafe","useMemo","docHeadingId","signLabelId","liveRegionId","gateHintId","signatureRef","useRef","numPages","setNumPages","useState","currentPage","setCurrentPage","reachedEnd","setReachedEnd","hasSignature","setHasSignature","isSigned","inert","onSignRef","onErrorRef","useEffect","handleLoadComplete","useCallback","info","handlePageChange","page","total","handleError","error","_a","signLive","tick","pad","interval","readComplete","confirmDisabled","handleSigned","payload","confirm","reset","agentHandle","useImperativeHandle","useAgentRegistration","regionLabel","documentRegionLabel","liveText","gateHintText","attributionText","jsxs","jsx","PDFViewer","CheckCircle2","SignatureCapture"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signature-capture-COi0Uiqu.js","sources":["../../src/components/signature-capture/signature-capture.agent.ts","../../src/components/signature-capture/signature-capture.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { SignatureCaptureHandle } from './signature-capture';\n\nexport const signatureCaptureAgent: AgentAdapter<SignatureCaptureHandle> = {\n id: 'signature-capture',\n capabilities: ['edit_inline', 'submit'],\n state: {\n isEmpty: {\n type: 'boolean',\n description: 'True when no signature has been drawn or typed.',\n read: (handle) => handle.isEmpty(),\n },\n },\n actions: {\n clear: {\n safety: 'destructive',\n description: 'Erase the current signature. Loses unsaved input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n undo: {\n safety: 'write',\n description: 'Undo the last stroke.',\n invoke: (handle) => {\n handle.undo();\n },\n },\n confirm: {\n safety: 'write',\n description: 'Commit the signature and return its serialised payload.',\n invoke: (handle) => handle.confirm(),\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'signature-capture' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* SignatureCapture — thin React wrapper over signature_pad. */\n/* */\n/* - Library: `signature_pad` (08-third-party §Signature Pad). We */\n/* instantiate one pad per mounted canvas and expose imperative */\n/* clear / undo / isEmpty / confirm verbs to the consumer. */\n/* - Colors: `penColor` / `backgroundColor` default to */\n/* `--foreground` / `--background` via `getComputedStyle()`. Theme */\n/* switches are observed via a MutationObserver on `<html class>` */\n/* so the ink recolours when the theme flips. */\n/* - DPR scaling: canvas attribute `width/height = cssSize * DPR`; the */\n/* 2D context is scaled by the same factor. A `ResizeObserver` */\n/* replays strokes via `fromData()` on re-scale so nothing is lost. */\n/* - Typed fallback: keyboard-only path renders a text input styled in */\n/* italic `var(--font-sans)` (per 23-constraints §10 — serif is */\n/* marketing only). On confirm we render the string to an offscreen */\n/* canvas for the PNG/SVG export. */\n/* - Confirm payload: `{ png, svg, widthMm, heightMm, capturedAt, */\n/* sha256, strokes? }`. `sha256` is the SubtleCrypto digest of the */\n/* PNG bytes — tamper-evident for audit trails. */\n/* - Security: no `fetch` / `XMLHttpRequest` / `localStorage` / */\n/* `sessionStorage` in this file — the consumer owns persistence. */\n/* */\n/* TODO: */\n/* - 3× DPI re-render for print: currently `toDataURL('image/png')` */\n/* exports the live canvas (already at DPR). A proper 300-DPI */\n/* pipeline would create an offscreen canvas at `cssSize × 3` and */\n/* replay strokes via `fromData()` — deferred pending the print */\n/* bridge landing. */\n/* - Typed-fallback canvas font can't read CSS variables directly */\n/* (Canvas2D resolves fonts at paint time and won't expand */\n/* `var(--font-size-2xl)`); we use a fixed `32px italic` + the */\n/* user's font stack, which is visually close but not */\n/* theme-reactive. Will migrate once the typography tokens expose */\n/* a resolved `font` shorthand. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport SignaturePad from 'signature_pad';\nimport type { PointGroup } from 'signature_pad';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { signatureCaptureAgent } from './signature-capture.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SignatureConfirmPayload {\n /** Data URL of the captured signature rendered as PNG. */\n png: string;\n /** SVG string trimmed to the stroke bounding box. */\n svg: string;\n /** Physical width in millimetres, derived from CSS px. */\n widthMm: number;\n /** Physical height in millimetres, derived from CSS px. */\n heightMm: number;\n /** ISO-8601 UTC timestamp for when `confirm()` resolved. */\n capturedAt: string;\n /** Hex-encoded SHA-256 digest of the PNG bytes. */\n sha256: string;\n /** Raw stroke data from `signature_pad.toData()` — optional for replays. */\n strokes?: PointGroup[];\n}\n\nexport interface SignatureCaptureProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Called with the export payload when the user confirms the signature. */\n onConfirm?: (payload: SignatureConfirmPayload) => void;\n /** Called after the pad is cleared (explicit user action). */\n onClear?: () => void;\n /** Called when the user starts drawing a new stroke. */\n onStart?: () => void;\n /** CSS width of the pad. Default 400. */\n width?: number | string;\n /** CSS height of the pad. Default 200. */\n height?: number | string;\n /** Pen colour override — defaults to `var(--foreground)`. */\n penColor?: string;\n /** Background override — defaults to `var(--background)`. */\n backgroundColor?: string;\n /** Show the typed-name fallback toggle. Default `true`. */\n allowTypedFallback?: boolean;\n /**\n * When set, on confirm() the captured PNG data URL is written into a hidden\n * `<input name={name}>` so consumers can POST the signature declaratively.\n * The PNG data URL satisfies the server's `data:image/png` prefix check.\n * Default off.\n */\n name?: string;\n /** Disable the entire component. */\n disabled?: boolean;\n /** Accessible label for the pad region. */\n ariaLabel?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface SignatureCaptureHandle {\n clear: () => void;\n undo: () => void;\n isEmpty: () => boolean;\n confirm: () => Promise<SignatureConfirmPayload | null>;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva(\n [\n 'ds:signature-capture-alfadocs ds:flex ds:flex-col',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--card-border)]',\n 'ds:shadow-[var(--shadow-card)]',\n 'ds:[.theme-accessible_&]:border-2',\n 'ds:p-[var(--spacing-sm)]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst padFrameVariants = cva(\n [\n 'ds:relative ds:block',\n // Mobile-first: fill the available width but never exceed the configured\n // pad width. Arbitrary-property form because `inline-size-[…]` /\n // `block-size-[…]` named utilities emit no CSS here (see canvasVariants).\n 'ds:[inline-size:100%]',\n 'ds:[max-inline-size:var(--signature-width)]',\n 'ds:[block-size:var(--signature-height)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:overflow-hidden',\n 'ds:touch-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst canvasVariants = cva(\n [\n 'ds:block',\n // Arbitrary-property form, NOT `inline-size-full` / `block-size-full`:\n // the `inline-size-*` / `block-size-*` named utilities generate no CSS in\n // this Tailwind setup, so on a block <div> they silently fall back to auto\n // (harmless) but on a replaced <canvas> the element then sizes to its\n // backing-store `width`/`height` attribute — which scaleCanvas drives up to\n // MAX_CANVAS_PX (4096) in a feedback loop, overflowing the pad on mobile.\n // The `[property:value]` escape hatch always emits, pinning the canvas to\n // the frame so the loop can't run away.\n 'ds:[inline-size:100%]',\n 'ds:[block-size:100%]',\n 'ds:touch-none',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst toolbarVariants = cva(\n ['ds:flex ds:items-stretch ds:flex-wrap ds:gap-[var(--spacing-sm)]'].join(\n ' ',\n ),\n);\n\n// Toolbar actions are sized for thumbs: they grow to fill the pad width\n// (`flex-1`), sit above the 44/48px floor, and use base-size text so they read\n// clearly on a phone.\nconst actionButtonVariants = cva(\n [\n 'ds:inline-flex ds:flex-1 ds:items-center ds:justify-center',\n 'ds:[min-block-size:var(--min-target-size)]',\n 'ds:[min-inline-size:var(--min-target-size)]',\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-transparent ds:text-[var(--foreground)]',\n 'ds:text-[length:var(--font-size-base)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst confirmButtonVariants = cva(\n [\n 'ds:inline-flex ds:flex-1 ds:items-center ds:justify-center',\n 'ds:[min-block-size:var(--min-target-size)]',\n 'ds:[min-inline-size:var(--min-target-size)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:text-[length:var(--font-size-base)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--primary-hover)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst typedInputVariants = cva(\n [\n 'ds:block ds:inline-size-full',\n 'ds:[min-block-size:var(--min-target-size)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:font-[family-name:var(--font-sans)]',\n 'ds:italic',\n 'ds:tracking-[0.1em]',\n 'ds:text-[length:var(--font-size-lg)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst typedPreviewVariants = cva(\n [\n 'ds:flex ds:items-center ds:justify-center',\n // Match the pad frame: responsive width capped at the configured size.\n // Arbitrary-property form (the named `*-size-[…]` utilities are no-ops here).\n 'ds:[inline-size:100%]',\n 'ds:[max-inline-size:var(--signature-width)]',\n 'ds:[block-size:var(--signature-height)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--card-border)]',\n 'ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:font-[family-name:var(--font-sans)]',\n 'ds:italic',\n 'ds:tracking-[0.1em]',\n 'ds:text-[length:var(--font-size-2xl)]',\n 'ds:p-[var(--spacing-md)]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\ntype SignatureState = 'empty' | 'drawing' | 'captured' | 'cleared';\n\n/**\n * Resolve a CSS custom property against `document.documentElement`. We\n * can't pass `var(--foreground)` to signature_pad directly — the lib\n * stamps the string straight into `ctx.strokeStyle`, which only accepts\n * concrete colour values. Looking the variable up at runtime keeps the\n * component in tokens-only compliance.\n */\nfunction resolveCssVar(name: string): string {\n if (typeof document === 'undefined') return '';\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n return value;\n}\n\nfunction toCssSize(v: number | string | undefined, fallback: string): string {\n if (typeof v === 'number') return `${v}px`;\n if (typeof v === 'string' && v.length > 0) return v;\n return fallback;\n}\n\n/**\n * Parse a pixel value, returning `null` for non-pixel strings (e.g.\n * \"100%\", \"50vw\") so the caller can fall back to the measured rect.\n * parseFloat(\"100%\") would silently return 100 — a 100mm-wide export\n * masquerading as 26mm. Allow only digits, dot, minus, whitespace, \"px\".\n */\nfunction parsePxValue(v: string): number | null {\n if (typeof v === 'string' && /[^0-9.\\s\\-px]/i.test(v)) return null;\n const n = parseFloat(v);\n if (!Number.isFinite(n)) return null;\n return n;\n}\n\n/** Hex-encode a Uint8Array. */\nfunction toHex(bytes: Uint8Array): string {\n let out = '';\n for (let i = 0; i < bytes.length; i += 1) {\n const b = bytes[i];\n out += b.toString(16).padStart(2, '0');\n }\n return out;\n}\n\n/** Decode a base64 string into bytes without `atob` polyfills. */\nfunction base64ToBytes(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i += 1) bytes[i] = bin.charCodeAt(i);\n return bytes;\n }\n // Fallback — node-style Buffer, gated behind a runtime check.\n const g = globalThis as {\n Buffer?: { from: (s: string, enc: string) => Uint8Array };\n };\n if (g.Buffer) return g.Buffer.from(b64, 'base64');\n return new Uint8Array();\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const g = globalThis as { crypto?: Crypto };\n if (g.crypto?.subtle) {\n // Copy the bytes into a fresh ArrayBuffer so the slice is always an\n // ArrayBuffer (never a SharedArrayBuffer) — SubtleCrypto's BufferSource\n // narrowing doesn't accept the latter.\n const copy = new Uint8Array(bytes.byteLength);\n copy.set(bytes);\n const digest = await g.crypto.subtle.digest('SHA-256', copy.buffer);\n return toHex(new Uint8Array(digest));\n }\n // No subtle crypto — return empty so callers can still use the rest\n // of the payload. Test env is expected to stub crypto.subtle.\n return '';\n}\n\n/**\n * Render the typed fallback string onto an offscreen canvas and return\n * it. Used by the confirm path when the user has typed their name\n * instead of drawing. Size is fixed at `32px italic` because Canvas2D\n * resolves fonts eagerly and can't expand `var(--font-size-*)`.\n */\nfunction renderTypedSignatureToCanvas(\n text: string,\n cssWidth: number,\n cssHeight: number,\n penColor: string,\n backgroundColor: string,\n): HTMLCanvasElement {\n const dpr = Math.max(\n 1,\n typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n );\n const canvas = document.createElement('canvas');\n canvas.width = Math.floor(cssWidth * dpr);\n canvas.height = Math.floor(cssHeight * dpr);\n const ctx = canvas.getContext('2d');\n if (!ctx) return canvas;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n // Fill background with the token-resolved colour.\n ctx.fillStyle = backgroundColor || 'transparent';\n ctx.fillRect(0, 0, cssWidth, cssHeight);\n // Draw the typed signature centred.\n ctx.fillStyle = penColor || 'currentColor';\n ctx.font = '32px italic sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, cssWidth / 2, cssHeight / 2, cssWidth - 16);\n return canvas;\n}\n\n/* ------------------------------------------------------------------ */\n/* SignatureCapture */\n/* ------------------------------------------------------------------ */\n\nexport const SignatureCapture = forwardRef<\n SignatureCaptureHandle,\n SignatureCaptureProps\n>(\n (\n {\n id,\n onConfirm,\n onClear,\n onStart,\n width = 400,\n height = 200,\n penColor,\n backgroundColor,\n allowTypedFallback = true,\n name,\n disabled = false,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const rawId = useId();\n const idSafe = useMemo(\n () => `sig-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const liveRegionId = `${idSafe}-live`;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const padFrameRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const typedPreviewRef = useRef<HTMLDivElement>(null);\n const signaturePadRef = useRef<SignaturePad | null>(null);\n\n const [mode, setMode] = useState<'draw' | 'typed'>('draw');\n const [typedValue, setTypedValue] = useState('');\n // Mirrors the last confirmed PNG data URL into a hidden form field when\n // `name` is set, so consumers can POST the signature declaratively.\n const [boundValue, setBoundValue] = useState('');\n // Tracks whether the pad has any ink — gates the Confirm button.\n // signature_pad's isEmpty() is a sync ref read and won't trigger\n // re-renders; this state mirrors it so React sees the change.\n const [padHasInk, setPadHasInk] = useState(false);\n // Retained state — consumers may subscribe to the pad's lifecycle via\n // `onConfirm`/`onClear`/`onStart`; we still track the machine internally\n // so the live region + confirm button stay coherent.\n const signatureStateRef = useRef<SignatureState>('empty');\n const [announcement, setAnnouncement] = useState<string>('');\n const [resolvedPen, setResolvedPen] = useState<string>('');\n const [resolvedBg, setResolvedBg] = useState<string>('');\n\n // Stable callback refs so we can wire signature_pad once without\n // re-instantiating on every render.\n const onStartRef = useRef<SignatureCaptureProps['onStart']>(onStart);\n const onClearRef = useRef<SignatureCaptureProps['onClear']>(onClear);\n const onConfirmRef = useRef<SignatureCaptureProps['onConfirm']>(onConfirm);\n useEffect(() => {\n onStartRef.current = onStart;\n onClearRef.current = onClear;\n onConfirmRef.current = onConfirm;\n }, [onStart, onClear, onConfirm]);\n\n /* ---- Announce helper ---------------------------------------- */\n const announce = useCallback(\n (next: SignatureState) => {\n signatureStateRef.current = next;\n setAnnouncement(t(`signature.state.${next}`));\n },\n [t],\n );\n\n /* ---- Resolve tokens ----------------------------------------- */\n useEffect(() => {\n if (typeof document === 'undefined') return undefined;\n function resolveAll(): void {\n const pen = penColor ?? resolveCssVar('--foreground');\n const bg = backgroundColor ?? resolveCssVar('--background');\n // Fall back to `currentColor` / `transparent` — keyword literals\n // are token-neutral and honour the surrounding theme even when\n // the CSS variable is briefly unavailable (SSR, initial paint).\n setResolvedPen(pen || 'currentColor');\n setResolvedBg(bg || 'transparent');\n }\n resolveAll();\n // Watch for theme-class changes on <html>.\n const mo = new MutationObserver(() => {\n resolveAll();\n });\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n return () => mo.disconnect();\n }, [penColor, backgroundColor]);\n\n /* ---- Apply colour changes to an existing pad ---------------- */\n useEffect(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n if (resolvedPen) pad.penColor = resolvedPen;\n if (resolvedBg) pad.backgroundColor = resolvedBg;\n }, [resolvedPen, resolvedBg]);\n\n /* ---- Instantiate signature_pad ------------------------------ */\n useEffect(() => {\n if (mode !== 'draw') return undefined;\n const canvas = canvasRef.current;\n if (!canvas) return undefined;\n\n const pad = new SignaturePad(canvas, {\n penColor: resolvedPen || 'currentColor',\n backgroundColor: resolvedBg || 'transparent',\n minWidth: 0.5,\n maxWidth: 2.5,\n velocityFilterWeight: 0.7,\n });\n signaturePadRef.current = pad;\n\n const handleBegin = (): void => {\n setPadHasInk(true);\n announce('drawing');\n onStartRef.current?.();\n };\n const handleEnd = (): void => {\n // Keep state as 'drawing' — transition to 'captured' on confirm.\n };\n pad.addEventListener('beginStroke', handleBegin);\n pad.addEventListener('endStroke', handleEnd);\n\n // Initial DPR scale + announcement.\n scaleCanvas(canvas);\n announce('empty');\n\n return () => {\n pad.removeEventListener('beginStroke', handleBegin);\n pad.removeEventListener('endStroke', handleEnd);\n // Clear strokes from memory; 08-third-party §Signature Pad.\n pad.clear();\n pad.off();\n signaturePadRef.current = null;\n };\n // We intentionally re-create the pad only when switching between\n // typed and draw modes. Color updates flow through the effect above.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode]);\n\n /* ---- Disabled state ----------------------------------------- */\n useEffect(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n if (disabled) pad.off();\n else pad.on();\n }, [disabled, mode]);\n\n /* ---- DPR + ResizeObserver ----------------------------------- */\n // Hard-cap backing-store dimensions to bound memory. 4096 px × 4096 px at\n // 4 bytes per pixel is ~67 MB — generous for any realistic signature, but\n // well under the multi-GB allocation a careless or malicious prop could\n // request on a high-DPR display. See security-hardening.mdx.\n const MAX_CANVAS_PX = 4096;\n const scaleCanvas = useCallback(\n (canvas: HTMLCanvasElement) => {\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(\n 1,\n typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n );\n const rawWidth = Math.max(1, Math.floor(rect.width * dpr));\n const rawHeight = Math.max(1, Math.floor(rect.height * dpr));\n const targetWidth = Math.min(rawWidth, MAX_CANVAS_PX);\n const targetHeight = Math.min(rawHeight, MAX_CANVAS_PX);\n if (\n import.meta.env.DEV &&\n (rawWidth !== targetWidth || rawHeight !== targetHeight)\n ) {\n // Silent in production; a consumer shipping 10k × 10k probably wants\n // the nudge.\n console.warn(\n `[SignatureCapture] clamped canvas backing store from ${rawWidth}x${rawHeight} to ${targetWidth}x${targetHeight} (cap = ${MAX_CANVAS_PX}px).`,\n );\n }\n if (canvas.width === targetWidth && canvas.height === targetHeight)\n return;\n\n const pad = signaturePadRef.current;\n const prior = pad ? pad.toData() : null;\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const ctx = canvas.getContext('2d');\n if (ctx) ctx.scale(dpr, dpr);\n if (pad) {\n if (resolvedBg) pad.backgroundColor = resolvedBg;\n if (resolvedPen) pad.penColor = resolvedPen;\n pad.clear();\n if (prior && prior.length > 0) {\n pad.fromData(prior);\n }\n }\n },\n [resolvedBg, resolvedPen],\n );\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return undefined;\n if (typeof ResizeObserver === 'undefined') {\n scaleCanvas(canvas);\n return undefined;\n }\n const ro = new ResizeObserver(() => {\n scaleCanvas(canvas);\n });\n ro.observe(canvas);\n return () => ro.disconnect();\n }, [scaleCanvas]);\n\n /* ---- Imperative handle -------------------------------------- */\n const clear = useCallback(() => {\n const pad = signaturePadRef.current;\n if (pad) pad.clear();\n setTypedValue('');\n setBoundValue('');\n setPadHasInk(false);\n announce('cleared');\n onClearRef.current?.();\n }, [announce]);\n\n const undo = useCallback(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n const data = pad.toData();\n if (!data || data.length === 0) return;\n data.pop();\n pad.fromData(data);\n if (data.length === 0) {\n setPadHasInk(false);\n announce('empty');\n }\n }, [announce]);\n\n const isEmpty = useCallback((): boolean => {\n if (mode === 'typed') return typedValue.trim().length === 0;\n const pad = signaturePadRef.current;\n return pad ? pad.isEmpty() : true;\n }, [mode, typedValue]);\n\n const confirm =\n useCallback(async (): Promise<SignatureConfirmPayload | null> => {\n // parsePxValue returns null for \"100%\" / \"50vw\" etc. — fall back\n // to the live rendered rect so widthMm reflects reality, not a\n // mis-parsed parseFloat(\"100%\") = 100.\n const widthParsed = parsePxValue(\n typeof width === 'number' ? `${width}` : String(width),\n );\n const heightParsed = parsePxValue(\n typeof height === 'number' ? `${height}` : String(height),\n );\n const measureEl =\n mode === 'draw'\n ? (canvasRef.current ?? padFrameRef.current ?? wrapperRef.current)\n : (typedPreviewRef.current ?? wrapperRef.current);\n const measuredRect = measureEl?.getBoundingClientRect();\n const cssWidth =\n widthParsed ?? (measuredRect ? measuredRect.width : 400);\n const cssHeight =\n heightParsed ?? (measuredRect ? measuredRect.height : 200);\n\n let pngDataUrl = '';\n let svgString = '';\n let strokes: PointGroup[] | undefined;\n\n if (mode === 'draw') {\n const pad = signaturePadRef.current;\n if (!pad || pad.isEmpty()) return null;\n pngDataUrl = pad.toDataURL('image/png');\n svgString = pad.toSVG();\n strokes = pad.toData();\n } else {\n const value = typedValue.trim();\n if (value.length === 0) return null;\n const offscreen = renderTypedSignatureToCanvas(\n value,\n cssWidth,\n cssHeight,\n resolvedPen || 'currentColor',\n resolvedBg || 'transparent',\n );\n pngDataUrl = offscreen.toDataURL('image/png');\n // Inline SVG — we can't call toSVG() because signature_pad isn't\n // driving the canvas. Build a minimal SVG with the rendered text.\n const safeText = value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n svgString =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${cssWidth} ${cssHeight}\" width=\"${cssWidth}\" height=\"${cssHeight}\">` +\n `<text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"sans-serif\" font-style=\"italic\" font-size=\"32\" fill=\"${resolvedPen || 'currentColor'}\" letter-spacing=\"3\">${safeText}</text>` +\n `</svg>`;\n }\n\n // 96 CSS px = 25.4 mm (per W3C CSS absolute length definition).\n const widthMm = (cssWidth * 25.4) / 96;\n const heightMm = (cssHeight * 25.4) / 96;\n const capturedAt = new Date().toISOString();\n\n // Compute SHA-256 of the PNG bytes.\n let sha256 = '';\n if (pngDataUrl) {\n const commaIx = pngDataUrl.indexOf(',');\n const b64 = commaIx >= 0 ? pngDataUrl.slice(commaIx + 1) : '';\n const bytes = base64ToBytes(b64);\n sha256 = await sha256Hex(bytes);\n }\n\n const payload: SignatureConfirmPayload = {\n png: pngDataUrl,\n svg: svgString,\n widthMm,\n heightMm,\n capturedAt,\n sha256,\n strokes,\n };\n\n announce('captured');\n if (name) setBoundValue(payload.png);\n onConfirmRef.current?.(payload);\n return payload;\n }, [\n mode,\n typedValue,\n width,\n height,\n resolvedPen,\n resolvedBg,\n announce,\n name,\n ]);\n\n const agentHandle = useMemo<SignatureCaptureHandle>(\n () => ({\n clear,\n undo,\n isEmpty,\n confirm,\n }),\n [clear, undo, isEmpty, confirm],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(signatureCaptureAgent, agentHandle, id);\n\n /* ---- Derived UI state --------------------------------------- */\n // Gate Confirm on React state, not the signature_pad ref — its\n // isEmpty() doesn't trigger re-renders, leaving the button stale.\n const hasContent =\n mode === 'typed' ? typedValue.trim().length > 0 : padHasInk;\n const confirmDisabled = disabled || !hasContent;\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter for dynamic width/height\n // from consumer props; the width rule lives in Tailwind arbitrary\n // values that read --signature-width / --signature-height).\n const sizeStyle: CSSProperties = {\n ['--signature-width' as unknown as keyof CSSProperties]: toCssSize(\n width,\n 'var(--signature-default-width)',\n ),\n ['--signature-height' as unknown as keyof CSSProperties]: toCssSize(\n height,\n 'var(--signature-default-height)',\n ),\n } as CSSProperties;\n\n /* ---- Render -------------------------------------------------- */\n return (\n <div\n ref={wrapperRef}\n role=\"group\"\n aria-label={ariaLabel ?? t('signature.padLabel')}\n aria-disabled={disabled || undefined}\n className={[wrapperVariants(), className].filter(Boolean).join(' ')}\n // eslint-disable-next-line react/forbid-dom-props -- runtime-computed pad dimensions\n style={sizeStyle}\n data-component=\"signature-capture\"\n data-component-id={id}\n >\n {name ? (\n <input type=\"hidden\" name={name} value={boundValue} readOnly />\n ) : null}\n {mode === 'draw' ? (\n <div ref={padFrameRef} className={padFrameVariants()}>\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={t('signature.padLabel')}\n className={canvasVariants()}\n data-testid=\"signature-canvas\"\n />\n </div>\n ) : (\n <label className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-body-sm ds:text-[var(--muted-foreground)]\">\n {t('signature.typedFallback.label')}\n </span>\n <input\n type=\"text\"\n value={typedValue}\n onChange={(e) => {\n setTypedValue(e.target.value);\n if (e.target.value.length > 0) announce('drawing');\n else announce('empty');\n }}\n placeholder={t('signature.typedFallback.placeholder')}\n aria-label={t('signature.typedFallback.label')}\n disabled={disabled}\n className={typedInputVariants()}\n data-testid=\"signature-typed-input\"\n />\n {typedValue ? (\n <div\n ref={typedPreviewRef}\n className={typedPreviewVariants()}\n aria-hidden=\"true\"\n >\n {typedValue}\n </div>\n ) : null}\n </label>\n )}\n\n {/* Live region — state transitions (empty, drawing, captured, cleared) */}\n <div\n id={liveRegionId}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n data-testid=\"signature-live\"\n >\n {announcement}\n </div>\n\n <div\n className={toolbarVariants()}\n role=\"group\"\n aria-label={t('signature.padLabel')}\n >\n <button\n type=\"button\"\n onClick={() => {\n if (disabled) return;\n clear();\n }}\n aria-disabled={disabled || undefined}\n className={actionButtonVariants()}\n >\n {t('signature.clear')}\n </button>\n {allowTypedFallback ? (\n <button\n type=\"button\"\n onClick={() => {\n if (disabled) return;\n setTypedValue('');\n setMode((m) => (m === 'draw' ? 'typed' : 'draw'));\n announce('cleared');\n }}\n aria-disabled={disabled || undefined}\n className={actionButtonVariants()}\n aria-pressed={mode === 'typed'}\n >\n {mode === 'draw'\n ? t('signature.typedFallback.toggle')\n : t('signature.typedFallback.toggleDraw')}\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={() => {\n if (confirmDisabled) return;\n void confirm();\n }}\n aria-disabled={confirmDisabled || undefined}\n aria-describedby={liveRegionId}\n className={confirmButtonVariants()}\n data-testid=\"signature-confirm\"\n >\n {t('signature.confirm')}\n </button>\n </div>\n </div>\n );\n },\n);\n\nSignatureCapture.displayName = 'SignatureCapture';\n\nexport {\n wrapperVariants as signatureWrapperVariants,\n actionButtonVariants as signatureActionButtonVariants,\n confirmButtonVariants as signatureConfirmButtonVariants,\n};\n"],"names":["signatureCaptureAgent","handle","wrapperVariants","cva","padFrameVariants","canvasVariants","toolbarVariants","actionButtonVariants","confirmButtonVariants","typedInputVariants","typedPreviewVariants","resolveCssVar","name","toCssSize","v","fallback","parsePxValue","toHex","bytes","out","i","b","base64ToBytes","b64","bin","g","sha256Hex","_a","copy","digest","renderTypedSignatureToCanvas","text","cssWidth","cssHeight","penColor","backgroundColor","dpr","canvas","ctx","SignatureCapture","forwardRef","id","onConfirm","onClear","onStart","width","height","allowTypedFallback","disabled","ariaLabel","className","ref","t","useTranslation","rawId","useId","liveRegionId","useMemo","wrapperRef","useRef","padFrameRef","canvasRef","typedPreviewRef","signaturePadRef","mode","setMode","useState","typedValue","setTypedValue","boundValue","setBoundValue","padHasInk","setPadHasInk","signatureStateRef","announcement","setAnnouncement","resolvedPen","setResolvedPen","resolvedBg","setResolvedBg","onStartRef","onClearRef","onConfirmRef","useEffect","announce","useCallback","next","resolveAll","pen","bg","mo","pad","SignaturePad","handleBegin","handleEnd","scaleCanvas","MAX_CANVAS_PX","rect","rawWidth","rawHeight","targetWidth","targetHeight","prior","ro","clear","undo","data","isEmpty","confirm","widthParsed","heightParsed","measureEl","measuredRect","pngDataUrl","svgString","strokes","value","safeText","widthMm","heightMm","capturedAt","sha256","commaIx","payload","agentHandle","useImperativeHandle","useAgentRegistration","hasContent","confirmDisabled","sizeStyle","jsxs","jsx","m"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider-BHWzXdjt.js","sources":["../../src/components/slider/slider.agent.ts","../../src/components/slider/slider.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Slider. */\n/* */\n/* Slider supports both single-thumb and dual-thumb (range) operation. */\n/* Capabilities cover both — the runtime distinguishes them via the */\n/* value tuple length. See `src/docs/26-agent-readiness.mdx`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SliderHandle } from './slider';\n\nexport const sliderAgent: AgentAdapter<SliderHandle> = {\n id: 'slider',\n capabilities: ['pick', 'range_pick'],\n state: {\n value: {\n type: 'number[]',\n descriptionKey: 'ui.agent.slider.state.value',\n description:\n 'Current thumb values; length 1 for a single slider, length 2 for a range.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: number[] }',\n descriptionKey: 'ui.agent.slider.actions.setValue',\n description:\n 'Replace the thumb value(s). Pass a 1-tuple for single, 2-tuple for range.',\n invoke: (handle, args: { value: number[] }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'slider',\n description: 'Marks the Slider root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type KeyboardEvent,\n} from 'react';\nimport { useAgentRegistration } from '../../agent';\nimport { sliderAgent } from './slider.agent';\n\n/** Agent-readiness curated handle for Slider. */\nexport interface SliderHandle {\n getValue: () => number[];\n setValue: (value: number[]) => void;\n}\nimport * as RadixSlider from '@radix-ui/react-slider';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useContext } from 'react';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\n\nexport interface SliderMark {\n value: number;\n label?: string;\n}\n\nconst sliderVariants = cva(\n [\n 'ds:relative ds:flex ds:touch-none ds:select-none ds:items-center',\n 'ds:data-[orientation=horizontal]:w-full',\n 'ds:data-[orientation=vertical]:flex-col ds:data-[orientation=vertical]:h-full',\n 'ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:data-[orientation=horizontal]:h-1 ds:data-[orientation=vertical]:w-1',\n md: 'ds:data-[orientation=horizontal]:h-2 ds:data-[orientation=vertical]:w-2',\n lg: 'ds:data-[orientation=horizontal]:h-3 ds:data-[orientation=vertical]:w-3',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst trackVariants = cva(\n [\n 'ds:relative ds:grow ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted',\n 'ds:data-[orientation=horizontal]:h-full',\n 'ds:data-[orientation=vertical]:w-full',\n ].join(' '),\n);\n\nconst rangeVariants = cva(\n [\n 'ds:absolute ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:data-[orientation=horizontal]:h-full',\n 'ds:data-[orientation=vertical]:w-full',\n ].join(' '),\n);\n\nconst thumbVariants = cva(\n [\n 'ds:group/thumb',\n 'ds:relative ds:block ds:rounded-full',\n 'ds:bg-background ds:border-2 ds:border-primary ds:shadow-[var(--shadow-sm)]',\n 'ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:outline-none',\n 'ds:focus-visible:shadow-[var(--shadow-focus),var(--shadow-sm)]',\n 'ds:active:shadow-[var(--shadow-sm)]',\n 'ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:size-4',\n md: 'ds:size-5',\n lg: 'ds:size-6',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst hitAreaVariants = cva('ds:absolute ds:rounded-full', {\n variants: {\n size: {\n sm: 'ds:-inset-[calc((var(--min-target-size)-1rem)/2)]',\n md: 'ds:-inset-[calc((var(--min-target-size)-1.25rem)/2)]',\n lg: 'ds:-inset-[calc((var(--min-target-size)-1.5rem)/2)]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst tooltipWrapperVariants = cva(\n 'ds:absolute ds:flex ds:pointer-events-none ds:items-center ds:justify-center',\n {\n variants: {\n orientation: {\n horizontal: 'ds:start-0 ds:end-0 ds:bottom-full',\n vertical: 'ds:top-0 ds:bottom-0 ds:start-full',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n },\n);\n\nconst tooltipBubbleVariants = cva(\n [\n 'ds:whitespace-nowrap ds:bg-foreground ds:text-background',\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:text-[length:var(--font-size-xs)] ds:tabular-nums',\n 'ds:shadow-[var(--shadow-sm)]',\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n orientation: {\n horizontal: 'ds:mb-[var(--spacing-xs)]',\n vertical: 'ds:ms-[var(--spacing-xs)]',\n },\n alwaysShow: {\n true: 'ds:opacity-100',\n false:\n 'ds:opacity-0 ds:group-hover/thumb:opacity-100 ds:group-focus-visible/thumb:opacity-100',\n },\n },\n defaultVariants: { orientation: 'horizontal', alwaysShow: false },\n },\n);\n\nconst marksContainerVariants = cva('ds:absolute ds:pointer-events-none', {\n variants: {\n orientation: {\n horizontal: 'ds:start-0 ds:end-0 ds:top-full',\n vertical: 'ds:top-0 ds:bottom-0 ds:start-full',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst markVariants = cva('ds:absolute ds:flex ds:items-center', {\n variants: {\n orientation: {\n horizontal: 'ds:flex-col ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n vertical: 'ds:flex-row ds:-translate-y-1/2 ds:ps-[var(--spacing-xs)]',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst tickVariants = cva('ds:bg-border', {\n variants: {\n orientation: {\n horizontal: 'ds:w-px ds:h-1',\n vertical: 'ds:h-px ds:w-1',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst markLabelVariants = cva(\n 'ds:text-muted-foreground type-meta ds:mt-[var(--spacing-xs)]',\n);\n\nconst endpointWrapperVariants = cva(\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n orientation: {\n horizontal: 'ds:w-full ds:flex-row',\n vertical: 'ds:h-full ds:flex-col-reverse',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n },\n);\n\nconst endpointLabelVariants = cva(\n 'ds:text-muted-foreground type-meta ds:tabular-nums ds:shrink-0',\n);\n\ntype RadixSliderRootProps = ComponentPropsWithoutRef<typeof RadixSlider.Root>;\n\nexport interface SliderProps\n extends\n Omit<RadixSliderRootProps, 'children'>,\n VariantProps<typeof sliderVariants> {\n value?: number[];\n defaultValue?: number[];\n marks?: SliderMark[];\n minLabel?: string;\n maxLabel?: string;\n formatValue?: (value: number) => string;\n alwaysShowValue?: boolean;\n step?: number;\n largeStep?: number;\n thumbLabels?: string[];\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n onValueChange?: (value: number[]) => void;\n onValueCommit?: (value: number[]) => void;\n className?: string;\n}\n\nexport const Slider = forwardRef<\n ElementRef<typeof RadixSlider.Root>,\n SliderProps\n>((props, ref) => {\n const {\n value,\n defaultValue,\n marks,\n minLabel,\n maxLabel,\n formatValue,\n alwaysShowValue = false,\n step = 1,\n largeStep = 10,\n thumbLabels,\n size = 'md',\n orientation = 'horizontal',\n min = 0,\n max = 100,\n disabled,\n dir,\n id,\n className,\n onValueChange,\n onValueCommit,\n onKeyDown,\n ...rest\n } = props;\n\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n // We only want to point `aria-labelledby` at the FormField label when one\n // actually exists — outside a `<FormField>` `useFormField()` returns a\n // synthesised fallback whose label element won't be in the DOM.\n const insideFormField = useContext(FormFieldContext) !== null;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<number[]>(\n value ?? defaultValue ?? [min],\n );\n const currentValue: number[] = isControlled\n ? (value as number[])\n : internalValue;\n\n const handleValueChange = (next: number[]) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const describedBy = ctx.describedBy || undefined;\n const sliderId = id ?? ctx.id;\n\n const defaultFormat = useCallback(\n (n: number) => new Intl.NumberFormat(i18n.language).format(n),\n [i18n.language],\n );\n const format = formatValue ?? defaultFormat;\n\n const defaultMinThumbLabel = t('inputs.slider.minLabel', 'Minimum');\n const defaultMaxThumbLabel = t('inputs.slider.maxLabel', 'Maximum');\n // Root's `aria-label` is the user-facing slider name (e.g. \"Hue\").\n // Radix puts `role=\"slider\"` on the Thumb, not the Root, so axe's\n // aria-input-field-name rule looks at the Thumb. Surface the Root's\n // label on the single-thumb case when no thumbLabels override is given.\n const rootAriaLabel = (rest as { 'aria-label'?: string })['aria-label'];\n\n const labelForThumb = (i: number): string | undefined => {\n if (thumbLabels?.[i]) return thumbLabels[i];\n if (currentValue.length === 2) {\n return i === 0 ? defaultMinThumbLabel : defaultMaxThumbLabel;\n }\n return rootAriaLabel;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (effectiveDisabled) return;\n if (event.key !== 'PageUp' && event.key !== 'PageDown') return;\n\n event.preventDefault();\n const thumbs = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>('[role=\"slider\"]'),\n );\n const activeIndex = Math.max(\n 0,\n thumbs.indexOf(document.activeElement as HTMLElement),\n );\n const delta = event.key === 'PageUp' ? largeStep : -largeStep;\n const next = currentValue.map((v, i) =>\n i === activeIndex ? Math.max(min, Math.min(max, v + delta)) : v,\n );\n handleValueChange(next);\n onValueCommit?.(next);\n };\n\n const denom = max - min || 1;\n const percentFor = (n: number) => ((n - min) / denom) * 100;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const autoDir = useDirection(rootRef);\n\n const currentValueRef = useRef<number[]>(currentValue);\n currentValueRef.current = currentValue;\n\n const agentHandle = useMemo<SliderHandle>(\n () => ({\n getValue: () => currentValueRef.current.slice(),\n setValue: (next) => {\n handleValueChange(next);\n onValueCommit?.(next);\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, onValueChange, onValueCommit],\n );\n useAgentRegistration(sliderAgent, agentHandle, id);\n\n const root = (\n <RadixSlider.Root\n ref={composedRef}\n id={sliderId}\n dir={dir ?? autoDir}\n orientation={orientation}\n min={min}\n max={max}\n step={step}\n disabled={effectiveDisabled}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? [min]) : undefined}\n onValueChange={handleValueChange}\n onValueCommit={onValueCommit}\n onKeyDown={handleKeyDown}\n aria-describedby={describedBy}\n aria-invalid={ctx.invalid || undefined}\n aria-required={ctx.required || undefined}\n className={sliderVariants({ size, className })}\n data-component=\"slider\"\n data-component-id={id}\n {...rest}\n // Strip aria-label off the Root span — Radix puts `role=\"slider\"`\n // on the Thumb, so the label belongs there (see `labelForThumb`).\n // Carrying aria-label on both the Root and the Thumb produces\n // duplicate matches under accessible-name queries.\n aria-label={undefined}\n >\n <RadixSlider.Track className={trackVariants()}>\n <RadixSlider.Range className={rangeVariants()} />\n </RadixSlider.Track>\n {marks && marks.length > 0 ? (\n <span\n aria-hidden=\"true\"\n className={marksContainerVariants({ orientation })}\n >\n {marks.map((m) => {\n const p = percentFor(m.value);\n const positionStyle: CSSProperties =\n orientation === 'vertical'\n ? { insetBlockEnd: `${p}%` }\n : { insetInlineStart: `${p}%` };\n return (\n <span\n key={`${m.value}-${m.label ?? ''}`}\n className={markVariants({ orientation })}\n // eslint-disable-next-line react/forbid-dom-props -- runtime-computed slider mark position\n style={positionStyle}\n >\n <span className={tickVariants({ orientation })} />\n {m.label ? (\n <span className={markLabelVariants()}>{m.label}</span>\n ) : null}\n </span>\n );\n })}\n </span>\n ) : null}\n {currentValue.map((v, i) => {\n const explicitLabel = labelForThumb(i);\n // Fall back to the FormField label when no explicit thumb label is\n // provided — axe's aria-input-field-name rule fires on every\n // role=\"slider\" element that lacks an accessible name. Outside of a\n // FormField, fall back to a generic localized label so axe is\n // satisfied for standalone usage too.\n const labelledById =\n !explicitLabel && insideFormField ? `${ctx.id}-label` : undefined;\n const fallbackLabel =\n !explicitLabel && !labelledById\n ? t('inputs.slider.value', 'Value')\n : undefined;\n return (\n <RadixSlider.Thumb\n key={i}\n aria-label={explicitLabel ?? fallbackLabel}\n aria-labelledby={labelledById}\n aria-valuetext={format(v)}\n // The thumb is the focusable element — assistive tech reads its\n // aria-describedby / aria-invalid when the user tabs onto it, not\n // the parent Root's. Propagate FormField context to each thumb.\n aria-describedby={describedBy}\n aria-invalid={ctx.invalid || undefined}\n className={thumbVariants({ size })}\n >\n <span aria-hidden=\"true\" className={hitAreaVariants({ size })} />\n <span\n aria-hidden=\"true\"\n className={tooltipWrapperVariants({ orientation })}\n >\n <span\n className={tooltipBubbleVariants({\n orientation,\n alwaysShow: alwaysShowValue,\n })}\n >\n {format(v)}\n </span>\n </span>\n </RadixSlider.Thumb>\n );\n })}\n </RadixSlider.Root>\n );\n\n if (minLabel !== undefined || maxLabel !== undefined) {\n return (\n <div className={endpointWrapperVariants({ orientation })}>\n {minLabel !== undefined ? (\n <span className={endpointLabelVariants()}>{minLabel}</span>\n ) : null}\n {root}\n {maxLabel !== undefined ? (\n <span className={endpointLabelVariants()}>{maxLabel}</span>\n ) : null}\n </div>\n );\n }\n\n return root;\n});\n\nSlider.displayName = 'Slider';\n"],"names":["sliderAgent","handle","args","sliderVariants","cva","trackVariants","rangeVariants","thumbVariants","hitAreaVariants","tooltipWrapperVariants","tooltipBubbleVariants","marksContainerVariants","markVariants","tickVariants","markLabelVariants","endpointWrapperVariants","endpointLabelVariants","Slider","forwardRef","props","ref","value","defaultValue","marks","minLabel","maxLabel","formatValue","alwaysShowValue","step","largeStep","thumbLabels","size","orientation","min","max","disabled","dir","id","className","onValueChange","onValueCommit","onKeyDown","rest","t","i18n","useTranslation","ctx","useFormField","insideFormField","useContext","FormFieldContext","isControlled","internalValue","setInternalValue","useState","currentValue","handleValueChange","next","effectiveDisabled","describedBy","sliderId","defaultFormat","useCallback","n","format","defaultMinThumbLabel","defaultMaxThumbLabel","rootAriaLabel","labelForThumb","i","handleKeyDown","event","thumbs","activeIndex","delta","v","denom","percentFor","rootRef","useRef","composedRef","composeRefs","autoDir","useDirection","currentValueRef","agentHandle","useMemo","useAgentRegistration","root","jsxs","RadixSlider","jsx","m","p","positionStyle","explicitLabel","labelledById","fallbackLabel"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sparkline-DGhCSw8M.js","sources":["../../src/components/sparkline/use-linear-trend.ts","../../src/components/sparkline/sparkline.agent.ts","../../src/components/sparkline/sparkline.tsx"],"sourcesContent":["export type TrendDirection = 'increasing' | 'decreasing' | 'steady';\n\nexport interface LinearTrendResult {\n slope: number;\n direction: TrendDirection;\n}\n\nexport function useLinearTrend(data: number[]): LinearTrendResult {\n if (data.length < 2) {\n return { slope: 0, direction: 'steady' };\n }\n\n const n = data.length;\n const xMean = (n - 1) / 2;\n const yMean = data.reduce((sum, y) => sum + y, 0) / n;\n\n let numerator = 0;\n let denominator = 0;\n\n for (let i = 0; i < n; i++) {\n const dx = i - xMean;\n numerator += dx * (data[i] - yMean);\n denominator += dx * dx;\n }\n\n const slope = denominator === 0 ? 0 : numerator / denominator;\n const range = Math.max(...data) - Math.min(...data);\n const threshold = 0.01 * (range || 1);\n\n const direction: TrendDirection =\n Math.abs(slope) < threshold\n ? 'steady'\n : slope > 0\n ? 'increasing'\n : 'decreasing';\n\n return { slope, direction };\n}\n","import type { AgentAdapter } from '../../agent/types';\nimport type { SparklineHandle } from './sparkline';\n\nexport const sparklineAgent: AgentAdapter<SparklineHandle> = {\n id: 'sparkline',\n capabilities: [],\n state: {},\n actions: {\n update_series: {\n safety: 'read',\n argsType: '{ data: number[] }',\n description: 'Replace the sparkline data without remounting.',\n invoke: (handle, args: { data: number[] }) => {\n handle.updateSeries(args.data);\n },\n },\n export_png: {\n safety: 'read',\n description: 'Return a PNG data URI of the sparkline.',\n invoke: (handle) => handle.dataURI(),\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'sparkline' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport ReactApexChart from 'react-apexcharts';\nimport ApexCharts from 'apexcharts';\nimport { getApexChartsTheme } from '../../tokens/apexcharts-theme';\nimport { useNeutraliseHiddenFocus } from '../_shared/use-neutralize-hidden-focus';\nimport { useLinearTrend } from './use-linear-trend';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { sparklineAgent } from './sparkline.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst sparklineVariants = cva('ds:relative ds:inline-block ds:w-full', {\n variants: {\n size: {\n xs: 'ds:h-6',\n sm: 'ds:h-8',\n md: 'ds:h-10',\n // Applied when an explicit `height` prop is given: the wrapper\n // grows with the svg instead of clipping at the size's fixed height.\n auto: '',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst DIRECTION_ARROW = {\n increasing: '↑',\n decreasing: '↓',\n steady: '→',\n} as const;\n\nconst SIZE_HEIGHT: Record<'xs' | 'sm' | 'md', number> = {\n xs: 24,\n sm: 32,\n md: 40,\n};\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SparklineHandle {\n updateSeries: (data: number[]) => void;\n updateOptions: (opts: ApexCharts.ApexOptions) => void;\n dataURI: () => Promise<string>;\n}\n\nexport interface SparklineProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children'>,\n VariantProps<typeof sparklineVariants> {\n /** Array of numeric data points */\n data: number[];\n /** Chart visual style */\n variant?: 'line' | 'bar' | 'area';\n /** Size preset */\n size?: 'xs' | 'sm' | 'md';\n /** Accessible label prefix, e.g. \"Revenue, 30 days\" */\n label?: string;\n /** Stroke / bar colour override — defaults to var(--primary) via bridge */\n color?: string;\n /** Show end-point dot with trend direction arrow */\n showEndpoint?: boolean;\n /**\n * Show Apex's hover tooltip with the data point value. Defaults to\n * `false` — sparklines are intentionally minimal — opt in when the\n * sparkline is large enough to be a primary metric surface (e.g.\n * dashboard widgets) and the user benefits from per-point readout.\n */\n showTooltip?: boolean;\n /** Width override — defaults to 100% of container */\n width?: string | number;\n /** Height override — defaults to the size variant height */\n height?: string | number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Sparkline component */\n/* ------------------------------------------------------------------ */\n\nexport const Sparkline = forwardRef<SparklineHandle, SparklineProps>(\n (\n {\n id,\n data,\n variant = 'line',\n size = 'md',\n label,\n color,\n showEndpoint = false,\n showTooltip = false,\n width,\n height,\n className,\n ...props\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const rawId = useId();\n const chartId = useMemo(\n () => `sparkline-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n\n const { direction } = useLinearTrend(data);\n\n /* ---- accessible summary ---------------------------------------- */\n const ariaLabel = useMemo(() => {\n if (data.length === 0) {\n return t('sparkline.noData', 'No data');\n }\n const fmt = (n: number) => new Intl.NumberFormat(i18n.language).format(n);\n const dirText = t(`sparkline.direction.${direction}`);\n const nums = {\n min: fmt(Math.min(...data)),\n max: fmt(Math.max(...data)),\n current: fmt(data[data.length - 1]),\n direction: dirText,\n };\n if (label) {\n return t('sparkline.summary', { label, ...nums });\n }\n return t('sparkline.summaryNoLabel', nums);\n }, [data, label, direction, i18n.language, t]);\n\n /* ---- theme-reactive state -------------------------------------- */\n const [themeOptions, setThemeOptions] = useState<ApexCharts.ApexOptions>(\n () => {\n try {\n return getApexChartsTheme();\n } catch {\n return {};\n }\n },\n );\n\n /* ---- MutationObserver: re-read theme on class change ----------- */\n useEffect(() => {\n let timer: ReturnType<typeof setTimeout>;\n const observer = new MutationObserver(() => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n try {\n setThemeOptions(getApexChartsTheme());\n } catch {\n /* no-op in non-browser environments */\n }\n }, 50);\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n return () => {\n clearTimeout(timer);\n observer.disconnect();\n };\n }, []);\n\n /* ---- ResizeObserver: track container width -------------------- */\n useEffect(() => {\n const el = wrapperRef.current;\n if (!el) return;\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) setContainerWidth(Math.floor(entry.contentRect.width));\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n /* ApexCharts injects focusable canvases inside the `aria-hidden` */\n /* chart wrapper. Neutralise their tabindex so axe's */\n /* `aria-hidden-focus` rule passes. Shared hook — same fix in */\n /* `Chart` (full apex) and the calendar's mirror events. */\n useNeutraliseHiddenFocus(wrapperRef);\n\n /* ---- imperative handle ---------------------------------------- */\n const agentHandle = useMemo<SparklineHandle>(\n () => ({\n updateSeries(newData: number[]) {\n ApexCharts.getChartByID(chartId)?.updateSeries([{ data: newData }]);\n },\n updateOptions(opts: ApexCharts.ApexOptions) {\n ApexCharts.getChartByID(chartId)?.updateOptions(opts);\n },\n async dataURI(): Promise<string> {\n const instance = ApexCharts.getChartByID(chartId);\n if (!instance) return '';\n const result = await instance.dataURI();\n return (result as { imgURI: string }).imgURI;\n },\n }),\n [chartId],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(sparklineAgent, agentHandle, id);\n\n /* ---- resolve color -------------------------------------------- */\n const resolvedColor = color ?? themeOptions.colors?.[0] ?? 'currentColor';\n\n /* ---- empty state ---------------------------------------------- */\n if (data.length === 0) {\n return (\n <div\n ref={wrapperRef}\n role=\"img\"\n aria-label={ariaLabel}\n dir=\"ltr\"\n className={sparklineVariants({\n size: height !== undefined ? 'auto' : size,\n className,\n })}\n {...props}\n />\n );\n }\n\n /* ---- chart config ---------------------------------------------- */\n const reducedMotion = prefersReducedMotion();\n\n const chartOptions: ApexCharts.ApexOptions = {\n ...themeOptions,\n chart: {\n ...themeOptions.chart,\n id: chartId,\n type: variant,\n sparkline: { enabled: true },\n toolbar: { show: false },\n animations: {\n enabled: !reducedMotion,\n dynamicAnimation: { enabled: !reducedMotion },\n },\n zoom: { enabled: false },\n parentHeightOffset: 0,\n },\n colors: [resolvedColor],\n stroke: {\n curve: 'smooth',\n width: variant === 'bar' ? 0 : 2,\n },\n fill: {\n opacity: variant === 'area' ? 0.15 : 1,\n },\n xaxis: {\n crosshairs: { show: false },\n },\n tooltip: { enabled: showTooltip },\n markers: showEndpoint\n ? {\n size: [0],\n discrete: [\n {\n seriesIndex: 0,\n dataPointIndex: data.length - 1,\n fillColor: resolvedColor,\n strokeColor: resolvedColor,\n size: 4,\n },\n ],\n }\n : { size: 0 },\n grid: {\n ...themeOptions.grid,\n show: false,\n // ApexCharts grid.padding uses physical keys (not CSS logical properties).\n // The chart wrapper enforces dir=\"ltr\" so these always resolve correctly.\n padding: { top: 2, right: 2, bottom: 2, left: 2 },\n },\n };\n\n const resolvedWidth =\n width ?? (containerWidth > 0 ? containerWidth : '100%');\n const resolvedHeight = height ?? SIZE_HEIGHT[size ?? 'md'];\n\n return (\n <div\n ref={wrapperRef}\n role=\"img\"\n aria-label={ariaLabel}\n dir=\"ltr\"\n className={sparklineVariants({\n size: height !== undefined ? 'auto' : size,\n className,\n })}\n data-component=\"sparkline\"\n data-component-id={id}\n {...props}\n >\n <ReactApexChart\n type={variant}\n series={[{ data }]}\n options={chartOptions}\n width={resolvedWidth}\n height={resolvedHeight}\n aria-hidden=\"true\"\n />\n {showEndpoint && (\n <span\n aria-hidden=\"true\"\n className=\"ds:pointer-events-none ds:absolute ds:end-0 ds:top-0 ds:text-[length:var(--font-size-xs)] ds:leading-none\"\n >\n {DIRECTION_ARROW[direction]}\n </span>\n )}\n </div>\n );\n },\n);\n\nSparkline.displayName = 'Sparkline';\n"],"names":["useLinearTrend","data","n","xMean","yMean","sum","y","numerator","denominator","i","dx","slope","threshold","direction","sparklineAgent","handle","args","sparklineVariants","cva","DIRECTION_ARROW","SIZE_HEIGHT","prefersReducedMotion","Sparkline","forwardRef","id","variant","size","label","color","showEndpoint","showTooltip","width","height","className","props","ref","t","i18n","useTranslation","rawId","useId","chartId","useMemo","wrapperRef","useRef","containerWidth","setContainerWidth","useState","ariaLabel","fmt","dirText","nums","themeOptions","setThemeOptions","getApexChartsTheme","useEffect","timer","observer","el","ro","entries","entry","useNeutraliseHiddenFocus","agentHandle","newData","_a","ApexCharts","opts","instance","useImperativeHandle","useAgentRegistration","resolvedColor","jsx","reducedMotion","chartOptions","resolvedWidth","resolvedHeight","jsxs","ReactApexChart"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stepper-accordion-Dki6r9ZE.js","sources":["../../node_modules/lucide-react/dist/esm/icons/lock.js","../../src/components/_shared/stepper.ts","../../src/components/stepper-accordion/stepper-accordion.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","// Shared types + state machine for the two stepper variants:\n// - src/components/stepper-progress (lightweight progress bar + caption)\n// - src/components/stepper-accordion (vertical disclosure wizard)\n//\n// Both components consume `StepSpec` and the `stateForStep` helper so the\n// four-state machine (upcoming | current | completed | error) stays in one\n// place. Rename or removal is a MAJOR per src/docs/13-maintainability.mdx.\n\nexport type StepStatus = 'completed' | 'error';\n\nexport type StepState = 'upcoming' | 'current' | 'completed' | 'error';\n\nexport interface StepSpec {\n /** Visible step label — comes from the consumer, already translated. */\n label: string;\n /** Optional secondary line (kept short; shown in accordion + progress captions). */\n description?: string;\n /**\n * Consumer-explicit status override. `error` always wins; `completed` is\n * honoured only for steps at or beyond the active index so the active step\n * always keeps `current` (otherwise a consumer pre-setting `completed` on\n * every step would silently mask the current position).\n */\n status?: StepStatus;\n}\n\nexport function stateForStep(\n index: number,\n activeStep: number,\n status?: StepStatus,\n): StepState {\n if (status === 'error') return 'error';\n if (index === activeStep) return 'current';\n if (status === 'completed') return 'completed';\n if (index < activeStep) return 'completed';\n return 'upcoming';\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronDown, Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport {\n stateForStep,\n type StepSpec,\n type StepState,\n} from '../_shared/stepper';\n\n/* -------------------------------------------------------------------- */\n/* StepperAccordion */\n/* */\n/* Vertical disclosure wizard. The current step is expanded inline; */\n/* completed steps collapse to a one-line summary with an \"Edit\" hint */\n/* that re-opens them; upcoming steps are locked. Built on Radix */\n/* Accordion in controlled-single mode with collapsible=false so the */\n/* current panel always stays open. */\n/* -------------------------------------------------------------------- */\n\nconst STEP_VALUE_PREFIX = 'step-';\nconst makeValue = (index: number) => `${STEP_VALUE_PREFIX}${index}`;\nconst indexFromValue = (value: string): number =>\n Number(value.slice(STEP_VALUE_PREFIX.length));\n\n/* -------------------------------------------------------------------- */\n/* Indicator — shared with progress bar visual tone but sized for the */\n/* vertical wizard's dense header row. */\n/* -------------------------------------------------------------------- */\n\nconst iconDrawClasses = [\n 'ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]',\n 'ds:animate-[stepper-icon-draw_var(--animation-duration)_var(--ease-out)_forwards]',\n 'ds:motion-reduce:animate-none ds:motion-reduce:[stroke-dashoffset:0]',\n].join(' ');\n\nfunction CheckGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className=\"ds:size-4\"\n >\n <path pathLength=\"1\" d=\"M5 12l5 5L20 7\" className={iconDrawClasses} />\n </svg>\n );\n}\n\nfunction CrossGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className=\"ds:size-4\"\n >\n <path pathLength=\"1\" d=\"M6 6l12 12\" className={iconDrawClasses} />\n <path pathLength=\"1\" d=\"M18 6l-12 12\" className={iconDrawClasses} />\n </svg>\n );\n}\n\nconst indicatorClasses = [\n 'ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center',\n 'ds:min-w-[var(--min-target-size)] ds:min-h-[var(--min-target-size)]',\n 'ds:size-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:text-[var(--font-size-sm)] ds:font-[var(--font-weight-semibold)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:transition-[background-color,border-color,color]',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n].join(' ');\n\nconst indicatorVariants = cva(indicatorClasses, {\n variants: {\n state: {\n upcoming: 'ds:bg-[var(--background)] ds:text-[var(--muted-foreground)]',\n current: [\n 'ds:border-[var(--primary)] ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:animate-[stepper-indicator-pop_var(--animation-duration)_var(--ease-out)_both]',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n completed:\n 'ds:border-[var(--primary)] ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n error: [\n 'ds:border-[var(--destructive)] ds:bg-[var(--destructive)] ds:text-[var(--destructive-foreground)]',\n 'ds:animate-[stepper-indicator-pop_var(--animation-duration)_var(--ease-out)_both]',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n },\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* Item / trigger / content variants */\n/* -------------------------------------------------------------------- */\n\nconst itemVariants = cva(\n [\n 'ds:group/item ds:overflow-hidden ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2 ds:bg-[var(--card)]',\n 'ds:data-[state=open]:border-[var(--primary)]',\n 'ds:transition-[border-color] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n tone: {\n neutral: '',\n error: 'ds:data-[state=open]:border-[var(--destructive)]',\n },\n },\n defaultVariants: { tone: 'neutral' },\n },\n);\n\nconst triggerClasses = [\n 'ds:flex ds:w-full ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:text-start',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed',\n 'ds:transition-[background-color] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n 'ds:hover:enabled:bg-[var(--muted)]/40',\n].join(' ');\n\nconst labelClasses = (state: StepState) =>\n [\n 'type-body-sm',\n state === 'current' || state === 'error'\n ? 'ds:font-[var(--font-weight-semibold)] ds:text-[var(--foreground)]'\n : state === 'completed'\n ? 'ds:text-[var(--foreground)]'\n : 'ds:text-[var(--muted-foreground)]',\n ].join(' ');\n\nconst descriptionClasses = [\n 'type-meta ds:text-[var(--muted-foreground)]',\n 'ds:mt-[var(--spacing-xs)]',\n].join(' ');\n\nconst hintClasses = [\n 'type-meta',\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:text-[var(--muted-foreground)]',\n].join(' ');\n\nconst chevronClasses = [\n 'ds:size-4 ds:shrink-0 ds:text-[var(--muted-foreground)]',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n 'ds:group-data-[state=open]/item:rotate-180',\n].join(' ');\n\nconst summaryClasses = [\n 'type-meta ds:text-[var(--muted-foreground)]',\n 'ds:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]',\n 'ds:pe-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]',\n 'ds:group-data-[state=open]/item:hidden',\n].join(' ');\n\nconst contentClasses = [\n 'ds:overflow-hidden',\n 'ds:data-[state=open]:animate-[accordion-down_var(--animation-duration)_var(--ease-out)]',\n 'ds:data-[state=closed]:animate-[accordion-up_var(--animation-duration)_var(--ease-in)]',\n].join(' ');\n\nconst contentInnerClasses = [\n 'ds:ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]',\n 'ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-md)]',\n].join(' ');\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface AccordionStepSpec extends StepSpec {\n /** Form content rendered inside the expanded panel. */\n content: ReactNode;\n /**\n * One-line summary shown under the header when the step is completed\n * and its panel is collapsed. Typically a preview of the captured\n * data — \"Mario Rossi · 12/03/1985\".\n */\n summary?: ReactNode;\n}\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]', {\n variants: {},\n});\n\nexport interface StepperAccordionProps\n extends\n Omit<\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>,\n 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'collapsible'\n >,\n VariantProps<typeof rootVariants> {\n /** Active step (0-indexed). The matching panel is the one that is open. */\n activeStep: number;\n /** Step specs — each one provides its own content + optional summary. */\n steps: AccordionStepSpec[];\n /**\n * Fires when the user re-opens a completed step. Upcoming steps cannot\n * be activated — their triggers are disabled. The current step cannot\n * be collapsed (Radix `collapsible=false`).\n */\n onStepChange?: (index: number) => void;\n /** Override the default `aria-label` on the list wrapper. */\n 'aria-label'?: string;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n}\n\n/**\n * Imperative handle for agent-readiness. Routes state mutations through\n * the consumer's `onStepChange`, never mutating directly.\n */\nexport interface StepperAccordionHandle {\n getCurrentStep: () => number;\n getTotalSteps: () => number;\n /** Indices of currently-open panels — singleton under Radix `type=\"single\"`. */\n getOpenSteps: () => number[];\n gotoStep: (step: number) => void;\n next: () => void;\n previous: () => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nconst StepperAccordion = forwardRef<\n StepperAccordionHandle,\n StepperAccordionProps\n>(\n (\n {\n activeStep,\n steps,\n onStepChange,\n 'aria-label': ariaLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const total = steps.length;\n const clampedActive = Math.max(0, Math.min(activeStep, total - 1));\n const label = ariaLabel ?? t('navigation.stepper.label');\n const editCopy = t('navigation.stepper.edit');\n const lockedCopy = t('navigation.stepper.locked');\n const completedCopy = t('navigation.stepper.completed');\n const errorCopy = t('navigation.stepper.error');\n\n const handleValueChange = (value: string) => {\n // `collapsible=false` prevents empty-string values in practice, but the\n // primitive's type still allows one — guard anyway.\n if (!value) return;\n const index = indexFromValue(value);\n if (Number.isFinite(index) && index !== clampedActive) {\n onStepChange?.(index);\n }\n };\n\n const handle = useMemo<StepperAccordionHandle>(\n () => ({\n getCurrentStep: () => clampedActive,\n getTotalSteps: () => total,\n getOpenSteps: () => [clampedActive],\n gotoStep: (step: number) => {\n if (!onStepChange) return;\n const clamped = Math.max(0, Math.min(step, Math.max(total - 1, 0)));\n if (clamped !== clampedActive) onStepChange(clamped);\n },\n next: () => {\n if (!onStepChange) return;\n if (clampedActive < total - 1) onStepChange(clampedActive + 1);\n },\n previous: () => {\n if (!onStepChange) return;\n if (clampedActive > 0) onStepChange(clampedActive - 1);\n },\n }),\n [clampedActive, total, onStepChange],\n );\n useImperativeHandle(ref, () => handle, [handle]);\n\n return (\n <AccordionPrimitive.Root\n type=\"single\"\n value={makeValue(clampedActive)}\n onValueChange={handleValueChange}\n collapsible={false}\n aria-label={label}\n id={id}\n data-component=\"stepper-accordion\"\n data-component-id={id}\n className={rootVariants({ className })}\n {...rest}\n >\n {steps.map((spec, index) => {\n const state = stateForStep(index, clampedActive, spec.status);\n const isCurrent = state === 'current' || state === 'error';\n const isUpcoming = state === 'upcoming';\n const itemTone = state === 'error' ? 'error' : 'neutral';\n const stepN = t('navigation.stepper.stepN', { n: index + 1 });\n\n const indicatorContent = (() => {\n if (state === 'completed') {\n return (\n <>\n <CheckGlyph />\n <span className=\"ds:sr-only\">{completedCopy}</span>\n </>\n );\n }\n if (state === 'error') {\n return (\n <>\n <CrossGlyph />\n <span className=\"ds:sr-only\">{errorCopy}</span>\n </>\n );\n }\n return <span>{index + 1}</span>;\n })();\n\n const hint = (() => {\n if (state === 'completed') {\n return <span className={hintClasses}>{editCopy}</span>;\n }\n if (state === 'upcoming') {\n return (\n <span className={hintClasses}>\n <Lock aria-hidden=\"true\" className=\"ds:size-3\" />\n {lockedCopy}\n </span>\n );\n }\n return null;\n })();\n\n return (\n <AccordionPrimitive.Item\n key={index}\n value={makeValue(index)}\n data-step-id={String(index)}\n className={itemVariants({ tone: itemTone })}\n >\n <AccordionPrimitive.Header className=\"ds:flex\">\n <AccordionPrimitive.Trigger\n // Upcoming steps are *HTML*-disabled — they must not be\n // reachable by Tab or by Radix's arrow-key navigation ring\n // (Radix filters `item.ref.current?.disabled`, which is\n // the HTML attribute). Current is only *ARIA*-disabled so\n // keyboard users can Tab to it as a heading anchor and\n // hear \"current step\"; Radix's `collapsible=false` makes\n // the click a no-op regardless. Setting `disabled` at the\n // Trigger rather than the Item because `...triggerProps`\n // spreads after Collapsible writes its own `disabled`\n // from context, so the Item-level disabled gets overridden.\n disabled={isUpcoming}\n aria-disabled={isCurrent || undefined}\n aria-label={\n state === 'completed' ? `${stepN}, ${editCopy}` : stepN\n }\n aria-current={isCurrent ? 'step' : undefined}\n className={triggerClasses}\n >\n <span\n aria-hidden=\"true\"\n className={indicatorVariants({ state })}\n >\n {indicatorContent}\n </span>\n <span className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col\">\n <span className={labelClasses(state)}>{spec.label}</span>\n {spec.description ? (\n <span className={descriptionClasses}>\n {spec.description}\n </span>\n ) : null}\n </span>\n {hint}\n {isCurrent ? null : (\n <ChevronDown\n aria-hidden=\"true\"\n className={chevronClasses}\n />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n {spec.summary && state === 'completed' ? (\n <div className={summaryClasses}>{spec.summary}</div>\n ) : null}\n <AccordionPrimitive.Content className={contentClasses}>\n <div className={contentInnerClasses}>{spec.content}</div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n );\n })}\n </AccordionPrimitive.Root>\n );\n },\n);\nStepperAccordion.displayName = 'StepperAccordion';\n\nexport { StepperAccordion };\n"],"names":["__iconNode","Lock","createLucideIcon","stateForStep","index","activeStep","status","STEP_VALUE_PREFIX","makeValue","indexFromValue","value","iconDrawClasses","CheckGlyph","jsx","CrossGlyph","jsxs","indicatorClasses","indicatorVariants","cva","itemVariants","triggerClasses","labelClasses","state","descriptionClasses","hintClasses","chevronClasses","summaryClasses","contentClasses","contentInnerClasses","rootVariants","StepperAccordion","forwardRef","steps","onStepChange","ariaLabel","id","className","rest","ref","t","useTranslation","total","clampedActive","label","editCopy","lockedCopy","completedCopy","errorCopy","handleValueChange","handle","useMemo","step","clamped","useImperativeHandle","AccordionPrimitive","spec","isCurrent","isUpcoming","itemTone","stepN","indicatorContent","Fragment","hint","ChevronDown"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stepper-accordion.agent-C4quJ-MD.js","sources":["../../src/components/stepper-accordion/stepper-accordion.agent.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — StepperAccordion. */\n/* */\n/* Vertical disclosure wizard. Exposes the active step, the total step */\n/* count, and the set of currently-open steps (always a singleton under */\n/* Radix `type=\"single\"` but typed as an array for forward-compat). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { StepperAccordionHandle } from './stepper-accordion';\n\nexport const stepperAccordionAgent: AgentAdapter<StepperAccordionHandle> = {\n id: 'stepper-accordion',\n capabilities: ['expand', 'navigate'],\n state: {\n currentStep: {\n type: 'number',\n descriptionKey: 'ui.agent.stepperAccordion.state.currentStep',\n description: 'Zero-indexed active step.',\n read: (handle) => handle.getCurrentStep(),\n },\n totalSteps: {\n type: 'number',\n descriptionKey: 'ui.agent.stepperAccordion.state.totalSteps',\n description: 'Total number of steps in the flow.',\n read: (handle) => handle.getTotalSteps(),\n },\n openSteps: {\n type: 'number[]',\n descriptionKey: 'ui.agent.stepperAccordion.state.openSteps',\n description:\n 'Indices of currently-open step panels (singleton under Radix single mode).',\n read: (handle) => handle.getOpenSteps(),\n },\n },\n actions: {\n goto_step: {\n safety: 'read',\n argsType: '{ step: number }',\n descriptionKey: 'ui.agent.stepperAccordion.actions.gotoStep',\n description:\n 'Activate the given step. Upcoming steps are gated by the consumer’s validation in onStepChange.',\n invoke: (handle, args: { step: number }) => {\n handle.gotoStep(args.step);\n },\n },\n next: {\n safety: 'read',\n descriptionKey: 'ui.agent.stepperAccordion.actions.next',\n description:\n 'Advance to the next step. Subject to the consumer’s onStepChange validation.',\n invoke: (handle) => {\n handle.next();\n },\n },\n previous: {\n safety: 'read',\n descriptionKey: 'ui.agent.stepperAccordion.actions.previous',\n description:\n 'Return to the previous step (re-opens a completed step in edit mode).',\n invoke: (handle) => {\n handle.previous();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'stepper-accordion',\n description: 'Marks the StepperAccordion root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-step-id',\n description:\n 'Stable opaque id of a step (the zero-indexed step number as a string).',\n },\n },\n};\n"],"names":["stepperAccordionAgent","handle","args"],"mappings":"AAWO,MAAMA,IAA8D;AAAA,EACzE,IAAI;AAAA,EACJ,cAAc,CAAC,UAAU,UAAU;AAAA,EACnC,OAAO;AAAA,IACL,aAAa;AAAA,MACX,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,eAAA;AAAA,IAAe;AAAA,IAE1C,YAAY;AAAA,MACV,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,cAAA;AAAA,IAAc;AAAA,IAEzC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,aAAA;AAAA,IAAa;AAAA,EACxC;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,GAAQC,MAA2B;AAC1C,QAAAD,EAAO,SAASC,EAAK,IAAI;AAAA,MAC3B;AAAA,IAAA;AAAA,IAEF,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,KAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,UAAU;AAAA,MACR,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,SAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,IAEf,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stepper-progress-DDjq5nei.js","sources":["../../src/components/stepper-progress/stepper-progress.agent.ts","../../src/components/stepper-progress/stepper-progress.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — StepperProgress. */\n/* */\n/* Pure indicator — the component itself has no internal step-change */\n/* affordance. The adapter exposes the active step + total and forwards */\n/* goto/next/previous to the consumer-supplied onStepChange handler so */\n/* an agent can drive a hosting wizard by step index. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { StepperProgressHandle } from './stepper-progress';\n\nexport const stepperProgressAgent: AgentAdapter<StepperProgressHandle> = {\n id: 'stepper-progress',\n capabilities: ['navigate'],\n state: {\n currentStep: {\n type: 'number',\n descriptionKey: 'ui.agent.stepperProgress.state.currentStep',\n description: 'Zero-indexed active step.',\n read: (handle) => handle.getCurrentStep(),\n },\n totalSteps: {\n type: 'number',\n descriptionKey: 'ui.agent.stepperProgress.state.totalSteps',\n description: 'Total number of steps in the flow.',\n read: (handle) => handle.getTotalSteps(),\n },\n },\n actions: {\n goto_step: {\n safety: 'read',\n argsType: '{ step: number }',\n descriptionKey: 'ui.agent.stepperProgress.actions.gotoStep',\n description:\n 'Request the host to activate the given step via onStepChange. No-op when no handler is wired.',\n invoke: (handle, args: { step: number }) => {\n handle.gotoStep(args.step);\n },\n },\n next: {\n safety: 'read',\n descriptionKey: 'ui.agent.stepperProgress.actions.next',\n description: 'Request the host to advance one step via onStepChange.',\n invoke: (handle) => {\n handle.next();\n },\n },\n previous: {\n safety: 'read',\n descriptionKey: 'ui.agent.stepperProgress.actions.previous',\n description: 'Request the host to retreat one step via onStepChange.',\n invoke: (handle) => {\n handle.previous();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'stepper-progress',\n description: 'Marks the StepperProgress root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport type { StepSpec, StepState } from '../_shared/stepper';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { stepperProgressAgent } from './stepper-progress.agent';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n/* -------------------------------------------------------------------- */\n/* StepperProgress */\n/* */\n/* A lightweight \"Step N of M — {label}\" caption + fill bar. Pure */\n/* indicator — no revisit, no per-step click targets. For flows that */\n/* need editable completed steps, reach for `StepperAccordion`. */\n/* -------------------------------------------------------------------- */\n\ntype Size = 'sm' | 'default';\ntype CaptionPosition = 'top' | 'bottom';\ntype Tone = 'progress' | 'error' | 'complete';\n\nconst rootVariants = cva('ds:flex ds:w-full', {\n variants: {\n captionPosition: {\n top: 'ds:flex-col ds:gap-[var(--spacing-xs)]',\n bottom: 'ds:flex-col-reverse ds:gap-[var(--spacing-xs)]',\n },\n },\n defaultVariants: { captionPosition: 'top' },\n});\n\nconst trackVariants = cva(\n 'ds:relative ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-[var(--muted)]',\n {\n variants: {\n size: {\n sm: 'ds:h-[var(--spacing-xs)]',\n default: 'ds:h-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { size: 'default' },\n },\n);\n\nconst fillVariants = cva(\n [\n 'ds:block ds:h-full ds:rounded-[var(--radius-full)]',\n 'ds:[inline-size:calc(var(--stepper-progress-value,0)*1%)]',\n 'ds:transition-[inline-size,background-color] ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n tone: {\n progress: 'ds:bg-[var(--primary)]',\n error: 'ds:bg-[var(--destructive)]',\n complete: 'ds:bg-[var(--success,var(--primary))]',\n },\n },\n defaultVariants: { tone: 'progress' },\n },\n);\n\nconst captionVariants = cva(\n 'ds:flex ds:items-baseline ds:gap-[var(--spacing-sm)] ds:flex-wrap',\n {\n variants: {\n tone: {\n progress: 'ds:text-[var(--foreground)]',\n error: 'ds:text-[var(--destructive)]',\n complete: 'ds:text-[var(--foreground)]',\n },\n },\n defaultVariants: { tone: 'progress' },\n },\n);\n\nexport interface StepperProgressProps\n extends\n Omit<ComponentPropsWithoutRef<'div'>, 'aria-label'>,\n VariantProps<typeof trackVariants>,\n VariantProps<typeof rootVariants> {\n /** Active step (0-indexed). */\n activeStep: number;\n /** Step specs — `label` is used in the caption for the active step. */\n steps: StepSpec[];\n /** Override the default `aria-label` on the progressbar. */\n 'aria-label'?: string;\n /** Hide the \"Step N of M — label\" caption. @default false */\n hideCaption?: boolean;\n /** Track size. @default 'default' */\n size?: Size;\n /** Caption position relative to the bar. @default 'top' */\n captionPosition?: CaptionPosition;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n /**\n * Called when an external driver (agent adapter) requests a step change.\n * StepperProgress is a pure indicator and does not own step state itself\n * — this hook lets a host wizard react to agent-driven navigation.\n */\n onStepChange?: (next: number) => void;\n}\n\n/**\n * Imperative handle for agent-readiness. Exposed via `ref`.\n *\n * The handle is the surface the future MCP UI bridge invokes through the\n * runtime registry. Methods are pure functions of the current props +\n * internal state; mutations route through the consumer's `onStepChange`.\n */\nexport interface StepperProgressHandle {\n getCurrentStep: () => number;\n getTotalSteps: () => number;\n gotoStep: (step: number) => void;\n next: () => void;\n previous: () => void;\n}\n\nconst StepperProgress = forwardRef<HTMLDivElement, StepperProgressProps>(\n (\n {\n activeStep,\n steps,\n 'aria-label': ariaLabel,\n hideCaption = false,\n size = 'default',\n captionPosition = 'top',\n id,\n onStepChange,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const fillRef = useRef<HTMLSpanElement>(null);\n\n const total = steps.length;\n const clampedActive = Math.max(0, Math.min(activeStep, total - 1));\n const activeSpec = steps[clampedActive];\n // The progress variant only renders one \"active\" step at a time — the\n // shared four-way state machine collapses to error-or-current here.\n const activeState: StepState =\n activeSpec?.status === 'error' ? 'error' : 'current';\n\n // Fill reaches through the completed segments plus the current one, so\n // a 4-step flow at index 1 fills 50% (2/4). Matches the user's mental\n // model for \"how far along am I\".\n const filledCount = clampedActive + 1;\n const targetPercent = total === 0 ? 0 : (filledCount / total) * 100;\n\n const tone: Tone =\n activeState === 'error'\n ? 'error'\n : clampedActive === total - 1 && total > 0\n ? 'complete'\n : 'progress';\n\n // Mount-in animation: paint at 0 on first render, then swap to the\n // target in a post-mount effect so the CSS transition animates from\n // empty → target. Matches the pattern in `components/progress`.\n const [hasMounted, setHasMounted] = useState(false);\n useEffect(() => {\n setHasMounted(true);\n }, []);\n const percent = hasMounted ? targetPercent : 0;\n\n // Setting a CSS custom property via `style.setProperty` (rather than a\n // JSX `style={{}}` attribute) is the sanctioned escape hatch for\n // runtime-computed CSS tokens per `src/docs/23-constraints.mdx` §4;\n // the `components/progress` bar uses the same pattern for its fill.\n useIsomorphicLayoutEffect(() => {\n fillRef.current?.style.setProperty(\n '--stepper-progress-value',\n String(percent),\n );\n }, [percent]);\n\n const captionText = t('navigation.stepper.stepOfTotal', {\n n: clampedActive + 1,\n total,\n });\n const label = ariaLabel ?? t('navigation.stepper.label');\n const errorCopy =\n activeState === 'error' && activeSpec?.description\n ? activeSpec.description\n : null;\n // `aria-valuetext` is the single AT source — the caption is aria-hidden\n // so anything the caption exposes (label, error description) must be\n // appended here too, or it's invisible to screen-reader users who set\n // `hideCaption`.\n const valueText = [\n captionText,\n activeSpec ? `— ${activeSpec.label}` : null,\n errorCopy,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handle = useMemo<StepperProgressHandle>(\n () => ({\n getCurrentStep: () => clampedActive,\n getTotalSteps: () => total,\n gotoStep: (step: number) => {\n if (!onStepChange) return;\n const clamped = Math.max(0, Math.min(step, Math.max(total - 1, 0)));\n if (clamped !== clampedActive) onStepChange(clamped);\n },\n next: () => {\n if (!onStepChange) return;\n if (clampedActive < total - 1) onStepChange(clampedActive + 1);\n },\n previous: () => {\n if (!onStepChange) return;\n if (clampedActive > 0) onStepChange(clampedActive - 1);\n },\n }),\n [clampedActive, total, onStepChange],\n );\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n useAgentRegistration(stepperProgressAgent, handle, id);\n\n return (\n <div\n ref={rootRef}\n id={id}\n data-component=\"stepper-progress\"\n data-component-id={id}\n className={rootVariants({ captionPosition, className })}\n {...rest}\n >\n {hideCaption ? null : (\n <div className={captionVariants({ tone })} aria-hidden=\"true\">\n <span className=\"type-meta ds:font-[var(--font-weight-semibold)]\">\n {captionText}\n </span>\n {activeSpec ? (\n <span className=\"type-meta ds:text-[var(--muted-foreground)]\">\n — {activeSpec.label}\n </span>\n ) : null}\n {errorCopy ? (\n <span className=\"type-meta ds:ms-auto ds:text-[var(--destructive)]\">\n {errorCopy}\n </span>\n ) : null}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={filledCount}\n aria-valuetext={valueText}\n className={trackVariants({ size })}\n >\n <span\n ref={fillRef}\n aria-hidden=\"true\"\n className={fillVariants({ tone })}\n />\n </div>\n </div>\n );\n },\n);\nStepperProgress.displayName = 'StepperProgress';\n\nexport { StepperProgress };\n"],"names":["stepperProgressAgent","handle","args","rootVariants","cva","trackVariants","fillVariants","captionVariants","StepperProgress","forwardRef","activeStep","steps","ariaLabel","hideCaption","size","captionPosition","id","onStepChange","className","rest","ref","t","useTranslation","fillRef","useRef","total","clampedActive","activeSpec","activeState","filledCount","targetPercent","tone","hasMounted","setHasMounted","useState","useEffect","percent","useIsomorphicLayoutEffect","_a","captionText","label","errorCopy","valueText","useMemo","step","clamped","rootRef","useImperativeHandle","useAgentRegistration","jsxs","jsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch-BJ6HD3Mn.js","sources":["../../src/components/switch/switch.agent.ts","../../src/components/switch/switch.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Switch. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SwitchHandle } from './switch';\n\nexport const switchAgent: AgentAdapter<SwitchHandle> = {\n id: 'switch',\n capabilities: ['select_single'],\n state: {\n checked: {\n type: 'boolean',\n descriptionKey: 'ui.agent.switch.state.checked',\n description: 'Whether the switch is on.',\n read: (handle) => handle.getChecked(),\n },\n },\n actions: {\n set_checked: {\n safety: 'write',\n argsType: '{ checked: boolean }',\n descriptionKey: 'ui.agent.switch.actions.setChecked',\n description: 'Set the on/off state to a specific value.',\n invoke: (handle, args: { checked: boolean }) => {\n handle.setChecked(args.checked);\n },\n },\n toggle: {\n safety: 'write',\n descriptionKey: 'ui.agent.switch.actions.toggle',\n description: 'Flip the on/off state.',\n invoke: (handle) => {\n handle.toggle();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'switch',\n description: 'Marks the Switch root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixSwitch from '@radix-ui/react-switch';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport { useAgentRegistration } from '../../agent';\nimport { switchAgent } from './switch.agent';\n\n/** Agent-readiness curated handle for Switch. */\nexport interface SwitchHandle {\n getChecked: () => boolean;\n setChecked: (checked: boolean) => void;\n toggle: () => void;\n}\n\nconst switchVariants = cva(\n [\n 'ds:inline-flex ds:shrink-0 ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:border-2 ds:border-transparent',\n 'ds:bg-muted',\n 'ds:data-[state=checked]:bg-primary',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-4 ds:w-7',\n md: 'ds:h-5 ds:w-9',\n lg: 'ds:h-6 ds:w-11',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:pointer-events-none ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-sm)]',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[state=checked]:translate-x-full ds:rtl:data-[state=checked]:-translate-x-full',\n 'ds:data-[state=unchecked]:translate-x-0',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:size-3',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst wrapperVariants = cva(\n 'ds:inline-flex ds:items-center ds:gap-3 ds:min-h-[var(--min-target-size)]',\n {\n variants: {\n labelSide: {\n start: 'ds:flex-row-reverse',\n end: '',\n },\n },\n defaultVariants: { labelSide: 'end' },\n },\n);\n\nconst labelVariants = cva('type-label ds:text-foreground ds:select-none', {\n variants: {\n disabled: {\n true: 'ds:cursor-not-allowed ds:opacity-50',\n false: 'ds:cursor-pointer',\n },\n },\n defaultVariants: { disabled: false },\n});\n\nconst iconSizeBySwitchSize = {\n sm: 'ds:size-2',\n md: 'ds:size-2.5',\n lg: 'ds:size-3',\n} as const;\n\nexport interface SwitchIcon {\n on: ReactNode;\n off: ReactNode;\n}\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixSwitch.Root>;\n\nexport interface SwitchProps\n extends\n Omit<RadixRootProps, 'children'>,\n VariantProps<typeof switchVariants> {\n label: string;\n labelSide?: 'start' | 'end';\n size?: 'sm' | 'md' | 'lg';\n icon?: SwitchIcon;\n showStateText?: boolean;\n}\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n label,\n labelSide = 'end',\n size = 'md',\n icon,\n showStateText = false,\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n const switchId = id ?? ctx.id;\n\n const [internalChecked, setInternalChecked] = useState<boolean>(\n checked ?? defaultChecked ?? false,\n );\n const isControlled = typeof checked === 'boolean';\n const currentChecked = isControlled ? checked : internalChecked;\n\n const handleCheckedChange = (next: boolean) => {\n if (!isControlled) setInternalChecked(next);\n onCheckedChange?.(next);\n };\n\n const effectiveDisabled = ctx.disabled || disabled;\n const describedBy = ctx.describedBy || undefined;\n\n const checkedRef = useRef<boolean>(currentChecked);\n checkedRef.current = currentChecked;\n\n const agentHandle = useMemo<SwitchHandle>(\n () => ({\n getChecked: () => checkedRef.current,\n setChecked: (next) => handleCheckedChange(next),\n toggle: () => handleCheckedChange(!checkedRef.current),\n }),\n // handleCheckedChange closes over isControlled / onCheckedChange and is\n // recreated each render; we accept the re-registration cost.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n useAgentRegistration(switchAgent, agentHandle, id);\n\n const stateText = currentChecked\n ? t('inputs.switch.on', 'On')\n : t('inputs.switch.off', 'Off');\n\n return (\n <div className={wrapperVariants({ labelSide })}>\n <RadixSwitch.Root\n ref={ref}\n id={switchId}\n checked={isControlled ? checked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n onCheckedChange={handleCheckedChange}\n disabled={effectiveDisabled}\n aria-describedby={describedBy}\n aria-invalid={ctx.invalid || undefined}\n aria-required={ctx.required || undefined}\n data-component=\"switch\"\n data-component-id={id}\n className={switchVariants({ size, className })}\n {...props}\n >\n <RadixSwitch.Thumb className={thumbVariants({ size })}>\n {icon ? (\n <span\n aria-hidden=\"true\"\n className={`${iconSizeBySwitchSize[size]} ds:inline-flex ds:items-center ds:justify-center ds:[&_svg]:size-full`}\n >\n {currentChecked ? icon.on : icon.off}\n </span>\n ) : null}\n </RadixSwitch.Thumb>\n </RadixSwitch.Root>\n {showStateText ? (\n <span\n aria-hidden=\"true\"\n className=\"type-meta ds:text-muted-foreground ds:select-none\"\n >\n {stateText}\n </span>\n ) : null}\n {!inFormField ? (\n <label\n htmlFor={switchId}\n className={labelVariants({ disabled: Boolean(effectiveDisabled) })}\n >\n {label}\n </label>\n ) : null}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n"],"names":["switchAgent","handle","args","switchVariants","cva","thumbVariants","wrapperVariants","labelVariants","iconSizeBySwitchSize","Switch","forwardRef","label","labelSide","size","icon","showStateText","checked","defaultChecked","onCheckedChange","disabled","id","className","props","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","switchId","internalChecked","setInternalChecked","useState","isControlled","currentChecked","handleCheckedChange","next","effectiveDisabled","describedBy","checkedRef","useRef","agentHandle","useMemo","useAgentRegistration","stateText","jsx","RadixSwitch"],"mappings":"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"}