@alfadocs/ui-kit-debug 0.68.0 → 0.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (735) 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/actions-cell-renderer-DrcaxB0w.js +2061 -0
  4. package/dist/_chunks/actions-cell-renderer-DrcaxB0w.js.map +1 -0
  5. package/dist/_chunks/address-autocomplete-BEX9PXty.js +496 -0
  6. package/dist/_chunks/address-autocomplete-BEX9PXty.js.map +1 -0
  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-g0kg7HwB.js} +36 -24
  10. package/dist/_chunks/agenda-tray-g0kg7HwB.js.map +1 -0
  11. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js → ai-consent-banner-CXlsNX1c.js} +3 -3
  12. package/dist/_chunks/{ai-consent-banner-Dxtx_WAh.js.map → ai-consent-banner-CXlsNX1c.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-CInA_1-E.js → ai-tools-rail-BA_sqy1A.js} +87 -70
  16. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js.map +1 -0
  17. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js → alia-sidebar-B47qRQb5.js} +5 -5
  18. package/dist/_chunks/{alia-sidebar-Ckv0yCKi.js.map → alia-sidebar-B47qRQb5.js.map} +1 -1
  19. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js → anamnesis-card-DRmE24OQ.js} +2 -2
  20. package/dist/_chunks/{anamnesis-card-N8pIKWuS.js.map → anamnesis-card-DRmE24OQ.js.map} +1 -1
  21. package/dist/_chunks/{appointment-tray-BMl89NPW.js → appointment-tray-CZtvtaH-.js} +32 -20
  22. package/dist/_chunks/appointment-tray-CZtvtaH-.js.map +1 -0
  23. package/dist/_chunks/{audio-recorder-DjXLP4aF.js → audio-recorder-DYXXnGug.js} +59 -56
  24. package/dist/_chunks/audio-recorder-DYXXnGug.js.map +1 -0
  25. package/dist/_chunks/{autocomplete-CcCFlVf-.js → autocomplete-DOeGouCL.js} +157 -132
  26. package/dist/_chunks/autocomplete-DOeGouCL.js.map +1 -0
  27. package/dist/_chunks/bishop-score-PJI3AXzA.js +304 -0
  28. package/dist/_chunks/bishop-score-PJI3AXzA.js.map +1 -0
  29. package/dist/_chunks/bmi-calculator-BZtIJ53x.js +434 -0
  30. package/dist/_chunks/bmi-calculator-BZtIJ53x.js.map +1 -0
  31. package/dist/_chunks/{booking-L8-YP8BJ.js → booking-C3VqFReX.js} +420 -397
  32. package/dist/_chunks/booking-C3VqFReX.js.map +1 -0
  33. package/dist/_chunks/{breadcrumb-OTbaY70e.js → breadcrumb-CchdeG7d.js} +42 -28
  34. package/dist/_chunks/breadcrumb-CchdeG7d.js.map +1 -0
  35. package/dist/_chunks/{calculator-dialog-CFk4I91b.js → calculator-dialog-BR5iU0kf.js} +2 -2
  36. package/dist/_chunks/{calculator-dialog-CFk4I91b.js.map → calculator-dialog-BR5iU0kf.js.map} +1 -1
  37. package/dist/_chunks/{calendar-oYWOCrnf.js → calendar-CZUjL8SZ.js} +258 -201
  38. package/dist/_chunks/calendar-CZUjL8SZ.js.map +1 -0
  39. package/dist/_chunks/{care-plan-card-BwVUyUBb.js → care-plan-card-CvFGXa2z.js} +10 -6
  40. package/dist/_chunks/care-plan-card-CvFGXa2z.js.map +1 -0
  41. package/dist/_chunks/{care-plan-entry-card-VzdQHcOL.js → care-plan-entry-card-C3E_gClk.js} +17 -13
  42. package/dist/_chunks/care-plan-entry-card-C3E_gClk.js.map +1 -0
  43. package/dist/_chunks/{carousel.agent-vt21A_el.js → carousel.agent-4v8Emr9E.js} +219 -198
  44. package/dist/_chunks/{carousel.agent-vt21A_el.js.map → carousel.agent-4v8Emr9E.js.map} +1 -1
  45. package/dist/_chunks/{chart-Cg3e9EH9.js → chart-CMr3eW62.js} +150 -109
  46. package/dist/_chunks/chart-CMr3eW62.js.map +1 -0
  47. package/dist/_chunks/{chat-container-ogB4OskO.js → chat-container-DWho5hPR.js} +47 -34
  48. package/dist/_chunks/chat-container-DWho5hPR.js.map +1 -0
  49. package/dist/_chunks/{chat-input-B5zjNEUN.js → chat-input-BcXTetgM.js} +57 -41
  50. package/dist/_chunks/chat-input-BcXTetgM.js.map +1 -0
  51. package/dist/_chunks/{checkbox-DRcOdmXv.js → checkbox-BuZ1u__2.js} +41 -27
  52. package/dist/_chunks/checkbox-BuZ1u__2.js.map +1 -0
  53. package/dist/_chunks/{checkbox-group-CpUwlHug.js → checkbox-group-PqNmQ-cE.js} +3 -3
  54. package/dist/_chunks/{checkbox-group-CpUwlHug.js.map → checkbox-group-PqNmQ-cE.js.map} +1 -1
  55. package/dist/_chunks/{clinical-note-card-gtrxv6zn.js → clinical-note-card-DqQYf_D4.js} +2 -2
  56. package/dist/_chunks/{clinical-note-card-gtrxv6zn.js.map → clinical-note-card-DqQYf_D4.js.map} +1 -1
  57. package/dist/_chunks/{collapsible-X3oaLPU3.js → collapsible-BrnRiCC6.js} +26 -23
  58. package/dist/_chunks/collapsible-BrnRiCC6.js.map +1 -0
  59. package/dist/_chunks/{color-picker-FXpItIaF.js → color-picker-C_fZl6sA.js} +124 -112
  60. package/dist/_chunks/color-picker-C_fZl6sA.js.map +1 -0
  61. package/dist/_chunks/{combobox-BC-DFx8G.js → combobox-Clum7gJ1.js} +165 -128
  62. package/dist/_chunks/combobox-Clum7gJ1.js.map +1 -0
  63. package/dist/_chunks/{command-palette-BiPAAno-.js → command-palette-CJzmc5pC.js} +87 -64
  64. package/dist/_chunks/command-palette-CJzmc5pC.js.map +1 -0
  65. package/dist/_chunks/{contact-profile-card-7BMB85T6.js → contact-profile-card-Dramqa9C.js} +13 -11
  66. package/dist/_chunks/contact-profile-card-Dramqa9C.js.map +1 -0
  67. package/dist/_chunks/{copy-field-CCq7j6Zc.js → copy-field-Bjw9u2cV.js} +42 -35
  68. package/dist/_chunks/copy-field-Bjw9u2cV.js.map +1 -0
  69. package/dist/_chunks/counter-dRlTNC_y.js +55 -0
  70. package/dist/_chunks/counter-dRlTNC_y.js.map +1 -0
  71. package/dist/_chunks/{cycle-calculator-BF0ointe.js → cycle-calculator-DmRGJNaT.js} +3 -3
  72. package/dist/_chunks/{cycle-calculator-BF0ointe.js.map → cycle-calculator-DmRGJNaT.js.map} +1 -1
  73. package/dist/_chunks/{date-picker-oGg5BnXL.js → date-picker-Dl9RKxaV.js} +76 -57
  74. package/dist/_chunks/{date-picker-oGg5BnXL.js.map → date-picker-Dl9RKxaV.js.map} +1 -1
  75. package/dist/_chunks/{date-range-picker-C5BWfH_T.js → date-range-picker-CTUeR6Bj.js} +73 -46
  76. package/dist/_chunks/date-range-picker-CTUeR6Bj.js.map +1 -0
  77. package/dist/_chunks/{date-time-picker-Ze1My59T.js → date-time-picker-BhoogS5Q.js} +64 -40
  78. package/dist/_chunks/date-time-picker-BhoogS5Q.js.map +1 -0
  79. package/dist/_chunks/{dependent-selector-DpzGtr_J.js → dependent-selector-CG_FOHya.js} +44 -30
  80. package/dist/_chunks/dependent-selector-CG_FOHya.js.map +1 -0
  81. package/dist/_chunks/{dialog-DMGnSelc.js → dialog-ZNuboNmy.js} +35 -28
  82. package/dist/_chunks/dialog-ZNuboNmy.js.map +1 -0
  83. package/dist/_chunks/{document-scanner-D2qehl3-.js → document-scanner-CTubA0-N.js} +12 -4
  84. package/dist/_chunks/document-scanner-CTubA0-N.js.map +1 -0
  85. package/dist/_chunks/{dropdown-menu-DwwPovMZ.js → dropdown-menu-qrxjymfw.js} +94 -93
  86. package/dist/_chunks/dropdown-menu-qrxjymfw.js.map +1 -0
  87. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js → due-date-calculator-BTmsIQqD.js} +4 -4
  88. package/dist/_chunks/{due-date-calculator-DU9AEWNy.js.map → due-date-calculator-BTmsIQqD.js.map} +1 -1
  89. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +448 -0
  90. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js.map +1 -0
  91. package/dist/_chunks/{email-input-lQivsFrw.js → email-input-B_Y55f5G.js} +3 -3
  92. package/dist/_chunks/{email-input-lQivsFrw.js.map → email-input-B_Y55f5G.js.map} +1 -1
  93. package/dist/_chunks/{fetal-weight-BVSzOhuR.js → fetal-weight-CRz7KE2D.js} +2 -2
  94. package/dist/_chunks/{fetal-weight-BVSzOhuR.js.map → fetal-weight-CRz7KE2D.js.map} +1 -1
  95. package/dist/_chunks/{file-upload-BosbPDb1.js → file-upload-5ScQd4fE.js} +118 -100
  96. package/dist/_chunks/file-upload-5ScQd4fE.js.map +1 -0
  97. package/dist/_chunks/{fiscal-code-input-DPtqluVb.js → fiscal-code-input-Cf-8O4Fj.js} +76 -63
  98. package/dist/_chunks/fiscal-code-input-Cf-8O4Fj.js.map +1 -0
  99. package/dist/_chunks/{freemium-paywall-CkWjv3o6.js → freemium-paywall-DZ2mBS3w.js} +78 -71
  100. package/dist/_chunks/freemium-paywall-DZ2mBS3w.js.map +1 -0
  101. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js → gestational-age-calculator-BleUdhbI.js} +5 -5
  102. package/dist/_chunks/{gestational-age-calculator-DBlFdoiP.js.map → gestational-age-calculator-BleUdhbI.js.map} +1 -1
  103. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js → hcg-doubling-CnjDXX6U.js} +3 -3
  104. package/dist/_chunks/{hcg-doubling-if4Q8aSX.js.map → hcg-doubling-CnjDXX6U.js.map} +1 -1
  105. package/dist/_chunks/{header-settings-CNOqIhoW.js → header-settings-DJqoAl5m.js} +86 -46
  106. package/dist/_chunks/header-settings-DJqoAl5m.js.map +1 -0
  107. package/dist/_chunks/{index.modern-D2LGACWg.js → index.modern-Zta-A4Jm.js} +3 -3
  108. package/dist/_chunks/{index.modern-D2LGACWg.js.map → index.modern-Zta-A4Jm.js.map} +1 -1
  109. package/dist/_chunks/{list-BOwqwy03.js → list-DgE1xWBM.js} +99 -84
  110. package/dist/_chunks/list-DgE1xWBM.js.map +1 -0
  111. package/dist/_chunks/{locale-picker-C9JmBht3.js → locale-picker-ChYYSX2N.js} +47 -35
  112. package/dist/_chunks/locale-picker-ChYYSX2N.js.map +1 -0
  113. package/dist/_chunks/{map-view-Tb5VfK9Y.js → map-view-BkOoGoX2.js} +160 -115
  114. package/dist/_chunks/map-view-BkOoGoX2.js.map +1 -0
  115. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js → marketplace-app-shell-6T9W4Knl.js} +4 -4
  116. package/dist/_chunks/{marketplace-app-shell-D4-T9Qzz.js.map → marketplace-app-shell-6T9W4Knl.js.map} +1 -1
  117. package/dist/_chunks/{message-card.agent-4IeIgrnJ.js → message-card.agent-ZLhx3Bs5.js} +6 -1
  118. package/dist/_chunks/message-card.agent-ZLhx3Bs5.js.map +1 -0
  119. package/dist/_chunks/{message-tray-CVyJajVJ.js → message-tray-DwrBLJlf.js} +90 -48
  120. package/dist/_chunks/message-tray-DwrBLJlf.js.map +1 -0
  121. package/dist/_chunks/{multi-select-BcPylvHR.js → multi-select-BdHHDrRN.js} +196 -153
  122. package/dist/_chunks/multi-select-BdHHDrRN.js.map +1 -0
  123. package/dist/_chunks/{navigation-menu-C6lBYVv9.js → navigation-menu-DRUi6sSj.js} +75 -42
  124. package/dist/_chunks/navigation-menu-DRUi6sSj.js.map +1 -0
  125. package/dist/_chunks/{notification-card.agent-Rqt3ofk9.js → notification-card.agent-DxGBZb8T.js} +5 -1
  126. package/dist/_chunks/notification-card.agent-DxGBZb8T.js.map +1 -0
  127. package/dist/_chunks/{notification-tray-DlgenTEe.js → notification-tray-Btb9oQeZ.js} +112 -97
  128. package/dist/_chunks/notification-tray-Btb9oQeZ.js.map +1 -0
  129. package/dist/_chunks/{number-input-Dj5L3pXK.js → number-input-DxphVG_A.js} +36 -27
  130. package/dist/_chunks/number-input-DxphVG_A.js.map +1 -0
  131. package/dist/_chunks/{operator-hero-f_KaRhw5.js → operator-hero-CP2Nhupm.js} +12 -8
  132. package/dist/_chunks/operator-hero-CP2Nhupm.js.map +1 -0
  133. package/dist/_chunks/{otp-input-xQ4Ps5VY.js → otp-input-DzBQ-CpE.js} +52 -33
  134. package/dist/_chunks/otp-input-DzBQ-CpE.js.map +1 -0
  135. package/dist/_chunks/{pagination-DQOgnxxw.js → pagination-D58kglCr.js} +181 -162
  136. package/dist/_chunks/pagination-D58kglCr.js.map +1 -0
  137. package/dist/_chunks/{patient-search-DR9XUYRQ.js → patient-search-CBC_ySF6.js} +69 -60
  138. package/dist/_chunks/patient-search-CBC_ySF6.js.map +1 -0
  139. package/dist/_chunks/{patient-shell-BfgufL_q.js → patient-shell-DV3XEtIB.js} +3 -3
  140. package/dist/_chunks/{patient-shell-BfgufL_q.js.map → patient-shell-DV3XEtIB.js.map} +1 -1
  141. package/dist/_chunks/{patient-summary-card-hEmr4eTW.js → patient-summary-card-B836_fDB.js} +95 -103
  142. package/dist/_chunks/patient-summary-card-B836_fDB.js.map +1 -0
  143. package/dist/_chunks/patient-table-CDuosVru.js +889 -0
  144. package/dist/_chunks/patient-table-CDuosVru.js.map +1 -0
  145. package/dist/_chunks/{payment-form-nXocS_MX.js → payment-form-DvjwYVIT.js} +56 -44
  146. package/dist/_chunks/payment-form-DvjwYVIT.js.map +1 -0
  147. package/dist/_chunks/{payment-request-card-CYE5vhZ0.js → payment-request-card-DioWKBUq.js} +2 -2
  148. package/dist/_chunks/{payment-request-card-CYE5vhZ0.js.map → payment-request-card-DioWKBUq.js.map} +1 -1
  149. package/dist/_chunks/{pdf-viewer-GsfNqeeT.js → pdf-viewer-D6BPfW2D.js} +205 -157
  150. package/dist/_chunks/pdf-viewer-D6BPfW2D.js.map +1 -0
  151. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js → periodontal-chart-card-BuDEMbHE.js} +2 -2
  152. package/dist/_chunks/{periodontal-chart-card-Dh3KgvYG.js.map → periodontal-chart-card-BuDEMbHE.js.map} +1 -1
  153. package/dist/_chunks/{phone-input-DVXhNlIl.js → phone-input-DjU-XmO_.js} +64 -47
  154. package/dist/_chunks/phone-input-DjU-XmO_.js.map +1 -0
  155. package/dist/_chunks/{popover-DTbfAuR0.js → popover-B2qCDhJC.js} +37 -32
  156. package/dist/_chunks/popover-B2qCDhJC.js.map +1 -0
  157. package/dist/_chunks/{practice-results-DND2SAt7.js → practice-results-KrTHqZua.js} +278 -242
  158. package/dist/_chunks/practice-results-KrTHqZua.js.map +1 -0
  159. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js → pregnancy-dating-DORUAOHB.js} +6 -6
  160. package/dist/_chunks/{pregnancy-dating-QY-sqpvj.js.map → pregnancy-dating-DORUAOHB.js.map} +1 -1
  161. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js → pregnancy-weight-gain-DVz4rr7-.js} +3 -3
  162. package/dist/_chunks/{pregnancy-weight-gain-DOJXXNYP.js.map → pregnancy-weight-gain-DVz4rr7-.js.map} +1 -1
  163. package/dist/_chunks/{privacy-lock-C7JyMf0y.js → privacy-lock-BzMLQu-j.js} +32 -28
  164. package/dist/_chunks/privacy-lock-BzMLQu-j.js.map +1 -0
  165. package/dist/_chunks/{product-hub-panel-CAXDFeGP.js → product-hub-panel-e6pW220e.js} +45 -27
  166. package/dist/_chunks/product-hub-panel-e6pW220e.js.map +1 -0
  167. package/dist/_chunks/{progress-kzIRcdaq.js → progress-DA413-zn.js} +2 -2
  168. package/dist/_chunks/{progress-kzIRcdaq.js.map → progress-DA413-zn.js.map} +1 -1
  169. package/dist/_chunks/{public-footer.agent-CfXuW1x6.js → public-footer.agent-D0cFbjWl.js} +151 -146
  170. package/dist/_chunks/public-footer.agent-D0cFbjWl.js.map +1 -0
  171. package/dist/_chunks/{public-header.agent-BOhJgZEU.js → public-header.agent-DqkqA-ca.js} +107 -102
  172. package/dist/_chunks/{public-header.agent-BOhJgZEU.js.map → public-header.agent-DqkqA-ca.js.map} +1 -1
  173. package/dist/_chunks/{qr-code-DNXhi6se.js → qr-code-CPkEs5mG.js} +52 -46
  174. package/dist/_chunks/qr-code-CPkEs5mG.js.map +1 -0
  175. package/dist/_chunks/{radio-group-CLjK-SlK.js → radio-group-BPt7pKZW.js} +5 -5
  176. package/dist/_chunks/{radio-group-CLjK-SlK.js.map → radio-group-BPt7pKZW.js.map} +1 -1
  177. package/dist/_chunks/{recaptcha-widget-BCNHsgqt.js → recaptcha-widget-BC-4To9b.js} +9 -2
  178. package/dist/_chunks/recaptcha-widget-BC-4To9b.js.map +1 -0
  179. package/dist/_chunks/registry-DvAUVLHh.js +51 -0
  180. package/dist/_chunks/registry-DvAUVLHh.js.map +1 -0
  181. package/dist/_chunks/{resizable-3vzqDlg6.js → resizable-DVGcfOrk.js} +193 -173
  182. package/dist/_chunks/resizable-DVGcfOrk.js.map +1 -0
  183. package/dist/_chunks/{reviews-panel-DBktKm7i.js → reviews-panel-Dq7LMDcH.js} +87 -68
  184. package/dist/_chunks/reviews-panel-Dq7LMDcH.js.map +1 -0
  185. package/dist/_chunks/{rich-text-editor-VawKN1FI.js → rich-text-editor-BsV7zUdg.js} +736 -647
  186. package/dist/_chunks/rich-text-editor-BsV7zUdg.js.map +1 -0
  187. package/dist/_chunks/{search-bar-SY2BcV2N.js → search-bar-C_T3pBJn.js} +105 -78
  188. package/dist/_chunks/search-bar-C_T3pBJn.js.map +1 -0
  189. package/dist/_chunks/{search-input-DbxrnHkW.js → search-input-DQvGxR74.js} +2 -2
  190. package/dist/_chunks/{search-input-DbxrnHkW.js.map → search-input-DQvGxR74.js.map} +1 -1
  191. package/dist/_chunks/{search-input.agent-CfZvViOd.js → search-input.agent-DRH54coT.js} +19 -4
  192. package/dist/_chunks/search-input.agent-DRH54coT.js.map +1 -0
  193. package/dist/_chunks/{select-CEtRcon5.js → select-DMLG44F5.js} +72 -56
  194. package/dist/_chunks/select-DMLG44F5.js.map +1 -0
  195. package/dist/_chunks/{session-countdown-LPnhTHjn.js → session-countdown-X1Ki6i0M.js} +3 -3
  196. package/dist/_chunks/{session-countdown-LPnhTHjn.js.map → session-countdown-X1Ki6i0M.js.map} +1 -1
  197. package/dist/_chunks/{sheet-taJer-Ha.js → sheet-BxsE7eQm.js} +59 -45
  198. package/dist/_chunks/sheet-BxsE7eQm.js.map +1 -0
  199. package/dist/_chunks/{sidebar-DaB4ulxH.js → sidebar-DY9jGjgt.js} +254 -248
  200. package/dist/_chunks/sidebar-DY9jGjgt.js.map +1 -0
  201. package/dist/_chunks/{sign-document-CdAiHiCh.js → sign-document-B4DeRhTe.js} +75 -49
  202. package/dist/_chunks/sign-document-B4DeRhTe.js.map +1 -0
  203. package/dist/_chunks/{signature-capture-COi0Uiqu.js → signature-capture-Ct_4Md4e.js} +138 -104
  204. package/dist/_chunks/signature-capture-Ct_4Md4e.js.map +1 -0
  205. package/dist/_chunks/{slider-BHWzXdjt.js → slider-DN1CWkKB.js} +85 -65
  206. package/dist/_chunks/slider-DN1CWkKB.js.map +1 -0
  207. package/dist/_chunks/{sparkline-DGhCSw8M.js → sparkline-iOXYgvJe.js} +75 -53
  208. package/dist/_chunks/sparkline-iOXYgvJe.js.map +1 -0
  209. package/dist/_chunks/{stepper-accordion.agent-C4quJ-MD.js → stepper-accordion.agent-cmEguIdx.js} +7 -1
  210. package/dist/_chunks/stepper-accordion.agent-cmEguIdx.js.map +1 -0
  211. package/dist/_chunks/{stepper-progress-DDjq5nei.js → stepper-progress-Bv0njx4g.js} +30 -24
  212. package/dist/_chunks/stepper-progress-Bv0njx4g.js.map +1 -0
  213. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js → suggestion-chip.agent-Brn3CiFE.js} +9 -8
  214. package/dist/_chunks/{suggestion-chip.agent-6sNWFj7m.js.map → suggestion-chip.agent-Brn3CiFE.js.map} +1 -1
  215. package/dist/_chunks/{switch-BJ6HD3Mn.js → switch-OILsBLWo.js} +25 -19
  216. package/dist/_chunks/switch-OILsBLWo.js.map +1 -0
  217. package/dist/_chunks/{tabs-BIQ0ew1T.js → tabs-BxcOziCo.js} +67 -58
  218. package/dist/_chunks/tabs-BxcOziCo.js.map +1 -0
  219. package/dist/_chunks/{task-card.agent-CUPKYd7w.js → task-card.agent-Bt14CzUd.js} +4 -1
  220. package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +1 -0
  221. package/dist/_chunks/{task-tray-CAncV-QQ.js → task-tray-qOEQflu4.js} +74 -57
  222. package/dist/_chunks/task-tray-qOEQflu4.js.map +1 -0
  223. package/dist/_chunks/{text-area-BIx0tZ05.js → text-area-Bt3p7Pt0.js} +41 -34
  224. package/dist/_chunks/text-area-Bt3p7Pt0.js.map +1 -0
  225. package/dist/_chunks/{text-input-BaClJL8Y.js → text-input-B-OWQ1Je.js} +15 -8
  226. package/dist/_chunks/text-input-B-OWQ1Je.js.map +1 -0
  227. package/dist/_chunks/{theme-toggle-DETmSu_h.js → theme-toggle-XB6o_lgs.js} +38 -26
  228. package/dist/_chunks/theme-toggle-XB6o_lgs.js.map +1 -0
  229. package/dist/_chunks/{time-picker-B5umYwfv.js → time-picker-BPlJWm8w.js} +41 -31
  230. package/dist/_chunks/time-picker-BPlJWm8w.js.map +1 -0
  231. package/dist/_chunks/{timeline-DQa5Tyz4.js → timeline-CqA4nKTI.js} +33 -25
  232. package/dist/_chunks/timeline-CqA4nKTI.js.map +1 -0
  233. package/dist/_chunks/{toast.agent-vuLRRn2a.js → toast.agent-57UzyR9U.js} +62 -45
  234. package/dist/_chunks/{toast.agent-vuLRRn2a.js.map → toast.agent-57UzyR9U.js.map} +1 -1
  235. package/dist/_chunks/{tooth-scheme-BIx1O2aJ.js → tooth-scheme-yBr53cvv.js} +421 -348
  236. package/dist/_chunks/tooth-scheme-yBr53cvv.js.map +1 -0
  237. package/dist/_chunks/{transcript-panel-CLHmv83g.js → transcript-panel-3THQX6nJ.js} +47 -33
  238. package/dist/_chunks/transcript-panel-3THQX6nJ.js.map +1 -0
  239. package/dist/_chunks/unit-converter-YEpD9evj.js +337 -0
  240. package/dist/_chunks/unit-converter-YEpD9evj.js.map +1 -0
  241. package/dist/_chunks/{use-password-requirements-DsgduV1x.js → use-password-requirements-BXvS2MBS.js} +131 -117
  242. package/dist/_chunks/use-password-requirements-BXvS2MBS.js.map +1 -0
  243. package/dist/_chunks/users-MBVtUzwd.js +17 -0
  244. package/dist/_chunks/users-MBVtUzwd.js.map +1 -0
  245. package/dist/_chunks/warning-stack-BsgaEbL8.js +283 -0
  246. package/dist/_chunks/warning-stack-BsgaEbL8.js.map +1 -0
  247. package/dist/_chunks/{whatsapp-button-DUjlWGKf.js → whatsapp-button-BIy6NaJK.js} +6 -3
  248. package/dist/_chunks/whatsapp-button-BIy6NaJK.js.map +1 -0
  249. package/dist/_chunks/{workflow-map-JAZryZJr.js → workflow-map-Bdam9pGp.js} +99 -88
  250. package/dist/_chunks/workflow-map-Bdam9pGp.js.map +1 -0
  251. package/dist/agent/index.d.ts +4 -4
  252. package/dist/agent/index.d.ts.map +1 -1
  253. package/dist/agent/index.js +36 -0
  254. package/dist/agent/index.js.map +1 -0
  255. package/dist/agent/registry.d.ts +33 -0
  256. package/dist/agent/registry.d.ts.map +1 -1
  257. package/dist/agent/types.d.ts +78 -2
  258. package/dist/agent/types.d.ts.map +1 -1
  259. package/dist/agent-catalog.json +6905 -509
  260. package/dist/agent-i18n/en.json +1175 -0
  261. package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
  262. package/dist/components/accordion/accordion.d.ts.map +1 -1
  263. package/dist/components/accordion/index.js +1 -1
  264. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts +4 -0
  265. package/dist/components/address-autocomplete/address-autocomplete.agent.d.ts.map +1 -0
  266. package/dist/components/address-autocomplete/address-autocomplete.d.ts +18 -0
  267. package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
  268. package/dist/components/address-autocomplete/index.d.ts +2 -1
  269. package/dist/components/address-autocomplete/index.d.ts.map +1 -1
  270. package/dist/components/address-autocomplete/index.js +3 -2
  271. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
  272. package/dist/components/agenda-card/index.js +1 -1
  273. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -1
  274. package/dist/components/agenda-tray/index.js +1 -1
  275. package/dist/components/ai-consent-banner/index.js +1 -1
  276. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -1
  277. package/dist/components/ai-prompt-input/index.js +1 -1
  278. package/dist/components/ai-tools-rail/ai-tools-rail.agent.d.ts.map +1 -1
  279. package/dist/components/ai-tools-rail/index.js +1 -1
  280. package/dist/components/anamnesis-card/index.js +1 -1
  281. package/dist/components/appointment-card/appointment-card.agent.d.ts.map +1 -1
  282. package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
  283. package/dist/components/appointment-card/index.js +1 -1
  284. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -1
  285. package/dist/components/audio-recorder/index.js +1 -1
  286. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  287. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  288. package/dist/components/autocomplete/index.js +1 -1
  289. package/dist/components/bishop-score/bishop-score.agent.d.ts +4 -0
  290. package/dist/components/bishop-score/bishop-score.agent.d.ts.map +1 -0
  291. package/dist/components/bishop-score/bishop-score.d.ts +17 -1
  292. package/dist/components/bishop-score/bishop-score.d.ts.map +1 -1
  293. package/dist/components/bishop-score/index.js +1 -1
  294. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts +4 -0
  295. package/dist/components/bmi-calculator/bmi-calculator.agent.d.ts.map +1 -0
  296. package/dist/components/bmi-calculator/bmi-calculator.d.ts +26 -0
  297. package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
  298. package/dist/components/bmi-calculator/index.js +1 -1
  299. package/dist/components/booking/booking.agent.d.ts.map +1 -1
  300. package/dist/components/booking/index.js +1 -1
  301. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -1
  302. package/dist/components/breadcrumb/index.js +1 -1
  303. package/dist/components/calculator-dialog/index.js +1 -1
  304. package/dist/components/calendar/calendar.agent.d.ts.map +1 -1
  305. package/dist/components/calendar/index.js +1 -1
  306. package/dist/components/care-plan-card/care-plan-card.agent.d.ts.map +1 -1
  307. package/dist/components/care-plan-card/index.js +1 -1
  308. package/dist/components/care-plan-entry-card/care-plan-entry-card.agent.d.ts.map +1 -1
  309. package/dist/components/care-plan-entry-card/index.js +1 -1
  310. package/dist/components/carousel/carousel.agent.d.ts.map +1 -1
  311. package/dist/components/carousel/index.js +1 -1
  312. package/dist/components/chart/chart.agent.d.ts.map +1 -1
  313. package/dist/components/chart/index.js +1 -1
  314. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  315. package/dist/components/chat-container/index.js +1 -1
  316. package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -1
  317. package/dist/components/chat-input/index.js +1 -1
  318. package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -1
  319. package/dist/components/checkbox/index.js +1 -1
  320. package/dist/components/checkbox-group/index.js +1 -1
  321. package/dist/components/clinical-note-card/index.js +1 -1
  322. package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -1
  323. package/dist/components/collapsible/index.js +1 -1
  324. package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -1
  325. package/dist/components/color-picker/index.js +1 -1
  326. package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
  327. package/dist/components/combobox/combobox.d.ts.map +1 -1
  328. package/dist/components/combobox/index.js +1 -1
  329. package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
  330. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  331. package/dist/components/command-palette/index.js +1 -1
  332. package/dist/components/contact-profile-card/contact-profile-card.agent.d.ts.map +1 -1
  333. package/dist/components/contact-profile-card/index.js +1 -1
  334. package/dist/components/copy-field/copy-field.agent.d.ts.map +1 -1
  335. package/dist/components/copy-field/index.js +1 -1
  336. package/dist/components/counter/counter.d.ts +22 -0
  337. package/dist/components/counter/counter.d.ts.map +1 -0
  338. package/dist/components/counter/index.d.ts +3 -0
  339. package/dist/components/counter/index.d.ts.map +1 -0
  340. package/dist/components/counter/index.js +5 -0
  341. package/dist/components/counter/index.js.map +1 -0
  342. package/dist/components/cycle-calculator/index.js +1 -1
  343. package/dist/components/data-table/data-table.agent.d.ts.map +1 -1
  344. package/dist/components/data-table/index.js +31 -30
  345. package/dist/components/data-table/index.js.map +1 -1
  346. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  347. package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -1
  348. package/dist/components/date-picker/index.js +1 -1
  349. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -1
  350. package/dist/components/date-range-picker/index.js +1 -1
  351. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -1
  352. package/dist/components/date-time-picker/index.js +1 -1
  353. package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -1
  354. package/dist/components/dependent-selector/index.js +1 -1
  355. package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
  356. package/dist/components/dialog/index.js +1 -1
  357. package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -1
  358. package/dist/components/document-scanner/index.js +1 -1
  359. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
  360. package/dist/components/dropdown-menu/index.js +1 -1
  361. package/dist/components/due-date-calculator/index.js +1 -1
  362. package/dist/components/email-input/index.js +1 -1
  363. package/dist/components/fetal-weight/index.js +1 -1
  364. package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
  365. package/dist/components/file-upload/index.js +1 -1
  366. package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -1
  367. package/dist/components/fiscal-code-input/index.js +1 -1
  368. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -1
  369. package/dist/components/freemium-paywall/freemium-paywall.d.ts +6 -0
  370. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  371. package/dist/components/freemium-paywall/index.js +1 -1
  372. package/dist/components/gestational-age-calculator/index.js +1 -1
  373. package/dist/components/hcg-doubling/index.js +1 -1
  374. package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
  375. package/dist/components/header-settings/index.js +1 -1
  376. package/dist/components/index.d.ts +2 -0
  377. package/dist/components/index.d.ts.map +1 -1
  378. package/dist/components/list/index.js +1 -1
  379. package/dist/components/list/list.agent.d.ts.map +1 -1
  380. package/dist/components/locale-picker/index.js +1 -1
  381. package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
  382. package/dist/components/map-view/index.js +1 -1
  383. package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
  384. package/dist/components/message-card/index.js +1 -1
  385. package/dist/components/message-card/message-card.agent.d.ts.map +1 -1
  386. package/dist/components/message-tray/index.js +1 -1
  387. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -1
  388. package/dist/components/multi-select/index.js +1 -1
  389. package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
  390. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  391. package/dist/components/navigation-menu/index.js +1 -1
  392. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -1
  393. package/dist/components/notification-card/index.js +1 -1
  394. package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -1
  395. package/dist/components/notification-tray/index.js +1 -1
  396. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -1
  397. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  398. package/dist/components/number-input/index.js +1 -1
  399. package/dist/components/number-input/number-input.agent.d.ts.map +1 -1
  400. package/dist/components/operator-hero/index.js +1 -1
  401. package/dist/components/operator-hero/operator-hero.agent.d.ts.map +1 -1
  402. package/dist/components/otp-input/index.js +1 -1
  403. package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -1
  404. package/dist/components/pagination/index.js +1 -1
  405. package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
  406. package/dist/components/password-input/index.js +1 -1
  407. package/dist/components/password-input/password-input.agent.d.ts.map +1 -1
  408. package/dist/components/patient-search/index.js +1 -1
  409. package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -1
  410. package/dist/components/patient-summary-card/index.js +1 -1
  411. package/dist/components/patient-summary-card/patient-summary-card.agent.d.ts.map +1 -1
  412. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts +13 -0
  413. package/dist/components/patient-table/cell-renderers/balance-badge-cell.d.ts.map +1 -0
  414. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts +43 -0
  415. package/dist/components/patient-table/cell-renderers/care-plan-status-cell.d.ts.map +1 -0
  416. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +45 -0
  417. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts.map +1 -0
  418. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts +24 -0
  419. package/dist/components/patient-table/cell-renderers/next-appointment-cell.d.ts.map +1 -0
  420. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +26 -0
  421. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts.map +1 -0
  422. package/dist/components/patient-table/columns.d.ts +102 -0
  423. package/dist/components/patient-table/columns.d.ts.map +1 -0
  424. package/dist/components/patient-table/index.d.ts +24 -0
  425. package/dist/components/patient-table/index.d.ts.map +1 -0
  426. package/dist/components/patient-table/index.js +13 -0
  427. package/dist/components/patient-table/index.js.map +1 -0
  428. package/dist/components/patient-table/patient-table.d.ts +138 -0
  429. package/dist/components/patient-table/patient-table.d.ts.map +1 -0
  430. package/dist/components/patient-table/types.d.ts +172 -0
  431. package/dist/components/patient-table/types.d.ts.map +1 -0
  432. package/dist/components/patient-table/use-responsive-columns.d.ts +109 -0
  433. package/dist/components/patient-table/use-responsive-columns.d.ts.map +1 -0
  434. package/dist/components/payment-card/index.js +1 -1
  435. package/dist/components/payment-form/index.js +1 -1
  436. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  437. package/dist/components/pdf-viewer/index.js +1 -1
  438. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  439. package/dist/components/periodontal-chart-card/index.js +1 -1
  440. package/dist/components/phone-input/index.js +1 -1
  441. package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -1
  442. package/dist/components/popover/index.js +1 -1
  443. package/dist/components/popover/popover.agent.d.ts.map +1 -1
  444. package/dist/components/practice-results/index.js +1 -1
  445. package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -1
  446. package/dist/components/pregnancy-dating/index.js +1 -1
  447. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  448. package/dist/components/privacy-lock/index.js +1 -1
  449. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -1
  450. package/dist/components/product-hub-tray/index.js +1 -1
  451. package/dist/components/product-hub-tray/product-hub-panel.agent.d.ts.map +1 -1
  452. package/dist/components/product-hub-tray/product-hub-tray.agent.d.ts.map +1 -1
  453. package/dist/components/progress/index.js +1 -1
  454. package/dist/components/public-footer/index.js +1 -1
  455. package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -1
  456. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  457. package/dist/components/public-header/index.js +1 -1
  458. package/dist/components/public-header/public-header.agent.d.ts.map +1 -1
  459. package/dist/components/qr-code/index.js +1 -1
  460. package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -1
  461. package/dist/components/radio-group/index.js +1 -1
  462. package/dist/components/recaptcha-widget/index.js +1 -1
  463. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -1
  464. package/dist/components/resizable/index.js +1 -1
  465. package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
  466. package/dist/components/resizable/resizable.d.ts.map +1 -1
  467. package/dist/components/reviews-panel/index.js +1 -1
  468. package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -1
  469. package/dist/components/rich-text-editor/index.js +1 -1
  470. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  471. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  472. package/dist/components/search-bar/index.js +1 -1
  473. package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -1
  474. package/dist/components/search-input/index.js +2 -2
  475. package/dist/components/search-input/search-input.agent.d.ts.map +1 -1
  476. package/dist/components/select/index.js +1 -1
  477. package/dist/components/select/select.agent.d.ts.map +1 -1
  478. package/dist/components/session-countdown/index.js +1 -1
  479. package/dist/components/sheet/index.js +1 -1
  480. package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
  481. package/dist/components/sidebar/index.js +1 -1
  482. package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
  483. package/dist/components/sidebar/sidebar.d.ts +7 -0
  484. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  485. package/dist/components/sign-document/index.js +1 -1
  486. package/dist/components/sign-document/sign-document.agent.d.ts.map +1 -1
  487. package/dist/components/signature-capture/index.js +1 -1
  488. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
  489. package/dist/components/slider/index.js +1 -1
  490. package/dist/components/slider/slider.agent.d.ts.map +1 -1
  491. package/dist/components/sparkline/index.js +1 -1
  492. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  493. package/dist/components/stepper-accordion/index.js +1 -1
  494. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -1
  495. package/dist/components/stepper-progress/index.js +1 -1
  496. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -1
  497. package/dist/components/suggestion-chip/index.js +1 -1
  498. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -1
  499. package/dist/components/switch/index.js +1 -1
  500. package/dist/components/switch/switch.agent.d.ts.map +1 -1
  501. package/dist/components/tabs/index.js +1 -1
  502. package/dist/components/tabs/tabs.agent.d.ts.map +1 -1
  503. package/dist/components/tabs/tabs.d.ts.map +1 -1
  504. package/dist/components/task-card/index.js +1 -1
  505. package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
  506. package/dist/components/task-tray/index.js +1 -1
  507. package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -1
  508. package/dist/components/text-area/index.js +1 -1
  509. package/dist/components/text-area/text-area.agent.d.ts.map +1 -1
  510. package/dist/components/text-input/index.js +1 -1
  511. package/dist/components/text-input/text-input.agent.d.ts.map +1 -1
  512. package/dist/components/theme-toggle/index.js +1 -1
  513. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -1
  514. package/dist/components/time-picker/index.js +1 -1
  515. package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -1
  516. package/dist/components/timeline/index.js +1 -1
  517. package/dist/components/timeline/timeline.agent.d.ts.map +1 -1
  518. package/dist/components/toast/index.js +1 -1
  519. package/dist/components/toast/toast.agent.d.ts.map +1 -1
  520. package/dist/components/toast/toast.d.ts.map +1 -1
  521. package/dist/components/tooth-scheme/index.js +1 -1
  522. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  523. package/dist/components/transcript-panel/index.js +1 -1
  524. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -1
  525. package/dist/components/unit-converter/index.js +1 -1
  526. package/dist/components/unit-converter/unit-converter.agent.d.ts +4 -0
  527. package/dist/components/unit-converter/unit-converter.agent.d.ts.map +1 -0
  528. package/dist/components/unit-converter/unit-converter.d.ts +27 -0
  529. package/dist/components/unit-converter/unit-converter.d.ts.map +1 -1
  530. package/dist/components/warning-stack/index.js +1 -1
  531. package/dist/components/warning-stack/warning-stack.d.ts +9 -0
  532. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  533. package/dist/components/whatsapp-button/index.d.ts +1 -1
  534. package/dist/components/whatsapp-button/index.d.ts.map +1 -1
  535. package/dist/components/whatsapp-button/index.js +3 -2
  536. package/dist/components/whatsapp-button/whatsapp-button.d.ts +3 -0
  537. package/dist/components/whatsapp-button/whatsapp-button.d.ts.map +1 -1
  538. package/dist/components/workflow/index.js +1 -1
  539. package/dist/components/workflow/workflow.agent.d.ts.map +1 -1
  540. package/dist/i18n/locales/ar.d.ts +72 -0
  541. package/dist/i18n/locales/ar.d.ts.map +1 -1
  542. package/dist/i18n/locales/ar.js +73 -1
  543. package/dist/i18n/locales/ar.js.map +1 -1
  544. package/dist/i18n/locales/de.d.ts +72 -0
  545. package/dist/i18n/locales/de.d.ts.map +1 -1
  546. package/dist/i18n/locales/de.js +73 -1
  547. package/dist/i18n/locales/de.js.map +1 -1
  548. package/dist/i18n/locales/el.d.ts +72 -0
  549. package/dist/i18n/locales/el.d.ts.map +1 -1
  550. package/dist/i18n/locales/el.js +73 -1
  551. package/dist/i18n/locales/el.js.map +1 -1
  552. package/dist/i18n/locales/en.d.ts +90 -0
  553. package/dist/i18n/locales/en.d.ts.map +1 -1
  554. package/dist/i18n/locales/en.js +91 -1
  555. package/dist/i18n/locales/en.js.map +1 -1
  556. package/dist/i18n/locales/es.d.ts +72 -0
  557. package/dist/i18n/locales/es.d.ts.map +1 -1
  558. package/dist/i18n/locales/es.js +73 -1
  559. package/dist/i18n/locales/es.js.map +1 -1
  560. package/dist/i18n/locales/fr.d.ts +72 -0
  561. package/dist/i18n/locales/fr.d.ts.map +1 -1
  562. package/dist/i18n/locales/fr.js +73 -1
  563. package/dist/i18n/locales/fr.js.map +1 -1
  564. package/dist/i18n/locales/hi.d.ts +72 -0
  565. package/dist/i18n/locales/hi.d.ts.map +1 -1
  566. package/dist/i18n/locales/hi.js +73 -1
  567. package/dist/i18n/locales/hi.js.map +1 -1
  568. package/dist/i18n/locales/it.d.ts +72 -0
  569. package/dist/i18n/locales/it.d.ts.map +1 -1
  570. package/dist/i18n/locales/it.js +73 -1
  571. package/dist/i18n/locales/it.js.map +1 -1
  572. package/dist/i18n/locales/ja.d.ts +72 -0
  573. package/dist/i18n/locales/ja.d.ts.map +1 -1
  574. package/dist/i18n/locales/ja.js +73 -1
  575. package/dist/i18n/locales/ja.js.map +1 -1
  576. package/dist/i18n/locales/nl.d.ts +72 -0
  577. package/dist/i18n/locales/nl.d.ts.map +1 -1
  578. package/dist/i18n/locales/nl.js +73 -1
  579. package/dist/i18n/locales/nl.js.map +1 -1
  580. package/dist/i18n/locales/pl.d.ts +72 -0
  581. package/dist/i18n/locales/pl.d.ts.map +1 -1
  582. package/dist/i18n/locales/pl.js +73 -1
  583. package/dist/i18n/locales/pl.js.map +1 -1
  584. package/dist/i18n/locales/pt.d.ts +72 -0
  585. package/dist/i18n/locales/pt.d.ts.map +1 -1
  586. package/dist/i18n/locales/pt.js +73 -1
  587. package/dist/i18n/locales/pt.js.map +1 -1
  588. package/dist/i18n/locales/ro.d.ts +72 -0
  589. package/dist/i18n/locales/ro.d.ts.map +1 -1
  590. package/dist/i18n/locales/ro.js +73 -1
  591. package/dist/i18n/locales/ro.js.map +1 -1
  592. package/dist/i18n/locales/ru.d.ts +72 -0
  593. package/dist/i18n/locales/ru.d.ts.map +1 -1
  594. package/dist/i18n/locales/ru.js +73 -1
  595. package/dist/i18n/locales/ru.js.map +1 -1
  596. package/dist/i18n/locales/sq.d.ts +72 -0
  597. package/dist/i18n/locales/sq.d.ts.map +1 -1
  598. package/dist/i18n/locales/sq.js +73 -1
  599. package/dist/i18n/locales/sq.js.map +1 -1
  600. package/dist/i18n/locales/sv.d.ts +72 -0
  601. package/dist/i18n/locales/sv.d.ts.map +1 -1
  602. package/dist/i18n/locales/sv.js +73 -1
  603. package/dist/i18n/locales/sv.js.map +1 -1
  604. package/dist/i18n/locales/tr.d.ts +72 -0
  605. package/dist/i18n/locales/tr.d.ts.map +1 -1
  606. package/dist/i18n/locales/tr.js +73 -1
  607. package/dist/i18n/locales/tr.js.map +1 -1
  608. package/dist/i18n/locales/zh.d.ts +72 -0
  609. package/dist/i18n/locales/zh.d.ts.map +1 -1
  610. package/dist/i18n/locales/zh.js +73 -1
  611. package/dist/i18n/locales/zh.js.map +1 -1
  612. package/dist/index.js +688 -673
  613. package/dist/index.js.map +1 -1
  614. package/dist/locales/ar.json +73 -1
  615. package/dist/locales/de.json +73 -1
  616. package/dist/locales/el.json +73 -1
  617. package/dist/locales/en.json +73 -1
  618. package/dist/locales/es.json +73 -1
  619. package/dist/locales/fr.json +73 -1
  620. package/dist/locales/hi.json +73 -1
  621. package/dist/locales/it.json +73 -1
  622. package/dist/locales/ja.json +73 -1
  623. package/dist/locales/nl.json +73 -1
  624. package/dist/locales/pl.json +73 -1
  625. package/dist/locales/pt.json +73 -1
  626. package/dist/locales/ro.json +73 -1
  627. package/dist/locales/ru.json +73 -1
  628. package/dist/locales/sq.json +73 -1
  629. package/dist/locales/sv.json +73 -1
  630. package/dist/locales/tr.json +73 -1
  631. package/dist/locales/zh.json +73 -1
  632. package/dist/patterns/alia-assistant/index.js +1 -1
  633. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  634. package/dist/patterns/patient-shell/index.js +1 -1
  635. package/dist/tokens.css +3 -2
  636. package/package.json +14 -1
  637. package/dist/_chunks/accordion-9lJSMMsZ.js.map +0 -1
  638. package/dist/_chunks/address-autocomplete-CT-9AOli.js +0 -358
  639. package/dist/_chunks/address-autocomplete-CT-9AOli.js.map +0 -1
  640. package/dist/_chunks/agenda-tray-T-BumlGZ.js.map +0 -1
  641. package/dist/_chunks/ai-prompt-input-BwEACCPm.js.map +0 -1
  642. package/dist/_chunks/ai-tools-rail-CInA_1-E.js.map +0 -1
  643. package/dist/_chunks/appointment-tray-BMl89NPW.js.map +0 -1
  644. package/dist/_chunks/audio-recorder-DjXLP4aF.js.map +0 -1
  645. package/dist/_chunks/autocomplete-CcCFlVf-.js.map +0 -1
  646. package/dist/_chunks/bishop-score-CjsB9bM-.js +0 -185
  647. package/dist/_chunks/bishop-score-CjsB9bM-.js.map +0 -1
  648. package/dist/_chunks/bmi-calculator-n-823_1V.js +0 -258
  649. package/dist/_chunks/bmi-calculator-n-823_1V.js.map +0 -1
  650. package/dist/_chunks/booking-L8-YP8BJ.js.map +0 -1
  651. package/dist/_chunks/breadcrumb-OTbaY70e.js.map +0 -1
  652. package/dist/_chunks/calendar-oYWOCrnf.js.map +0 -1
  653. package/dist/_chunks/care-plan-card-BwVUyUBb.js.map +0 -1
  654. package/dist/_chunks/care-plan-entry-card-VzdQHcOL.js.map +0 -1
  655. package/dist/_chunks/chart-Cg3e9EH9.js.map +0 -1
  656. package/dist/_chunks/chat-container-ogB4OskO.js.map +0 -1
  657. package/dist/_chunks/chat-input-B5zjNEUN.js.map +0 -1
  658. package/dist/_chunks/checkbox-DRcOdmXv.js.map +0 -1
  659. package/dist/_chunks/collapsible-X3oaLPU3.js.map +0 -1
  660. package/dist/_chunks/color-picker-FXpItIaF.js.map +0 -1
  661. package/dist/_chunks/combobox-BC-DFx8G.js.map +0 -1
  662. package/dist/_chunks/command-palette-BiPAAno-.js.map +0 -1
  663. package/dist/_chunks/contact-profile-card-7BMB85T6.js.map +0 -1
  664. package/dist/_chunks/copy-field-CCq7j6Zc.js.map +0 -1
  665. package/dist/_chunks/date-range-picker-C5BWfH_T.js.map +0 -1
  666. package/dist/_chunks/date-time-picker-Ze1My59T.js.map +0 -1
  667. package/dist/_chunks/dependent-selector-DpzGtr_J.js.map +0 -1
  668. package/dist/_chunks/dialog-DMGnSelc.js.map +0 -1
  669. package/dist/_chunks/document-scanner-D2qehl3-.js.map +0 -1
  670. package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +0 -1
  671. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js +0 -2409
  672. package/dist/_chunks/editable-currency-cell-renderer-DHOspPee.js.map +0 -1
  673. package/dist/_chunks/file-upload-BosbPDb1.js.map +0 -1
  674. package/dist/_chunks/fiscal-code-input-DPtqluVb.js.map +0 -1
  675. package/dist/_chunks/freemium-paywall-CkWjv3o6.js.map +0 -1
  676. package/dist/_chunks/header-settings-CNOqIhoW.js.map +0 -1
  677. package/dist/_chunks/list-BOwqwy03.js.map +0 -1
  678. package/dist/_chunks/locale-picker-C9JmBht3.js.map +0 -1
  679. package/dist/_chunks/map-view-Tb5VfK9Y.js.map +0 -1
  680. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
  681. package/dist/_chunks/message-tray-CVyJajVJ.js.map +0 -1
  682. package/dist/_chunks/multi-select-BcPylvHR.js.map +0 -1
  683. package/dist/_chunks/navigation-menu-C6lBYVv9.js.map +0 -1
  684. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
  685. package/dist/_chunks/notification-tray-DlgenTEe.js.map +0 -1
  686. package/dist/_chunks/number-input-Dj5L3pXK.js.map +0 -1
  687. package/dist/_chunks/operator-hero-f_KaRhw5.js.map +0 -1
  688. package/dist/_chunks/otp-input-xQ4Ps5VY.js.map +0 -1
  689. package/dist/_chunks/pagination-DQOgnxxw.js.map +0 -1
  690. package/dist/_chunks/patient-search-DR9XUYRQ.js.map +0 -1
  691. package/dist/_chunks/patient-summary-card-hEmr4eTW.js.map +0 -1
  692. package/dist/_chunks/payment-form-nXocS_MX.js.map +0 -1
  693. package/dist/_chunks/pdf-viewer-GsfNqeeT.js.map +0 -1
  694. package/dist/_chunks/phone-input-DVXhNlIl.js.map +0 -1
  695. package/dist/_chunks/popover-DTbfAuR0.js.map +0 -1
  696. package/dist/_chunks/practice-results-DND2SAt7.js.map +0 -1
  697. package/dist/_chunks/privacy-lock-C7JyMf0y.js.map +0 -1
  698. package/dist/_chunks/product-hub-panel-CAXDFeGP.js.map +0 -1
  699. package/dist/_chunks/public-footer.agent-CfXuW1x6.js.map +0 -1
  700. package/dist/_chunks/qr-code-DNXhi6se.js.map +0 -1
  701. package/dist/_chunks/recaptcha-widget-BCNHsgqt.js.map +0 -1
  702. package/dist/_chunks/registry-nPAVE19X.js +0 -21
  703. package/dist/_chunks/registry-nPAVE19X.js.map +0 -1
  704. package/dist/_chunks/resizable-3vzqDlg6.js.map +0 -1
  705. package/dist/_chunks/reviews-panel-DBktKm7i.js.map +0 -1
  706. package/dist/_chunks/rich-text-editor-VawKN1FI.js.map +0 -1
  707. package/dist/_chunks/search-bar-SY2BcV2N.js.map +0 -1
  708. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
  709. package/dist/_chunks/select-CEtRcon5.js.map +0 -1
  710. package/dist/_chunks/sheet-taJer-Ha.js.map +0 -1
  711. package/dist/_chunks/sidebar-DaB4ulxH.js.map +0 -1
  712. package/dist/_chunks/sign-document-CdAiHiCh.js.map +0 -1
  713. package/dist/_chunks/signature-capture-COi0Uiqu.js.map +0 -1
  714. package/dist/_chunks/slider-BHWzXdjt.js.map +0 -1
  715. package/dist/_chunks/sparkline-DGhCSw8M.js.map +0 -1
  716. package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +0 -1
  717. package/dist/_chunks/stepper-progress-DDjq5nei.js.map +0 -1
  718. package/dist/_chunks/switch-BJ6HD3Mn.js.map +0 -1
  719. package/dist/_chunks/tabs-BIQ0ew1T.js.map +0 -1
  720. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
  721. package/dist/_chunks/task-tray-CAncV-QQ.js.map +0 -1
  722. package/dist/_chunks/text-area-BIx0tZ05.js.map +0 -1
  723. package/dist/_chunks/text-input-BaClJL8Y.js.map +0 -1
  724. package/dist/_chunks/theme-toggle-DETmSu_h.js.map +0 -1
  725. package/dist/_chunks/time-picker-B5umYwfv.js.map +0 -1
  726. package/dist/_chunks/timeline-DQa5Tyz4.js.map +0 -1
  727. package/dist/_chunks/tooth-scheme-BIx1O2aJ.js.map +0 -1
  728. package/dist/_chunks/transcript-panel-CLHmv83g.js.map +0 -1
  729. package/dist/_chunks/unit-converter-C1V3ACM9.js +0 -196
  730. package/dist/_chunks/unit-converter-C1V3ACM9.js.map +0 -1
  731. package/dist/_chunks/use-password-requirements-DsgduV1x.js.map +0 -1
  732. package/dist/_chunks/warning-stack-Cv4fr5zo.js +0 -220
  733. package/dist/_chunks/warning-stack-Cv4fr5zo.js.map +0 -1
  734. package/dist/_chunks/whatsapp-button-DUjlWGKf.js.map +0 -1
  735. package/dist/_chunks/workflow-map-JAZryZJr.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-upload-BosbPDb1.js","sources":["../../node_modules/lucide-react/dist/esm/icons/cloud-upload.js","../../node_modules/lucide-react/dist/esm/icons/file-archive.js","../../node_modules/lucide-react/dist/esm/icons/file-image.js","../../node_modules/lucide-react/dist/esm/icons/file.js","../../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../node_modules/lucide-react/dist/esm/icons/upload.js","../../src/components/file-upload/file-upload.agent.ts","../../src/components/file-upload/file-upload.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 [\"path\", { d: \"M12 13v8\", key: \"1l5pq0\" }],\n [\"path\", { d: \"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\", key: \"1pljnt\" }],\n [\"path\", { d: \"m8 17 4-4 4 4\", key: \"1quai1\" }]\n];\nconst CloudUpload = createLucideIcon(\"cloud-upload\", __iconNode);\n\nexport { __iconNode, CloudUpload as default };\n//# sourceMappingURL=cloud-upload.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5\",\n key: \"4pqfef\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M8 12v-1\", key: \"1ej8lb\" }],\n [\"path\", { d: \"M8 18v-2\", key: \"qcmpov\" }],\n [\"path\", { d: \"M8 7V6\", key: \"1nbb54\" }],\n [\"circle\", { cx: \"8\", cy: \"20\", r: \"2\", key: \"ckkr5m\" }]\n];\nconst FileArchive = createLucideIcon(\"file-archive\", __iconNode);\n\nexport { __iconNode, FileArchive as default };\n//# sourceMappingURL=file-archive.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n];\nconst FileImage = createLucideIcon(\"file-image\", __iconNode);\n\nexport { __iconNode, FileImage as default };\n//# sourceMappingURL=file-image.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.js.map\n","/**\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 = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\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 [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n];\nconst Upload = createLucideIcon(\"upload\", __iconNode);\n\nexport { __iconNode, Upload as default };\n//# sourceMappingURL=upload.js.map\n","import type { AgentAdapter } from '../../agent/types';\nimport type { FileUploadHandle } from './file-upload';\n\nexport const fileUploadAgent: AgentAdapter<FileUploadHandle> = {\n id: 'file-upload',\n capabilities: ['submit', 'dismiss'],\n state: {\n files: {\n type: 'Array<{ id, name, size, status }>',\n description:\n 'Files currently tracked by the uploader. Identifiers and metadata only — never file content.',\n read: (handle) => handle.getFiles(),\n },\n },\n actions: {\n remove_file: {\n safety: 'destructive',\n argsType: '{ id: string }',\n description: 'Remove the file with the given id from the upload list.',\n invoke: (handle, args: { id: string }) => {\n handle.removeFile(args.id);\n },\n },\n clear: {\n safety: 'destructive',\n description: 'Remove all files from the upload list.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'file-upload' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-file-id',\n description: 'Each tracked file emits its id as data-file-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ClipboardEvent,\n type ReactNode,\n} from 'react';\nimport { useDropzone, type FileRejection } from 'react-dropzone';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n AlertCircle,\n CheckCircle2,\n CloudUpload,\n File as FileIcon,\n FileArchive,\n FileImage,\n FileSpreadsheet,\n FileText,\n Loader2,\n Upload,\n X,\n} from 'lucide-react';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useAgentRegistration } from '../../agent';\nimport { fileUploadAgent } from './file-upload.agent';\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\nexport interface FileUploadFile {\n file: File;\n id: string;\n status: 'pending' | 'uploading' | 'complete' | 'error';\n progress: number;\n preview?: string;\n error?: string;\n}\n\nexport interface FileUploadRejection {\n file: File;\n reason:\n | 'file-too-large'\n | 'file-too-small'\n | 'file-invalid-type'\n | 'too-many-files';\n}\n\n// Curated agent-readiness handle — see file-upload.agent.ts.\nexport interface FileUploadHandle {\n getFiles: () => Array<{\n id: string;\n name: string;\n size: number;\n status: FileUploadFile['status'];\n }>;\n removeFile: (id: string) => void;\n clear: () => void;\n}\n\nexport interface FileUploadProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n accept?: Record<string, string[]>;\n maxSize?: number;\n minSize?: number;\n maxFiles?: number;\n multiple?: boolean;\n disabled?: boolean;\n strictAccept?: boolean;\n onDrop?: (accepted: File[], rejected: FileUploadRejection[]) => void;\n onUpload?: (\n file: File,\n helpers: {\n signal: AbortSignal;\n onProgress: (percent: number) => void;\n },\n ) => Promise<void>;\n onRemove?: (file: FileUploadFile) => void;\n onReject?: (rejections: FileUploadRejection[]) => void;\n variant?: 'dropzone' | 'button' | 'both';\n showPreview?: boolean;\n className?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------------- */\n\nconst dropzoneVariants = cva(\n [\n 'ds:relative ds:flex ds:flex-col ds:items-center ds:justify-center',\n 'ds:min-h-48 ds:px-[var(--spacing-lg)] ds:py-[var(--spacing-xl)]',\n 'ds:rounded-[var(--radius-lg)] ds:border-2 ds:border-dashed',\n 'ds:bg-background',\n 'ds:transition-all 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:cursor-pointer',\n 'ds:group',\n ].join(' '),\n {\n variants: {\n isDragActive: {\n true: 'ds:border-primary ds:bg-primary/10 ds:scale-[1.01]',\n false:\n 'ds:border-border ds:hover:border-muted-foreground/40 ds:hover:bg-muted/5',\n },\n hasError: {\n true: 'ds:border-destructive ds:bg-destructive/5 ds:hover:border-destructive',\n false: '',\n },\n isDisabled: {\n true: 'ds:cursor-not-allowed ds:opacity-50 ds:hover:border-border ds:hover:bg-background',\n false: '',\n },\n },\n defaultVariants: {\n isDragActive: false,\n hasError: false,\n isDisabled: false,\n },\n },\n);\n\nconst browseButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)]',\n 'ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-primary/30 ds:bg-primary/5',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-sm)]',\n 'ds:text-primary ds:text-[length:var(--font-size-sm)] ds:font-medium',\n 'ds:transition-all ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-primary/10 ds:hover:border-primary/50',\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\nconst fileItemVariants = cva(\n [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] ds:bg-background',\n 'ds:p-[var(--spacing-md)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-foreground',\n 'ds:transition-all ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n status: {\n pending: 'ds:border-border',\n uploading: 'ds:border-primary/30 ds:bg-primary/[0.02]',\n complete: 'ds:border-[var(--success)]/30 ds:bg-[var(--success)]/[0.02]',\n error: 'ds:border-destructive/30 ds:bg-destructive/[0.02]',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nconst actionButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:text-foreground ds:hover:bg-muted/40',\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 ].join(' '),\n);\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\nfunction generateId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\nfunction isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n}\n\nfunction getFileIcon(file: File): ReactNode {\n const ext = file.name.split('.').pop()?.toLowerCase() ?? '';\n if (['pdf', 'doc', 'docx', 'txt', 'rtf'].includes(ext)) {\n return (\n <FileText\n aria-hidden=\"true\"\n className=\"ds:size-10 ds:shrink-0 ds:text-muted-foreground\"\n />\n );\n }\n if (['zip', 'rar', '7z', 'tar', 'gz'].includes(ext)) {\n return (\n <FileArchive\n aria-hidden=\"true\"\n className=\"ds:size-10 ds:shrink-0 ds:text-muted-foreground\"\n />\n );\n }\n if (['xls', 'xlsx', 'csv'].includes(ext)) {\n return (\n <FileSpreadsheet\n aria-hidden=\"true\"\n className=\"ds:size-10 ds:shrink-0 ds:text-muted-foreground\"\n />\n );\n }\n if (['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'bmp'].includes(ext)) {\n return (\n <FileImage\n aria-hidden=\"true\"\n className=\"ds:size-10 ds:shrink-0 ds:text-muted-foreground\"\n />\n );\n }\n return (\n <FileIcon\n aria-hidden=\"true\"\n className=\"ds:size-10 ds:shrink-0 ds:text-muted-foreground\"\n />\n );\n}\n\nfunction getStatusIcon(status: FileUploadFile['status']): ReactNode {\n switch (status) {\n case 'uploading':\n return (\n <Loader2\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-primary ds:animate-spin\"\n />\n );\n case 'complete':\n return (\n <CheckCircle2\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[var(--success)]\"\n />\n );\n case 'error':\n return (\n <AlertCircle\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-destructive\"\n />\n );\n default:\n return null;\n }\n}\n\nconst UNIT_KEYS = [\n 'inputs.fileUpload.units.bytes',\n 'inputs.fileUpload.units.kilobytes',\n 'inputs.fileUpload.units.megabytes',\n 'inputs.fileUpload.units.gigabytes',\n] as const;\n\nconst UNIT_FALLBACKS = ['B', 'KB', 'MB', 'GB'] as const;\n\nfunction formatFileSize(\n bytes: number,\n locale: string,\n t: (key: string, fallback: string) => string,\n): string {\n let value = bytes;\n let unitIndex = 0;\n while (value >= 1024 && unitIndex < UNIT_FALLBACKS.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n const formatted = new Intl.NumberFormat(locale, {\n maximumFractionDigits: unitIndex === 0 ? 0 : 1,\n }).format(value);\n const unit = t(UNIT_KEYS[unitIndex], UNIT_FALLBACKS[unitIndex]);\n return `${formatted} ${unit}`;\n}\n\nfunction mapRejectionCode(code: string): FileUploadRejection['reason'] {\n switch (code) {\n case 'file-too-large':\n return 'file-too-large';\n case 'file-too-small':\n return 'file-too-small';\n case 'file-invalid-type':\n return 'file-invalid-type';\n case 'too-many-files':\n return 'too-many-files';\n default:\n return 'file-invalid-type';\n }\n}\n\nfunction getExtensionFromName(name: string): string {\n const parts = name.split('.');\n return parts.length > 1 ? `.${parts.pop()!.toLowerCase()}` : '';\n}\n\n// Single source of truth for `accept`-based file matching.\n// Semantics: file passes if any entry matches BOTH mime AND extension.\n// An empty extensions list for an entry means \"any extension is fine\".\nfunction isAcceptedFile(file: File, accept: Record<string, string[]>): boolean {\n const fileExt = getExtensionFromName(file.name);\n for (const [mime, extensions] of Object.entries(accept)) {\n const mimeMatch =\n mime === '*/*' ||\n (mime.endsWith('/*') && file.type.startsWith(mime.replace('/*', '/'))) ||\n file.type === mime;\n const extMatch =\n extensions.length === 0 ||\n extensions.some((ext) => ext.toLowerCase() === fileExt);\n if (mimeMatch && extMatch) return true;\n }\n return false;\n}\n\nfunction formatAcceptHint(accept: Record<string, string[]>): string {\n const extensions: string[] = [];\n for (const exts of Object.values(accept)) {\n for (const ext of exts) {\n extensions.push(ext.toUpperCase().replace('.', ''));\n }\n }\n if (extensions.length > 0) return extensions.join(', ');\n const mimeLabels: string[] = [];\n for (const mime of Object.keys(accept)) {\n if (mime.endsWith('/*')) {\n mimeLabels.push(mime.replace('/*', '').split('/').pop() ?? mime);\n } else {\n mimeLabels.push(mime.split('/').pop() ?? mime);\n }\n }\n return mimeLabels.join(', ');\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n id,\n accept,\n maxSize,\n minSize,\n maxFiles = 1,\n multiple = false,\n disabled,\n strictAccept = false,\n onDrop: onDropProp,\n onUpload,\n onRemove,\n onReject,\n variant = 'both',\n showPreview = true,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const fallbackId = useId();\n\n const effectiveDisabled = ctx.disabled || disabled;\n const hasError = ctx.invalid;\n const inputId = ctx.id || fallbackId;\n\n const [files, setFiles] = useState<FileUploadFile[]>([]);\n const [rejections, setRejections] = useState<FileUploadRejection[]>([]);\n const abortControllers = useRef<Map<string, AbortController>>(new Map());\n const statusRef = useRef<HTMLSpanElement>(null);\n const filesRef = useRef<FileUploadFile[]>(files);\n filesRef.current = files;\n\n const announceStatus = useCallback((message: string) => {\n if (statusRef.current) {\n statusRef.current.textContent = message;\n }\n }, []);\n\n const validateStrictAccept = useCallback(\n (file: File): boolean => {\n if (!strictAccept || !accept) return true;\n return isAcceptedFile(file, accept);\n },\n [strictAccept, accept],\n );\n\n const uploadFile = useCallback(\n async (uploadFileState: FileUploadFile) => {\n if (!onUpload) return;\n const controller = new AbortController();\n abortControllers.current.set(uploadFileState.id, controller);\n\n setFiles((prev) =>\n prev.map((f) =>\n f.id === uploadFileState.id\n ? { ...f, status: 'uploading', progress: 0 }\n : f,\n ),\n );\n announceStatus(t('inputs.fileUpload.uploading', 'Uploading\\u2026'));\n\n try {\n await onUpload(uploadFileState.file, {\n signal: controller.signal,\n onProgress: (percent: number) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === uploadFileState.id ? { ...f, progress: percent } : f,\n ),\n );\n announceStatus(\n t('inputs.fileUpload.progress', '{{percent}}% uploaded', {\n percent,\n }),\n );\n },\n });\n setFiles((prev) =>\n prev.map((f) =>\n f.id === uploadFileState.id\n ? { ...f, status: 'complete', progress: 100 }\n : f,\n ),\n );\n announceStatus(t('inputs.fileUpload.complete', 'Upload complete'));\n } catch (err: unknown) {\n if (controller.signal.aborted) {\n setFiles((prev) => prev.filter((f) => f.id !== uploadFileState.id));\n return;\n }\n const errorMessage =\n err instanceof Error\n ? err.message\n : t('inputs.fileUpload.errors.uploadFailed', 'Upload failed');\n setFiles((prev) =>\n prev.map((f) =>\n f.id === uploadFileState.id\n ? { ...f, status: 'error', error: errorMessage }\n : f,\n ),\n );\n } finally {\n abortControllers.current.delete(uploadFileState.id);\n }\n },\n [onUpload, announceStatus, t],\n );\n\n const handleDrop = useCallback(\n (accepted: File[], fileRejections: FileRejection[]) => {\n const mapped: FileUploadRejection[] = fileRejections.flatMap((r) =>\n r.errors.map((e) => ({\n file: r.file,\n reason: mapRejectionCode(e.code),\n })),\n );\n\n const strictRejected: FileUploadRejection[] = [];\n const strictAccepted: File[] = [];\n for (const file of accepted) {\n if (!validateStrictAccept(file)) {\n strictRejected.push({ file, reason: 'file-invalid-type' });\n } else {\n strictAccepted.push(file);\n }\n }\n\n const allRejections = [...mapped, ...strictRejected];\n setRejections(allRejections);\n\n if (allRejections.length > 0) {\n onReject?.(allRejections);\n }\n\n const newFiles: FileUploadFile[] = strictAccepted.map((file) => ({\n file,\n id: generateId(),\n status: 'pending' as const,\n progress: 0,\n preview: isImageFile(file) ? URL.createObjectURL(file) : undefined,\n }));\n\n setFiles((prev) => {\n if (!multiple && maxFiles === 1) {\n for (const f of prev) {\n if (f.preview) URL.revokeObjectURL(f.preview);\n }\n return newFiles;\n }\n return [...prev, ...newFiles];\n });\n\n onDropProp?.(strictAccepted, allRejections);\n announceStatus(\n t('inputs.fileUpload.filesSelected', '{{count}} file(s) selected', {\n count: strictAccepted.length,\n }),\n );\n\n for (const nf of newFiles) {\n void uploadFile(nf);\n }\n },\n [\n multiple,\n maxFiles,\n onDropProp,\n onReject,\n validateStrictAccept,\n announceStatus,\n uploadFile,\n t,\n ],\n );\n\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n accept,\n maxSize,\n minSize,\n maxFiles: multiple ? maxFiles : 1,\n multiple,\n disabled: effectiveDisabled,\n onDrop: handleDrop,\n noClick: variant === 'button',\n noKeyboard: variant === 'button',\n });\n\n const handleCancel = useCallback((fileId: string) => {\n const controller = abortControllers.current.get(fileId);\n controller?.abort();\n setFiles((prev) => {\n const file = prev.find((f) => f.id === fileId);\n if (file?.preview) URL.revokeObjectURL(file.preview);\n return prev.filter((f) => f.id !== fileId);\n });\n }, []);\n\n const handleRemove = useCallback(\n (fileId: string) => {\n const removed = filesRef.current.find((f) => f.id === fileId);\n if (removed?.preview) URL.revokeObjectURL(removed.preview);\n setFiles((prev) => prev.filter((f) => f.id !== fileId));\n if (removed) {\n onRemove?.(removed);\n }\n },\n [onRemove],\n );\n\n const clearAll = useCallback(() => {\n for (const f of filesRef.current) {\n const controller = abortControllers.current.get(f.id);\n controller?.abort();\n if (f.preview) URL.revokeObjectURL(f.preview);\n }\n setFiles([]);\n }, []);\n\n const agentHandle = useMemo<FileUploadHandle>(\n () => ({\n getFiles: () =>\n filesRef.current.map((f) => ({\n id: f.id,\n name: f.file.name,\n size: f.file.size,\n status: f.status,\n })),\n removeFile: (fileId: string) => handleRemove(fileId),\n clear: () => clearAll(),\n }),\n [handleRemove, clearAll],\n );\n useAgentRegistration(fileUploadAgent, agentHandle, id);\n\n const validatePastedFiles = useCallback(\n (\n pastedFiles: File[],\n ): { accepted: File[]; rejected: FileUploadRejection[] } => {\n const accepted: File[] = [];\n const rejected: FileUploadRejection[] = [];\n const effectiveMaxFiles = multiple ? maxFiles : 1;\n\n for (const file of pastedFiles) {\n if (accepted.length >= effectiveMaxFiles) {\n rejected.push({ file, reason: 'too-many-files' });\n continue;\n }\n if (maxSize !== undefined && file.size > maxSize) {\n rejected.push({ file, reason: 'file-too-large' });\n continue;\n }\n if (minSize !== undefined && file.size < minSize) {\n rejected.push({ file, reason: 'file-too-small' });\n continue;\n }\n if (accept && !isAcceptedFile(file, accept)) {\n rejected.push({ file, reason: 'file-invalid-type' });\n continue;\n }\n accepted.push(file);\n }\n return { accepted, rejected };\n },\n [accept, maxSize, minSize, maxFiles, multiple],\n );\n\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLDivElement>) => {\n if (effectiveDisabled) return;\n const pastedFiles = Array.from(event.clipboardData.files);\n if (pastedFiles.length > 0) {\n event.preventDefault();\n const { accepted, rejected } = validatePastedFiles(pastedFiles);\n const fileRejections: FileRejection[] = rejected.map((r) => ({\n file: r.file,\n errors: [{ code: r.reason, message: r.reason }],\n }));\n handleDrop(accepted, fileRejections);\n }\n },\n [effectiveDisabled, handleDrop, validatePastedFiles],\n );\n\n useEffect(() => {\n return () => {\n for (const f of filesRef.current) {\n if (f.preview) URL.revokeObjectURL(f.preview);\n }\n };\n }, []);\n\n const constraintHints = useMemo(() => {\n const hints: string[] = [];\n if (accept) {\n hints.push(formatAcceptHint(accept));\n }\n if (maxSize) {\n hints.push(\n t('inputs.fileUpload.maxSizeHint', 'Max {{size}}', {\n size: formatFileSize(maxSize, i18n.language, t),\n }),\n );\n }\n if (multiple && maxFiles > 1) {\n hints.push(\n t('inputs.fileUpload.maxFilesHint', 'Up to {{count}} files', {\n count: maxFiles,\n }),\n );\n }\n return hints;\n }, [accept, maxSize, multiple, maxFiles, t, i18n.language]);\n\n const errorMessages = useMemo(() => {\n return rejections.map((r) => {\n switch (r.reason) {\n case 'file-too-large':\n return t(\n 'inputs.fileUpload.errors.fileTooLarge',\n 'File exceeds {{maxSize}}',\n {\n maxSize: maxSize\n ? formatFileSize(maxSize, i18n.language, t)\n : '',\n },\n );\n case 'file-too-small':\n return t(\n 'inputs.fileUpload.errors.fileTooSmall',\n 'File is smaller than {{minSize}}',\n {\n minSize: minSize\n ? formatFileSize(minSize, i18n.language, t)\n : '',\n },\n );\n case 'file-invalid-type':\n return t(\n 'inputs.fileUpload.errors.fileInvalidType',\n 'File type not accepted',\n );\n case 'too-many-files':\n return t(\n 'inputs.fileUpload.errors.tooManyFiles',\n 'Maximum {{maxFiles}} files allowed',\n {\n maxFiles,\n },\n );\n }\n });\n }, [rejections, t, maxSize, minSize, maxFiles, i18n.language]);\n\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <ul className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:list-none ds:p-0 ds:m-0\">\n {files.map((f) => (\n <li\n key={f.id}\n data-file-id={f.id}\n className={fileItemVariants({ status: f.status })}\n >\n {showPreview && f.preview ? (\n <img\n src={f.preview}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"ds:size-12 ds:shrink-0 ds:rounded-[var(--radius-md)] ds:object-cover ds:border ds:border-border\"\n />\n ) : (\n getFileIcon(f.file)\n )}\n\n <div className=\"ds:flex-1 ds:min-w-0\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <p className=\"ds:truncate type-label ds:m-0\">{f.file.name}</p>\n {getStatusIcon(f.status)}\n </div>\n <p className=\"type-meta ds:text-muted-foreground ds:m-0 ds:mt-0.5\">\n {formatFileSize(f.file.size, i18n.language, t)}\n {f.status === 'uploading' && (\n <span className=\"ds:ms-[var(--spacing-sm)] ds:text-primary ds:font-medium\">\n {f.progress}%\n </span>\n )}\n {f.status === 'complete' && (\n <span className=\"ds:ms-[var(--spacing-sm)] ds:text-[var(--success)] ds:font-medium\">\n {t('inputs.fileUpload.complete', 'Complete')}\n </span>\n )}\n </p>\n\n {f.status === 'uploading' && (\n <div\n role=\"progressbar\"\n aria-label={f.file.name}\n aria-valuenow={f.progress}\n aria-valuemin={0}\n aria-valuemax={100}\n className=\"ds:mt-[var(--spacing-sm)] ds:h-1.5 ds:w-full ds:rounded-[var(--radius-full)] ds:bg-muted ds:overflow-hidden\"\n >\n <div\n className=\"ds:h-full ds:rounded-[var(--radius-full)] ds:bg-primary ds:transition-[inline-size] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none\"\n // eslint-disable-next-line react/forbid-dom-props -- progress bar width is runtime-computed\n style={{ inlineSize: `${f.progress}%` }}\n />\n </div>\n )}\n\n {f.status === 'error' && f.error && (\n <p\n role=\"alert\"\n className=\"type-meta ds:text-destructive ds:m-0 ds:mt-[var(--spacing-xs)]\"\n >\n {f.error}\n </p>\n )}\n </div>\n\n {f.status === 'uploading' && (\n <button\n type=\"button\"\n onClick={() => handleCancel(f.id)}\n aria-label={t('inputs.fileUpload.cancel', 'Cancel upload')}\n className={actionButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n )}\n {(f.status === 'complete' ||\n f.status === 'pending' ||\n f.status === 'error') && (\n <button\n type=\"button\"\n onClick={() => handleRemove(f.id)}\n aria-label={t('inputs.fileUpload.remove', 'Remove file')}\n className={actionButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n )}\n </li>\n ))}\n </ul>\n );\n };\n\n const renderDropzone = () => {\n if (variant === 'button') return null;\n\n const rootProps = getRootProps({\n className: dropzoneVariants({\n isDragActive,\n hasError: hasError ?? false,\n isDisabled: effectiveDisabled ?? false,\n className,\n }),\n tabIndex: effectiveDisabled ? -1 : 0,\n });\n\n // Compose the caller's forwarded ref with react-dropzone's internal\n // root ref. Spreading `{...rootProps}` and then setting `ref={ref}`\n // would clobber dropzone's ref callback, breaking its keydown guard\n // (`rootRef.current.isEqualNode(event.target)`).\n const rootRefFromDropzone = (\n rootProps as unknown as {\n ref?:\n | ((node: HTMLDivElement | null) => void)\n | { current: HTMLDivElement | null };\n }\n ).ref;\n const composedRef = (node: HTMLDivElement | null) => {\n if (typeof rootRefFromDropzone === 'function') {\n rootRefFromDropzone(node);\n } else if (rootRefFromDropzone) {\n (rootRefFromDropzone as { current: HTMLDivElement | null }).current =\n node;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as { current: HTMLDivElement | null }).current = node;\n }\n };\n return (\n <div\n {...rootProps}\n ref={composedRef}\n onPaste={handlePaste}\n id={inputId}\n aria-label={t(\n 'inputs.fileUpload.dropHere',\n 'Drop files here or click to browse',\n )}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n aria-required={ctx.required || undefined}\n data-testid=\"file-upload-dropzone\"\n >\n <input\n {...getInputProps({\n 'aria-label': t(\n 'inputs.fileUpload.dropHere',\n 'Drop files here or click to browse',\n ),\n })}\n />\n\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:items-center ds:justify-center ds:size-14 ds:rounded-[var(--radius-full)] ds:bg-primary/10 ds:text-primary ds:transition-colors ds:duration-[var(--animation-duration)] ds:group-hover:bg-primary/15 ds:motion-reduce:transition-none\">\n {isDragActive ? (\n <CloudUpload aria-hidden=\"true\" className=\"ds:size-7\" />\n ) : (\n <Upload aria-hidden=\"true\" className=\"ds:size-7\" />\n )}\n </div>\n\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)]\">\n <p className=\"type-label ds:text-foreground ds:text-center ds:m-0\">\n {isDragActive\n ? t('inputs.fileUpload.dropActive', 'Drop files here')\n : t(\n 'inputs.fileUpload.dropHere',\n 'Drop files here or click to browse',\n )}\n </p>\n\n {constraintHints.length > 0 && !isDragActive && (\n <p className=\"type-meta ds:text-muted-foreground ds:text-center ds:m-0\">\n {constraintHints.join(' \\u00b7 ')}\n </p>\n )}\n </div>\n\n {variant === 'both' && !isDragActive && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n open();\n }}\n disabled={effectiveDisabled}\n className={browseButtonVariants({\n className: 'ds:mt-[var(--spacing-xs)]',\n })}\n >\n <Upload aria-hidden=\"true\" className=\"ds:size-4\" />\n {t('inputs.fileUpload.browse', 'Browse files')}\n </button>\n )}\n </div>\n </div>\n );\n };\n\n const renderButton = () => {\n if (variant === 'dropzone') return null;\n\n if (variant === 'button') {\n return (\n <div onPaste={handlePaste} ref={ref}>\n <input\n {...getInputProps({\n 'aria-label': t('inputs.fileUpload.browse', 'Browse files'),\n })}\n />\n <button\n type=\"button\"\n onClick={open}\n disabled={effectiveDisabled}\n className={browseButtonVariants({ className })}\n id={variant === 'button' ? inputId : undefined}\n aria-describedby={\n variant === 'button' ? ctx.describedBy || undefined : undefined\n }\n aria-invalid={\n variant === 'button' ? ctx.invalid || undefined : undefined\n }\n aria-required={\n variant === 'button' ? ctx.required || undefined : undefined\n }\n >\n <Upload aria-hidden=\"true\" className=\"ds:size-4\" />\n {t('inputs.fileUpload.browse', 'Browse files')}\n </button>\n </div>\n );\n }\n\n return null;\n };\n\n return (\n <div data-component=\"file-upload\" data-component-id={id}>\n {renderDropzone()}\n {renderButton()}\n {renderFileList()}\n\n {errorMessages.length > 0 && (\n <div\n role=\"alert\"\n className=\"ds:mt-[var(--spacing-sm)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n {errorMessages.map((msg, i) => (\n <div\n key={i}\n className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\"\n >\n <AlertCircle\n aria-hidden=\"true\"\n className=\"ds:size-3.5 ds:shrink-0 ds:text-destructive\"\n />\n <p className=\"type-meta ds:text-destructive ds:m-0\">{msg}</p>\n </div>\n ))}\n </div>\n )}\n\n <span\n ref={statusRef}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n />\n </div>\n );\n },\n);\n\nFileUpload.displayName = 'FileUpload';\n"],"names":["__iconNode","CloudUpload","createLucideIcon","FileArchive","FileImage","File","LoaderCircle","Upload","fileUploadAgent","handle","args","dropzoneVariants","cva","browseButtonVariants","fileItemVariants","actionButtonVariants","generateId","isImageFile","file","getFileIcon","ext","_a","jsx","FileText","FileSpreadsheet","FileIcon","getStatusIcon","status","Loader2","CheckCircle2","AlertCircle","UNIT_KEYS","UNIT_FALLBACKS","formatFileSize","bytes","locale","t","value","unitIndex","formatted","unit","mapRejectionCode","code","getExtensionFromName","name","parts","isAcceptedFile","accept","fileExt","mime","extensions","mimeMatch","extMatch","formatAcceptHint","exts","mimeLabels","FileUpload","forwardRef","id","maxSize","minSize","maxFiles","multiple","disabled","strictAccept","onDropProp","onUpload","onRemove","onReject","variant","showPreview","className","ref","i18n","useTranslation","ctx","useFormField","fallbackId","useId","effectiveDisabled","hasError","inputId","files","setFiles","useState","rejections","setRejections","abortControllers","useRef","statusRef","filesRef","announceStatus","useCallback","message","validateStrictAccept","uploadFile","uploadFileState","controller","prev","f","percent","err","errorMessage","handleDrop","accepted","fileRejections","mapped","r","e","strictRejected","strictAccepted","allRejections","newFiles","nf","getRootProps","getInputProps","isDragActive","open","useDropzone","handleCancel","fileId","handleRemove","removed","clearAll","agentHandle","useMemo","useAgentRegistration","validatePastedFiles","pastedFiles","rejected","effectiveMaxFiles","handlePaste","event","useEffect","constraintHints","hints","errorMessages","renderFileList","jsxs","X","renderDropzone","rootProps","rootRefFromDropzone","node","renderButton","msg","i"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiscal-code-input-DPtqluVb.js","sources":["../../node_modules/lucide-react/dist/esm/icons/calculator.js","../../src/components/fiscal-code-input/fiscal-code-input.agent.ts","../../src/components/fiscal-code-input/is-valid-codice-fiscale.ts","../../src/components/fiscal-code-input/calculate-codice-fiscale.ts","../../src/components/fiscal-code-input/fiscal-code-input.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: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", key: \"1nb95v\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"6\", y2: \"6\", key: \"x4nwl0\" }],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"14\", y2: \"18\", key: \"wjye3r\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }]\n];\nconst Calculator = createLucideIcon(\"calculator\", __iconNode);\n\nexport { __iconNode, Calculator as default };\n//# sourceMappingURL=calculator.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — FiscalCodeInput. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { FiscalCodeInputHandle } from './fiscal-code-input';\n\nexport const fiscalCodeInputAgent: AgentAdapter<FiscalCodeInputHandle> = {\n id: 'fiscal-code-input',\n capabilities: ['edit_inline'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.fiscalCodeInput.state.value',\n description:\n 'Current codice fiscale, normalised (uppercased, 0–16 [A-Z0-9] characters).',\n read: (handle) => handle.getValue(),\n },\n isValid: {\n type: 'boolean',\n descriptionKey: 'ui.agent.fiscalCodeInput.state.isValid',\n description:\n 'Whether the value is 16 structurally-sound characters with a matching control character.',\n read: (handle) => handle.isValid(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n descriptionKey: 'ui.agent.fiscalCodeInput.actions.setValue',\n description:\n 'Replace the codice fiscale. The value is uppercased and stripped to [A-Z0-9], capped at 16 characters.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.fiscalCodeInput.actions.clear',\n description: 'Empty the input. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.fiscalCodeInput.actions.focus',\n description: 'Move keyboard focus to the codice fiscale input.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'fiscal-code-input',\n description: 'Marks the FiscalCodeInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* Codice Fiscale (Italian fiscal code) — client-side structural + */\n/* control-character checksum validator. */\n/* */\n/* SCOPE: this is a CLIENT MIRROR of the platform's */\n/* ValidateFiscalCodeService used ONLY to give instant feedback. It */\n/* validates two things and nothing more: */\n/* 1. The structural shape — 15 alphanumerics followed by 1 control */\n/* letter, where each position obeys its letter/digit class */\n/* (/^[A-Z0-9]{15}[A-Z]$/ plus the per-position class pattern). */\n/* 2. The 16th control character, derived from the first 15 via the */\n/* official odd/even per-position weighted-sum mod-26 algorithm. */\n/* */\n/* OUT OF SCOPE (server stays source of truth): birth-date / comune */\n/* Belfiore-code cross-checks and omocodia digit-substitution. A */\n/* structurally-correct code with a valid control character can still */\n/* be rejected by the server — the client never hard-blocks submit on */\n/* its own verdict. */\n/* ------------------------------------------------------------------ */\n\n/** Outcome of a structural + checksum check on a 16-char candidate. */\nexport type FiscalCodeReason =\n | 'empty'\n | 'incomplete'\n | 'badFormat'\n | 'badChecksum'\n | 'valid';\n\n/**\n * Position classes for the 15 informative characters. Positions are\n * 0-indexed. Letter positions accept A–Z; digit positions accept 0–9.\n * The 16th (control) character is a letter and validated separately.\n *\n * Standard layout (ignoring omocodia substitution, which the SERVER\n * handles): surname (0–2 letters), name (3–5 letters), year (6–7\n * digits), month (8 letter), day (9–10 digits), comune (11 letter +\n * 12–14 digits). For client structural feedback we accept the canonical\n * non-omocodic layout; omocodic variants surface as `badFormat` here and\n * are resolved server-side — documented as an accepted client limitation.\n */\nconst LETTER_POSITIONS = new Set([0, 1, 2, 3, 4, 5, 8, 11]);\nconst DIGIT_POSITIONS = new Set([6, 7, 9, 10, 12, 13, 14]);\n\nconst ODD_MAP: Readonly<Record<string, number>> = Object.freeze({\n '0': 1,\n '1': 0,\n '2': 5,\n '3': 7,\n '4': 9,\n '5': 13,\n '6': 15,\n '7': 17,\n '8': 19,\n '9': 21,\n A: 1,\n B: 0,\n C: 5,\n D: 7,\n E: 9,\n F: 13,\n G: 15,\n H: 17,\n I: 19,\n J: 21,\n K: 2,\n L: 4,\n M: 18,\n N: 20,\n O: 11,\n P: 3,\n Q: 6,\n R: 8,\n S: 12,\n T: 14,\n U: 16,\n V: 10,\n W: 22,\n X: 25,\n Y: 24,\n Z: 23,\n});\n\nconst EVEN_MAP: Readonly<Record<string, number>> = Object.freeze({\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n});\n\nconst REMAINDER_TO_CONTROL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n/** True when every informative position matches its letter/digit class. */\nfunction hasValidStructure(code: string): boolean {\n if (!/^[A-Z0-9]{15}[A-Z]$/.test(code)) return false;\n for (let i = 0; i < 15; i += 1) {\n const ch = code[i];\n const isDigit = ch >= '0' && ch <= '9';\n if (LETTER_POSITIONS.has(i) && isDigit) return false;\n if (DIGIT_POSITIONS.has(i) && !isDigit) return false;\n }\n return true;\n}\n\n/**\n * Compute the expected 16th control character from the first 15\n * informative characters. The input MUST already be 15 uppercase\n * `[A-Z0-9]` characters (callers guard with `hasValidStructure`).\n */\nexport function computeControlChar(first15: string): string {\n let sum = 0;\n for (let i = 0; i < 15; i += 1) {\n const ch = first15[i];\n // Per the official spec, odd POSITIONS (1st, 3rd, … — i.e. 0-indexed\n // even i) use the ODD weight table; even positions use the EVEN table.\n sum += i % 2 === 0 ? ODD_MAP[ch] : EVEN_MAP[ch];\n }\n return REMAINDER_TO_CONTROL[sum % 26];\n}\n\n/**\n * Classify a normalised (uppercased, `[A-Z0-9]`-only) candidate.\n *\n * - `empty` — no characters.\n * - `incomplete` — fewer than 16 characters.\n * - `badFormat` — 16 characters but the position-class pattern fails.\n * - `badChecksum` — 16 well-formed characters but the control char is wrong.\n * - `valid` — structurally sound and the control char matches.\n */\nexport function classifyCodiceFiscale(raw: string): FiscalCodeReason {\n if (raw.length === 0) return 'empty';\n if (raw.length < 16) return 'incomplete';\n // raw is normalised to at most 16 chars by the component; guard anyway.\n const code = raw.slice(0, 16);\n if (!hasValidStructure(code)) return 'badFormat';\n if (computeControlChar(code.slice(0, 15)) !== code[15]) return 'badChecksum';\n return 'valid';\n}\n\n/** Convenience boolean: structurally sound AND control character matches. */\nexport function isValidCodiceFiscale(raw: string): boolean {\n return classifyCodiceFiscale(raw) === 'valid';\n}\n","/* ------------------------------------------------------------------ */\n/* Codice Fiscale (Italian fiscal code) — client-side DERIVATION. */\n/* */\n/* SCOPE: a pure, self-contained function that computes the 16-char */\n/* codice fiscale from a person's identity data when the caller already */\n/* holds it. This is a CONVENIENCE so a form that knows surname / name */\n/* / birth date / sex / birthplace can pre-fill the field — the server */\n/* (ValidateFiscalCodeService) remains the source of truth. */\n/* */\n/* OUT OF SCOPE: municipality-name → Belfiore (cadastral) code lookup. */\n/* That mapping requires a ~8000-row table the kit must not bundle, so */\n/* the caller supplies the 4-character `belfioreCode` directly. */\n/* Omocodia digit-substitution (used only when two people would share a */\n/* code) is also out of scope — the base, non-omocodic code is emitted. */\n/* ------------------------------------------------------------------ */\n\nimport { computeControlChar } from './is-valid-codice-fiscale';\n\n/** Identity inputs needed to derive the (non-omocodic) codice fiscale. */\nexport interface CodiceFiscaleInput {\n /** Family name (cognome). Diacritics are folded; non-letters ignored. */\n surname: string;\n /** Given name (nome). Diacritics are folded; non-letters ignored. */\n name: string;\n /** Date of birth — a `Date` or an ISO `YYYY-MM-DD` (or full ISO) string. */\n birthDate: Date | string;\n /** Biological sex as recorded for the fiscal code: 'M' or 'F'. */\n sex: 'M' | 'F';\n /** 4-character cadastral / Belfiore code of the birthplace (e.g. H501). */\n belfioreCode: string;\n}\n\nconst VOWELS = new Set(['A', 'E', 'I', 'O', 'U']);\n\n/** Month → fiscal-code letter (Jan→A … Dec→T), 0-indexed by month. */\nconst MONTH_LETTERS = [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'H',\n 'L',\n 'M',\n 'P',\n 'R',\n 'S',\n 'T',\n] as const;\n\n/**\n * Fold a free-text name to bare uppercase A–Z: strip diacritics via NFD,\n * drop combining marks, uppercase, and keep only A–Z. Spaces / apostrophes\n * in compound names collapse away (the algorithm treats the name as one run\n * of letters).\n */\nfunction foldToLetters(input: string): string {\n return input\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toUpperCase()\n .replace(/[^A-Z]/g, '');\n}\n\nfunction consonantsOf(letters: string): string {\n return [...letters].filter((c) => !VOWELS.has(c)).join('');\n}\n\nfunction vowelsOf(letters: string): string {\n return [...letters].filter((c) => VOWELS.has(c)).join('');\n}\n\n/**\n * Surname triple: consonants first, then vowels, right-padded with 'X'.\n * (e.g. \"Rossi\" → R S S; \"Fo\" → F O X.)\n */\nfunction surnameCode(surname: string): string {\n const letters = foldToLetters(surname);\n const code = consonantsOf(letters) + vowelsOf(letters);\n return (code + 'XXX').slice(0, 3);\n}\n\n/**\n * Name triple. With 4+ consonants, take the 1st, 3rd and 4th (the standard\n * \"skip the 2nd consonant\" rule); otherwise consonants then vowels,\n * right-padded with 'X'. (e.g. \"Mario\" → M R A; \"Maria\" → M RA → MRA;\n * \"Gianfranco\" → G F R.)\n */\nfunction nameCode(name: string): string {\n const letters = foldToLetters(name);\n const cons = consonantsOf(letters);\n if (cons.length >= 4) {\n return cons[0] + cons[2] + cons[3];\n }\n const code = cons + vowelsOf(letters);\n return (code + 'XXX').slice(0, 3);\n}\n\n/** Coerce a `Date` or ISO string to a `Date`; throws on an unparseable value. */\nfunction toDate(birthDate: Date | string): Date {\n const d = birthDate instanceof Date ? birthDate : new Date(birthDate);\n if (Number.isNaN(d.getTime())) {\n throw new Error(`calculateCodiceFiscale: invalid birthDate \"${birthDate}\"`);\n }\n return d;\n}\n\n/**\n * Two-digit zero-padded value. The fiscal code uses LOCAL calendar fields\n * (a birth date is a calendar date, not an instant), so we read the UTC\n * fields of a date-only ISO string consistently — see the date handling\n * below.\n */\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\n/**\n * Birth-date triple: 2-digit year + month letter + 2-digit day (+40 for\n * female). Returns the 5 characters `YYMDD`.\n *\n * Date fields are read in UTC so a date-only string like \"1980-01-01\"\n * (parsed by `Date` as UTC midnight) yields day 01 regardless of the\n * runtime timezone. Callers passing a `Date` built from local components\n * should construct it at UTC midnight (e.g. `new Date('1980-01-01')`).\n */\nfunction birthCode(birthDate: Date | string, sex: 'M' | 'F'): string {\n const d = toDate(birthDate);\n const yy = pad2(d.getUTCFullYear() % 100);\n const monthLetter = MONTH_LETTERS[d.getUTCMonth()];\n const day = d.getUTCDate() + (sex === 'F' ? 40 : 0);\n return yy + monthLetter + pad2(day);\n}\n\n/**\n * Compute the full 16-character (non-omocodic) codice fiscale from a\n * person's identity data. The caller supplies the 4-char Belfiore code of\n * the birthplace (the kit does not bundle the municipality table).\n *\n * Throws if `birthDate` is unparseable or `belfioreCode` is not 4\n * `[A-Z][0-9]{3}`-shaped characters — i.e. a letter followed by 3 digits,\n * the canonical Belfiore shape.\n */\nexport function calculateCodiceFiscale(input: CodiceFiscaleInput): string {\n const { surname, name, birthDate, sex, belfioreCode } = input;\n\n const belfiore = belfioreCode.trim().toUpperCase();\n if (!/^[A-Z][0-9]{3}$/.test(belfiore)) {\n throw new Error(\n `calculateCodiceFiscale: belfioreCode must be a letter + 3 digits (e.g. \"H501\"), got \"${belfioreCode}\"`,\n );\n }\n\n const first15 =\n surnameCode(surname) +\n nameCode(name) +\n birthCode(birthDate, sex) +\n belfiore;\n\n return first15 + computeControlChar(first15);\n}\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ClipboardEvent,\n type CompositionEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { AlertCircle, CheckCircle2, Calculator } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_TEXT,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent';\nimport { IconButton } from '../button';\nimport { fiscalCodeInputAgent } from './fiscal-code-input.agent';\nimport {\n classifyCodiceFiscale,\n type FiscalCodeReason,\n} from './is-valid-codice-fiscale';\nimport {\n calculateCodiceFiscale,\n type CodiceFiscaleInput,\n} from './calculate-codice-fiscale';\n\n/** Agent-readiness curated handle for FiscalCodeInput. */\nexport interface FiscalCodeInputHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n focus: () => void;\n isValid: () => boolean;\n}\n\n/** Structured payload emitted on every keystroke alongside the raw value. */\nexport interface FiscalCodeChangeMeta {\n /** Structurally sound AND control character matches (always 16 chars). */\n isValid: boolean;\n /** Whether all 16 characters are present (regardless of validity). */\n isComplete: boolean;\n /** Why the value is (in)valid — drives consumer messaging. */\n reason: FiscalCodeReason;\n}\n\nexport interface FiscalCodeInputProps {\n /** Controlled value (raw, uppercased, no spaces). Pair with onChange. */\n value?: string;\n /** Uncontrolled initial value. Normalised on mount. */\n defaultValue?: string;\n /** Fires on every keystroke with the normalised raw string + meta. */\n onChange?: (raw: string, meta: FiscalCodeChangeMeta) => void;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n /** When the invalid tone + error string surface. Never marks partial input invalid. */\n validateOn?: 'change' | 'blur' | 'submit';\n /** Controlled escape hatch to force the invalid state (e.g. server rejection). */\n showError?: boolean;\n /** Overrides the kit's default i18n error string. */\n errorMessage?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n placeholder?: string;\n /** Render the \"16 characters\" caption when NOT inside a FormField. */\n showFormatHint?: boolean;\n /**\n * OPT-IN. When the consuming form already holds the person's identity\n * data, supply it here to render an inline \"calculate\" affordance: a\n * small icon button that derives the codice fiscale and fills the field.\n * The caller supplies the 4-char `belfioreCode` of the birthplace — the\n * kit does not bundle the municipality lookup table. Omit to render\n * nothing extra (no behavioural change). Ignored when readOnly/disabled.\n */\n calculateFrom?: CodiceFiscaleInput;\n id?: string;\n name?: string;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst MAX_LEN = 16;\n\nconst wrapperVariants = cva(\n ['ds:relative ds:flex ds:items-center ds:w-full', INPUT_SURFACE_CHROME].join(\n ' ',\n ),\n {\n variants: {\n size: {\n sm: INPUT_SURFACE_HEIGHT.sm,\n md: INPUT_SURFACE_HEIGHT.md,\n lg: INPUT_SURFACE_HEIGHT.lg,\n },\n tone: {\n default: INPUT_SURFACE_TONE.default,\n error: `${INPUT_SURFACE_TONE.error} ds:focus-within:outline-destructive`,\n },\n },\n defaultVariants: { size: 'md', tone: 'default' },\n },\n);\n\nconst inputVariants = cva(\n [\n // dir=\"ltr\" + tabular-nums keep the alphanumeric code rendering\n // left-to-right and evenly spaced even under an RTL/CJK surrounding\n // UI — this is a value-RENDERING concern (the code is never mirrored),\n // not a layout-direction violation, so logical-prop rules don't apply\n // to the code glyphs themselves.\n 'ds:w-full ds:min-w-0 ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:border-0 ds:outline-none ds:tabular-nums ds:uppercase ds:tracking-wide',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n size: {\n sm: `ds:pe-3 ${INPUT_SURFACE_TEXT.sm}`,\n md: `ds:pe-3 ${INPUT_SURFACE_TEXT.md}`,\n lg: `ds:pe-4 ${INPUT_SURFACE_TEXT.lg}`,\n },\n // When the calculate affordance is shown, the input text starts after\n // the inline-start icon button (mirrors `hasEnd`'s pe-10 reservation).\n hasStart: {\n true: 'ds:ps-10',\n false: '',\n },\n hasEnd: {\n true: 'ds:pe-10',\n false: '',\n },\n },\n compoundVariants: [\n { size: 'sm', hasStart: false, class: 'ds:ps-3' },\n { size: 'md', hasStart: false, class: 'ds:ps-3' },\n { size: 'lg', hasStart: false, class: 'ds:ps-4' },\n ],\n defaultVariants: { size: 'md', hasStart: false, hasEnd: false },\n },\n);\n\nconst adornmentEnd =\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3 ds:flex ds:items-center ds:pointer-events-none ds:[&_svg]:size-4';\n\n// Inline-start wrapper for the calculate icon button. Positioned over the\n// reserved `ps-10` gutter; the button itself remains pointer-interactive.\nconst adornmentStart =\n 'ds:absolute ds:inset-y-0 ds:start-0 ds:ps-1 ds:flex ds:items-center';\n\nconst captionBase = 'type-body-sm ds:mt-[var(--spacing-xs)]';\n\n/** Uppercase, strip non-[A-Z0-9], normalise full-width / Eastern-Arabic\n * digits, and cap at 16 characters. */\nfunction normaliseFiscalCode(input: string): string {\n return (\n input\n .normalize('NFKC')\n // Eastern-Arabic & Extended-Arabic-Indic digits → ASCII (otp-input precedent).\n .replace(/[٠-٩]/g, (c) => String(c.charCodeAt(0) - 0x0660))\n .replace(/[۰-۹]/g, (c) => String(c.charCodeAt(0) - 0x06f0))\n .toUpperCase()\n .replace(/[^A-Z0-9]/g, '')\n .slice(0, MAX_LEN)\n );\n}\n\n/** Count [A-Z0-9] characters before `position` in the RAW (pre-normalise)\n * string, so the caret can be restored after re-normalising. */\nfunction countKeptBefore(str: string, position: number): number {\n let kept = 0;\n for (let i = 0; i < position && i < str.length; i += 1) {\n const c = str[i];\n if (\n (c >= '0' && c <= '9') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= 'a' && c <= 'z')\n ) {\n kept += 1;\n }\n }\n return kept;\n}\n\nexport const FiscalCodeInput = forwardRef<\n HTMLInputElement,\n FiscalCodeInputProps\n>(function FiscalCodeInput(\n {\n value,\n defaultValue,\n onChange,\n size = 'md',\n tone = 'default',\n validateOn = 'blur',\n showError,\n errorMessage,\n disabled,\n readOnly,\n required,\n placeholder,\n showFormatHint = true,\n calculateFrom,\n id,\n name,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n) {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(() =>\n normaliseFiscalCode(defaultValue ?? ''),\n );\n const currentValue = isControlled\n ? normaliseFiscalCode(value ?? '')\n : internalValue;\n\n const [blurred, setBlurred] = useState(false);\n const composingRef = useRef(false);\n const pendingCaretRef = useRef<number | null>(null);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedRef = composeRefs(ref, inputRef);\n\n const reactId = useId();\n const generatedHintId = `${reactId}-hint`;\n const generatedStatusId = `${reactId}-status`;\n const generatedErrorId = `${reactId}-error`;\n\n // DEV-time guard: a standalone field with no visible label needs an\n // aria-label, mirroring Button's icon-only guard. No-op in production.\n useEffect(() => {\n const isDev =\n typeof import.meta !== 'undefined' &&\n typeof import.meta.env !== 'undefined' &&\n import.meta.env.DEV === true;\n if (isDev && !inFormField && !ariaLabel) {\n // eslint-disable-next-line no-console\n console.warn(\n '[FiscalCodeInput] No FormField/label and no `aria-label` — the field has no accessible name. Wrap it in a FormField or pass `aria-label`.',\n );\n }\n }, [inFormField, ariaLabel]);\n\n const reason = useMemo(\n () => classifyCodiceFiscale(currentValue),\n [currentValue],\n );\n const isComplete = currentValue.length === MAX_LEN;\n const isValid = reason === 'valid';\n\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n\n // Whether the component's OWN feedback should surface.\n //\n // `showError` is a controlled escape hatch (e.g. the server rejected the\n // code on submit): it forces the error regardless of completeness or the\n // client's own verdict. Otherwise the client only flags a COMPLETE\n // (16-char) code that fails its structural/checksum check — never a\n // partially-typed code — and `validateOn` governs the trigger.\n const ownFeedbackActive =\n !readOnly &&\n (Boolean(showError) ||\n (isComplete &&\n !isValid &&\n (validateOn === 'change' || (validateOn === 'blur' && blurred))));\n\n // When inside a FormField with its own error, FormField's role=alert wins\n // and this component stays silent (no double message / duplicate\n // aria-describedby target).\n const formFieldHasError = inFormField && ctx.invalid;\n const showOwnError = ownFeedbackActive && !formFieldHasError;\n\n const effectiveInvalid = formFieldHasError || showOwnError;\n const effectiveTone: 'default' | 'error' =\n effectiveInvalid || tone === 'error' ? 'error' : 'default';\n\n const ownErrorText = useMemo(() => {\n if (errorMessage) return errorMessage;\n if (reason === 'badChecksum') return t('inputs.fiscalCode.errorChecksum');\n if (reason === 'badFormat') return t('inputs.fiscalCode.errorFormat');\n return t('inputs.fiscalCode.errorIncomplete');\n }, [errorMessage, reason, t]);\n\n // Standalone (no FormField) describedby: format hint + the live region that\n // is currently surfacing. When the component is showing its OWN error we\n // point at the assertive error node; otherwise at the polite status node\n // (valid affordance / typing progress). Inside a FormField, the FormField\n // owns describedBy entirely.\n const wantsHint = !inFormField && showFormatHint && !readOnly;\n const standaloneDescribedBy = inFormField\n ? undefined\n : [\n wantsHint ? generatedHintId : null,\n showOwnError ? generatedErrorId : generatedStatusId,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n const describedBy = inFormField\n ? ctx.describedBy || undefined\n : standaloneDescribedBy;\n\n const inputId = id ?? ctx.id;\n\n const emit = useCallback(\n (next: string) => {\n const nextReason = classifyCodiceFiscale(next);\n onChange?.(next, {\n isValid: nextReason === 'valid',\n isComplete: next.length === MAX_LEN,\n reason: nextReason,\n });\n },\n [onChange],\n );\n\n const commit = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n emit(next);\n },\n [isControlled, emit],\n );\n\n // Restore caret after a normalising re-render that may have changed the\n // string length (mid-string edit / paste). Mirrors phone-input's caret\n // discipline.\n useIsomorphicLayoutEffect(() => {\n if (pendingCaretRef.current == null) return;\n const pos = pendingCaretRef.current;\n pendingCaretRef.current = null;\n const node = inputRef.current;\n if (node && document.activeElement === node) {\n // Re-clamp against the value the input ACTUALLY rendered this pass, not\n // the value we committed: a controlled parent may transform or reject\n // the emitted change so the echoed value diverges. Clamping to the live\n // DOM length keeps the caret inside the rendered string.\n const safePos = Math.min(pos, node.value.length);\n node.setSelectionRange(safePos, safePos);\n }\n });\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n // Don't re-mask mid-IME composition or the user loses input; the\n // uppercase mask is re-applied on composition end / next change.\n if (composingRef.current) return;\n const target = event.target;\n const raw = target.value;\n const caret = target.selectionStart ?? raw.length;\n const keptBefore = countKeptBefore(raw, caret);\n const next = normaliseFiscalCode(raw);\n pendingCaretRef.current = Math.min(keptBefore, next.length);\n commit(next);\n };\n\n const handleCompositionStart = () => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = (event: CompositionEvent<HTMLInputElement>) => {\n composingRef.current = false;\n if (readOnly) return;\n const next = normaliseFiscalCode(event.currentTarget.value);\n pendingCaretRef.current = next.length;\n commit(next);\n };\n\n const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {\n if (readOnly) return;\n const text = event.clipboardData.getData('text');\n event.preventDefault();\n const node = inputRef.current;\n const selStart = node?.selectionStart ?? currentValue.length;\n const selEnd = node?.selectionEnd ?? currentValue.length;\n const cleaned = normaliseFiscalCode(text);\n const before = currentValue.slice(0, selStart);\n const after = currentValue.slice(selEnd);\n const next = normaliseFiscalCode(before + cleaned + after);\n pendingCaretRef.current = Math.min((before + cleaned).length, next.length);\n commit(next);\n };\n\n const handleBlur = () => {\n if (validateOn === 'blur') setBlurred(true);\n };\n\n // Opt-in derivation. Compute the CF from the supplied identity data and\n // route it through the SAME commit path as typing/paste so the controlled\n // / uncontrolled contract, the validation verdict, and the live-region\n // announcement all behave identically to a user-entered value.\n const handleCalculate = () => {\n if (!calculateFrom || readOnly || effectiveDisabled) return;\n let computed: string;\n try {\n computed = calculateCodiceFiscale(calculateFrom);\n } catch {\n // Bad identity data (unparseable date / malformed Belfiore code) is a\n // caller error, not a user action — fail quietly rather than throwing\n // out of an event handler and leave the field untouched.\n return;\n }\n const next = normaliseFiscalCode(computed);\n // After a successful derivation the value is complete: let blur-gated\n // validation surface immediately (the derived code is valid by\n // construction, so this confirms rather than errors).\n if (validateOn === 'blur') setBlurred(true);\n commit(next);\n inputRef.current?.focus();\n };\n\n const agentHandle = useMemo<FiscalCodeInputHandle>(\n () => ({\n getValue: () => currentValue,\n setValue: (next) => {\n const normalised = normaliseFiscalCode(next);\n if (!isControlled) setInternalValue(normalised);\n emit(normalised);\n inputRef.current?.focus();\n },\n clear: () => {\n if (!isControlled) setInternalValue('');\n emit('');\n inputRef.current?.focus();\n },\n focus: () => inputRef.current?.focus(),\n isValid: () => classifyCodiceFiscale(currentValue) === 'valid',\n }),\n [currentValue, isControlled, emit],\n );\n useAgentRegistration(fiscalCodeInputAgent, agentHandle, id);\n\n const resolvedPlaceholder = placeholder ?? t('inputs.fiscalCode.placeholder');\n\n // Polite status text (role=status). Carries ONLY non-error affordances:\n // the valid confirmation and, while typing an incomplete code, the live\n // character-count progress. Errors the user must act on are announced\n // assertively via the separate role=alert node below — never here.\n // Gated on !inFormField (matching showEndIcon): inside a FormField the\n // FormField owns every helper/status/error slot, so this stays silent.\n const statusMessage =\n readOnly || inFormField\n ? ''\n : isValid\n ? t('inputs.fiscalCode.valid')\n : currentValue.length > 0 && !isComplete\n ? t('inputs.fiscalCode.charactersEntered', {\n count: currentValue.length,\n })\n : '';\n\n // Assertive error text (role=alert) — surfaces only the component's own\n // actionable validation error, mirroring FormField's error <p>.\n const errorText = showOwnError ? ownErrorText : '';\n\n const showEndIcon = !readOnly && (showOwnError || (isValid && !inFormField));\n\n // Opt-in calculate affordance: only when identity data is supplied AND the\n // field is editable. Disabled/read-only fields render nothing extra.\n const showCalculate =\n Boolean(calculateFrom) && !readOnly && !effectiveDisabled;\n\n return (\n <div\n className=\"ds:flex ds:flex-col\"\n data-component=\"fiscal-code-input\"\n data-component-id={id}\n >\n <div\n data-slot=\"fiscal-code-input\"\n className={wrapperVariants({ size, tone: effectiveTone, className })}\n >\n {showCalculate ? (\n <span className={adornmentStart}>\n <IconButton\n type=\"button\"\n size=\"sm\"\n intent=\"ghost\"\n icon={<Calculator />}\n aria-label={t('inputs.fiscalCode.calculate')}\n onClick={handleCalculate}\n />\n </span>\n ) : null}\n <input\n ref={composedRef}\n id={inputId}\n name={name}\n // dir=\"ltr\": the codice fiscale glyphs render LTR even under an\n // RTL surrounding UI — a value-rendering concern, not a layout\n // direction violation (see inputVariants comment).\n dir=\"ltr\"\n type=\"text\"\n inputMode=\"text\"\n autoCapitalize=\"characters\"\n autoCorrect=\"off\"\n autoComplete=\"off\"\n spellCheck={false}\n maxLength={MAX_LEN}\n // Loose structural mirror: 15 [A-Z0-9] + a final letter control\n // char (value is always uppercased). The real position-class /\n // checksum rule is enforced in classifyCodiceFiscale; this native\n // pattern is only a non-JS fallback.\n pattern=\"[A-Z0-9]{15}[A-Z]\"\n value={currentValue}\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n aria-required={effectiveRequired || undefined}\n onChange={handleChange}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n onPaste={handlePaste}\n onBlur={handleBlur}\n className={inputVariants({\n size,\n hasStart: showCalculate,\n hasEnd: showEndIcon,\n })}\n />\n {showEndIcon ? (\n <span\n aria-hidden=\"true\"\n className={`${adornmentEnd} ${\n showOwnError ? 'ds:text-destructive' : 'ds:text-success'\n }`}\n >\n {showOwnError ? <AlertCircle /> : <CheckCircle2 />}\n </span>\n ) : null}\n </div>\n\n {wantsHint ? (\n <p\n id={generatedHintId}\n className={`${captionBase} ds:text-muted-foreground`}\n >\n {t('inputs.fiscalCode.formatHint')}\n </p>\n ) : null}\n\n {/* Polite live region (role=status): announces the valid affordance\n and the typing-progress count as TEXT, satisfying 1.4.1 (never\n colour-only). Never carries an actionable error — that goes to the\n assertive node below, mirroring the kit's input-error convention. */}\n <p\n id={generatedStatusId}\n role=\"status\"\n aria-live=\"polite\"\n className={`${captionBase} ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ${\n isValid ? 'ds:text-success' : 'ds:text-muted-foreground'\n } ${statusMessage ? '' : 'ds:sr-only'}`}\n >\n {statusMessage ? (\n <>\n {isValid ? (\n <CheckCircle2\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0\"\n />\n ) : null}\n <span>{statusMessage}</span>\n </>\n ) : null}\n </p>\n\n {/* Assertive error region (role=alert): a validation error the user\n must correct is announced assertively, mirroring FormField's error\n <p> (form-field.tsx). Rendered only when the component owns the\n error — inside a FormField, FormField's role=alert wins. */}\n {errorText ? (\n <p\n id={generatedErrorId}\n role=\"alert\"\n className={`${captionBase} ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:text-destructive`}\n >\n <AlertCircle aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{errorText}</span>\n </p>\n ) : null}\n </div>\n );\n});\n\nFiscalCodeInput.displayName = 'FiscalCodeInput';\n\nexport { wrapperVariants as fiscalCodeWrapperVariants };\n"],"names":["__iconNode","Calculator","createLucideIcon","fiscalCodeInputAgent","handle","args","LETTER_POSITIONS","DIGIT_POSITIONS","ODD_MAP","EVEN_MAP","REMAINDER_TO_CONTROL","hasValidStructure","code","i","ch","isDigit","computeControlChar","first15","sum","classifyCodiceFiscale","raw","isValidCodiceFiscale","VOWELS","MONTH_LETTERS","foldToLetters","input","consonantsOf","letters","c","vowelsOf","surnameCode","surname","nameCode","name","cons","toDate","birthDate","d","pad2","n","birthCode","sex","yy","monthLetter","day","calculateCodiceFiscale","belfioreCode","belfiore","MAX_LEN","wrapperVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_TONE","inputVariants","INPUT_SURFACE_TEXT","adornmentEnd","adornmentStart","captionBase","normaliseFiscalCode","countKeptBefore","str","position","kept","FiscalCodeInput","forwardRef","value","defaultValue","onChange","size","tone","validateOn","showError","errorMessage","disabled","readOnly","required","placeholder","showFormatHint","calculateFrom","id","className","ariaLabel","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","isControlled","internalValue","setInternalValue","useState","currentValue","blurred","setBlurred","composingRef","useRef","pendingCaretRef","inputRef","composedRef","composeRefs","reactId","useId","generatedHintId","generatedStatusId","generatedErrorId","useEffect","reason","useMemo","isComplete","isValid","effectiveDisabled","effectiveRequired","ownFeedbackActive","formFieldHasError","showOwnError","effectiveInvalid","effectiveTone","ownErrorText","wantsHint","standaloneDescribedBy","describedBy","inputId","emit","useCallback","next","nextReason","commit","useIsomorphicLayoutEffect","pos","node","safePos","handleChange","event","target","caret","keptBefore","handleCompositionStart","handleCompositionEnd","handlePaste","text","selStart","selEnd","cleaned","before","after","handleBlur","handleCalculate","computed","_a","agentHandle","normalised","useAgentRegistration","resolvedPlaceholder","statusMessage","errorText","showEndIcon","showCalculate","jsxs","jsx","IconButton","AlertCircle","CheckCircle2","Fragment"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"freemium-paywall-CkWjv3o6.js","sources":["../../src/components/freemium-paywall/freemium-paywall.agent.ts","../../src/components/freemium-paywall/freemium-paywall.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — FreemiumPaywall. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { FreemiumPaywallHandle } from './freemium-paywall';\n\nexport const freemiumPaywallAgent: AgentAdapter<FreemiumPaywallHandle> = {\n id: 'freemium-paywall',\n capabilities: ['submit', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.freemiumPaywall.state.isOpen',\n description: 'True when the paywall dialog is open.',\n read: (handle) => handle.isOpen(),\n },\n selectedPlanId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.freemiumPaywall.state.selectedPlanId',\n description: 'Opaque id of the currently-selected plan.',\n read: (handle) => handle.getSelectedPlanId(),\n },\n },\n actions: {\n upgrade: {\n safety: 'write',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.upgrade',\n description: 'Fire onUpgrade with the currently-selected plan id.',\n invoke: (handle) => {\n handle.upgrade();\n },\n },\n dismiss: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.freemiumPaywall.actions.dismiss',\n description:\n 'Dismiss the paywall via the Not Now action. Irreversible from the same UI.',\n invoke: (handle) => {\n handle.dismiss();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'freemium-paywall',\n description: 'Marks the FreemiumPaywall dialog content.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport * as RadixAlertDialog from '@radix-ui/react-alert-dialog';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { freemiumPaywallAgent } from './freemium-paywall.agent';\nimport { AlertTriangle, Check } from 'lucide-react';\nimport { Button } from '../button';\nimport { Progress } from '../progress';\nimport { formatPaymentAmount } from '../payment-form';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface FreemiumPlan {\n id: string;\n /** Translation key for the plan name (e.g. `app.paywall.plans.pro`). */\n nameKey: string;\n /** Amount in minor units (cents, centesimi). */\n priceAmount: number;\n /** ISO 4217 currency code. */\n currency: string;\n /** Translation key for the cadence suffix (e.g. `app.paywall.period.month`). */\n perKey?: string;\n /** Per-line feature translation keys. */\n featuresKeys?: string[];\n}\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:overflow-auto',\n 'ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:border ds:border-border ds:shadow-[var(--shadow-lg)]',\n // forced-colors: keep the dialog boundary visible under Windows High\n // Contrast, where `var(--border)` may collapse to system colours.\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus:outline-none',\n ].join(' '),\n {\n variants: {\n layout: {\n centered:\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2 ds:rtl:translate-x-1/2 ds:rounded-[var(--radius-md)] ds:max-w-[var(--dialog-width-xl)] ds:w-[calc(100vw-2rem)] ds:max-h-[90vh]',\n sheet:\n 'ds:inset-inline-0 ds:bottom-0 ds:w-full ds:max-h-[90vh] ds:rounded-t-[var(--radius-md)]',\n },\n density: {\n compact:\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\n full: 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:pt-[var(--spacing-lg)] ds:pb-[var(--spacing-lg)]',\n },\n },\n defaultVariants: { layout: 'centered', density: 'full' },\n },\n);\n\n/** Curated imperative handle for agent / external automation. */\nexport interface FreemiumPaywallHandle {\n isOpen: () => boolean;\n getSelectedPlanId: () => string | null;\n upgrade: () => void;\n dismiss: () => void;\n}\n\nexport interface FreemiumPaywallProps extends VariantProps<\n typeof contentVariants\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n plans: FreemiumPlan[];\n /** Currently-selected plan id (controlled) or default. */\n selectedPlanId?: string;\n defaultSelectedPlanId?: string;\n onSelectedPlanChange?: (id: string) => void;\n /** Usage indicator values — omit the object to hide the bar. */\n usage?: { used: number; limit: number };\n /** Fires on upgrade. */\n onUpgrade: (planId: string) => void;\n /** Fires when the user dismisses via Not Now. */\n onCancel?: () => void;\n /** Title override; defaults to t('paywall.title'). */\n title?: ReactNode;\n /** Description override; defaults to t('paywall.description'). */\n description?: ReactNode;\n className?: string;\n}\n\nexport const FreemiumPaywall = forwardRef<HTMLDivElement, FreemiumPaywallProps>(\n (\n {\n open,\n onOpenChange,\n plans,\n selectedPlanId,\n defaultSelectedPlanId,\n onSelectedPlanChange,\n usage,\n onUpgrade,\n onCancel,\n title,\n description,\n layout = 'centered',\n density = 'full',\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const titleId = useId();\n const descId = useId();\n\n const [currentSelectedRaw, handleSelectedChange] =\n useControllableState<string>({\n value: selectedPlanId,\n defaultValue: defaultSelectedPlanId ?? plans[0]?.id ?? '',\n onChange: onSelectedPlanChange,\n });\n const currentSelected = currentSelectedRaw ?? '';\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleUpgrade = () => {\n if (!currentSelected) return;\n onUpgrade(currentSelected);\n };\n\n const openRef = useRef(open);\n openRef.current = open;\n const selectedRef = useRef<string>(currentSelected);\n selectedRef.current = currentSelected;\n\n const contentRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => contentRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<FreemiumPaywallHandle>(\n () => ({\n isOpen: () => openRef.current,\n getSelectedPlanId: () => selectedRef.current || null,\n upgrade: () => handleUpgrade(),\n dismiss: () => handleCancel(),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n useAgentRegistration(freemiumPaywallAgent, agentHandle, undefined);\n\n const usagePercent = usage\n ? Math.min(\n 100,\n Math.max(0, (usage.used / Math.max(1, usage.limit)) * 100),\n )\n : 0;\n const usageFull = usage ? usage.used >= usage.limit : false;\n\n return (\n <RadixAlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixAlertDialog.Portal>\n <RadixAlertDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[color:var(--background)]/70',\n 'ds:motion-safe:data-[state=open]:animate-in ds:motion-safe:data-[state=closed]:animate-out',\n 'ds:[.theme-accessible_&]:animate-none',\n ].join(' ')}\n />\n <RadixAlertDialog.Content\n ref={contentRef}\n aria-labelledby={titleId}\n aria-describedby={descId}\n className={contentVariants({ layout, density, className })}\n data-component=\"freemium-paywall\"\n >\n <RadixAlertDialog.Title id={titleId} asChild>\n <h2 className=\"type-title-card\">{title ?? t('paywall.title')}</h2>\n </RadixAlertDialog.Title>\n <RadixAlertDialog.Description id={descId} asChild>\n <p className=\"ds:mt-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n {description ?? t('paywall.description')}\n </p>\n </RadixAlertDialog.Description>\n\n {usage ? (\n <div className=\"ds:mt-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:mb-[var(--spacing-xs)]\">\n {usageFull ? (\n <AlertTriangle\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--destructive)]\"\n />\n ) : null}\n <span\n className={[\n 'type-body-sm',\n usageFull\n ? 'ds:text-[color:var(--destructive)]'\n : 'ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {usageFull\n ? t('paywall.usageFull')\n : t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n </span>\n </div>\n <Progress\n value={usagePercent}\n max={100}\n ariaLabel={t('paywall.usageLabel', {\n used: usage.used,\n limit: usage.limit,\n })}\n className={\n usageFull\n ? 'ds:[&_[role=progressbar]>*]:bg-[color:var(--destructive)]'\n : ''\n }\n />\n </div>\n ) : null}\n\n <RadixRadioGroup.Root\n value={currentSelected}\n onValueChange={handleSelectedChange}\n aria-label={t('paywall.title')}\n className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {plans.map((plan) => {\n // Reuse the payment-form helper — it knows about\n // zero-decimal currencies (JPY, KRW, VND …) and applies\n // the right divisor. Raw `/ 100` would 100× the price in\n // those currencies.\n const formattedPrice = formatPaymentAmount(\n plan.priceAmount,\n plan.currency,\n i18n.language,\n );\n const period = plan.perKey ? t(plan.perKey) : undefined;\n const priceLine = period\n ? t('paywall.pricePer', { price: formattedPrice, period })\n : formattedPrice;\n const planName = t(plan.nameKey);\n return (\n <RadixRadioGroup.Item\n key={plan.id}\n value={plan.id}\n className={[\n 'ds:group ds:relative ds:flex ds:flex-col ds:items-stretch',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'ds:text-start ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:data-[state=checked]:border-[color:var(--primary)]',\n 'ds:data-[state=checked]:bg-[color:var(--primary)]/5',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' ')}\n >\n <span className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:font-semibold\">{planName}</span>\n <span className=\"ds:tabular-nums\">{priceLine}</span>\n </span>\n {plan.featuresKeys && plan.featuresKeys.length > 0 ? (\n <ul\n aria-label={t('paywall.features')}\n className=\"ds:mt-[var(--spacing-xs)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n {plan.featuresKeys.map((key, i) => (\n <li\n key={i}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-xs)] type-body-sm\"\n >\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--primary)] ds:mt-[1px]\"\n />\n <span>{t(key)}</span>\n </li>\n ))}\n </ul>\n ) : null}\n </RadixRadioGroup.Item>\n );\n })}\n </RadixRadioGroup.Root>\n\n <div className=\"ds:mt-[var(--spacing-lg)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:justify-end\">\n <RadixAlertDialog.Cancel asChild>\n <Button intent=\"outline\" onClick={handleCancel}>\n {t('paywall.notNow')}\n </Button>\n </RadixAlertDialog.Cancel>\n <RadixAlertDialog.Action asChild>\n <Button intent=\"primary\" onClick={handleUpgrade}>\n {t('paywall.upgrade')}\n </Button>\n </RadixAlertDialog.Action>\n </div>\n </RadixAlertDialog.Content>\n </RadixAlertDialog.Portal>\n </RadixAlertDialog.Root>\n );\n },\n);\n\nFreemiumPaywall.displayName = 'FreemiumPaywall';\n"],"names":["freemiumPaywallAgent","handle","contentVariants","cva","FreemiumPaywall","forwardRef","open","onOpenChange","plans","selectedPlanId","defaultSelectedPlanId","onSelectedPlanChange","usage","onUpgrade","onCancel","title","description","layout","density","className","ref","t","i18n","useTranslation","titleId","useId","descId","currentSelectedRaw","handleSelectedChange","useControllableState","_a","currentSelected","handleCancel","handleUpgrade","openRef","useRef","selectedRef","contentRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","usagePercent","usageFull","jsx","RadixAlertDialog","jsxs","AlertTriangle","Progress","RadixRadioGroup","plan","formattedPrice","formatPaymentAmount","period","priceLine","planName","key","i","Check","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"header-settings-CNOqIhoW.js","sources":["../../src/components/header-settings/header-settings.agent.ts","../../src/components/header-settings/header-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HeaderSettings. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HeaderSettingsHandle } from './header-settings';\n\nexport const headerSettingsAgent: AgentAdapter<HeaderSettingsHandle> = {\n id: 'header-settings',\n capabilities: ['view_change'],\n state: {},\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n descriptionKey: 'ui.agent.headerSettings.actions.setLocale',\n description: 'Switch the active locale to the given IETF tag.',\n invoke: (handle, args: { locale: string }) => {\n // Validation happens inside the handle so the agent surface\n // accepts arbitrary tags and silently drops unknown ones.\n handle.setLocale(args.locale);\n },\n },\n set_theme: {\n safety: 'write',\n argsType: '{ theme: \"light\" | \"dark\" | \"system\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setTheme',\n description: 'Switch the theme preference.',\n invoke: (handle, args: { theme: 'light' | 'dark' | 'system' }) => {\n handle.setTheme(args.theme);\n },\n },\n set_accessibility: {\n safety: 'write',\n argsType: '{ accessibility: \"default\" | \"accessible\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setAccessibility',\n description: 'Switch the accessibility preference.',\n invoke: (handle, args: { accessibility: 'default' | 'accessible' }) => {\n handle.setAccessibility(args.accessibility);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'header-settings',\n description: 'Marks the HeaderSettings wrapper.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Monitor, Moon, Settings, Sun } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { IconButtonGroup } from '../icon-button-group/icon-button-group';\nimport { DropdownMenu } from '../dropdown-menu/dropdown-menu';\nimport { Switch } from '../switch/switch';\nimport {\n LocalePicker,\n LOCALE_STORAGE_KEY,\n} from '../locale-picker/locale-picker';\nimport {\n useTheme,\n type AccessibilityPreference,\n type ThemePreference,\n} from '../../hooks';\nimport { useLocale } from '../../hooks/use-locale';\nimport { LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { headerSettingsAgent } from './header-settings.agent';\n\nfunction safeWriteStorage(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* Storage can throw in private mode — silent-fail per use-theme.ts. */\n }\n}\n\nfunction applyDocumentAttrs(locale: Locale): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n root.lang = locale;\n root.dir = LOCALE_META[locale].dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n align: {\n start: '',\n end: '',\n },\n },\n defaultVariants: { align: 'end' },\n});\n\nconst dropdownContentClasses = [\n 'ds:w-[20rem] ds:p-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-lg)]',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface HeaderSettingsProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n /** Anchor side for the dropdown. Defaults to `end` (matches LTR + RTL). */\n align?: 'start' | 'end';\n /**\n * Size of the cog trigger only. Forwards to the underlying\n * `IconButton`. Defaults to `md` to preserve the existing visual.\n * Use `sm` when composing alongside other `<Button size=\"sm\">`\n * actions in a header row — keeps the visual rhythm consistent.\n *\n * The internal dropdown chrome (Appearance toggle group, locale\n * picker, accessibility switch) stays at kit defaults regardless\n * — this prop only sizes the trigger.\n */\n size?: 'sm' | 'md' | 'lg';\n /** Disable the trigger entirely. */\n disabled?: boolean;\n}\n\nexport interface HeaderSettingsHandle {\n /**\n * Switch the active locale. Widened to `string` (vs. `Locale`) so\n * agent surfaces with untyped inputs can call through without\n * extra casting — invalid tags no-op silently.\n */\n setLocale: (next: string) => void;\n setTheme: (next: ThemePreference) => void;\n setAccessibility: (next: AccessibilityPreference) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* HeaderSettings */\n/* */\n/* Single button → single DropdownMenu surface. Inside the menu, the */\n/* \"Language\" section embeds `LocalePicker.SearchList` (the kit's */\n/* searchable list without its own trigger / popover) and the */\n/* \"Appearance\" section mirrors `ThemeToggle`'s menu-variant internals */\n/* using `DropdownMenu.RadioGroup` + `CheckboxItem`. Both sections */\n/* read/write the same hooks (`useLocale`, `useTheme`) that the */\n/* standalone components use, so there's no state duplication. */\n/* ------------------------------------------------------------------ */\n\nexport const HeaderSettings = forwardRef<HTMLDivElement, HeaderSettingsProps>(\n (props, ref) => {\n const {\n align = 'end',\n size = 'md',\n disabled = false,\n className,\n id,\n ...rest\n } = props as HeaderSettingsProps & { id?: string };\n\n const { t } = useTranslation();\n const theme = useTheme();\n const { setLocale: setLocaleI18n } = useLocale();\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n // Same side-effect chain as LocalePicker's internal helper:\n // i18next.changeLanguage → document.dir/lang → persist.\n // Inlined here (rather than exported from locale-picker) because\n // it's three small calls; the LocalePicker.SearchList component\n // continues to own its own copy for inline use, and both apply\n // the same persistence key (`alfadocs-ui.locale`) so a write from\n // either path is visible to the other on next mount.\n const setLocaleWithPersistence = useCallback(\n (next: Locale) => {\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, next);\n },\n [setLocaleI18n],\n );\n const setLocaleRef = useRef(setLocaleWithPersistence);\n setLocaleRef.current = setLocaleWithPersistence;\n\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const agentHandle = useMemo<HeaderSettingsHandle>(\n () => ({\n setLocale: (next: string) => {\n // Mirrors LocalePicker's gating — silently drop unknown tags\n // rather than crash mid-cascade. `LOCALES_WITH_BUNDLES` is\n // re-imported via the LOCALE_META keys so this file doesn't\n // need the resources module on the build-agent-catalog path.\n if (Object.prototype.hasOwnProperty.call(LOCALE_META, next)) {\n setLocaleRef.current(next as Locale);\n }\n },\n setTheme: (next) => themeRef.current.setTheme(next),\n setAccessibility: (next) => themeRef.current.setAccessibility(next),\n }),\n [],\n );\n useAgentRegistration(headerSettingsAgent, agentHandle, id);\n\n const accessibleChecked = theme.accessibility === 'accessible';\n\n return (\n <div\n ref={forwardedRef}\n data-component=\"header-settings\"\n data-component-id={id}\n className={wrapperVariants({ align, className })}\n {...rest}\n >\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n size={size}\n disabled={disabled}\n icon={<Settings aria-hidden />}\n aria-label={t('navigation.headerSettings.trigger')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align={align}\n sideOffset={8}\n className={dropdownContentClasses}\n // Search input inside the menu owns its own keyboard\n // capture (cmdk). Stop Radix Menu's typeahead from\n // intercepting letters typed into the search field —\n // `onKeyDownCapture` runs before the menu's listener.\n onKeyDownCapture={(event) => {\n const target = event.target as HTMLElement | null;\n if (\n target?.tagName === 'INPUT' &&\n // Always allow Escape so the menu can close.\n event.key !== 'Escape'\n ) {\n event.stopPropagation();\n }\n }}\n >\n <DropdownMenu.Label>\n {t('navigation.headerSettings.language.label')}\n </DropdownMenu.Label>\n {/* Render the kit's compact LocalePicker (its own\n Popover trigger + content). Clicking the trigger\n opens a nested popover containing the full\n searchable list — the HeaderSettings menu stays\n open behind it so the user can return to Appearance\n / Accessibility without re-opening.\n\n Wrapped in `role=\"group\"` so the menu's\n `aria-required-children` rule sees a permitted child\n role (the LocalePicker compact button alone would\n appear as a raw button child of `role=\"menu\"`). */}\n <div\n role=\"group\"\n aria-label={t('navigation.headerSettings.language.label')}\n className={[\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n // Stretch the compact LocalePicker to the full menu\n // width so it reads as a single row affordance (not\n // a centred pill). The picker's root is\n // inline-flex; the `*:` child selector + `flex-1`\n // gives it `flex: 1 1 0%` once it's a child of the\n // flex container we make this div into.\n 'ds:flex ds:[&>*]:flex-1',\n ].join(' ')}\n >\n {/* `popoverSide=\"end\"` opens the nested search popover\n as a side-flyout (inline-end, RTL-aware) rather\n than below the compact row — without this the\n nested popover stacks under the trigger inside the\n outer DropdownMenu and the two surfaces visually\n merge. Radix Popover auto-flips to the opposite\n side if there's no viewport room. */}\n <LocalePicker variant=\"compact\" popoverSide=\"end\" />\n </div>\n\n <DropdownMenu.Separator />\n\n <DropdownMenu.Label>\n {t('navigation.headerSettings.appearance.label')}\n </DropdownMenu.Label>\n {/* Horizontal segmented toggle (mirrors ThemeToggle's\n `split` variant) instead of stacked radio rows — uses\n fewer rows of menu real estate and reads as a single\n control. `role=\"radiogroup\"` keeps the screen-reader\n semantics correct, and the group is wrapped in\n `role=\"group\"` for the same reason the language\n search-list wrapper is — the menu's\n aria-required-children doesn't permit raw IconButtons\n as direct menu descendants. */}\n <div\n role=\"group\"\n aria-label={t('navigation.headerSettings.appearance.label')}\n className=\"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]\"\n >\n <IconButtonGroup\n role=\"radiogroup\"\n mode=\"toggle-single\"\n size=\"sm\"\n aria-label={t('navigation.headerSettings.appearance.label')}\n value={theme.theme}\n onValueChange={(next) =>\n theme.setTheme(next as ThemePreference)\n }\n >\n <IconButton\n icon={<Sun aria-hidden />}\n aria-label={t('navigation.headerSettings.appearance.light')}\n value=\"light\"\n />\n <IconButton\n icon={<Moon aria-hidden />}\n aria-label={t('navigation.headerSettings.appearance.dark')}\n value=\"dark\"\n />\n <IconButton\n icon={<Monitor aria-hidden />}\n aria-label={t(\n 'navigation.headerSettings.appearance.system',\n )}\n value=\"system\"\n />\n </IconButtonGroup>\n </div>\n\n <DropdownMenu.Separator />\n\n {/* Accessible-mode toggle uses the kit's Switch primitive\n for a clearer visual affordance than a checkbox tick.\n Rendered inside a `presentation` row (not a\n DropdownMenu.CheckboxItem) — the Switch is focusable\n via Tab while the menu is open, so keyboard users\n still reach it; arrow keys keep moving between the\n three theme radios above without falling into the\n switch's roving collection.\n\n When the switch flips, `setAccessibility` writes\n through useTheme (the same store the standalone\n ThemeToggle uses) so document.documentElement gets\n the `theme-accessible` class instantly — including\n swapping `--font-sans` to Lexend for Latin scripts\n (see src/tokens/index.css). */}\n {/* `role=\"group\"` so the menu's `aria-required-children`\n (which only permits menuitem* / group / separator /\n menu inside `role=\"menu\"`) is satisfied — the Switch's\n `role=\"switch\"` would be a forbidden direct child of\n the menu. `aria-label` names the group so SR users\n hear \"Accessibility toggle, group\". */}\n <div\n role=\"group\"\n aria-label={t(\n 'navigation.headerSettings.appearance.accessible',\n )}\n className=\"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]\"\n >\n <Switch\n label={t('navigation.headerSettings.appearance.accessible')}\n labelSide=\"start\"\n size=\"sm\"\n checked={accessibleChecked}\n onCheckedChange={(next) =>\n theme.setAccessibility(next ? 'accessible' : 'default')\n }\n />\n </div>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n },\n);\n\nHeaderSettings.displayName = 'HeaderSettings';\n"],"names":["headerSettingsAgent","handle","args","safeWriteStorage","key","value","applyDocumentAttrs","locale","root","LOCALE_META","wrapperVariants","cva","dropdownContentClasses","HeaderSettings","forwardRef","props","ref","align","size","disabled","className","id","rest","t","useTranslation","theme","useTheme","setLocaleI18n","useLocale","forwardedRef","useRef","useImperativeHandle","setLocaleWithPersistence","useCallback","next","LOCALE_STORAGE_KEY","setLocaleRef","themeRef","agentHandle","useMemo","useAgentRegistration","accessibleChecked","jsx","jsxs","DropdownMenu","IconButton","Settings","event","target","LocalePicker","IconButtonGroup","Sun","Moon","Monitor","Switch"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-BOwqwy03.js","sources":["../../src/components/list/list.agent.ts","../../src/components/list/list.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — List. */\n/* */\n/* The agent surface is only meaningful for selectable lists (`selection` */\n/* prop set to `single` or `multiple`). Presentational lists still emit */\n/* the root + item DOM hooks so the registry can address them, but the */\n/* state and actions are no-ops when selection is `none`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ListHandle } from './list';\n\nexport const listAgent: AgentAdapter<ListHandle> = {\n id: 'list',\n capabilities: ['select_single', 'select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.list.state.selection',\n description:\n 'Ids of currently-selected list items. Empty array when none selected or list is presentational.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'read',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.list.actions.setSelection',\n description:\n 'Replace the current selection with the given item ids. No-op on presentational lists.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'read',\n descriptionKey: 'ui.agent.list.actions.clearSelection',\n description: 'Deselect all items.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'list',\n description: 'Marks the List 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-item-id',\n description:\n 'Opaque item id; sourced from each ListItem `value` prop. Emitted only when `value` is set.',\n },\n },\n};\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { listAgent } from './list.agent';\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface ListContextValue {\n selection: 'none' | 'single' | 'multiple';\n selectedValues: Set<string>;\n focusedValue: string | null;\n disabled: boolean;\n enabledItemValues: string[];\n onItemSelect: (value: string) => void;\n onItemFocus: (value: string) => void;\n onItemKeyDown: (e: KeyboardEvent<HTMLElement>, value: string) => void;\n registerItemRef: (value: string, el: HTMLElement | null) => void;\n divider: 'spaced' | 'divided' | 'bordered';\n}\n\nconst ListContext = createContext<ListContextValue>({\n selection: 'none',\n selectedValues: new Set(),\n focusedValue: null,\n disabled: false,\n enabledItemValues: [],\n onItemSelect: () => {},\n onItemFocus: () => {},\n onItemKeyDown: () => {},\n registerItemRef: () => {},\n divider: 'spaced',\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nconst listVariants = cva('ds:flex ds:flex-col ds:p-0 ds:m-0', {\n variants: {\n divider: {\n spaced: '',\n divided: '',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-md)] ds:overflow-hidden',\n },\n density: {\n compact: 'ds:gap-[var(--spacing-xs)]',\n default: 'ds:gap-[var(--spacing-sm)]',\n relaxed: 'ds:gap-[var(--spacing-md)]',\n },\n ordered: {\n true: 'ds:list-decimal ds:ps-[var(--spacing-lg)]',\n false: 'ds:list-none',\n },\n },\n defaultVariants: {\n divider: 'spaced',\n density: 'default',\n ordered: false,\n },\n});\n\nconst listItemVariants = cva(\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n {\n variants: {\n divider: {\n spaced: '',\n divided:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n bordered:\n 'ds:[&:not(:last-child)]:[border-block-end:1px_solid_var(--border)]',\n },\n interactive: {\n // flex lives on the outer <div role=\"option\"> so it doesn't suppress ::marker on <li>\n true: [\n 'ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)] ds:cursor-pointer ds:select-none',\n 'ds:rounded-[var(--radius-sm)]',\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-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n // no flex here — <li> keeps display:list-item so ::marker renders correctly\n false: '',\n },\n selected: {\n true: '',\n false: '',\n },\n disabled: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n interactive: true,\n selected: false,\n disabled: false,\n className: 'ds:hover:bg-[color:var(--muted)]/20',\n },\n {\n interactive: true,\n selected: true,\n className: 'ds:bg-[color:var(--primary)]/10',\n },\n {\n interactive: true,\n disabled: true,\n className: 'ds:opacity-50 ds:cursor-not-allowed ds:pointer-events-none',\n },\n ],\n defaultVariants: {\n divider: 'spaced',\n interactive: false,\n selected: false,\n disabled: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface ListHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLElement> {\n as?: 'ul' | 'ol';\n start?: number;\n divider?: 'spaced' | 'divided' | 'bordered';\n density?: 'compact' | 'default' | 'relaxed';\n selection?: 'none' | 'single' | 'multiple';\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n disabled?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport interface ListItemProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n value?: string;\n leading?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n trailing?: ReactNode;\n lineClamp?: number;\n disabled?: boolean;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction collectItemInfo(\n children: ReactNode,\n): Array<{ value: string; disabled: boolean }> {\n const items: Array<{ value: string; disabled: boolean }> = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown; disabled?: unknown };\n if (typeof props.value === 'string') {\n items.push({ value: props.value, disabled: Boolean(props.disabled) });\n }\n });\n return items;\n}\n\n/* ------------------------------------------------------------------ */\n/* ListRoot */\n/* ------------------------------------------------------------------ */\n\nconst ListRoot = forwardRef<ListHandle, ListProps>(\n (\n {\n as = 'ul',\n start,\n divider = 'spaced',\n density = 'default',\n selection = 'none',\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled = false,\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const isSelectable = selection !== 'none';\n const isMultiple = selection === 'multiple';\n\n // Normalize the array of selected values onto the canonical `string[]`\n // shape that the rest of the component renders against. The hook owns\n // state in both modes; the consumer-facing `onValueChange` is invoked\n // with either a single string or the array, depending on `selection`.\n const controlledArray = useMemo<string[] | undefined>(() => {\n if (controlledValue === undefined) return undefined;\n return Array.isArray(controlledValue)\n ? controlledValue\n : [controlledValue];\n }, [controlledValue]);\n\n const initialArray = useMemo<string[]>(() => {\n if (defaultValue === undefined) return [];\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n // Default value is read once at mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [internalArray, setInternalArray] = useControllableState<string[]>({\n value: controlledArray,\n defaultValue: initialArray,\n });\n\n const selectedValues = useMemo<Set<string>>(\n () => new Set(internalArray ?? []),\n [internalArray],\n );\n\n const allItemInfo = useMemo(() => collectItemInfo(children), [children]);\n const enabledItemValues = useMemo(\n () =>\n allItemInfo.filter((i) => !i.disabled && !disabled).map((i) => i.value),\n [allItemInfo, disabled],\n );\n\n const [focusedValue, setFocusedValue] = useState<string | null>(null);\n\n const itemRefs = useRef<Map<string, HTMLElement>>(new Map());\n\n const registerItemRef = useCallback(\n (value: string, el: HTMLElement | null) => {\n if (el) {\n itemRefs.current.set(value, el);\n } else {\n itemRefs.current.delete(value);\n }\n },\n [],\n );\n\n const focusItem = useCallback((value: string) => {\n setFocusedValue(value);\n requestAnimationFrame(() => {\n itemRefs.current.get(value)?.focus();\n });\n }, []);\n\n const commit = useCallback(\n (next: string[]) => {\n setInternalArray(next);\n if (isMultiple) {\n onValueChange?.(next);\n } else {\n onValueChange?.(next[0] ?? '');\n }\n },\n [setInternalArray, isMultiple, onValueChange],\n );\n\n const handleItemSelect = useCallback(\n (itemValue: string) => {\n if (disabled) return;\n if (!isSelectable) return;\n if (isMultiple) {\n const current = [...selectedValues];\n if (selectedValues.has(itemValue)) {\n commit(current.filter((v) => v !== itemValue));\n } else {\n commit([...current, itemValue]);\n }\n } else {\n if (selectedValues.has(itemValue)) {\n commit([]);\n } else {\n commit([itemValue]);\n }\n }\n },\n [disabled, isSelectable, isMultiple, selectedValues, commit],\n );\n\n const handleItemFocus = useCallback((value: string) => {\n setFocusedValue(value);\n }, []);\n\n const handleItemKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>, itemValue: string) => {\n if (!isSelectable) return;\n const currentIndex = enabledItemValues.indexOf(itemValue);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = enabledItemValues[currentIndex + 1];\n if (next !== undefined) focusItem(next);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = enabledItemValues[currentIndex - 1];\n if (prev !== undefined) focusItem(prev);\n break;\n }\n case 'Home': {\n e.preventDefault();\n const first = enabledItemValues[0];\n if (first !== undefined) focusItem(first);\n break;\n }\n case 'End': {\n e.preventDefault();\n const last = enabledItemValues[enabledItemValues.length - 1];\n if (last !== undefined) focusItem(last);\n break;\n }\n case ' ':\n case 'Enter': {\n e.preventDefault();\n handleItemSelect(itemValue);\n break;\n }\n }\n },\n [isSelectable, enabledItemValues, focusItem, handleItemSelect],\n );\n\n const ctxValue: ListContextValue = {\n selection,\n selectedValues,\n focusedValue,\n disabled,\n enabledItemValues,\n onItemSelect: handleItemSelect,\n onItemFocus: handleItemFocus,\n onItemKeyDown: handleItemKeyDown,\n registerItemRef,\n divider,\n };\n\n const classes = listVariants({\n divider,\n density,\n ordered: as === 'ol',\n className,\n });\n\n const rootRef = useRef<HTMLElement>(null);\n\n const agentHandle = useMemo<ListHandle>(\n () => ({\n getSelection: () => Array.from(selectedValues),\n setSelection: (ids: string[]) => {\n if (!isSelectable) return;\n commit(isMultiple ? ids : ids.slice(0, 1));\n },\n clearSelection: () => {\n if (!isSelectable) return;\n commit([]);\n },\n }),\n [selectedValues, isSelectable, isMultiple, commit],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(listAgent, agentHandle, props.id);\n\n if (isSelectable) {\n if (import.meta.env.DEV && !ariaLabel && !props['aria-labelledby']) {\n console.warn(\n 'List: a selectable list (role=\"listbox\") should have an accessible name. ' +\n 'Pass aria-label or aria-labelledby to satisfy WCAG 4.1.2.',\n );\n }\n const resolvedAriaLabel = ariaLabel ?? t('list.label', 'List');\n return (\n <ListContext.Provider value={ctxValue}>\n <div\n ref={rootRef as Ref<HTMLDivElement>}\n role=\"listbox\"\n aria-label={resolvedAriaLabel}\n aria-multiselectable={isMultiple ? true : undefined}\n aria-disabled={disabled ? true : undefined}\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...props}\n >\n {children}\n </div>\n </ListContext.Provider>\n );\n }\n\n if (as === 'ol') {\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ol\n ref={rootRef as Ref<HTMLOListElement>}\n start={start}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLOListElement>)}\n >\n {children}\n </ol>\n </ListContext.Provider>\n );\n }\n\n return (\n <ListContext.Provider value={ctxValue}>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- Safari strips the implicit list role on <ol>/<ul> with list-style:none; this guard puts it back in the accessibility tree */}\n <ul\n ref={rootRef as Ref<HTMLUListElement>}\n role=\"list\"\n className={classes}\n data-component=\"list\"\n data-component-id={props.id}\n {...(props as HTMLAttributes<HTMLUListElement>)}\n >\n {children}\n </ul>\n </ListContext.Provider>\n );\n },\n);\nListRoot.displayName = 'List';\n\n/* ------------------------------------------------------------------ */\n/* ListItem */\n/* ------------------------------------------------------------------ */\n\nconst ListItem = forwardRef<HTMLElement, ListItemProps>(\n (\n {\n value,\n leading,\n title,\n description,\n trailing,\n lineClamp,\n disabled: itemDisabled = false,\n className,\n onClick,\n onFocus,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const {\n selection,\n selectedValues,\n focusedValue,\n disabled: groupDisabled,\n enabledItemValues,\n onItemSelect,\n onItemFocus,\n onItemKeyDown,\n registerItemRef,\n divider,\n } = useContext(ListContext);\n\n const isSelectable = selection !== 'none';\n const isDisabled = groupDisabled || itemDisabled;\n const isSelected = value !== undefined ? selectedValues.has(value) : false;\n const isFocused = value !== undefined && focusedValue === value;\n const isFirstEnabled =\n value !== undefined && enabledItemValues[0] === value;\n const tabIndex = isSelectable\n ? focusedValue !== null\n ? isFocused && !isDisabled\n ? 0\n : -1\n : isFirstEnabled && !isDisabled\n ? 0\n : -1\n : undefined;\n\n const descRef = useRef<HTMLSpanElement>(null);\n useIsomorphicLayoutEffect(() => {\n const el = descRef.current;\n if (!el) return;\n if (lineClamp != null) {\n el.style.setProperty('--list-item-clamp', String(lineClamp));\n } else {\n el.style.removeProperty('--list-item-clamp');\n }\n }, [lineClamp]);\n\n const internalRef = useCallback(\n (el: HTMLElement | null) => {\n if (value) registerItemRef(value, el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }\n },\n [value, registerItemRef, ref],\n );\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isSelectable && value && !isDisabled) {\n onItemSelect(value);\n }\n (onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(e);\n },\n [isSelectable, value, isDisabled, onItemSelect, onClick],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n if (value) onItemFocus(value);\n (onFocus as React.FocusEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemFocus, onFocus],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n if (value) onItemKeyDown(e, value);\n (onKeyDown as React.KeyboardEventHandler<HTMLElement> | undefined)?.(e);\n },\n [value, onItemKeyDown, onKeyDown],\n );\n\n const itemClasses = listItemVariants({\n divider,\n interactive: isSelectable,\n selected: isSelected,\n disabled: isDisabled,\n className,\n });\n\n const content = (\n <>\n {leading && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {leading}\n </span>\n )}\n <div className=\"ds:flex-1 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0\">\n <span className=\"ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium ds:leading-[var(--line-height-base)] ds:[overflow-wrap:anywhere]\">\n {title}\n </span>\n {description && (\n <span\n ref={descRef}\n className={[\n 'ds:text-[color:var(--muted-foreground)] ds:text-[length:var(--font-size-xs)] ds:leading-[var(--line-height-base)]',\n lineClamp != null\n ? 'ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:var(--list-item-clamp)]'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {description}\n </span>\n )}\n </div>\n {trailing && (\n <span className=\"ds:shrink-0 ds:flex ds:items-center ds:justify-center\">\n {trailing}\n </span>\n )}\n </>\n );\n\n if (isSelectable) {\n return (\n <div\n ref={internalRef as React.Ref<HTMLDivElement>}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled ? true : undefined}\n tabIndex={tabIndex}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {content}\n </div>\n );\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- non-interactive list items still surface click/keyboard handlers when selection mode is enabled (handlers no-op when selection==='none')\n <li\n ref={internalRef as React.Ref<HTMLLIElement>}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={itemClasses}\n data-item-id={value}\n {...props}\n >\n {/* Inner flex wrapper keeps <li> as display:list-item so ::marker renders */}\n <div className=\"ds:flex ds:items-center ds:gap-x-[var(--spacing-sm)]\">\n {content}\n </div>\n </li>\n );\n },\n);\nListItem.displayName = 'List.Item';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const List = Object.assign(ListRoot, {\n Root: ListRoot,\n Item: ListItem,\n});\n\nexport type { ListContextValue };\n"],"names":["listAgent","handle","args","ListContext","createContext","listVariants","cva","listItemVariants","collectItemInfo","children","items","Children","child","isValidElement","props","ListRoot","forwardRef","as","start","divider","density","selection","controlledValue","defaultValue","onValueChange","disabled","className","ariaLabel","ref","t","useTranslation","isSelectable","isMultiple","controlledArray","useMemo","initialArray","internalArray","setInternalArray","useControllableState","selectedValues","allItemInfo","enabledItemValues","i","focusedValue","setFocusedValue","useState","itemRefs","useRef","registerItemRef","useCallback","value","el","focusItem","_a","commit","next","handleItemSelect","itemValue","current","v","handleItemFocus","handleItemKeyDown","currentIndex","prev","first","last","ctxValue","classes","rootRef","agentHandle","ids","useImperativeHandle","useAgentRegistration","resolvedAriaLabel","jsx","ListItem","leading","title","description","trailing","lineClamp","itemDisabled","onClick","onFocus","onKeyDown","groupDisabled","onItemSelect","onItemFocus","onItemKeyDown","useContext","isDisabled","isSelected","isFocused","isFirstEnabled","tabIndex","descRef","useIsomorphicLayoutEffect","internalRef","handleClick","e","handleFocus","handleKeyDown","itemClasses","content","jsxs","Fragment","List"],"mappings":"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"}