@alfadocs/ui-kit-debug 0.30.5 → 0.31.2

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 (542) hide show
  1. package/dist/_chunks/{accordion-CNcodXuO.js → accordion-bSU21uTV.js} +3 -3
  2. package/dist/_chunks/{accordion-CNcodXuO.js.map → accordion-bSU21uTV.js.map} +1 -1
  3. package/dist/_chunks/{agenda-card-DO9_yogb.js → agenda-card-UJA6Arbs.js} +3 -3
  4. package/dist/_chunks/{agenda-card-DO9_yogb.js.map → agenda-card-UJA6Arbs.js.map} +1 -1
  5. package/dist/_chunks/{agenda-tray-WLbfMip6.js → agenda-tray-1fAxNOMz.js} +4 -4
  6. package/dist/_chunks/{agenda-tray-WLbfMip6.js.map → agenda-tray-1fAxNOMz.js.map} +1 -1
  7. package/dist/_chunks/{ai-prompt-input-BXlwNnWe.js → ai-prompt-input-C6sCr1Vi.js} +11 -10
  8. package/dist/_chunks/ai-prompt-input-C6sCr1Vi.js.map +1 -0
  9. package/dist/_chunks/{alia-sidebar-C-232sD7.js → alia-sidebar-BEoMl6UL.js} +9 -9
  10. package/dist/_chunks/{alia-sidebar-C-232sD7.js.map → alia-sidebar-BEoMl6UL.js.map} +1 -1
  11. package/dist/_chunks/ar-CEpIJtcO.js +399 -0
  12. package/dist/_chunks/ar-CEpIJtcO.js.map +1 -0
  13. package/dist/_chunks/{audio-recorder-DL800PE_.js → audio-recorder-C1rhKhSN.js} +114 -114
  14. package/dist/_chunks/audio-recorder-C1rhKhSN.js.map +1 -0
  15. package/dist/_chunks/audio-visualiser-l6zPd0AG.js +162 -0
  16. package/dist/_chunks/audio-visualiser-l6zPd0AG.js.map +1 -0
  17. package/dist/_chunks/{autocomplete-CUh0f7Dj.js → autocomplete-DIgdhCGJ.js} +2 -2
  18. package/dist/_chunks/{autocomplete-CUh0f7Dj.js.map → autocomplete-DIgdhCGJ.js.map} +1 -1
  19. package/dist/_chunks/{avatar-D_H4emLo.js → avatar-BNQNhoyL.js} +19 -18
  20. package/dist/_chunks/avatar-BNQNhoyL.js.map +1 -0
  21. package/dist/_chunks/{badge-CIjQ1Us1.js → badge-CptERaHx.js} +2 -2
  22. package/dist/_chunks/{badge-CIjQ1Us1.js.map → badge-CptERaHx.js.map} +1 -1
  23. package/dist/_chunks/{booking-Cw92aqo3.js → booking-BIZ9GSer.js} +149 -160
  24. package/dist/_chunks/booking-BIZ9GSer.js.map +1 -0
  25. package/dist/_chunks/{breadcrumb--YI7lcHA.js → breadcrumb-CLlhx7qo.js} +2 -2
  26. package/dist/_chunks/{breadcrumb--YI7lcHA.js.map → breadcrumb-CLlhx7qo.js.map} +1 -1
  27. package/dist/_chunks/{button-group-Bh2g_Ng-.js → button-group-Ciq6J4IW.js} +15 -14
  28. package/dist/_chunks/button-group-Ciq6J4IW.js.map +1 -0
  29. package/dist/_chunks/{calendar-WWNx448i.js → calendar-YHFknAGv.js} +22 -22
  30. package/dist/_chunks/{calendar-WWNx448i.js.map → calendar-YHFknAGv.js.map} +1 -1
  31. package/dist/_chunks/calendar-clock-CYkcqdwl.js +19 -0
  32. package/dist/_chunks/calendar-clock-CYkcqdwl.js.map +1 -0
  33. package/dist/_chunks/{carousel.agent-C2Icc9_T.js → carousel.agent-DrX96W-1.js} +2 -2
  34. package/dist/_chunks/{carousel.agent-C2Icc9_T.js.map → carousel.agent-DrX96W-1.js.map} +1 -1
  35. package/dist/_chunks/{chart-BLvFl169.js → chart-DLkVn_ex.js} +2 -2
  36. package/dist/_chunks/{chart-BLvFl169.js.map → chart-DLkVn_ex.js.map} +1 -1
  37. package/dist/_chunks/{chat-container-izziXViv.js → chat-container-ogB4OskO.js} +24 -23
  38. package/dist/_chunks/chat-container-ogB4OskO.js.map +1 -0
  39. package/dist/_chunks/{chat-input-cyl_y9bh.js → chat-input-CQe7nR_v.js} +132 -118
  40. package/dist/_chunks/chat-input-CQe7nR_v.js.map +1 -0
  41. package/dist/_chunks/{chat-message-fg221-yx.js → chat-message-D53_fH2w.js} +2 -2
  42. package/dist/_chunks/{chat-message-fg221-yx.js.map → chat-message-D53_fH2w.js.map} +1 -1
  43. package/dist/_chunks/{checkbox-Dgp_cfUr.js → checkbox-DRcOdmXv.js} +3 -3
  44. package/dist/_chunks/{checkbox-Dgp_cfUr.js.map → checkbox-DRcOdmXv.js.map} +1 -1
  45. package/dist/_chunks/{checkbox-group-eVowqKcT.js → checkbox-group-CpUwlHug.js} +3 -3
  46. package/dist/_chunks/{checkbox-group-eVowqKcT.js.map → checkbox-group-CpUwlHug.js.map} +1 -1
  47. package/dist/_chunks/{collapsible-hHiyZp0b.js → collapsible-CERONory.js} +2 -2
  48. package/dist/_chunks/{collapsible-hHiyZp0b.js.map → collapsible-CERONory.js.map} +1 -1
  49. package/dist/_chunks/{color-picker-Bm-gzpsh.js → color-picker-9tL7pz5y.js} +192 -181
  50. package/dist/_chunks/color-picker-9tL7pz5y.js.map +1 -0
  51. package/dist/_chunks/{combobox-Da9eq00i.js → combobox-BC-DFx8G.js} +31 -30
  52. package/dist/_chunks/combobox-BC-DFx8G.js.map +1 -0
  53. package/dist/_chunks/{command-palette-11BieSNq.js → command-palette-BiPAAno-.js} +125 -123
  54. package/dist/_chunks/command-palette-BiPAAno-.js.map +1 -0
  55. package/dist/_chunks/{copy-field-BAF4mt9h.js → copy-field-CCq7j6Zc.js} +2 -2
  56. package/dist/_chunks/{copy-field-BAF4mt9h.js.map → copy-field-CCq7j6Zc.js.map} +1 -1
  57. package/dist/_chunks/{date-picker-D0Ry1dMz.js → date-picker-B94HAV4A.js} +4 -4
  58. package/dist/_chunks/{date-picker-D0Ry1dMz.js.map → date-picker-B94HAV4A.js.map} +1 -1
  59. package/dist/_chunks/{date-range-picker-DYgHzMOo.js → date-range-picker-D4dgDlLU.js} +73 -73
  60. package/dist/_chunks/date-range-picker-D4dgDlLU.js.map +1 -0
  61. package/dist/_chunks/{date-time-picker-CGmGtcyc.js → date-time-picker-D1GEzf8p.js} +5 -5
  62. package/dist/_chunks/{date-time-picker-CGmGtcyc.js.map → date-time-picker-D1GEzf8p.js.map} +1 -1
  63. package/dist/_chunks/de-Dfbeau59.js +477 -0
  64. package/dist/_chunks/de-Dfbeau59.js.map +1 -0
  65. package/dist/_chunks/{description-list-CWjnaDGn.js → description-list-BEbK2g93.js} +2 -2
  66. package/dist/_chunks/{description-list-CWjnaDGn.js.map → description-list-BEbK2g93.js.map} +1 -1
  67. package/dist/_chunks/{dialog-C-lTGVkB.js → dialog-Cee13rHU.js} +3 -3
  68. package/dist/_chunks/{dialog-C-lTGVkB.js.map → dialog-Cee13rHU.js.map} +1 -1
  69. package/dist/_chunks/{dropdown-menu-DZxwF23X.js → dropdown-menu-BC5ZdOMo.js} +3 -3
  70. package/dist/_chunks/{dropdown-menu-DZxwF23X.js.map → dropdown-menu-BC5ZdOMo.js.map} +1 -1
  71. package/dist/_chunks/{editable-currency-cell-renderer-CztRy_21.js → editable-currency-cell-renderer-BpicmolK.js} +308 -322
  72. package/dist/_chunks/editable-currency-cell-renderer-BpicmolK.js.map +1 -0
  73. package/dist/_chunks/el-Dro3J7CP.js +373 -0
  74. package/dist/_chunks/el-Dro3J7CP.js.map +1 -0
  75. package/dist/_chunks/{email-input-DvJ_kPKL.js → email-input-lQivsFrw.js} +3 -3
  76. package/dist/_chunks/{email-input-DvJ_kPKL.js.map → email-input-lQivsFrw.js.map} +1 -1
  77. package/dist/_chunks/es-Dvg8u70B.js +373 -0
  78. package/dist/_chunks/es-Dvg8u70B.js.map +1 -0
  79. package/dist/_chunks/{file-upload-DxAQprcU.js → file-upload-CdozCPct.js} +226 -233
  80. package/dist/_chunks/file-upload-CdozCPct.js.map +1 -0
  81. package/dist/_chunks/fr-VOGjBSPP.js +338 -0
  82. package/dist/_chunks/fr-VOGjBSPP.js.map +1 -0
  83. package/dist/_chunks/{freemium-paywall-B9c8Ylww.js → freemium-paywall-D1N02Oam.js} +4 -4
  84. package/dist/_chunks/{freemium-paywall-B9c8Ylww.js.map → freemium-paywall-D1N02Oam.js.map} +1 -1
  85. package/dist/_chunks/{header-DDj7uGD-.js → header-CTZWX-tm.js} +2 -2
  86. package/dist/_chunks/{header-DDj7uGD-.js.map → header-CTZWX-tm.js.map} +1 -1
  87. package/dist/_chunks/hi-BSDxWU_y.js +433 -0
  88. package/dist/_chunks/hi-BSDxWU_y.js.map +1 -0
  89. package/dist/_chunks/{icon-button-DPEqBKBQ.js → icon-button-CKEOrN37.js} +2 -2
  90. package/dist/_chunks/{icon-button-DPEqBKBQ.js.map → icon-button-CKEOrN37.js.map} +1 -1
  91. package/dist/_chunks/{icon-button-group-DeV3FpNY.js → icon-button-group-C48khLE0.js} +23 -22
  92. package/dist/_chunks/icon-button-group-C48khLE0.js.map +1 -0
  93. package/dist/_chunks/{isSameDay-DHG8Xade.js → isSameDay-DUEiAT0G.js} +2 -2
  94. package/dist/_chunks/{isSameDay-DHG8Xade.js.map → isSameDay-DUEiAT0G.js.map} +1 -1
  95. package/dist/_chunks/isSameWeek-Dfzu29cW.js +14 -0
  96. package/dist/_chunks/isSameWeek-Dfzu29cW.js.map +1 -0
  97. package/dist/_chunks/it-CuonvcI_.js +401 -0
  98. package/dist/_chunks/it-CuonvcI_.js.map +1 -0
  99. package/dist/_chunks/ja-DO57gIOT.js +366 -0
  100. package/dist/_chunks/ja-DO57gIOT.js.map +1 -0
  101. package/dist/_chunks/{key-value-pair-BvDY3zuc.js → key-value-pair-C8DaR3Xs.js} +2 -2
  102. package/dist/_chunks/{key-value-pair-BvDY3zuc.js.map → key-value-pair-C8DaR3Xs.js.map} +1 -1
  103. package/dist/_chunks/{list-BdvDctBz.js → list-BOwqwy03.js} +44 -43
  104. package/dist/_chunks/list-BOwqwy03.js.map +1 -0
  105. package/dist/_chunks/{locale-picker-CY89MChR.js → locale-picker-D99UyZVJ.js} +4 -4
  106. package/dist/_chunks/{locale-picker-CY89MChR.js.map → locale-picker-D99UyZVJ.js.map} +1 -1
  107. package/dist/_chunks/{map-view-DyB8tr6c.js → map-view-WEWqXzof.js} +569 -557
  108. package/dist/_chunks/{map-view-DyB8tr6c.js.map → map-view-WEWqXzof.js.map} +1 -1
  109. package/dist/_chunks/{message-card-D6iyPacd.js → message-card-BbRhZkDI.js} +3 -3
  110. package/dist/_chunks/{message-card-D6iyPacd.js.map → message-card-BbRhZkDI.js.map} +1 -1
  111. package/dist/_chunks/{message-tray-Bh-0ra-Y.js → message-tray-B762TKuv.js} +11 -10
  112. package/dist/_chunks/message-tray-B762TKuv.js.map +1 -0
  113. package/dist/_chunks/{multi-select-dSe6Xtc4.js → multi-select-DOLO3K_z.js} +26 -25
  114. package/dist/_chunks/multi-select-DOLO3K_z.js.map +1 -0
  115. package/dist/_chunks/{navigation-menu-CyS1fBJ7.js → navigation-menu-C6lBYVv9.js} +3 -3
  116. package/dist/_chunks/{navigation-menu-CyS1fBJ7.js.map → navigation-menu-C6lBYVv9.js.map} +1 -1
  117. package/dist/_chunks/nl-DjPaaWaW.js +326 -0
  118. package/dist/_chunks/nl-DjPaaWaW.js.map +1 -0
  119. package/dist/_chunks/{notification-card-vaMaA7Wa.js → notification-card-DMdO4g54.js} +2 -2
  120. package/dist/_chunks/{notification-card-vaMaA7Wa.js.map → notification-card-DMdO4g54.js.map} +1 -1
  121. package/dist/_chunks/{notification-tray-Cnum6LwM.js → notification-tray-Dl3FTleW.js} +17 -16
  122. package/dist/_chunks/notification-tray-Dl3FTleW.js.map +1 -0
  123. package/dist/_chunks/{number-input-BZXu6bPY.js → number-input-Dj5L3pXK.js} +2 -2
  124. package/dist/_chunks/{number-input-BZXu6bPY.js.map → number-input-Dj5L3pXK.js.map} +1 -1
  125. package/dist/_chunks/{otp-input-BDF_iNpa.js → otp-input-BEg_sn8A.js} +2 -2
  126. package/dist/_chunks/{otp-input-BDF_iNpa.js.map → otp-input-BEg_sn8A.js.map} +1 -1
  127. package/dist/_chunks/{pagination-BWaXF7W0.js → pagination-DQOgnxxw.js} +2 -2
  128. package/dist/_chunks/{pagination-BWaXF7W0.js.map → pagination-DQOgnxxw.js.map} +1 -1
  129. package/dist/_chunks/{parseISO-Dk4xa7q6.js → parseISO-DEpUNwxZ.js} +2 -2
  130. package/dist/_chunks/{parseISO-Dk4xa7q6.js.map → parseISO-DEpUNwxZ.js.map} +1 -1
  131. package/dist/_chunks/{patient-search-ZpHN-pgJ.js → patient-search-hFiYbqcl.js} +8 -8
  132. package/dist/_chunks/{patient-search-ZpHN-pgJ.js.map → patient-search-hFiYbqcl.js.map} +1 -1
  133. package/dist/_chunks/{patient-shell-CYaNkbA1.js → patient-shell-CDvMw_Nk.js} +6 -6
  134. package/dist/_chunks/{patient-shell-CYaNkbA1.js.map → patient-shell-CDvMw_Nk.js.map} +1 -1
  135. package/dist/_chunks/{payment-form-Ds3rxvad.js → payment-form-D5rgnZu7.js} +2 -2
  136. package/dist/_chunks/{payment-form-Ds3rxvad.js.map → payment-form-D5rgnZu7.js.map} +1 -1
  137. package/dist/_chunks/{pdf-viewer-CIuaocnq.js → pdf-viewer-DvtEHcEP.js} +347 -320
  138. package/dist/_chunks/{pdf-viewer-CIuaocnq.js.map → pdf-viewer-DvtEHcEP.js.map} +1 -1
  139. package/dist/_chunks/{phone-input-DKSHX7NQ.js → phone-input-DfZbPPvh.js} +217 -201
  140. package/dist/_chunks/phone-input-DfZbPPvh.js.map +1 -0
  141. package/dist/_chunks/pl-Cl4lOx2N.js +514 -0
  142. package/dist/_chunks/pl-Cl4lOx2N.js.map +1 -0
  143. package/dist/_chunks/{popover-BfHSBEKq.js → popover-Devce-tT.js} +3 -3
  144. package/dist/_chunks/{popover-BfHSBEKq.js.map → popover-Devce-tT.js.map} +1 -1
  145. package/dist/_chunks/practice-results-JQunxBIg.js +1618 -0
  146. package/dist/_chunks/practice-results-JQunxBIg.js.map +1 -0
  147. package/dist/_chunks/{privacy-lock-C6Ra5m3p.js → privacy-lock-DD-wHxBg.js} +3 -3
  148. package/dist/_chunks/{privacy-lock-C6Ra5m3p.js.map → privacy-lock-DD-wHxBg.js.map} +1 -1
  149. package/dist/_chunks/{progress-B-PSO5OS.js → progress-kzIRcdaq.js} +11 -10
  150. package/dist/_chunks/progress-kzIRcdaq.js.map +1 -0
  151. package/dist/_chunks/pt-D7qO5CzD.js +370 -0
  152. package/dist/_chunks/pt-D7qO5CzD.js.map +1 -0
  153. package/dist/_chunks/{public-footer.agent-Bc99tE5Z.js → public-footer.agent-Bh0rnx4i.js} +21 -14
  154. package/dist/_chunks/public-footer.agent-Bh0rnx4i.js.map +1 -0
  155. package/dist/_chunks/{public-header.agent-B-B0WDAi.js → public-header.agent-B2dDg2_d.js} +3 -3
  156. package/dist/_chunks/{public-header.agent-B-B0WDAi.js.map → public-header.agent-B2dDg2_d.js.map} +1 -1
  157. package/dist/_chunks/{radio-i4ogu3cq.js → radio-TWf9Q-mp.js} +2 -2
  158. package/dist/_chunks/{radio-i4ogu3cq.js.map → radio-TWf9Q-mp.js.map} +1 -1
  159. package/dist/_chunks/{radio-group-CTlGc36r.js → radio-group-BcF92GEF.js} +4 -4
  160. package/dist/_chunks/{radio-group-CTlGc36r.js.map → radio-group-BcF92GEF.js.map} +1 -1
  161. package/dist/_chunks/{react-day-picker-D3yzgvDB.js → react-day-picker-DsjfS7uI.js} +662 -615
  162. package/dist/_chunks/{react-day-picker-D3yzgvDB.js.map → react-day-picker-DsjfS7uI.js.map} +1 -1
  163. package/dist/_chunks/recaptcha-widget-CFYyLSEX.js +221 -0
  164. package/dist/_chunks/recaptcha-widget-CFYyLSEX.js.map +1 -0
  165. package/dist/_chunks/refresh-cw-CC8jSKMr.js +17 -0
  166. package/dist/_chunks/refresh-cw-CC8jSKMr.js.map +1 -0
  167. package/dist/_chunks/registry-nPAVE19X.js +21 -0
  168. package/dist/_chunks/registry-nPAVE19X.js.map +1 -0
  169. package/dist/_chunks/{resizable-COV-cnth.js → resizable-3vzqDlg6.js} +29 -28
  170. package/dist/_chunks/resizable-3vzqDlg6.js.map +1 -0
  171. package/dist/_chunks/{reviews-panel-bKEUKSic.js → reviews-panel-yanuBZs-.js} +4 -4
  172. package/dist/_chunks/{reviews-panel-bKEUKSic.js.map → reviews-panel-yanuBZs-.js.map} +1 -1
  173. package/dist/_chunks/{rich-text-editor-J-wAz9eN.js → rich-text-editor-CHmr9Bz8.js} +2 -2
  174. package/dist/_chunks/{rich-text-editor-J-wAz9eN.js.map → rich-text-editor-CHmr9Bz8.js.map} +1 -1
  175. package/dist/_chunks/ro-CP2-VJ_O.js +361 -0
  176. package/dist/_chunks/ro-CP2-VJ_O.js.map +1 -0
  177. package/dist/_chunks/ru-RPn9_Lpq.js +561 -0
  178. package/dist/_chunks/ru-RPn9_Lpq.js.map +1 -0
  179. package/dist/_chunks/{scroll-area-DEDU-lp-.js → scroll-area-BWqCkEGz.js} +2 -2
  180. package/dist/_chunks/{scroll-area-DEDU-lp-.js.map → scroll-area-BWqCkEGz.js.map} +1 -1
  181. package/dist/_chunks/{search-bar-BRMW1-WG.js → search-bar-CP6wUJFY.js} +3 -3
  182. package/dist/_chunks/{search-bar-BRMW1-WG.js.map → search-bar-CP6wUJFY.js.map} +1 -1
  183. package/dist/_chunks/{search-input-CIA6pPfn.js → search-input-C1C3jQpD.js} +24 -23
  184. package/dist/_chunks/search-input-C1C3jQpD.js.map +1 -0
  185. package/dist/_chunks/{select-C92AT_OZ.js → select-hsCaJSX3.js} +3 -3
  186. package/dist/_chunks/{select-C92AT_OZ.js.map → select-hsCaJSX3.js.map} +1 -1
  187. package/dist/_chunks/{sheet-D8Yl0nKR.js → sheet-BV-yuLE2.js} +3 -3
  188. package/dist/_chunks/{sheet-D8Yl0nKR.js.map → sheet-BV-yuLE2.js.map} +1 -1
  189. package/dist/_chunks/{sidebar-DkyC6GvS.js → sidebar-BbR8f6oe.js} +3 -3
  190. package/dist/_chunks/{sidebar-DkyC6GvS.js.map → sidebar-BbR8f6oe.js.map} +1 -1
  191. package/dist/_chunks/{signature-capture-DjMlFOzS.js → signature-capture-C-fF71xI.js} +213 -205
  192. package/dist/_chunks/signature-capture-C-fF71xI.js.map +1 -0
  193. package/dist/_chunks/{slider-CfEzeseL.js → slider-BHWzXdjt.js} +3 -3
  194. package/dist/_chunks/{slider-CfEzeseL.js.map → slider-BHWzXdjt.js.map} +1 -1
  195. package/dist/_chunks/{slot-grid-Q94gVmhn.js → slot-grid-Dz13dH82.js} +4 -4
  196. package/dist/_chunks/{slot-grid-Q94gVmhn.js.map → slot-grid-Dz13dH82.js.map} +1 -1
  197. package/dist/_chunks/smile-BSYLAHy6.js +17 -0
  198. package/dist/_chunks/smile-BSYLAHy6.js.map +1 -0
  199. package/dist/_chunks/{sparkline-B5Ms55PZ.js → sparkline-DEROcSl0.js} +2 -2
  200. package/dist/_chunks/{sparkline-B5Ms55PZ.js.map → sparkline-DEROcSl0.js.map} +1 -1
  201. package/dist/_chunks/sq-AQvefouo.js +355 -0
  202. package/dist/_chunks/sq-AQvefouo.js.map +1 -0
  203. package/dist/_chunks/{stepper-progress-jFY8BSf7.js → stepper-progress-DDjq5nei.js} +16 -15
  204. package/dist/_chunks/stepper-progress-DDjq5nei.js.map +1 -0
  205. package/dist/_chunks/streaming-text-GH07yIYh.js +127 -0
  206. package/dist/_chunks/streaming-text-GH07yIYh.js.map +1 -0
  207. package/dist/_chunks/sv-zkx9eBtD.js +376 -0
  208. package/dist/_chunks/sv-zkx9eBtD.js.map +1 -0
  209. package/dist/_chunks/{switch-D916VW86.js → switch-BJ6HD3Mn.js} +2 -2
  210. package/dist/_chunks/{switch-D916VW86.js.map → switch-BJ6HD3Mn.js.map} +1 -1
  211. package/dist/_chunks/{tabs-aEQfQV3x.js → tabs-BpPYVme_.js} +4 -4
  212. package/dist/_chunks/{tabs-aEQfQV3x.js.map → tabs-BpPYVme_.js.map} +1 -1
  213. package/dist/_chunks/{tag-bBPAvXyh.js → tag-CyoaEmf_.js} +2 -2
  214. package/dist/_chunks/{tag-bBPAvXyh.js.map → tag-CyoaEmf_.js.map} +1 -1
  215. package/dist/_chunks/{task-tray-6NlryfMJ.js → task-tray-DRK0b0Qb.js} +3 -3
  216. package/dist/_chunks/{task-tray-6NlryfMJ.js.map → task-tray-DRK0b0Qb.js.map} +1 -1
  217. package/dist/_chunks/{text-area-D5GAe8pV.js → text-area-BIx0tZ05.js} +27 -26
  218. package/dist/_chunks/text-area-BIx0tZ05.js.map +1 -0
  219. package/dist/_chunks/{text-input-CakysYnD.js → text-input-BaClJL8Y.js} +2 -2
  220. package/dist/_chunks/{text-input-CakysYnD.js.map → text-input-BaClJL8Y.js.map} +1 -1
  221. package/dist/_chunks/{theme-toggle-JoeMs_ws.js → theme-toggle-DpC28kt5.js} +6 -6
  222. package/dist/_chunks/{theme-toggle-JoeMs_ws.js.map → theme-toggle-DpC28kt5.js.map} +1 -1
  223. package/dist/_chunks/{time-picker-DeVZkIY2.js → time-picker-B5umYwfv.js} +2 -2
  224. package/dist/_chunks/{time-picker-DeVZkIY2.js.map → time-picker-B5umYwfv.js.map} +1 -1
  225. package/dist/_chunks/{timeline-CR7HjZCK.js → timeline-D0Wo7v_o.js} +3 -3
  226. package/dist/_chunks/{timeline-CR7HjZCK.js.map → timeline-D0Wo7v_o.js.map} +1 -1
  227. package/dist/_chunks/{toast.agent-DVpKt38p.js → toast.agent-WHHfw5VX.js} +322 -320
  228. package/dist/_chunks/{toast.agent-DVpKt38p.js.map → toast.agent-WHHfw5VX.js.map} +1 -1
  229. package/dist/_chunks/{tooltip-ClJd0ciy.js → tooltip-DvmfrNvB.js} +29 -20
  230. package/dist/_chunks/tooltip-DvmfrNvB.js.map +1 -0
  231. package/dist/_chunks/{tooth-scheme-3mITSXiZ.js → tooth-scheme-CxlsLjfN.js} +2 -2
  232. package/dist/_chunks/{tooth-scheme-3mITSXiZ.js.map → tooth-scheme-CxlsLjfN.js.map} +1 -1
  233. package/dist/_chunks/tr-Dmr412Ac.js +378 -0
  234. package/dist/_chunks/tr-Dmr412Ac.js.map +1 -0
  235. package/dist/_chunks/{transaction-chip-z9ENE50O.js → transaction-chip-B8ujzowA.js} +47 -60
  236. package/dist/_chunks/transaction-chip-B8ujzowA.js.map +1 -0
  237. package/dist/_chunks/{transcript-panel-QUQ9XJmf.js → transcript-panel-DyhTpAP7.js} +21 -20
  238. package/dist/_chunks/transcript-panel-DyhTpAP7.js.map +1 -0
  239. package/dist/_chunks/{use-direction-D6rvvG9G.js → use-direction-Dp8h70PP.js} +7 -6
  240. package/dist/_chunks/use-direction-Dp8h70PP.js.map +1 -0
  241. package/dist/_chunks/use-isomorphic-layout-effect-BGfaCOP1.js +6 -0
  242. package/dist/_chunks/use-isomorphic-layout-effect-BGfaCOP1.js.map +1 -0
  243. package/dist/_chunks/use-media-query-CcAx5SMM.js +16 -0
  244. package/dist/_chunks/use-media-query-CcAx5SMM.js.map +1 -0
  245. package/dist/_chunks/{use-password-requirements-E0sSfx5X.js → use-password-requirements-DsgduV1x.js} +3 -3
  246. package/dist/_chunks/{use-password-requirements-E0sSfx5X.js.map → use-password-requirements-DsgduV1x.js.map} +1 -1
  247. package/dist/_chunks/use-scroll-to-first-error-4Za-u5Nw.js +43 -0
  248. package/dist/_chunks/use-scroll-to-first-error-4Za-u5Nw.js.map +1 -0
  249. package/dist/_chunks/{workflow-map-DlWBJJBt.js → workflow-map-BSvQS3be.js} +6 -6
  250. package/dist/_chunks/{workflow-map-DlWBJJBt.js.map → workflow-map-BSvQS3be.js.map} +1 -1
  251. package/dist/_chunks/zh-CN-DxVt64Zk.js +388 -0
  252. package/dist/_chunks/zh-CN-DxVt64Zk.js.map +1 -0
  253. package/dist/agent/registry.d.ts +1 -6
  254. package/dist/agent/registry.d.ts.map +1 -1
  255. package/dist/agent-catalog.json +42 -1
  256. package/dist/components/_shared/date-locale.d.ts +7 -2
  257. package/dist/components/_shared/date-locale.d.ts.map +1 -1
  258. package/dist/components/_shared/index.d.ts +1 -1
  259. package/dist/components/_shared/index.d.ts.map +1 -1
  260. package/dist/components/accordion/index.js +1 -1
  261. package/dist/components/agenda-card/index.js +1 -1
  262. package/dist/components/agenda-tray/index.js +1 -1
  263. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  264. package/dist/components/ai-prompt-input/index.js +1 -1
  265. package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -1
  266. package/dist/components/audio-recorder/index.js +1 -1
  267. package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +1 -1
  268. package/dist/components/audio-visualiser/index.js +1 -1
  269. package/dist/components/autocomplete/index.js +1 -1
  270. package/dist/components/avatar/avatar.d.ts.map +1 -1
  271. package/dist/components/avatar/index.js +1 -1
  272. package/dist/components/badge/index.js +1 -1
  273. package/dist/components/booking/index.js +1 -1
  274. package/dist/components/breadcrumb/index.js +1 -1
  275. package/dist/components/button/index.js +1 -1
  276. package/dist/components/button-group/button-group.d.ts.map +1 -1
  277. package/dist/components/button-group/index.js +1 -1
  278. package/dist/components/calendar/calendar.d.ts.map +1 -1
  279. package/dist/components/calendar/index.js +1 -1
  280. package/dist/components/carousel/index.js +1 -1
  281. package/dist/components/chart/index.js +1 -1
  282. package/dist/components/chat-container/chat-container.d.ts.map +1 -1
  283. package/dist/components/chat-container/index.js +1 -1
  284. package/dist/components/chat-input/chat-input.d.ts.map +1 -1
  285. package/dist/components/chat-input/index.js +1 -1
  286. package/dist/components/chat-message/index.js +1 -1
  287. package/dist/components/checkbox/index.js +1 -1
  288. package/dist/components/checkbox-group/index.js +1 -1
  289. package/dist/components/collapsible/index.js +1 -1
  290. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  291. package/dist/components/color-picker/index.js +1 -1
  292. package/dist/components/combobox/combobox.d.ts.map +1 -1
  293. package/dist/components/combobox/index.js +1 -1
  294. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  295. package/dist/components/command-palette/index.js +1 -1
  296. package/dist/components/copy-field/index.js +1 -1
  297. package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +1 -1
  298. package/dist/components/data-table/data-table.d.ts.map +1 -1
  299. package/dist/components/data-table/index.js +1 -1
  300. package/dist/components/date-picker/index.js +1 -1
  301. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  302. package/dist/components/date-range-picker/index.js +1 -1
  303. package/dist/components/date-time-picker/index.js +1 -1
  304. package/dist/components/description-list/index.js +1 -1
  305. package/dist/components/dialog/index.js +1 -1
  306. package/dist/components/dropdown-menu/index.js +1 -1
  307. package/dist/components/email-input/index.js +1 -1
  308. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  309. package/dist/components/file-upload/index.js +1 -1
  310. package/dist/components/freemium-paywall/index.js +1 -1
  311. package/dist/components/header/index.js +1 -1
  312. package/dist/components/header-settings/index.js +6 -6
  313. package/dist/components/icon-button/index.js +1 -1
  314. package/dist/components/icon-button-group/icon-button-group.d.ts.map +1 -1
  315. package/dist/components/icon-button-group/index.js +1 -1
  316. package/dist/components/index.d.ts +1 -0
  317. package/dist/components/index.d.ts.map +1 -1
  318. package/dist/components/key-value-pair/index.js +1 -1
  319. package/dist/components/list/index.js +1 -1
  320. package/dist/components/list/list.d.ts.map +1 -1
  321. package/dist/components/locale-picker/index.js +1 -1
  322. package/dist/components/map-view/index.js +1 -1
  323. package/dist/components/map-view/map-view.d.ts +10 -0
  324. package/dist/components/map-view/map-view.d.ts.map +1 -1
  325. package/dist/components/message-card/index.js +1 -1
  326. package/dist/components/message-tray/index.js +1 -1
  327. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  328. package/dist/components/multi-select/index.js +1 -1
  329. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  330. package/dist/components/navigation-menu/index.js +1 -1
  331. package/dist/components/notification-card/index.js +1 -1
  332. package/dist/components/notification-tray/index.js +1 -1
  333. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  334. package/dist/components/number-input/index.js +1 -1
  335. package/dist/components/otp-input/index.js +1 -1
  336. package/dist/components/pagination/index.js +1 -1
  337. package/dist/components/password-input/index.js +1 -1
  338. package/dist/components/patient-search/index.js +1 -1
  339. package/dist/components/payment-form/index.js +1 -1
  340. package/dist/components/pdf-viewer/index.js +1 -1
  341. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  342. package/dist/components/phone-input/index.js +1 -1
  343. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  344. package/dist/components/popover/index.js +1 -1
  345. package/dist/components/practice-results/index.d.ts +4 -0
  346. package/dist/components/practice-results/index.d.ts.map +1 -0
  347. package/dist/components/practice-results/index.js +6 -0
  348. package/dist/components/practice-results/index.js.map +1 -0
  349. package/dist/components/practice-results/practice-results.agent.d.ts +4 -0
  350. package/dist/components/practice-results/practice-results.agent.d.ts.map +1 -0
  351. package/dist/components/practice-results/practice-results.d.ts +159 -0
  352. package/dist/components/practice-results/practice-results.d.ts.map +1 -0
  353. package/dist/components/privacy-lock/index.js +1 -1
  354. package/dist/components/progress/index.js +1 -1
  355. package/dist/components/progress/progress.d.ts.map +1 -1
  356. package/dist/components/public-footer/index.js +1 -1
  357. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  358. package/dist/components/public-header/index.js +1 -1
  359. package/dist/components/radio/index.js +1 -1
  360. package/dist/components/radio-group/index.js +2 -2
  361. package/dist/components/recaptcha-widget/index.js +1 -1
  362. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +1 -1
  363. package/dist/components/resizable/index.js +1 -1
  364. package/dist/components/resizable/resizable.d.ts.map +1 -1
  365. package/dist/components/reviews-panel/index.js +1 -1
  366. package/dist/components/rich-text-editor/index.js +1 -1
  367. package/dist/components/scroll-area/index.js +1 -1
  368. package/dist/components/search-bar/index.js +1 -1
  369. package/dist/components/search-input/index.js +1 -1
  370. package/dist/components/select/index.js +1 -1
  371. package/dist/components/sheet/index.js +1 -1
  372. package/dist/components/sidebar/index.js +1 -1
  373. package/dist/components/signature-capture/index.js +1 -1
  374. package/dist/components/signature-capture/signature-capture.d.ts.map +1 -1
  375. package/dist/components/slider/index.js +1 -1
  376. package/dist/components/slot-grid/index.js +1 -1
  377. package/dist/components/sparkline/index.js +1 -1
  378. package/dist/components/stepper-progress/index.js +1 -1
  379. package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -1
  380. package/dist/components/streaming-text/index.js +1 -1
  381. package/dist/components/streaming-text/streaming-text.d.ts.map +1 -1
  382. package/dist/components/switch/index.js +1 -1
  383. package/dist/components/tabs/index.js +1 -1
  384. package/dist/components/tag/index.js +1 -1
  385. package/dist/components/task-tray/index.js +1 -1
  386. package/dist/components/text-area/index.js +1 -1
  387. package/dist/components/text-area/text-area.d.ts.map +1 -1
  388. package/dist/components/text-input/index.js +1 -1
  389. package/dist/components/theme-toggle/index.js +1 -1
  390. package/dist/components/time-picker/index.js +1 -1
  391. package/dist/components/timeline/index.js +1 -1
  392. package/dist/components/toast/index.js +1 -1
  393. package/dist/components/toast/toast.d.ts.map +1 -1
  394. package/dist/components/tooltip/index.js +1 -1
  395. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  396. package/dist/components/tooth-scheme/index.js +1 -1
  397. package/dist/components/transaction-chip/index.js +1 -1
  398. package/dist/components/transcript-panel/index.js +1 -1
  399. package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
  400. package/dist/components/workflow/index.js +1 -1
  401. package/dist/hooks/index.js +69 -66
  402. package/dist/hooks/index.js.map +1 -1
  403. package/dist/hooks/use-debounced-value.d.ts.map +1 -1
  404. package/dist/hooks/use-direction.d.ts.map +1 -1
  405. package/dist/hooks/use-focus-trap.d.ts.map +1 -1
  406. package/dist/hooks/use-scroll-to-first-error.d.ts.map +1 -1
  407. package/dist/i18n/locales/ar.d.ts +92 -0
  408. package/dist/i18n/locales/ar.d.ts.map +1 -1
  409. package/dist/i18n/locales/ar.js +82 -0
  410. package/dist/i18n/locales/ar.js.map +1 -1
  411. package/dist/i18n/locales/de.d.ts +92 -0
  412. package/dist/i18n/locales/de.d.ts.map +1 -1
  413. package/dist/i18n/locales/de.js +81 -0
  414. package/dist/i18n/locales/de.js.map +1 -1
  415. package/dist/i18n/locales/el.d.ts +92 -0
  416. package/dist/i18n/locales/el.d.ts.map +1 -1
  417. package/dist/i18n/locales/el.js +82 -0
  418. package/dist/i18n/locales/el.js.map +1 -1
  419. package/dist/i18n/locales/en.d.ts +92 -0
  420. package/dist/i18n/locales/en.d.ts.map +1 -1
  421. package/dist/i18n/locales/en.js +92 -0
  422. package/dist/i18n/locales/en.js.map +1 -1
  423. package/dist/i18n/locales/es.d.ts +92 -0
  424. package/dist/i18n/locales/es.d.ts.map +1 -1
  425. package/dist/i18n/locales/es.js +81 -0
  426. package/dist/i18n/locales/es.js.map +1 -1
  427. package/dist/i18n/locales/fr.d.ts +92 -0
  428. package/dist/i18n/locales/fr.d.ts.map +1 -1
  429. package/dist/i18n/locales/fr.js +81 -0
  430. package/dist/i18n/locales/fr.js.map +1 -1
  431. package/dist/i18n/locales/hi.d.ts +92 -0
  432. package/dist/i18n/locales/hi.d.ts.map +1 -1
  433. package/dist/i18n/locales/hi.js +82 -0
  434. package/dist/i18n/locales/hi.js.map +1 -1
  435. package/dist/i18n/locales/it.d.ts +92 -0
  436. package/dist/i18n/locales/it.d.ts.map +1 -1
  437. package/dist/i18n/locales/it.js +81 -0
  438. package/dist/i18n/locales/it.js.map +1 -1
  439. package/dist/i18n/locales/ja.d.ts +92 -0
  440. package/dist/i18n/locales/ja.d.ts.map +1 -1
  441. package/dist/i18n/locales/ja.js +82 -0
  442. package/dist/i18n/locales/ja.js.map +1 -1
  443. package/dist/i18n/locales/nl.d.ts +92 -0
  444. package/dist/i18n/locales/nl.d.ts.map +1 -1
  445. package/dist/i18n/locales/nl.js +81 -0
  446. package/dist/i18n/locales/nl.js.map +1 -1
  447. package/dist/i18n/locales/pl.d.ts +92 -0
  448. package/dist/i18n/locales/pl.d.ts.map +1 -1
  449. package/dist/i18n/locales/pl.js +82 -0
  450. package/dist/i18n/locales/pl.js.map +1 -1
  451. package/dist/i18n/locales/pt.d.ts +92 -0
  452. package/dist/i18n/locales/pt.d.ts.map +1 -1
  453. package/dist/i18n/locales/pt.js +83 -0
  454. package/dist/i18n/locales/pt.js.map +1 -1
  455. package/dist/i18n/locales/ro.d.ts +92 -0
  456. package/dist/i18n/locales/ro.d.ts.map +1 -1
  457. package/dist/i18n/locales/ro.js +82 -0
  458. package/dist/i18n/locales/ro.js.map +1 -1
  459. package/dist/i18n/locales/ru.d.ts +92 -0
  460. package/dist/i18n/locales/ru.d.ts.map +1 -1
  461. package/dist/i18n/locales/ru.js +82 -0
  462. package/dist/i18n/locales/ru.js.map +1 -1
  463. package/dist/i18n/locales/sq.d.ts +92 -0
  464. package/dist/i18n/locales/sq.d.ts.map +1 -1
  465. package/dist/i18n/locales/sq.js +82 -0
  466. package/dist/i18n/locales/sq.js.map +1 -1
  467. package/dist/i18n/locales/sv.d.ts +92 -0
  468. package/dist/i18n/locales/sv.d.ts.map +1 -1
  469. package/dist/i18n/locales/sv.js +82 -0
  470. package/dist/i18n/locales/sv.js.map +1 -1
  471. package/dist/i18n/locales/tr.d.ts +92 -0
  472. package/dist/i18n/locales/tr.d.ts.map +1 -1
  473. package/dist/i18n/locales/tr.js +82 -0
  474. package/dist/i18n/locales/tr.js.map +1 -1
  475. package/dist/i18n/locales/zh.d.ts +92 -0
  476. package/dist/i18n/locales/zh.d.ts.map +1 -1
  477. package/dist/i18n/locales/zh.js +82 -0
  478. package/dist/i18n/locales/zh.js.map +1 -1
  479. package/dist/index.js +532 -528
  480. package/dist/index.js.map +1 -1
  481. package/dist/locales/ar.json +92 -0
  482. package/dist/locales/de.json +92 -0
  483. package/dist/locales/el.json +92 -0
  484. package/dist/locales/en.json +92 -0
  485. package/dist/locales/es.json +92 -0
  486. package/dist/locales/fr.json +92 -0
  487. package/dist/locales/hi.json +92 -0
  488. package/dist/locales/it.json +92 -0
  489. package/dist/locales/ja.json +92 -0
  490. package/dist/locales/nl.json +92 -0
  491. package/dist/locales/pl.json +92 -0
  492. package/dist/locales/pt.json +92 -0
  493. package/dist/locales/ro.json +92 -0
  494. package/dist/locales/ru.json +92 -0
  495. package/dist/locales/sq.json +92 -0
  496. package/dist/locales/sv.json +92 -0
  497. package/dist/locales/tr.json +92 -0
  498. package/dist/locales/zh.json +92 -0
  499. package/dist/patterns/alia-assistant/index.js +1 -1
  500. package/dist/patterns/patient-shell/index.js +1 -1
  501. package/dist/tokens.css +1 -1
  502. package/package.json +5 -2
  503. package/dist/_chunks/ai-prompt-input-BXlwNnWe.js.map +0 -1
  504. package/dist/_chunks/audio-recorder-DL800PE_.js.map +0 -1
  505. package/dist/_chunks/audio-visualiser-I-T4Z7EU.js +0 -145
  506. package/dist/_chunks/audio-visualiser-I-T4Z7EU.js.map +0 -1
  507. package/dist/_chunks/avatar-D_H4emLo.js.map +0 -1
  508. package/dist/_chunks/booking-Cw92aqo3.js.map +0 -1
  509. package/dist/_chunks/button-group-Bh2g_Ng-.js.map +0 -1
  510. package/dist/_chunks/chat-container-izziXViv.js.map +0 -1
  511. package/dist/_chunks/chat-input-cyl_y9bh.js.map +0 -1
  512. package/dist/_chunks/color-picker-Bm-gzpsh.js.map +0 -1
  513. package/dist/_chunks/combobox-Da9eq00i.js.map +0 -1
  514. package/dist/_chunks/command-palette-11BieSNq.js.map +0 -1
  515. package/dist/_chunks/date-range-picker-DYgHzMOo.js.map +0 -1
  516. package/dist/_chunks/editable-currency-cell-renderer-CztRy_21.js.map +0 -1
  517. package/dist/_chunks/file-upload-DxAQprcU.js.map +0 -1
  518. package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +0 -1
  519. package/dist/_chunks/list-BdvDctBz.js.map +0 -1
  520. package/dist/_chunks/message-tray-Bh-0ra-Y.js.map +0 -1
  521. package/dist/_chunks/multi-select-dSe6Xtc4.js.map +0 -1
  522. package/dist/_chunks/notification-tray-Cnum6LwM.js.map +0 -1
  523. package/dist/_chunks/phone-input-DKSHX7NQ.js.map +0 -1
  524. package/dist/_chunks/progress-B-PSO5OS.js.map +0 -1
  525. package/dist/_chunks/public-footer.agent-Bc99tE5Z.js.map +0 -1
  526. package/dist/_chunks/recaptcha-widget-BtBNb6tB.js +0 -192
  527. package/dist/_chunks/recaptcha-widget-BtBNb6tB.js.map +0 -1
  528. package/dist/_chunks/registry-C9nwlNyL.js +0 -21
  529. package/dist/_chunks/registry-C9nwlNyL.js.map +0 -1
  530. package/dist/_chunks/resizable-COV-cnth.js.map +0 -1
  531. package/dist/_chunks/search-input-CIA6pPfn.js.map +0 -1
  532. package/dist/_chunks/signature-capture-DjMlFOzS.js.map +0 -1
  533. package/dist/_chunks/stepper-progress-jFY8BSf7.js.map +0 -1
  534. package/dist/_chunks/streaming-text-BgjCTVOw.js +0 -105
  535. package/dist/_chunks/streaming-text-BgjCTVOw.js.map +0 -1
  536. package/dist/_chunks/text-area-D5GAe8pV.js.map +0 -1
  537. package/dist/_chunks/tooltip-ClJd0ciy.js.map +0 -1
  538. package/dist/_chunks/transaction-chip-z9ENE50O.js.map +0 -1
  539. package/dist/_chunks/transcript-panel-QUQ9XJmf.js.map +0 -1
  540. package/dist/_chunks/use-direction-D6rvvG9G.js.map +0 -1
  541. package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js +0 -55
  542. package/dist/_chunks/use-scroll-to-first-error-BrK7dKB_.js.map +0 -1
@@ -0,0 +1,162 @@
1
+ import { jsxs as _, jsx as V } from "react/jsx-runtime";
2
+ import { forwardRef as $, useRef as i, useState as G, useEffect as m, useMemo as H, useId as J } from "react";
3
+ import { c as K } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as O } from "react-i18next";
5
+ const Q = K(
6
+ [
7
+ "ds:relative ds:inline-flex ds:items-end ds:justify-center",
8
+ // 2px gap is a visual-tuning value (sub-token): the bars need a pixel
9
+ // comma between them that would look like padding at --spacing-xs (4px).
10
+ "ds:gap-[2px]",
11
+ "ds:rounded-[var(--radius-sm)]",
12
+ "ds:bg-transparent",
13
+ "ds:forced-colors:border ds:forced-colors:border-[CanvasText]"
14
+ ].join(" "),
15
+ {
16
+ variants: {
17
+ size: {
18
+ sm: "ds:h-6 ds:min-w-[120px] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]",
19
+ md: "ds:h-10 ds:min-w-[160px] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]",
20
+ lg: "ds:h-14 ds:min-w-[220px] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]"
21
+ }
22
+ },
23
+ defaultVariants: { size: "md" }
24
+ }
25
+ ), W = $(
26
+ ({
27
+ stream: p,
28
+ size: k = "md",
29
+ barCount: s = 32,
30
+ deviceName: R,
31
+ label: q,
32
+ className: B,
33
+ ...N
34
+ }, P) => {
35
+ const { t: j } = O(), d = i([]), o = i(null), h = i(null), l = i(null), v = i(null), g = i(null), [x, F] = G(!1), z = i(x);
36
+ m(() => {
37
+ var n;
38
+ if (typeof window > "u") return;
39
+ const e = window.matchMedia("(prefers-reduced-motion: reduce)");
40
+ F(e.matches);
41
+ const r = () => F(e.matches);
42
+ return (n = e.addEventListener) == null || n.call(e, "change", r), () => {
43
+ var a;
44
+ return (a = e.removeEventListener) == null ? void 0 : a.call(e, "change", r);
45
+ };
46
+ }, []), m(() => {
47
+ z.current = x;
48
+ }, [x]), m(() => {
49
+ if (!p) {
50
+ d.current.forEach((t) => {
51
+ t == null || t.style.setProperty("--bar-height", "10%");
52
+ });
53
+ return;
54
+ }
55
+ const e = window.AudioContext || window.webkitAudioContext;
56
+ if (!e) return;
57
+ let r = !1;
58
+ const n = new e(), a = n.createAnalyser();
59
+ a.fftSize = 256;
60
+ const w = n.createMediaStreamSource(p);
61
+ if (w.connect(a), r) {
62
+ try {
63
+ w.disconnect();
64
+ } catch {
65
+ }
66
+ try {
67
+ a.disconnect();
68
+ } catch {
69
+ }
70
+ n.close().catch(() => {
71
+ });
72
+ return;
73
+ }
74
+ h.current = n, l.current = a, v.current = w, g.current = new Uint8Array(a.frequencyBinCount);
75
+ let L = 0;
76
+ const b = (t) => {
77
+ var S;
78
+ if (r) return;
79
+ if (z.current && t - L < 250) {
80
+ o.current = requestAnimationFrame(b);
81
+ return;
82
+ }
83
+ L = t;
84
+ const c = g.current, u = l.current;
85
+ if (!c || !u) return;
86
+ u.getByteFrequencyData(
87
+ c
88
+ );
89
+ const A = Math.max(1, Math.floor(c.length / s));
90
+ for (let f = 0; f < s; f += 1) {
91
+ let T = 0;
92
+ for (let M = 0; M < A; M += 1)
93
+ T += c[f * A + M] ?? 0;
94
+ const C = T / A, U = Math.max(8, Math.min(100, C / 255 * 100));
95
+ (S = d.current[f]) == null || S.style.setProperty("--bar-height", `${U}%`);
96
+ }
97
+ o.current = requestAnimationFrame(b);
98
+ };
99
+ return o.current = requestAnimationFrame(b), () => {
100
+ var t, c, u;
101
+ r = !0, o.current !== null && cancelAnimationFrame(o.current), o.current = null;
102
+ try {
103
+ (t = v.current) == null || t.disconnect();
104
+ } catch {
105
+ }
106
+ try {
107
+ (c = l.current) == null || c.disconnect();
108
+ } catch {
109
+ }
110
+ (u = h.current) == null || u.close().catch(() => {
111
+ }), h.current = null, l.current = null, v.current = null, g.current = null;
112
+ };
113
+ }, [p, s]);
114
+ const D = H(() => Array.from({ length: s }), [s]);
115
+ m(() => {
116
+ d.current.length > s && (d.current.length = s);
117
+ }, [s]);
118
+ const I = q ?? j("chat.audio.visualiserLabel"), y = R ? j("chat.audio.device", { name: R }) : null, E = J();
119
+ return /* @__PURE__ */ _(
120
+ "div",
121
+ {
122
+ ref: P,
123
+ role: "img",
124
+ "aria-label": I,
125
+ "aria-describedby": y ? E : void 0,
126
+ "data-component": "audio-visualiser",
127
+ className: Q({ size: k, className: B }),
128
+ ...N,
129
+ children: [
130
+ D.map((e, r) => /* @__PURE__ */ V(
131
+ "div",
132
+ {
133
+ ref: (n) => {
134
+ d.current[r] = n;
135
+ },
136
+ "aria-hidden": "true",
137
+ className: [
138
+ "ds:inline-block ds:w-[3px] ds:min-w-[3px]",
139
+ "ds:bg-[color:var(--primary)]",
140
+ "ds:forced-colors:bg-[CanvasText]",
141
+ "ds:rounded-[1px]",
142
+ "ds:transition-[height] ds:duration-[var(--duration-fast)] ds:motion-reduce:transition-none",
143
+ // Height is runtime-computed — applied via --bar-height CSS var
144
+ // set on the element (inline style is limited to --bar-height; the
145
+ // element never receives a position/size class via style).
146
+ "ds:[block-size:var(--bar-height,10%)]"
147
+ ].join(" "),
148
+ style: { "--bar-height": "10%" }
149
+ },
150
+ r
151
+ )),
152
+ y ? /* @__PURE__ */ V("span", { id: E, className: "ds:sr-only", children: y }) : null
153
+ ]
154
+ }
155
+ );
156
+ }
157
+ );
158
+ W.displayName = "AudioVisualiser";
159
+ export {
160
+ W as A
161
+ };
162
+ //# sourceMappingURL=audio-visualiser-l6zPd0AG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-visualiser-l6zPd0AG.js","sources":["../../src/components/audio-visualiser/audio-visualiser.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nconst rootVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:items-end ds:justify-center',\n // 2px gap is a visual-tuning value (sub-token): the bars need a pixel\n // comma between them that would look like padding at --spacing-xs (4px).\n 'ds:gap-[2px]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-transparent',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-6 ds:min-w-[120px] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n md: 'ds:h-10 ds:min-w-[160px] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n lg: 'ds:h-14 ds:min-w-[220px] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nexport interface AudioVisualiserProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof rootVariants> {\n /** Live microphone stream. When null, bars render at their idle height. */\n stream: MediaStream | null;\n /** Number of frequency bars. Defaults to 32. */\n barCount?: number;\n /** Optional device label. When provided, announced via aria-label. */\n deviceName?: string;\n /** Accessible label override. Defaults to ui.chat.audio.visualiserLabel. */\n label?: string;\n}\n\nexport const AudioVisualiser = forwardRef<HTMLDivElement, AudioVisualiserProps>(\n (\n {\n stream,\n size = 'md',\n barCount = 32,\n deviceName,\n label,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const barRefs = useRef<Array<HTMLDivElement | null>>([]);\n const rafRef = useRef<number | null>(null);\n const audioCtxRef = useRef<AudioContext | null>(null);\n const analyserRef = useRef<AnalyserNode | null>(null);\n const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\n const freqArrayRef = useRef<Uint8Array | null>(null);\n const [reducedMotion, setReducedMotion] = useState(false);\n const reducedMotionRef = useRef(reducedMotion);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n setReducedMotion(mq.matches);\n const handler = () => setReducedMotion(mq.matches);\n mq.addEventListener?.('change', handler);\n return () => mq.removeEventListener?.('change', handler);\n }, []);\n\n // Mirror reducedMotion into a ref so the audio loop reads the latest\n // value without forcing the AudioContext effect to tear down and rebuild.\n useEffect(() => {\n reducedMotionRef.current = reducedMotion;\n }, [reducedMotion]);\n\n useEffect(() => {\n if (!stream) {\n // Paint idle bars.\n barRefs.current.forEach((el) => {\n el?.style.setProperty('--bar-height', '10%');\n });\n return;\n }\n\n const AC =\n window.AudioContext ||\n (window as unknown as { webkitAudioContext?: typeof AudioContext })\n .webkitAudioContext;\n if (!AC) return;\n\n // StrictMode guard: bail if the effect was torn down before setup\n // completed so the second mount doesn't race a closed context.\n let cancelled = false;\n\n const audioCtx = new AC();\n const analyser = audioCtx.createAnalyser();\n analyser.fftSize = 256;\n const source = audioCtx.createMediaStreamSource(stream);\n source.connect(analyser);\n\n if (cancelled) {\n try {\n source.disconnect();\n } catch {\n /* ignore */\n }\n try {\n analyser.disconnect();\n } catch {\n /* ignore */\n }\n audioCtx.close().catch(() => {});\n return;\n }\n\n audioCtxRef.current = audioCtx;\n analyserRef.current = analyser;\n sourceRef.current = source;\n freqArrayRef.current = new Uint8Array(analyser.frequencyBinCount);\n\n let lastDraw = 0;\n const draw = (ts: number) => {\n if (cancelled) return;\n if (reducedMotionRef.current && ts - lastDraw < 250) {\n rafRef.current = requestAnimationFrame(draw);\n return;\n }\n lastDraw = ts;\n const data = freqArrayRef.current;\n const currentAnalyser = analyserRef.current;\n if (!data || !currentAnalyser) return;\n // Cast: TS 5.7+ ships Uint8Array<ArrayBufferLike> whereas the DOM\n // AnalyserNode API signature narrows to Uint8Array<ArrayBuffer>.\n currentAnalyser.getByteFrequencyData(\n data as unknown as Parameters<\n AnalyserNode['getByteFrequencyData']\n >[0],\n );\n const binsPerBar = Math.max(1, Math.floor(data.length / barCount));\n for (let i = 0; i < barCount; i += 1) {\n let sum = 0;\n for (let j = 0; j < binsPerBar; j += 1) {\n sum += data[i * binsPerBar + j] ?? 0;\n }\n const avg = sum / binsPerBar;\n // Map 0..255 to 8..100% height.\n const pct = Math.max(8, Math.min(100, (avg / 255) * 100));\n barRefs.current[i]?.style.setProperty('--bar-height', `${pct}%`);\n }\n rafRef.current = requestAnimationFrame(draw);\n };\n\n rafRef.current = requestAnimationFrame(draw);\n\n return () => {\n cancelled = true;\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n try {\n sourceRef.current?.disconnect();\n } catch {\n /* ignore */\n }\n try {\n analyserRef.current?.disconnect();\n } catch {\n /* ignore */\n }\n audioCtxRef.current?.close().catch(() => {});\n audioCtxRef.current = null;\n analyserRef.current = null;\n sourceRef.current = null;\n freqArrayRef.current = null;\n };\n }, [stream, barCount]);\n\n const bars = useMemo(() => Array.from({ length: barCount }), [barCount]);\n\n // Trim barRefs when barCount shrinks so stale nulls don't accumulate\n // across long sessions that cycle through different bar counts.\n useEffect(() => {\n if (barRefs.current.length > barCount) {\n barRefs.current.length = barCount;\n }\n }, [barCount]);\n\n const resolvedLabel = label ?? t('chat.audio.visualiserLabel');\n const deviceText = deviceName\n ? t('chat.audio.device', { name: deviceName })\n : null;\n const deviceId = useId();\n\n return (\n <div\n ref={ref}\n // role=\"img\" lets axe accept aria-label on the bar group — without\n // a valid role, axe's aria-prohibited-attr rule rejects aria-label\n // on a bare <div>. The bars are decorative; the label is the\n // accessible name for the whole visualisation.\n role=\"img\"\n aria-label={resolvedLabel}\n aria-describedby={deviceText ? deviceId : undefined}\n data-component=\"audio-visualiser\"\n className={rootVariants({ size, className })}\n {...rest}\n >\n {bars.map((_, i) => (\n <div\n key={i}\n ref={(el) => {\n barRefs.current[i] = el;\n }}\n aria-hidden=\"true\"\n className={[\n 'ds:inline-block ds:w-[3px] ds:min-w-[3px]',\n 'ds:bg-[color:var(--primary)]',\n 'ds:forced-colors:bg-[CanvasText]',\n 'ds:rounded-[1px]',\n 'ds:transition-[height] ds:duration-[var(--duration-fast)] ds:motion-reduce:transition-none',\n // Height is runtime-computed — applied via --bar-height CSS var\n // set on the element (inline style is limited to --bar-height; the\n // element never receives a position/size class via style).\n 'ds:[block-size:var(--bar-height,10%)]',\n ].join(' ')}\n // eslint-disable-next-line react/forbid-dom-props -- runtime-computed dimension via --bar-height CSS variable\n style={{ ['--bar-height' as string]: '10%' }}\n />\n ))}\n {deviceText ? (\n <span id={deviceId} className=\"ds:sr-only\">\n {deviceText}\n </span>\n ) : null}\n </div>\n );\n },\n);\n\nAudioVisualiser.displayName = 'AudioVisualiser';\n"],"names":["rootVariants","cva","AudioVisualiser","forwardRef","stream","size","barCount","deviceName","label","className","rest","ref","t","useTranslation","barRefs","useRef","rafRef","audioCtxRef","analyserRef","sourceRef","freqArrayRef","reducedMotion","setReducedMotion","useState","reducedMotionRef","useEffect","mq","handler","_a","el","AC","cancelled","audioCtx","analyser","source","lastDraw","draw","ts","data","currentAnalyser","binsPerBar","i","sum","j","avg","pct","_b","_c","bars","useMemo","resolvedLabel","deviceText","deviceId","useId","jsxs","_","jsx"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { u as tt } from "./use-controllable-state-BiY4xTzM.js";
10
10
  import { g as st } from "./group-options-BvKhQ3xb.js";
11
11
  import { I as nt, a as S, b as K, c as ot } from "./input-surface-xyERuLU_.js";
12
12
  import { u as at } from "./use-debounced-callback-BisrB-Fq.js";
13
- import { u as rt } from "./registry-C9nwlNyL.js";
13
+ import { u as rt } from "./registry-nPAVE19X.js";
14
14
  const it = {
15
15
  id: "autocomplete",
16
16
  capabilities: ["filter", "pick", "open", "close"],
@@ -466,4 +466,4 @@ export {
466
466
  it as a,
467
467
  dt as b
468
468
  };
469
- //# sourceMappingURL=autocomplete-CUh0f7Dj.js.map
469
+ //# sourceMappingURL=autocomplete-DIgdhCGJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-CUh0f7Dj.js","sources":["../../src/components/autocomplete/autocomplete.agent.ts","../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { AutocompleteHandle } from './autocomplete';\n\nexport const autocompleteAgent: AgentAdapter<AutocompleteHandle> = {\n id: 'autocomplete',\n capabilities: ['filter', 'pick', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n description:\n 'Currently-selected option value, or null when nothing is committed.',\n read: (handle) => handle.getValue(),\n },\n query: {\n type: 'string',\n description: 'Current free-text query in the input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n description: 'True when the suggestion list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'read',\n argsType: '{ value: string | null }',\n description: 'Set the committed value programmatically.',\n invoke: (handle, args: { value: string | null }) => {\n handle.setValue(args.value);\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Set the input query, which filters the suggestion list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n description: 'Clear the value and the query.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n description: 'Open the suggestion list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the suggestion list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'autocomplete' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each suggestion emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CompositionEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Command } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_TEXT,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { autocompleteAgent } from './autocomplete.agent';\n\n// ---------------------------------------------------------------------------\n// CVA — sizing / chrome tokens come from _shared/input-surface so the four\n// input surfaces (TextInput, Autocomplete, Combobox, MultiSelect) cannot drift.\n// ---------------------------------------------------------------------------\n\nconst autocompleteVariants = cva(\n ['ds:flex ds:w-full ds:items-center', INPUT_SURFACE_CHROME].join(' '),\n {\n variants: {\n size: {\n sm: `${INPUT_SURFACE_HEIGHT.sm} ${INPUT_SURFACE_TEXT.sm}`,\n md: `${INPUT_SURFACE_HEIGHT.md} ${INPUT_SURFACE_TEXT.md}`,\n lg: `${INPUT_SURFACE_HEIGHT.lg} ${INPUT_SURFACE_TEXT.lg}`,\n },\n tone: INPUT_SURFACE_TONE,\n },\n defaultVariants: { size: 'md', tone: 'default' },\n },\n);\n\nconst inputVariants = cva(\n [\n 'ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground',\n 'ds:placeholder:text-muted-foreground',\n 'ds:outline-none ds:focus:outline-none ds:focus-visible:outline-none',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n hasStart: { true: 'ds:ps-2', false: 'ds:ps-3' },\n hasEnd: { true: 'ds:pe-2', false: 'ds:pe-3' },\n },\n defaultVariants: { hasStart: false, hasEnd: false },\n },\n);\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-background',\n 'ds:shadow-[var(--shadow-md)]',\n 'ds:w-[var(--radix-popover-trigger-width)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst itemVariants = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-3 ds:pe-3 ds:py-2 ds:text-[length:var(--font-size-sm)] ds:text-foreground',\n 'ds:rounded-[var(--radius-sm)] ds:select-none ds:cursor-pointer',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:data-[selected=true]:bg-primary ds:data-[selected=true]:text-primary-foreground',\n 'ds:hover:bg-muted ds:data-[selected=true]:hover:bg-primary',\n ].join(' '),\n);\n\nconst groupClasses = [\n 'ds:[&_[cmdk-group-heading]]:ps-3',\n 'ds:[&_[cmdk-group-heading]]:pe-3',\n 'ds:[&_[cmdk-group-heading]]:py-1.5',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-muted-foreground',\n].join(' ');\n\nconst adornmentBase =\n 'ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4';\n\n// ---------------------------------------------------------------------------\n// Agent handle — curated surface for agent-readiness adapter.\n//\n// The autocomplete `forwardRef` exposes the underlying `HTMLInputElement` for\n// form integration; the agent handle is a separate, structural contract\n// referenced by `autocomplete.agent.ts`. Consumers wire it via the platform\n// registry — it is not the component's React ref.\n// ---------------------------------------------------------------------------\n\nexport interface AutocompleteHandle {\n getValue: () => string | null;\n getQuery: () => string;\n getIsOpen: () => boolean;\n setValue: (value: string | null) => void;\n setQuery: (query: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ntype CVAProps = VariantProps<typeof autocompleteVariants>;\n\nexport interface AutocompleteProps<T extends string = string> extends Pick<\n CVAProps,\n 'size' | 'tone'\n> {\n loadOptions: (\n query: string,\n opts: { signal: AbortSignal; locale: string },\n ) => Promise<OptionShape<T>[]>;\n debounceMs?: number;\n\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onSelect?: (option: OptionShape<T>) => void;\n\n recents?: OptionShape<T>[];\n onRecentSelect?: (option: OptionShape<T>) => void;\n\n snapOnBlur?: boolean;\n\n startAdornment?: ReactNode;\n endAdornment?: ReactNode;\n placeholder?: string;\n\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n className?: string;\n 'aria-label'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction itemIdFor(idPrefix: string, kind: 'recent' | 'option', value: string) {\n return `${idPrefix}-${kind}-${value}`;\n}\n\nfunction cmdkValueFor(kind: 'recent' | 'option', value: string) {\n return `${kind}:${value}`;\n}\n\nconst AutocompleteImpl = forwardRef<HTMLInputElement, AutocompleteProps>(\n function Autocomplete(\n {\n loadOptions,\n debounceMs = 250,\n value,\n defaultValue,\n onChange,\n onSelect,\n recents,\n onRecentSelect,\n snapOnBlur = false,\n size = 'md',\n tone = 'default',\n startAdornment,\n endAdornment,\n placeholder,\n disabled,\n readOnly,\n required,\n name,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n\n const reactId = useId();\n const idPrefix = id ?? ctx.id ?? reactId;\n const listId = `${idPrefix}-listbox`;\n const liveRegionId = `${idPrefix}-live`;\n\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const effectiveRequired = Boolean(ctx.required || required);\n const effectiveInvalid = ctx.invalid;\n const effectiveTone: 'default' | 'error' = effectiveInvalid\n ? 'error'\n : (tone ?? 'default');\n const describedBy = ctx.describedBy || undefined;\n\n const [currentValueRaw, commitValueRaw] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? '',\n onChange,\n });\n const currentValue = currentValueRaw ?? '';\n\n const [open, setOpen] = useState(false);\n const [suggestions, setSuggestions] = useState<OptionShape[]>([]);\n const [loading, setLoading] = useState(false);\n const [cmdkValue, setCmdkValue] = useState<string>('');\n\n const composingRef = useRef(false);\n const abortRef = useRef<AbortController | null>(null);\n const latestQueryRef = useRef<string>(currentValue);\n const suggestionsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n const recentsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const locale = i18n.language;\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n for (const option of suggestions) map.set(option.value, option);\n suggestionsByValueRef.current = map;\n }, [suggestions]);\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n if (recents) for (const option of recents) map.set(option.value, option);\n recentsByValueRef.current = map;\n }, [recents]);\n\n const runFetch = useCallback(\n (query: string) => {\n if (effectiveDisabled || readOnly) return;\n if (composingRef.current) return;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n latestQueryRef.current = query;\n setLoading(true);\n loadOptions(query, { signal: controller.signal, locale })\n .then((results) => {\n if (controller.signal.aborted) return;\n if (latestQueryRef.current !== query) return;\n setSuggestions(results);\n setLoading(false);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted) return;\n if (\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n (error as { name?: string }).name === 'AbortError'\n ) {\n return;\n }\n if (latestQueryRef.current !== query) return;\n setSuggestions([]);\n setLoading(false);\n });\n },\n [effectiveDisabled, readOnly, loadOptions, locale],\n );\n\n const debouncedFetch = useDebouncedCallback(runFetch, debounceMs);\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel();\n abortRef.current?.abort();\n };\n }, [debouncedFetch]);\n\n const commitValue = useCallback(\n (next: string) => {\n commitValueRaw(next);\n },\n [commitValueRaw],\n );\n\n const resolveCmdkValue = useCallback(\n (\n raw: string,\n ): { kind: 'recent' | 'option'; option: OptionShape } | null => {\n const [kind, val] = raw.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return null;\n const lookup =\n kind === 'recent'\n ? recentsByValueRef.current\n : suggestionsByValueRef.current;\n const option = lookup.get(val);\n return option ? { kind, option } : null;\n },\n [],\n );\n\n const handleInputValueChange = (next: string) => {\n commitValue(next);\n if (effectiveDisabled || readOnly) return;\n if (!open) setOpen(true);\n if (composingRef.current) return;\n debouncedFetch(next);\n };\n\n const handleCompositionStart = (\n _event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = (\n event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = false;\n const next = event.currentTarget.value;\n debouncedFetch(next);\n };\n\n const handleFocus = (_event: FocusEvent<HTMLInputElement>) => {\n if (effectiveDisabled || readOnly) return;\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const next = event.relatedTarget as Node | null;\n // Focus moved into the popover — keep listbox open (pointer-down on item\n // moves focus into the portal but we treat that as \"still interacting\").\n if (next && contentRef.current && contentRef.current.contains(next)) {\n return;\n }\n if (snapOnBlur && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n }\n }\n setOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (open) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n }\n return;\n }\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n return;\n }\n if (event.key === 'Tab' && open && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n setOpen(false);\n }\n }\n };\n\n const handleItemSelect = (\n kind: 'recent' | 'option',\n option: OptionShape,\n ) => {\n commitValue(option.label);\n if (kind === 'recent') onRecentSelect?.(option);\n else onSelect?.(option);\n setOpen(false);\n inputRef.current?.focus();\n };\n\n // Prevent input blur when clicking an item — keeps focus management predictable.\n const preventBlur = (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const showRecents =\n Boolean(recents && recents.length > 0) && currentValue.length === 0;\n const groupedSuggestions = useMemo(\n () => groupOptions(suggestions),\n [suggestions],\n );\n\n const hasStart = Boolean(startAdornment);\n const hasEnd = Boolean(endAdornment) || loading;\n\n const wrapperClass = autocompleteVariants({\n size,\n tone: effectiveTone,\n className,\n });\n\n const activeDescendant = useMemo(() => {\n if (!cmdkValue) return undefined;\n const [kind, val] = cmdkValue.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return undefined;\n return itemIdFor(idPrefix, kind, val);\n }, [cmdkValue, idPrefix]);\n\n const hasSuggestions = suggestions.length > 0;\n const showEmpty =\n !showRecents && !hasSuggestions && !loading && currentValue.length > 0;\n const showLoadingRow = loading && !hasSuggestions;\n // Suppress the popover when there is nothing to render — prevents an empty\n // 1-line strip appearing under the input on focus with no query + no recents.\n const hasPopoverContent =\n showRecents || hasSuggestions || showEmpty || showLoadingRow;\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const valueRefAgent = useRef<string>(currentValue);\n useEffect(() => {\n valueRefAgent.current = currentValue;\n }, [currentValue]);\n const openRefAgent = useRef<boolean>(open);\n useEffect(() => {\n openRefAgent.current = open;\n }, [open]);\n\n const agentHandle = useMemo<AutocompleteHandle>(\n () => ({\n getValue: () => valueRefAgent.current || null,\n getQuery: () => valueRefAgent.current,\n getIsOpen: () => openRefAgent.current,\n setValue: (next) => {\n commitValue(next ?? '');\n },\n setQuery: (query) => {\n commitValue(query);\n },\n clear: () => {\n commitValue('');\n },\n open: () => {\n setOpen(true);\n },\n close: () => {\n setOpen(false);\n },\n }),\n [commitValue],\n );\n useAgentRegistration(autocompleteAgent, agentHandle, id);\n\n const resultCount = suggestions.length;\n const liveMessage = loading\n ? t('common.loading', 'Loading…')\n : open && currentValue.length > 0\n ? t('inputs.autocomplete.results', {\n count: resultCount,\n defaultValue: '{{count}} results',\n })\n : '';\n\n return (\n <Command\n shouldFilter={false}\n value={cmdkValue}\n onValueChange={setCmdkValue}\n label={ariaLabel ?? placeholder}\n className=\"ds:w-full\"\n >\n <Popover.Root\n open={open && !effectiveDisabled && !readOnly && hasPopoverContent}\n >\n <Popover.Anchor asChild>\n <div\n className={wrapperClass}\n data-component=\"autocomplete\"\n data-component-id={id}\n data-disabled={effectiveDisabled || undefined}\n >\n {startAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:ps-3`}>\n {startAdornment}\n </span>\n ) : null}\n <Command.Input\n ref={setRefs}\n id={idPrefix}\n name={name}\n placeholder={placeholder}\n value={currentValue}\n onValueChange={handleInputValueChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n role=\"combobox\"\n aria-autocomplete=\"both\"\n aria-expanded={open}\n // Only advertise aria-controls while the listbox is mounted\n // — Command.List lives inside the Popover.Content and only\n // renders when `open` is true. Pointing aria-controls at a\n // non-existent id fails axe's aria-valid-attr-value rule.\n aria-controls={open ? listId : undefined}\n aria-activedescendant={activeDescendant}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n // Default to a generic searchable-input label when the\n // consumer doesn't supply one — without this, axe flags\n // the combobox role for missing accessible name. Apps\n // that have meaningful surrounding context (a visible\n // label, a `<label for>` association) should pass\n // their own `aria-label` to be content-specific.\n aria-label={ariaLabel ?? t('inputs.autocomplete.ariaLabel')}\n autoComplete=\"off\"\n className={inputVariants({ hasStart, hasEnd })}\n />\n {loading ? (\n <span className={`${adornmentBase} ds:pe-3`} aria-hidden=\"true\">\n <Spinner size=\"sm\" />\n </span>\n ) : endAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:pe-3`}>\n {endAdornment}\n </span>\n ) : null}\n <span\n id={liveRegionId}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {liveMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal forceMount>\n <Popover.Content\n ref={contentRef}\n // `forceMount` keeps Command.List in the DOM even when the\n // popover is closed, so the input's cmdk-set\n // `aria-controls` always points at a real id (axe's\n // aria-valid-attr-value rule). Visibility is gated by\n // data-state via CSS / the `hidden` attribute below.\n forceMount\n hidden={!open}\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => {\n const target = event.target as Node | null;\n if (target && inputRef.current?.contains(target)) {\n event.preventDefault();\n return;\n }\n setOpen(false);\n }}\n onEscapeKeyDown={() => setOpen(false)}\n onMouseDown={preventBlur}\n className={contentVariants()}\n >\n <Command.List\n id={listId}\n className=\"ds:max-h-[min(24rem,var(--radix-popover-content-available-height))] ds:overflow-auto ds:p-1\"\n >\n {showRecents ? (\n <Command.Group\n heading={t('inputs.autocomplete.recent', 'Recent')}\n className={groupClasses}\n >\n {(recents ?? []).map((option) => (\n <Command.Item\n key={`recent-${option.value}`}\n id={itemIdFor(idPrefix, 'recent', option.value)}\n value={cmdkValueFor('recent', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('recent', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ))}\n </Command.Group>\n ) : null}\n {showEmpty ? (\n <div className=\"ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.autocomplete.noResults', 'No results')}\n </div>\n ) : null}\n {showLoadingRow ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n <Spinner size=\"sm\" />\n <span>{t('common.loading', 'Loading…')}</span>\n </div>\n ) : null}\n {!showRecents && hasSuggestions\n ? groupedSuggestions.map((group, index) => {\n const body = group.items.map((option) => (\n <Command.Item\n key={`option-${option.value}`}\n id={itemIdFor(idPrefix, 'option', option.value)}\n value={cmdkValueFor('option', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('option', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ));\n if (!group.group) {\n return (\n <Command.Group key={`group-${index}`}>\n {body}\n </Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group.group}`}\n heading={group.group}\n className={groupClasses}\n >\n {body}\n </Command.Group>\n );\n })\n : null}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\n\ninterface AutocompleteComponent {\n <T extends string = string>(\n props: AutocompleteProps<T> & { ref?: Ref<HTMLInputElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const Autocomplete =\n AutocompleteImpl as unknown as AutocompleteComponent;\n(Autocomplete as { displayName?: string }).displayName = 'Autocomplete';\n\nexport { autocompleteVariants };\n"],"names":["autocompleteAgent","handle","args","autocompleteVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_TEXT","INPUT_SURFACE_TONE","inputVariants","contentVariants","itemVariants","groupClasses","adornmentBase","itemIdFor","idPrefix","kind","value","cmdkValueFor","AutocompleteImpl","forwardRef","loadOptions","debounceMs","defaultValue","onChange","onSelect","recents","onRecentSelect","snapOnBlur","size","tone","startAdornment","endAdornment","placeholder","disabled","readOnly","required","name","id","className","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","reactId","useId","listId","liveRegionId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","currentValueRaw","commitValueRaw","useControllableState","currentValue","open","setOpen","useState","suggestions","setSuggestions","loading","setLoading","cmdkValue","setCmdkValue","composingRef","useRef","abortRef","latestQueryRef","suggestionsByValueRef","recentsByValueRef","inputRef","contentRef","setRefs","useCallback","node","locale","useEffect","map","option","runFetch","query","_a","controller","results","error","debouncedFetch","useDebouncedCallback","commitValue","next","resolveCmdkValue","raw","val","handleInputValueChange","handleCompositionStart","_event","handleCompositionEnd","event","handleFocus","handleBlur","resolved","handleKeyDown","handleItemSelect","preventBlur","showRecents","groupedSuggestions","useMemo","groupOptions","hasStart","hasEnd","wrapperClass","activeDescendant","hasSuggestions","showEmpty","showLoadingRow","hasPopoverContent","valueRefAgent","openRefAgent","agentHandle","useAgentRegistration","resultCount","liveMessage","jsx","Command","jsxs","Popover","Spinner","target","group","index","body","Autocomplete"],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete-DIgdhCGJ.js","sources":["../../src/components/autocomplete/autocomplete.agent.ts","../../src/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { AutocompleteHandle } from './autocomplete';\n\nexport const autocompleteAgent: AgentAdapter<AutocompleteHandle> = {\n id: 'autocomplete',\n capabilities: ['filter', 'pick', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n description:\n 'Currently-selected option value, or null when nothing is committed.',\n read: (handle) => handle.getValue(),\n },\n query: {\n type: 'string',\n description: 'Current free-text query in the input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n description: 'True when the suggestion list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'read',\n argsType: '{ value: string | null }',\n description: 'Set the committed value programmatically.',\n invoke: (handle, args: { value: string | null }) => {\n handle.setValue(args.value);\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Set the input query, which filters the suggestion list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n description: 'Clear the value and the query.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n description: 'Open the suggestion list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the suggestion list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'autocomplete' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each suggestion emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CompositionEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Command } from 'cmdk';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_TEXT,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { autocompleteAgent } from './autocomplete.agent';\n\n// ---------------------------------------------------------------------------\n// CVA — sizing / chrome tokens come from _shared/input-surface so the four\n// input surfaces (TextInput, Autocomplete, Combobox, MultiSelect) cannot drift.\n// ---------------------------------------------------------------------------\n\nconst autocompleteVariants = cva(\n ['ds:flex ds:w-full ds:items-center', INPUT_SURFACE_CHROME].join(' '),\n {\n variants: {\n size: {\n sm: `${INPUT_SURFACE_HEIGHT.sm} ${INPUT_SURFACE_TEXT.sm}`,\n md: `${INPUT_SURFACE_HEIGHT.md} ${INPUT_SURFACE_TEXT.md}`,\n lg: `${INPUT_SURFACE_HEIGHT.lg} ${INPUT_SURFACE_TEXT.lg}`,\n },\n tone: INPUT_SURFACE_TONE,\n },\n defaultVariants: { size: 'md', tone: 'default' },\n },\n);\n\nconst inputVariants = cva(\n [\n 'ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground',\n 'ds:placeholder:text-muted-foreground',\n 'ds:outline-none ds:focus:outline-none ds:focus-visible:outline-none',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n hasStart: { true: 'ds:ps-2', false: 'ds:ps-3' },\n hasEnd: { true: 'ds:pe-2', false: 'ds:pe-3' },\n },\n defaultVariants: { hasStart: false, hasEnd: false },\n },\n);\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-background',\n 'ds:shadow-[var(--shadow-md)]',\n 'ds:w-[var(--radix-popover-trigger-width)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst itemVariants = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-3 ds:pe-3 ds:py-2 ds:text-[length:var(--font-size-sm)] ds:text-foreground',\n 'ds:rounded-[var(--radius-sm)] ds:select-none ds:cursor-pointer',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:data-[selected=true]:bg-primary ds:data-[selected=true]:text-primary-foreground',\n 'ds:hover:bg-muted ds:data-[selected=true]:hover:bg-primary',\n ].join(' '),\n);\n\nconst groupClasses = [\n 'ds:[&_[cmdk-group-heading]]:ps-3',\n 'ds:[&_[cmdk-group-heading]]:pe-3',\n 'ds:[&_[cmdk-group-heading]]:py-1.5',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-muted-foreground',\n].join(' ');\n\nconst adornmentBase =\n 'ds:inline-flex ds:items-center ds:shrink-0 ds:text-muted-foreground ds:[&_svg]:size-4';\n\n// ---------------------------------------------------------------------------\n// Agent handle — curated surface for agent-readiness adapter.\n//\n// The autocomplete `forwardRef` exposes the underlying `HTMLInputElement` for\n// form integration; the agent handle is a separate, structural contract\n// referenced by `autocomplete.agent.ts`. Consumers wire it via the platform\n// registry — it is not the component's React ref.\n// ---------------------------------------------------------------------------\n\nexport interface AutocompleteHandle {\n getValue: () => string | null;\n getQuery: () => string;\n getIsOpen: () => boolean;\n setValue: (value: string | null) => void;\n setQuery: (query: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ntype CVAProps = VariantProps<typeof autocompleteVariants>;\n\nexport interface AutocompleteProps<T extends string = string> extends Pick<\n CVAProps,\n 'size' | 'tone'\n> {\n loadOptions: (\n query: string,\n opts: { signal: AbortSignal; locale: string },\n ) => Promise<OptionShape<T>[]>;\n debounceMs?: number;\n\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onSelect?: (option: OptionShape<T>) => void;\n\n recents?: OptionShape<T>[];\n onRecentSelect?: (option: OptionShape<T>) => void;\n\n snapOnBlur?: boolean;\n\n startAdornment?: ReactNode;\n endAdornment?: ReactNode;\n placeholder?: string;\n\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n className?: string;\n 'aria-label'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction itemIdFor(idPrefix: string, kind: 'recent' | 'option', value: string) {\n return `${idPrefix}-${kind}-${value}`;\n}\n\nfunction cmdkValueFor(kind: 'recent' | 'option', value: string) {\n return `${kind}:${value}`;\n}\n\nconst AutocompleteImpl = forwardRef<HTMLInputElement, AutocompleteProps>(\n function Autocomplete(\n {\n loadOptions,\n debounceMs = 250,\n value,\n defaultValue,\n onChange,\n onSelect,\n recents,\n onRecentSelect,\n snapOnBlur = false,\n size = 'md',\n tone = 'default',\n startAdornment,\n endAdornment,\n placeholder,\n disabled,\n readOnly,\n required,\n name,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n\n const reactId = useId();\n const idPrefix = id ?? ctx.id ?? reactId;\n const listId = `${idPrefix}-listbox`;\n const liveRegionId = `${idPrefix}-live`;\n\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const effectiveRequired = Boolean(ctx.required || required);\n const effectiveInvalid = ctx.invalid;\n const effectiveTone: 'default' | 'error' = effectiveInvalid\n ? 'error'\n : (tone ?? 'default');\n const describedBy = ctx.describedBy || undefined;\n\n const [currentValueRaw, commitValueRaw] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? '',\n onChange,\n });\n const currentValue = currentValueRaw ?? '';\n\n const [open, setOpen] = useState(false);\n const [suggestions, setSuggestions] = useState<OptionShape[]>([]);\n const [loading, setLoading] = useState(false);\n const [cmdkValue, setCmdkValue] = useState<string>('');\n\n const composingRef = useRef(false);\n const abortRef = useRef<AbortController | null>(null);\n const latestQueryRef = useRef<string>(currentValue);\n const suggestionsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n const recentsByValueRef = useRef<Map<string, OptionShape>>(new Map());\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const locale = i18n.language;\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n for (const option of suggestions) map.set(option.value, option);\n suggestionsByValueRef.current = map;\n }, [suggestions]);\n\n useEffect(() => {\n const map = new Map<string, OptionShape>();\n if (recents) for (const option of recents) map.set(option.value, option);\n recentsByValueRef.current = map;\n }, [recents]);\n\n const runFetch = useCallback(\n (query: string) => {\n if (effectiveDisabled || readOnly) return;\n if (composingRef.current) return;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n latestQueryRef.current = query;\n setLoading(true);\n loadOptions(query, { signal: controller.signal, locale })\n .then((results) => {\n if (controller.signal.aborted) return;\n if (latestQueryRef.current !== query) return;\n setSuggestions(results);\n setLoading(false);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted) return;\n if (\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n (error as { name?: string }).name === 'AbortError'\n ) {\n return;\n }\n if (latestQueryRef.current !== query) return;\n setSuggestions([]);\n setLoading(false);\n });\n },\n [effectiveDisabled, readOnly, loadOptions, locale],\n );\n\n const debouncedFetch = useDebouncedCallback(runFetch, debounceMs);\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel();\n abortRef.current?.abort();\n };\n }, [debouncedFetch]);\n\n const commitValue = useCallback(\n (next: string) => {\n commitValueRaw(next);\n },\n [commitValueRaw],\n );\n\n const resolveCmdkValue = useCallback(\n (\n raw: string,\n ): { kind: 'recent' | 'option'; option: OptionShape } | null => {\n const [kind, val] = raw.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return null;\n const lookup =\n kind === 'recent'\n ? recentsByValueRef.current\n : suggestionsByValueRef.current;\n const option = lookup.get(val);\n return option ? { kind, option } : null;\n },\n [],\n );\n\n const handleInputValueChange = (next: string) => {\n commitValue(next);\n if (effectiveDisabled || readOnly) return;\n if (!open) setOpen(true);\n if (composingRef.current) return;\n debouncedFetch(next);\n };\n\n const handleCompositionStart = (\n _event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = (\n event: CompositionEvent<HTMLInputElement>,\n ) => {\n composingRef.current = false;\n const next = event.currentTarget.value;\n debouncedFetch(next);\n };\n\n const handleFocus = (_event: FocusEvent<HTMLInputElement>) => {\n if (effectiveDisabled || readOnly) return;\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const next = event.relatedTarget as Node | null;\n // Focus moved into the popover — keep listbox open (pointer-down on item\n // moves focus into the portal but we treat that as \"still interacting\").\n if (next && contentRef.current && contentRef.current.contains(next)) {\n return;\n }\n if (snapOnBlur && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n }\n }\n setOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (open) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n }\n return;\n }\n if (event.key === 'ArrowDown' && !open) {\n event.preventDefault();\n setOpen(true);\n if (currentValue) debouncedFetch(currentValue);\n return;\n }\n if (event.key === 'Tab' && open && cmdkValue) {\n const resolved = resolveCmdkValue(cmdkValue);\n if (resolved) {\n commitValue(resolved.option.label);\n onSelect?.(resolved.option);\n setOpen(false);\n }\n }\n };\n\n const handleItemSelect = (\n kind: 'recent' | 'option',\n option: OptionShape,\n ) => {\n commitValue(option.label);\n if (kind === 'recent') onRecentSelect?.(option);\n else onSelect?.(option);\n setOpen(false);\n inputRef.current?.focus();\n };\n\n // Prevent input blur when clicking an item — keeps focus management predictable.\n const preventBlur = (event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n };\n\n const showRecents =\n Boolean(recents && recents.length > 0) && currentValue.length === 0;\n const groupedSuggestions = useMemo(\n () => groupOptions(suggestions),\n [suggestions],\n );\n\n const hasStart = Boolean(startAdornment);\n const hasEnd = Boolean(endAdornment) || loading;\n\n const wrapperClass = autocompleteVariants({\n size,\n tone: effectiveTone,\n className,\n });\n\n const activeDescendant = useMemo(() => {\n if (!cmdkValue) return undefined;\n const [kind, val] = cmdkValue.split(':');\n if (!val || (kind !== 'recent' && kind !== 'option')) return undefined;\n return itemIdFor(idPrefix, kind, val);\n }, [cmdkValue, idPrefix]);\n\n const hasSuggestions = suggestions.length > 0;\n const showEmpty =\n !showRecents && !hasSuggestions && !loading && currentValue.length > 0;\n const showLoadingRow = loading && !hasSuggestions;\n // Suppress the popover when there is nothing to render — prevents an empty\n // 1-line strip appearing under the input on focus with no query + no recents.\n const hasPopoverContent =\n showRecents || hasSuggestions || showEmpty || showLoadingRow;\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const valueRefAgent = useRef<string>(currentValue);\n useEffect(() => {\n valueRefAgent.current = currentValue;\n }, [currentValue]);\n const openRefAgent = useRef<boolean>(open);\n useEffect(() => {\n openRefAgent.current = open;\n }, [open]);\n\n const agentHandle = useMemo<AutocompleteHandle>(\n () => ({\n getValue: () => valueRefAgent.current || null,\n getQuery: () => valueRefAgent.current,\n getIsOpen: () => openRefAgent.current,\n setValue: (next) => {\n commitValue(next ?? '');\n },\n setQuery: (query) => {\n commitValue(query);\n },\n clear: () => {\n commitValue('');\n },\n open: () => {\n setOpen(true);\n },\n close: () => {\n setOpen(false);\n },\n }),\n [commitValue],\n );\n useAgentRegistration(autocompleteAgent, agentHandle, id);\n\n const resultCount = suggestions.length;\n const liveMessage = loading\n ? t('common.loading', 'Loading…')\n : open && currentValue.length > 0\n ? t('inputs.autocomplete.results', {\n count: resultCount,\n defaultValue: '{{count}} results',\n })\n : '';\n\n return (\n <Command\n shouldFilter={false}\n value={cmdkValue}\n onValueChange={setCmdkValue}\n label={ariaLabel ?? placeholder}\n className=\"ds:w-full\"\n >\n <Popover.Root\n open={open && !effectiveDisabled && !readOnly && hasPopoverContent}\n >\n <Popover.Anchor asChild>\n <div\n className={wrapperClass}\n data-component=\"autocomplete\"\n data-component-id={id}\n data-disabled={effectiveDisabled || undefined}\n >\n {startAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:ps-3`}>\n {startAdornment}\n </span>\n ) : null}\n <Command.Input\n ref={setRefs}\n id={idPrefix}\n name={name}\n placeholder={placeholder}\n value={currentValue}\n onValueChange={handleInputValueChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n role=\"combobox\"\n aria-autocomplete=\"both\"\n aria-expanded={open}\n // Only advertise aria-controls while the listbox is mounted\n // — Command.List lives inside the Popover.Content and only\n // renders when `open` is true. Pointing aria-controls at a\n // non-existent id fails axe's aria-valid-attr-value rule.\n aria-controls={open ? listId : undefined}\n aria-activedescendant={activeDescendant}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n // Default to a generic searchable-input label when the\n // consumer doesn't supply one — without this, axe flags\n // the combobox role for missing accessible name. Apps\n // that have meaningful surrounding context (a visible\n // label, a `<label for>` association) should pass\n // their own `aria-label` to be content-specific.\n aria-label={ariaLabel ?? t('inputs.autocomplete.ariaLabel')}\n autoComplete=\"off\"\n className={inputVariants({ hasStart, hasEnd })}\n />\n {loading ? (\n <span className={`${adornmentBase} ds:pe-3`} aria-hidden=\"true\">\n <Spinner size=\"sm\" />\n </span>\n ) : endAdornment ? (\n <span aria-hidden=\"true\" className={`${adornmentBase} ds:pe-3`}>\n {endAdornment}\n </span>\n ) : null}\n <span\n id={liveRegionId}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {liveMessage}\n </span>\n </div>\n </Popover.Anchor>\n <Popover.Portal forceMount>\n <Popover.Content\n ref={contentRef}\n // `forceMount` keeps Command.List in the DOM even when the\n // popover is closed, so the input's cmdk-set\n // `aria-controls` always points at a real id (axe's\n // aria-valid-attr-value rule). Visibility is gated by\n // data-state via CSS / the `hidden` attribute below.\n forceMount\n hidden={!open}\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => {\n const target = event.target as Node | null;\n if (target && inputRef.current?.contains(target)) {\n event.preventDefault();\n return;\n }\n setOpen(false);\n }}\n onEscapeKeyDown={() => setOpen(false)}\n onMouseDown={preventBlur}\n className={contentVariants()}\n >\n <Command.List\n id={listId}\n className=\"ds:max-h-[min(24rem,var(--radix-popover-content-available-height))] ds:overflow-auto ds:p-1\"\n >\n {showRecents ? (\n <Command.Group\n heading={t('inputs.autocomplete.recent', 'Recent')}\n className={groupClasses}\n >\n {(recents ?? []).map((option) => (\n <Command.Item\n key={`recent-${option.value}`}\n id={itemIdFor(idPrefix, 'recent', option.value)}\n value={cmdkValueFor('recent', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('recent', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ))}\n </Command.Group>\n ) : null}\n {showEmpty ? (\n <div className=\"ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('inputs.autocomplete.noResults', 'No results')}\n </div>\n ) : null}\n {showLoadingRow ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n <Spinner size=\"sm\" />\n <span>{t('common.loading', 'Loading…')}</span>\n </div>\n ) : null}\n {!showRecents && hasSuggestions\n ? groupedSuggestions.map((group, index) => {\n const body = group.items.map((option) => (\n <Command.Item\n key={`option-${option.value}`}\n id={itemIdFor(idPrefix, 'option', option.value)}\n value={cmdkValueFor('option', option.value)}\n disabled={option.disabled}\n onSelect={() => handleItemSelect('option', option)}\n onMouseDown={preventBlur}\n className={itemVariants()}\n >\n {option.label}\n </Command.Item>\n ));\n if (!group.group) {\n return (\n <Command.Group key={`group-${index}`}>\n {body}\n </Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group.group}`}\n heading={group.group}\n className={groupClasses}\n >\n {body}\n </Command.Group>\n );\n })\n : null}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Command>\n );\n },\n);\n\ninterface AutocompleteComponent {\n <T extends string = string>(\n props: AutocompleteProps<T> & { ref?: Ref<HTMLInputElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\nexport const Autocomplete =\n AutocompleteImpl as unknown as AutocompleteComponent;\n(Autocomplete as { displayName?: string }).displayName = 'Autocomplete';\n\nexport { autocompleteVariants };\n"],"names":["autocompleteAgent","handle","args","autocompleteVariants","cva","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_TEXT","INPUT_SURFACE_TONE","inputVariants","contentVariants","itemVariants","groupClasses","adornmentBase","itemIdFor","idPrefix","kind","value","cmdkValueFor","AutocompleteImpl","forwardRef","loadOptions","debounceMs","defaultValue","onChange","onSelect","recents","onRecentSelect","snapOnBlur","size","tone","startAdornment","endAdornment","placeholder","disabled","readOnly","required","name","id","className","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","reactId","useId","listId","liveRegionId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","currentValueRaw","commitValueRaw","useControllableState","currentValue","open","setOpen","useState","suggestions","setSuggestions","loading","setLoading","cmdkValue","setCmdkValue","composingRef","useRef","abortRef","latestQueryRef","suggestionsByValueRef","recentsByValueRef","inputRef","contentRef","setRefs","useCallback","node","locale","useEffect","map","option","runFetch","query","_a","controller","results","error","debouncedFetch","useDebouncedCallback","commitValue","next","resolveCmdkValue","raw","val","handleInputValueChange","handleCompositionStart","_event","handleCompositionEnd","event","handleFocus","handleBlur","resolved","handleKeyDown","handleItemSelect","preventBlur","showRecents","groupedSuggestions","useMemo","groupOptions","hasStart","hasEnd","wrapperClass","activeDescendant","hasSuggestions","showEmpty","showLoadingRow","hasPopoverContent","valueRefAgent","openRefAgent","agentHandle","useAgentRegistration","resultCount","liveMessage","jsx","Command","jsxs","Popover","Spinner","target","group","index","body","Autocomplete"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { jsxs as C, jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as y, useRef as j, useState as w, useEffect as A, useLayoutEffect as I } from "react";
3
- import { c as N } from "./index-D2ZczOXr.js";
4
- import { useTranslation as E } from "react-i18next";
5
- import { c as B } from "./compose-refs-C0k0tdqF.js";
2
+ import { forwardRef as y, useRef as I, useState as j, useEffect as w } from "react";
3
+ import { c as A } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as N } from "react-i18next";
5
+ import { c as E } from "./compose-refs-C0k0tdqF.js";
6
+ import { u as B } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
6
7
  function R(s) {
7
8
  let e = 5381;
8
- for (let t = 0; t < s.length; t++)
9
- e = (e << 5) + e ^ s.charCodeAt(t), e = e >>> 0;
9
+ for (let o = 0; o < s.length; o++)
10
+ e = (e << 5) + e ^ s.charCodeAt(o), e = e >>> 0;
10
11
  return e;
11
12
  }
12
13
  const i = [
@@ -34,7 +35,7 @@ function L(s) {
34
35
  const e = s.trim().split(/\s+/).filter(Boolean);
35
36
  return e.length === 0 ? "" : e.length === 1 ? e[0].slice(0, 2).toUpperCase() : (e[0][0] + e[e.length - 1][0]).toUpperCase();
36
37
  }
37
- const k = N(
38
+ const k = A(
38
39
  [
39
40
  "ds:relative ds:inline-flex ds:shrink-0 ds:select-none ds:items-center ds:justify-center ds:overflow-hidden ds:rounded-[var(--radius-full)]",
40
41
  // Focus ring — uses design-system tokens so theme overrides (accessible: 3px) apply automatically.
@@ -66,17 +67,17 @@ const k = N(
66
67
  defaultVariants: { size: "md" }
67
68
  }
68
69
  ), T = y(
69
- ({ src: s, name: e, color: t, size: d, className: c, ...v }, f) => {
70
- const { t: g } = E(), l = j(null), u = B(f, l), [b, n] = w(!1);
71
- A(() => {
70
+ ({ src: s, name: e, color: o, size: d, className: c, ...v }, f) => {
71
+ const { t: g } = N(), l = I(null), u = E(f, l), [m, n] = j(!1);
72
+ w(() => {
72
73
  n(!1);
73
- }, [s]), I(() => {
74
+ }, [s]), B(() => {
74
75
  const a = l.current;
75
- a && (t ? a.style.setProperty("--avatar-color-override", t) : a.style.removeProperty("--avatar-color-override"));
76
- }, [t]);
77
- const o = !!s && !b, m = !o && !!e, h = !o && !e, p = t ? "ds:bg-[var(--avatar-color-override)]" : e ? S(e) : "ds:bg-muted", x = k({
76
+ a && (o ? a.style.setProperty("--avatar-color-override", o) : a.style.removeProperty("--avatar-color-override"));
77
+ }, [o]);
78
+ const t = !!s && !m, b = !t && !!e, h = !t && !e, p = o ? "ds:bg-[var(--avatar-color-override)]" : e ? S(e) : "ds:bg-muted", x = k({
78
79
  size: d,
79
- className: [p, t || e ? "ds:text-[var(--primary-foreground)] ds:[.theme-dark.theme-accessible_&]:text-[var(--color-grey-500)]" : "ds:text-muted-foreground", c].filter(Boolean).join(" ")
80
+ className: [p, o || e ? "ds:text-[var(--primary-foreground)] ds:[.theme-dark.theme-accessible_&]:text-[var(--color-grey-500)]" : "ds:text-muted-foreground", c].filter(Boolean).join(" ")
80
81
  }), z = e ?? g("avatar.placeholder", "User avatar");
81
82
  return /* @__PURE__ */ C(
82
83
  "span",
@@ -88,7 +89,7 @@ const k = N(
88
89
  className: x,
89
90
  ...v,
90
91
  children: [
91
- (m || o) && !!e && /* @__PURE__ */ r("span", { "aria-hidden": "true", children: L(e) }),
92
+ (b || t) && !!e && /* @__PURE__ */ r("span", { "aria-hidden": "true", children: L(e) }),
92
93
  h && /* @__PURE__ */ r(
93
94
  "svg",
94
95
  {
@@ -98,7 +99,7 @@ const k = N(
98
99
  children: /* @__PURE__ */ r("path", { d: "M12 12c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm0 2c-3.33 0-10 1.67-10 5v2h20v-2c0-3.33-6.67-5-10-5z" })
99
100
  }
100
101
  ),
101
- o && /* @__PURE__ */ r(
102
+ t && /* @__PURE__ */ r(
102
103
  "img",
103
104
  {
104
105
  src: s,
@@ -119,4 +120,4 @@ export {
119
120
  L as g,
120
121
  S as n
121
122
  };
122
- //# sourceMappingURL=avatar-D_H4emLo.js.map
123
+ //# sourceMappingURL=avatar-BNQNhoyL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-BNQNhoyL.js","sources":["../../src/components/avatar/avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\n\n// ── Hash ──────────────────────────────────────────────────────────────────────\n\n/** djb2 hash — fast, unsigned 32-bit, stable across calls. */\nfunction djb2(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) ^ str.charCodeAt(i);\n hash = hash >>> 0; // coerce to unsigned 32-bit integer\n }\n return hash;\n}\n\n/**\n * 16 brand hues — all verified ≥ 4.5 : 1 contrast against the kit's\n * lightest cream (var(--primary-foreground) in light/dark, with a\n * dark-accessible-only override to --color-grey-500 because that theme\n * pins --primary-foreground to deep navy which is illegible on the\n * bright swatches). Spans four distinct hue families for good visual\n * distribution.\n *\n * Index | Token | Contrast | Visual character\n * 0 | --color-violet-500 | 4.74 : 1 | bright violet\n * 1 | --color-violet-600 | 5.53 : 1 | medium violet\n * 2 | --color-violet-700 | 7.29 : 1 | dark violet\n * 3 | --color-violet-800 | 9.57 : 1 | deep violet\n * 4 | --color-violet-900 | 12.06 : 1 | midnight violet\n * 5 | --color-purple-700 | 5.21 : 1 | medium purple\n * 6 | --color-purple-800 | 7.52 : 1 | dark purple\n * 7 | --color-purple-900 | 10.40 : 1 | deep purple\n * 8 | --color-magenta-700 | 6.01 : 1 | vivid magenta\n * 9 | --color-magenta-800 | 8.05 : 1 | dark magenta\n * 10 | --color-magenta-900 | 11.20 : 1 | deep magenta\n * 11 | --color-blue-300 | 4.64 : 1 | slate / steel blue\n * 12 | --color-blue-400 | 6.95 : 1 | medium slate\n * 13 | --color-blue-500 | 13.00 : 1 | deep navy\n * 14 | --color-blue-700 | 17.82 : 1 | midnight navy\n * 15 | --color-grey-900 | 5.78 : 1 | warm charcoal\n */\nconst INITIALS_BG_CLASSES = [\n 'ds:bg-[var(--color-violet-500)]',\n 'ds:bg-[var(--color-violet-600)]',\n 'ds:bg-[var(--color-violet-700)]',\n 'ds:bg-[var(--color-violet-800)]',\n 'ds:bg-[var(--color-violet-900)]',\n 'ds:bg-[var(--color-purple-700)]',\n 'ds:bg-[var(--color-purple-800)]',\n 'ds:bg-[var(--color-purple-900)]',\n 'ds:bg-[var(--color-magenta-700)]',\n 'ds:bg-[var(--color-magenta-800)]',\n 'ds:bg-[var(--color-magenta-900)]',\n 'ds:bg-[var(--color-blue-300)]',\n 'ds:bg-[var(--color-blue-400)]',\n 'ds:bg-[var(--color-blue-500)]',\n 'ds:bg-[var(--color-blue-700)]',\n 'ds:bg-[var(--color-grey-900)]',\n] as const;\n\n/** Deterministically maps a name string to one of 16 brand-hue Tailwind classes. Same name always produces the same class. */\nexport function nameToColorClass(name: string): string {\n return INITIALS_BG_CLASSES[djb2(name) % INITIALS_BG_CLASSES.length];\n}\n\n/**\n * Extracts 1–2 uppercase initials:\n * - Single-word name: first two characters (\"John\" → \"JO\")\n * - Multi-word name: first char of first word + first char of last word (\"John Doe\" → \"JD\")\n */\nexport function getInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '';\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n}\n\n// ── CVA ───────────────────────────────────────────────────────────────────────\n\nconst avatarVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:shrink-0 ds:select-none ds:items-center ds:justify-center ds:overflow-hidden ds:rounded-[var(--radius-full)]',\n // Focus ring — uses design-system tokens so theme overrides (accessible: 3px) apply automatically.\n // The ring renders when Avatar is placed inside a focusable ancestor (e.g. a <button>).\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-ring',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n size: {\n // text-[var(--font-size-xs)] = 0.75rem (12px) — smallest available token\n xs: 'ds:size-6 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n sm: 'ds:size-8 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n md: 'ds:size-10 ds:text-[length:var(--font-size-xs)] ds:font-semibold ds:leading-none',\n lg: 'ds:size-12 ds:text-[length:var(--font-size-sm)] ds:font-semibold ds:leading-none',\n xl: 'ds:size-16 ds:text-[length:var(--font-size-base)] ds:font-semibold ds:leading-none',\n // 2xl / 3xl are hero / display crops (operator cards, practice-\n // profile pages). They token-reference `--avatar-size-*` so\n // consumer themes can override the dimensions per-context, and\n // `--avatar-text-size-*` so initials scale proportionally to\n // the circle (otherwise --font-size-base at 192px reads as a\n // tiny letter in a vast disc).\n '2xl':\n 'ds:size-[var(--avatar-size-2xl)] ds:text-[length:var(--avatar-text-size-2xl)] ds:font-semibold ds:leading-none',\n '3xl':\n 'ds:size-[var(--avatar-size-3xl)] ds:text-[length:var(--avatar-text-size-3xl)] ds:font-semibold ds:leading-none',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n// ── Props ─────────────────────────────────────────────────────────────────────\n\nexport interface AvatarProps\n extends\n Omit<HTMLAttributes<HTMLSpanElement>, 'color'>,\n VariantProps<typeof avatarVariants> {\n /** Image source URL. When provided and loads successfully, the image is displayed. */\n src?: string;\n /** Display name — drives initials extraction and deterministic background colour. */\n name?: string;\n /**\n * Override the auto-generated background with any CSS colour string\n * (e.g. `\"var(--color-violet-700)\"`).\n * Applied via a CSS custom property so no `style` attribute is added to the JSX element.\n * Caller is responsible for WCAG AA contrast (≥4.5:1) against white text.\n */\n color?: string;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n ({ src, name, color, size, className, ...props }, ref) => {\n const { t } = useTranslation();\n\n const innerRef = useRef<HTMLSpanElement>(null);\n const composedRef = composeRefs(ref, innerRef);\n\n // Track only image errors. The image renders immediately as an overlay;\n // before it loads the browser paints nothing (transparent), showing the\n // background colour + initials behind it. On error we remove the img and\n // the initials/fallback remain permanently visible.\n const [imgError, setImgError] = useState(false);\n\n // Reset error flag whenever src changes\n useEffect(() => {\n setImgError(false);\n }, [src]);\n\n // Apply color override via CSS custom property — avoids style={{…}} on JSX.\n // Mirrors the pattern used by the Progress component for imperative CSS property injection.\n useIsomorphicLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n if (color) {\n el.style.setProperty('--avatar-color-override', color);\n } else {\n el.style.removeProperty('--avatar-color-override');\n }\n }, [color]);\n\n // Image is \"active\" when provided and not errored\n const imgActive = !!src && !imgError;\n\n // Initials and fallback icon are shown when no usable image\n const showInitials = !imgActive && !!name;\n const showIcon = !imgActive && !name;\n\n // Background — always rendered (serves as loading placeholder when image is fetching)\n const fallbackBgClass = color\n ? 'ds:bg-[var(--avatar-color-override)]'\n : name\n ? nameToColorClass(name)\n : 'ds:bg-muted';\n\n // Always light text against brand hues / color override; muted-foreground\n // for icon. In dark-accessible, `--primary-foreground` pins to deep navy\n // (illegible on bright swatches), so override to the kit's lightest cream\n // (`--color-grey-500`) — keeps initials readable in all four themes.\n const contentColorClass =\n color || name\n ? 'ds:text-[var(--primary-foreground)] ds:[.theme-dark.theme-accessible_&]:text-[var(--color-grey-500)]'\n : 'ds:text-muted-foreground';\n\n const rootClassName = avatarVariants({\n size,\n className: [fallbackBgClass, contentColorClass, className]\n .filter(Boolean)\n .join(' '),\n });\n\n // Accessible label — name takes priority, then the localised placeholder\n const ariaLabel = name ?? t('avatar.placeholder', 'User avatar');\n\n return (\n <span\n ref={composedRef}\n role=\"img\"\n aria-label={ariaLabel}\n data-component=\"avatar\"\n className={rootClassName}\n {...props}\n >\n {/* Initials — rendered behind the image; visible while image is loading\n or permanently when no src / src errors */}\n {(showInitials || imgActive) && !!name && (\n <span aria-hidden=\"true\">{getInitials(name)}</span>\n )}\n\n {/* Fallback icon — shown when neither image nor name is available */}\n {showIcon && (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n className=\"ds:size-[58%] ds:fill-current\"\n >\n <path d=\"M12 12c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm0 2c-3.33 0-10 1.67-10 5v2h20v-2c0-3.33-6.67-5-10-5z\" />\n </svg>\n )}\n\n {/* Image — absolutely positioned overlay. Renders transparently until the\n browser paints the decoded pixels, then covers the initials behind it.\n Removed from DOM on error so initials remain permanently visible. */}\n {imgActive && (\n <img\n src={src}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"ds:absolute ds:inset-0 ds:size-full ds:object-cover\"\n onError={() => setImgError(true)}\n />\n )}\n </span>\n );\n },\n);\n\nAvatar.displayName = 'Avatar';\n"],"names":["djb2","str","hash","i","INITIALS_BG_CLASSES","nameToColorClass","name","getInitials","words","avatarVariants","cva","Avatar","forwardRef","src","color","size","className","props","ref","t","useTranslation","innerRef","useRef","composedRef","composeRefs","imgError","setImgError","useState","useEffect","useIsomorphicLayoutEffect","el","imgActive","showInitials","showIcon","fallbackBgClass","rootClassName","ariaLabel","jsxs","jsx"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as u, jsx as e, Fragment as x } from "react/jsx-runtime";
2
2
  import { forwardRef as w } from "react";
3
3
  import { c as r } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as h } from "react-i18next";
5
- import { T as y } from "./tooltip-ClJd0ciy.js";
5
+ import { T as y } from "./tooltip-DvmfrNvB.js";
6
6
  const z = r(
7
7
  [
8
8
  "ds:inline-flex ds:items-center ds:gap-1",
@@ -105,4 +105,4 @@ j.displayName = "Badge";
105
105
  export {
106
106
  j as B
107
107
  };
108
- //# sourceMappingURL=badge-CIjQ1Us1.js.map
108
+ //# sourceMappingURL=badge-CptERaHx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge-CIjQ1Us1.js","sources":["../../src/components/badge/badge.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Tooltip } from '../tooltip';\n\n/* ------------------------------------------------------------------ */\n/* CVA — badge root */\n/* ------------------------------------------------------------------ */\n\nconst badgeVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-1',\n // Typography comes from the eyebrow role: Medium 500 + uppercase + expanded tracking.\n // CVA size variants below override just `--type-eyebrow-size` so weight/transform/\n // tracking/line-height stay role-owned — same chip-family pattern as Tag.\n 'type-eyebrow',\n 'ds:whitespace-nowrap',\n 'ds:focus-visible:outline-none',\n 'ds:focus-visible:ring-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:ring-[color:var(--ring)]',\n 'ds:focus-visible:ring-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n variant: {\n neutral: 'ds:bg-muted/20 ds:text-muted-foreground',\n info: 'ds:bg-info/15 ds:text-[var(--info-foreground)]',\n success: 'ds:bg-success/15 ds:text-[var(--success-foreground)]',\n warning: 'ds:bg-warning/15 ds:text-[var(--warning-foreground)]',\n error: 'ds:bg-destructive/15 ds:text-[var(--error-foreground)]',\n },\n size: {\n sm: 'ds:h-4 ds:ps-1 ds:pe-1 ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n md: 'ds:h-5 ds:ps-1.5 ds:pe-1.5 ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n lg: 'ds:h-6 ds:ps-2 ds:pe-2 ds:[--type-eyebrow-size:var(--font-size-xs)]',\n },\n shape: {\n pill: 'ds:rounded-[var(--radius-full)]',\n rectangular: 'ds:rounded-[var(--radius-sm)]',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'md',\n shape: 'pill',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — leading dot */\n/* ------------------------------------------------------------------ */\n\nconst dotVariants = cva(\n 'ds:text-[length:var(--font-size-dot)] ds:leading-none ds:shrink-0',\n {\n variants: {\n variant: {\n neutral: 'ds:text-muted-foreground',\n info: 'ds:text-info',\n success: 'ds:text-success',\n warning: 'ds:text-warning',\n error: 'ds:text-destructive',\n },\n },\n defaultVariants: { variant: 'neutral' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — leading icon wrapper */\n/* ------------------------------------------------------------------ */\n\nconst iconWrapperVariants = cva('ds:shrink-0 ds:[&>svg]:block', {\n variants: {\n size: {\n // Icons shrink with the compact Badge scale: sm badge is 16 px tall, so\n // a 10 px glyph leaves room for the 1 px internal padding.\n sm: 'ds:[&>svg]:size-2.5',\n md: 'ds:[&>svg]:size-3',\n lg: 'ds:[&>svg]:size-3.5',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ------------------------------------------------------------------ */\n/* BadgeProps */\n/* ------------------------------------------------------------------ */\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /** Leading icon — renders before the label */\n leading?: ReactNode;\n /** Show a leading dot indicator (● shape) for colour-blind accessibility */\n withDot?: boolean;\n /** Truncate long text with ellipsis + tooltip showing full text */\n truncate?: boolean;\n /** For icon-only badges — provides the accessible name */\n 'aria-label'?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Badge */\n/* ------------------------------------------------------------------ */\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = 'neutral',\n size = 'md',\n shape = 'pill',\n leading,\n withDot = false,\n truncate = false,\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const isIconOnly = !children && !!ariaLabel;\n const isCount = typeof children === 'number';\n\n const badge = (\n <span\n ref={ref}\n className={badgeVariants({ variant, size, shape, className })}\n data-component=\"badge\"\n role={isIconOnly ? 'img' : undefined}\n aria-label={isIconOnly ? ariaLabel : undefined}\n {...props}\n >\n {withDot && (\n <span aria-hidden=\"true\" className={dotVariants({ variant })}>\n ●\n </span>\n )}\n {leading && (\n <span aria-hidden=\"true\" className={iconWrapperVariants({ size })}>\n {leading}\n </span>\n )}\n {!isIconOnly &&\n (isCount ? (\n <>\n <span aria-hidden=\"true\">{children}</span>\n <span className=\"ds:sr-only\">\n {t('badge.notifications', { count: children })}\n </span>\n </>\n ) : truncate ? (\n <span className=\"ds:max-w-[var(--badge-truncate-max-width)] ds:overflow-hidden ds:text-ellipsis ds:whitespace-nowrap\">\n {children}\n </span>\n ) : (\n children\n ))}\n </span>\n );\n\n if (truncate && typeof children === 'string') {\n return <Tooltip label={children}>{badge}</Tooltip>;\n }\n\n return badge;\n },\n);\n\nBadge.displayName = 'Badge';\n"],"names":["badgeVariants","cva","dotVariants","iconWrapperVariants","Badge","forwardRef","variant","size","shape","leading","withDot","truncate","className","children","ariaLabel","props","ref","t","useTranslation","isIconOnly","isCount","badge","jsxs","jsx","Fragment","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"badge-CptERaHx.js","sources":["../../src/components/badge/badge.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Tooltip } from '../tooltip';\n\n/* ------------------------------------------------------------------ */\n/* CVA — badge root */\n/* ------------------------------------------------------------------ */\n\nconst badgeVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-1',\n // Typography comes from the eyebrow role: Medium 500 + uppercase + expanded tracking.\n // CVA size variants below override just `--type-eyebrow-size` so weight/transform/\n // tracking/line-height stay role-owned — same chip-family pattern as Tag.\n 'type-eyebrow',\n 'ds:whitespace-nowrap',\n 'ds:focus-visible:outline-none',\n 'ds:focus-visible:ring-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:ring-[color:var(--ring)]',\n 'ds:focus-visible:ring-offset-[length:var(--focus-ring-offset)]',\n ].join(' '),\n {\n variants: {\n variant: {\n neutral: 'ds:bg-muted/20 ds:text-muted-foreground',\n info: 'ds:bg-info/15 ds:text-[var(--info-foreground)]',\n success: 'ds:bg-success/15 ds:text-[var(--success-foreground)]',\n warning: 'ds:bg-warning/15 ds:text-[var(--warning-foreground)]',\n error: 'ds:bg-destructive/15 ds:text-[var(--error-foreground)]',\n },\n size: {\n sm: 'ds:h-4 ds:ps-1 ds:pe-1 ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n md: 'ds:h-5 ds:ps-1.5 ds:pe-1.5 ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n lg: 'ds:h-6 ds:ps-2 ds:pe-2 ds:[--type-eyebrow-size:var(--font-size-xs)]',\n },\n shape: {\n pill: 'ds:rounded-[var(--radius-full)]',\n rectangular: 'ds:rounded-[var(--radius-sm)]',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'md',\n shape: 'pill',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — leading dot */\n/* ------------------------------------------------------------------ */\n\nconst dotVariants = cva(\n 'ds:text-[length:var(--font-size-dot)] ds:leading-none ds:shrink-0',\n {\n variants: {\n variant: {\n neutral: 'ds:text-muted-foreground',\n info: 'ds:text-info',\n success: 'ds:text-success',\n warning: 'ds:text-warning',\n error: 'ds:text-destructive',\n },\n },\n defaultVariants: { variant: 'neutral' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — leading icon wrapper */\n/* ------------------------------------------------------------------ */\n\nconst iconWrapperVariants = cva('ds:shrink-0 ds:[&>svg]:block', {\n variants: {\n size: {\n // Icons shrink with the compact Badge scale: sm badge is 16 px tall, so\n // a 10 px glyph leaves room for the 1 px internal padding.\n sm: 'ds:[&>svg]:size-2.5',\n md: 'ds:[&>svg]:size-3',\n lg: 'ds:[&>svg]:size-3.5',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ------------------------------------------------------------------ */\n/* BadgeProps */\n/* ------------------------------------------------------------------ */\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /** Leading icon — renders before the label */\n leading?: ReactNode;\n /** Show a leading dot indicator (● shape) for colour-blind accessibility */\n withDot?: boolean;\n /** Truncate long text with ellipsis + tooltip showing full text */\n truncate?: boolean;\n /** For icon-only badges — provides the accessible name */\n 'aria-label'?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Badge */\n/* ------------------------------------------------------------------ */\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = 'neutral',\n size = 'md',\n shape = 'pill',\n leading,\n withDot = false,\n truncate = false,\n className,\n children,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const isIconOnly = !children && !!ariaLabel;\n const isCount = typeof children === 'number';\n\n const badge = (\n <span\n ref={ref}\n className={badgeVariants({ variant, size, shape, className })}\n data-component=\"badge\"\n role={isIconOnly ? 'img' : undefined}\n aria-label={isIconOnly ? ariaLabel : undefined}\n {...props}\n >\n {withDot && (\n <span aria-hidden=\"true\" className={dotVariants({ variant })}>\n ●\n </span>\n )}\n {leading && (\n <span aria-hidden=\"true\" className={iconWrapperVariants({ size })}>\n {leading}\n </span>\n )}\n {!isIconOnly &&\n (isCount ? (\n <>\n <span aria-hidden=\"true\">{children}</span>\n <span className=\"ds:sr-only\">\n {t('badge.notifications', { count: children })}\n </span>\n </>\n ) : truncate ? (\n <span className=\"ds:max-w-[var(--badge-truncate-max-width)] ds:overflow-hidden ds:text-ellipsis ds:whitespace-nowrap\">\n {children}\n </span>\n ) : (\n children\n ))}\n </span>\n );\n\n if (truncate && typeof children === 'string') {\n return <Tooltip label={children}>{badge}</Tooltip>;\n }\n\n return badge;\n },\n);\n\nBadge.displayName = 'Badge';\n"],"names":["badgeVariants","cva","dotVariants","iconWrapperVariants","Badge","forwardRef","variant","size","shape","leading","withDot","truncate","className","children","ariaLabel","props","ref","t","useTranslation","isIconOnly","isCount","badge","jsxs","jsx","Fragment","Tooltip"],"mappings":"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"}