@alfadocs/ui-kit 0.1.8 → 0.1.10

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 (1053) hide show
  1. package/README.md +30 -0
  2. package/dist/_chunks/{accordion-B6fyINUk.js → accordion-BEnrZmAn.js} +34 -32
  3. package/dist/_chunks/accordion-BEnrZmAn.js.map +1 -0
  4. package/dist/_chunks/accordion.agent-BTjeO1Sx.js +52 -0
  5. package/dist/_chunks/accordion.agent-BTjeO1Sx.js.map +1 -0
  6. package/dist/_chunks/{agenda-card-DIWDvWum.js → agenda-card-DwLIxgi7.js} +2 -1
  7. package/dist/_chunks/agenda-card-DwLIxgi7.js.map +1 -0
  8. package/dist/_chunks/agenda-card.agent-B_R47-c9.js +22 -0
  9. package/dist/_chunks/agenda-card.agent-B_R47-c9.js.map +1 -0
  10. package/dist/_chunks/agenda-tray-DUvengGQ.js +178 -0
  11. package/dist/_chunks/agenda-tray-DUvengGQ.js.map +1 -0
  12. package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js +476 -0
  13. package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js.map +1 -0
  14. package/dist/_chunks/alert-BlOUMkXj.js.map +1 -0
  15. package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +1 -0
  16. package/dist/_chunks/app-frame-6d7Lu4ea.js.map +1 -0
  17. package/dist/_chunks/{aspect-ratio-CxsdG8vk.js → aspect-ratio-DeSNzASA.js} +12 -12
  18. package/dist/_chunks/aspect-ratio-DeSNzASA.js.map +1 -0
  19. package/dist/_chunks/audio-recorder.agent--VKeykUp.js +458 -0
  20. package/dist/_chunks/audio-recorder.agent--VKeykUp.js.map +1 -0
  21. package/dist/_chunks/audio-visualiser-CeMPCZkd.js.map +1 -0
  22. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js +432 -0
  23. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js.map +1 -0
  24. package/dist/_chunks/avatar-Dcr6XuDQ.js.map +1 -0
  25. package/dist/_chunks/badge-mrstWxve.js.map +1 -0
  26. package/dist/_chunks/{balance-cell-renderer-BWm3knY9.js → balance-cell-renderer-5CA7zpAi.js} +3 -3
  27. package/dist/_chunks/balance-cell-renderer-5CA7zpAi.js.map +1 -0
  28. package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js +371 -0
  29. package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js.map +1 -0
  30. package/dist/_chunks/button-7mLWcMp_.js.map +1 -0
  31. package/dist/_chunks/button-group-CONver7M.js.map +1 -0
  32. package/dist/_chunks/button.agent-BuGZBktn.js.map +1 -0
  33. package/dist/_chunks/calendar-nGEgelJs.js.map +1 -0
  34. package/dist/_chunks/card-BEy58ZKp.js.map +1 -0
  35. package/dist/_chunks/{chart.agent-BdS-_8MO.js → chart.agent-_pRYS17d.js} +112 -105
  36. package/dist/_chunks/chart.agent-_pRYS17d.js.map +1 -0
  37. package/dist/_chunks/{chat-container-Cm3SlR2p.js → chat-container-Dl0Kfy5a.js} +33 -32
  38. package/dist/_chunks/chat-container-Dl0Kfy5a.js.map +1 -0
  39. package/dist/_chunks/{chat-container.agent-Dhw9xCJt.js → chat-container.agent-CM4WModE.js} +9 -4
  40. package/dist/_chunks/chat-container.agent-CM4WModE.js.map +1 -0
  41. package/dist/_chunks/{chat-input-DreOPP8A.js → chat-input-C_tMQv92.js} +108 -82
  42. package/dist/_chunks/chat-input-C_tMQv92.js.map +1 -0
  43. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js +69 -0
  44. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js.map +1 -0
  45. package/dist/_chunks/chat-message-ByouZpPP.js.map +1 -0
  46. package/dist/_chunks/check-DPdL_Sm7.js.map +1 -0
  47. package/dist/_chunks/checkbox-CtPM6Rup.js +196 -0
  48. package/dist/_chunks/checkbox-CtPM6Rup.js.map +1 -0
  49. package/dist/_chunks/checkbox-group-BTdEB6Yo.js +208 -0
  50. package/dist/_chunks/checkbox-group-BTdEB6Yo.js.map +1 -0
  51. package/dist/_chunks/chevron-down-BX_NP2Yh.js.map +1 -0
  52. package/dist/_chunks/chevron-left-CX1jqD2M.js.map +1 -0
  53. package/dist/_chunks/chevron-right-BrpYejk0.js.map +1 -0
  54. package/dist/_chunks/chevron-up-zOEDrmBB.js.map +1 -0
  55. package/dist/_chunks/chevrons-right-d9MwesPG.js.map +1 -0
  56. package/dist/_chunks/circle-BkqTgYmt.js.map +1 -0
  57. package/dist/_chunks/circle-alert-ChA9opNA.js.map +1 -0
  58. package/dist/_chunks/circle-check-9AeSgJD_.js.map +1 -0
  59. package/dist/_chunks/circle-x-Du2CmjaU.js.map +1 -0
  60. package/dist/_chunks/clock-21AGPWJ5.js.map +1 -0
  61. package/dist/_chunks/collapsible.agent-DkS1jVyn.js +149 -0
  62. package/dist/_chunks/collapsible.agent-DkS1jVyn.js.map +1 -0
  63. package/dist/_chunks/{color-picker-e9PmpaGH.js → color-picker-94qcBZqZ.js} +234 -184
  64. package/dist/_chunks/color-picker-94qcBZqZ.js.map +1 -0
  65. package/dist/_chunks/combobox.agent-CAvUkkIe.js +410 -0
  66. package/dist/_chunks/combobox.agent-CAvUkkIe.js.map +1 -0
  67. package/dist/_chunks/{command-palette.agent-js2rxgeR.js → command-palette.agent-HatEt_EM.js} +161 -121
  68. package/dist/_chunks/command-palette.agent-HatEt_EM.js.map +1 -0
  69. package/dist/_chunks/compose-refs-C0k0tdqF.js.map +1 -0
  70. package/dist/_chunks/copy-B00HK7tj.js.map +1 -0
  71. package/dist/_chunks/createLucideIcon-CrFbzy84.js.map +1 -0
  72. package/dist/_chunks/date-picker-BqPTn7bO.js +1813 -0
  73. package/dist/_chunks/date-picker-BqPTn7bO.js.map +1 -0
  74. package/dist/_chunks/date-range-picker-B2hGsffw.js +274 -0
  75. package/dist/_chunks/date-range-picker-B2hGsffw.js.map +1 -0
  76. package/dist/_chunks/date-time-picker-Bzt0S8yO.js +293 -0
  77. package/dist/_chunks/date-time-picker-Bzt0S8yO.js.map +1 -0
  78. package/dist/_chunks/description-list-DvJbp6Yg.js.map +1 -0
  79. package/dist/_chunks/dialog.agent-Daf1TTko.js +179 -0
  80. package/dist/_chunks/dialog.agent-Daf1TTko.js.map +1 -0
  81. package/dist/_chunks/{dropdown-menu-Cw3EyPZv.js → dropdown-menu-C7AZipNz.js} +75 -71
  82. package/dist/_chunks/dropdown-menu-C7AZipNz.js.map +1 -0
  83. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js +43 -0
  84. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js.map +1 -0
  85. package/dist/_chunks/ellipsis-rgGdiK_9.js.map +1 -0
  86. package/dist/_chunks/empty-state-DQPtRp2b.js.map +1 -0
  87. package/dist/_chunks/eye-off-xEXDAh5z.js.map +1 -0
  88. package/dist/_chunks/file-text-DSNuv2B8.js.map +1 -0
  89. package/dist/_chunks/{file-upload.agent-B9AN82LA.js → file-upload.agent-DJaH2dHg.js} +275 -243
  90. package/dist/_chunks/file-upload.agent-DJaH2dHg.js.map +1 -0
  91. package/dist/_chunks/flag-DZ6V7-hU.js.map +1 -0
  92. package/dist/_chunks/floating-action-button-Cnw-f6AG.js.map +1 -0
  93. package/dist/_chunks/form-field-BfsPLTSc.js.map +1 -0
  94. package/dist/_chunks/form-field-context-94LwgYTQ.js.map +1 -0
  95. package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js +260 -0
  96. package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js.map +1 -0
  97. package/dist/_chunks/globe-BkEFMNSg.js.map +1 -0
  98. package/dist/_chunks/group-options-BvKhQ3xb.js.map +1 -0
  99. package/dist/_chunks/header-BGn1mRp8.js.map +1 -0
  100. package/dist/_chunks/icon-button-Wnnde5lc.js.map +1 -0
  101. package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +1 -0
  102. package/dist/_chunks/index-4xgbg-sn.js.map +1 -0
  103. package/dist/_chunks/index-CJE9uQmb.js.map +1 -0
  104. package/dist/_chunks/index-CeY1nNvd.js.map +1 -0
  105. package/dist/_chunks/index-D2ZczOXr.js.map +1 -0
  106. package/dist/_chunks/info-B9XNKn05.js.map +1 -0
  107. package/dist/_chunks/input-surface-u4QB0lxe.js.map +1 -0
  108. package/dist/_chunks/isSameDay-ecuM8PBB.js.map +1 -0
  109. package/dist/_chunks/isSameMonth-5wNF2f4I.js.map +1 -0
  110. package/dist/_chunks/kbd-8baVw3KU.js.map +1 -0
  111. package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +1 -0
  112. package/dist/_chunks/{leo-sidebar-nbHib2D-.js → leo-sidebar-BwINPdix.js} +6 -6
  113. package/dist/_chunks/leo-sidebar-BwINPdix.js.map +1 -0
  114. package/dist/_chunks/link-QheANk74.js +121 -0
  115. package/dist/_chunks/link-QheANk74.js.map +1 -0
  116. package/dist/_chunks/list.agent-D0iWt4VI.js +420 -0
  117. package/dist/_chunks/list.agent-D0iWt4VI.js.map +1 -0
  118. package/dist/_chunks/live-region-C41SO3cA.js.map +1 -0
  119. package/dist/_chunks/log-out-616hnn2-.js.map +1 -0
  120. package/dist/_chunks/logo-BpFoCL-s.js.map +1 -0
  121. package/dist/_chunks/mail-C8irm52s.js.map +1 -0
  122. package/dist/_chunks/matrix-rain-BEkvux64.js.map +1 -0
  123. package/dist/_chunks/{message-card-qAp2-WQK.js → message-card-qhoGv947.js} +2 -1
  124. package/dist/_chunks/message-card-qhoGv947.js.map +1 -0
  125. package/dist/_chunks/message-card.agent-4IeIgrnJ.js +22 -0
  126. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +1 -0
  127. package/dist/_chunks/message-tray-xHUCra-Y.js +419 -0
  128. package/dist/_chunks/message-tray-xHUCra-Y.js.map +1 -0
  129. package/dist/_chunks/{multi-select.agent-CNsyW3n9.js → multi-select.agent-Do6CeQUT.js} +239 -179
  130. package/dist/_chunks/multi-select.agent-Do6CeQUT.js.map +1 -0
  131. package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js +266 -0
  132. package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js.map +1 -0
  133. package/dist/_chunks/normalize-diacritics-BNGbFNlJ.js.map +1 -0
  134. package/dist/_chunks/{notification-card-BF2_veHy.js → notification-card-CsVEYJE-.js} +13 -12
  135. package/dist/_chunks/notification-card-CsVEYJE-.js.map +1 -0
  136. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js +22 -0
  137. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +1 -0
  138. package/dist/_chunks/notification-tray-DTXMq42J.js +444 -0
  139. package/dist/_chunks/notification-tray-DTXMq42J.js.map +1 -0
  140. package/dist/_chunks/number-input-fvGmnRy9.js +333 -0
  141. package/dist/_chunks/number-input-fvGmnRy9.js.map +1 -0
  142. package/dist/_chunks/otp-input-EglXOUue.js +257 -0
  143. package/dist/_chunks/otp-input-EglXOUue.js.map +1 -0
  144. package/dist/_chunks/pagination.agent-BkZQl45y.js +422 -0
  145. package/dist/_chunks/pagination.agent-BkZQl45y.js.map +1 -0
  146. package/dist/_chunks/password-input-D6kuYXmr.js +304 -0
  147. package/dist/_chunks/password-input-D6kuYXmr.js.map +1 -0
  148. package/dist/_chunks/{patient-shell-7cXqIMFg.js → patient-shell-BRmrrUUW.js} +3 -3
  149. package/dist/_chunks/patient-shell-BRmrrUUW.js.map +1 -0
  150. package/dist/_chunks/{payment-form-hcl-gGrp.js → payment-form-BWaXas8z.js} +120 -118
  151. package/dist/_chunks/payment-form-BWaXas8z.js.map +1 -0
  152. package/dist/_chunks/{payment-form.agent-BkEnRerR.js → payment-form.agent-kuIfodCj.js} +7 -2
  153. package/dist/_chunks/payment-form.agent-kuIfodCj.js.map +1 -0
  154. package/dist/_chunks/{pdf-viewer.agent-CfIHhcHx.js → pdf-viewer.agent-BaGEDheA.js} +358 -351
  155. package/dist/_chunks/pdf-viewer.agent-BaGEDheA.js.map +1 -0
  156. package/dist/_chunks/phone-input-C8Op4sEc.js +513 -0
  157. package/dist/_chunks/phone-input-C8Op4sEc.js.map +1 -0
  158. package/dist/_chunks/plus-CYKNmfuA.js.map +1 -0
  159. package/dist/_chunks/popover-kFN8s84V.js +229 -0
  160. package/dist/_chunks/popover-kFN8s84V.js.map +1 -0
  161. package/dist/_chunks/popover.agent-K_d1cfbj.js +39 -0
  162. package/dist/_chunks/popover.agent-K_d1cfbj.js.map +1 -0
  163. package/dist/_chunks/printer-CeVEWfQq.js.map +1 -0
  164. package/dist/_chunks/privacy-lock.agent-C1i1-T58.js +185 -0
  165. package/dist/_chunks/privacy-lock.agent-C1i1-T58.js.map +1 -0
  166. package/dist/_chunks/progress-wNsqkw8I.js +253 -0
  167. package/dist/_chunks/progress-wNsqkw8I.js.map +1 -0
  168. package/dist/_chunks/progress.agent-C68rDOXL.js +27 -0
  169. package/dist/_chunks/progress.agent-C68rDOXL.js.map +1 -0
  170. package/dist/_chunks/purify.es-DpIUMBYC.js.map +1 -0
  171. package/dist/_chunks/{radio-cs8N1wJi.js → radio-DvF59ThA.js} +14 -13
  172. package/dist/_chunks/radio-DvF59ThA.js.map +1 -0
  173. package/dist/_chunks/radio-group-Cz1a4QCA.js +152 -0
  174. package/dist/_chunks/radio-group-Cz1a4QCA.js.map +1 -0
  175. package/dist/_chunks/react-day-picker-C04L_28V.js.map +1 -0
  176. package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js +183 -0
  177. package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js.map +1 -0
  178. package/dist/_chunks/registry-C9nwlNyL.js.map +1 -0
  179. package/dist/_chunks/resizable.agent-CMwZzvsi.js +456 -0
  180. package/dist/_chunks/resizable.agent-CMwZzvsi.js.map +1 -0
  181. package/dist/_chunks/{rich-text-editor.agent-COSb5_2D.js → rich-text-editor.agent-DnE125Tz.js} +221 -214
  182. package/dist/_chunks/rich-text-editor.agent-DnE125Tz.js.map +1 -0
  183. package/dist/_chunks/safe-image-src-DstKgCo7.js.map +1 -0
  184. package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +1 -0
  185. package/dist/_chunks/search-BonnQsHv.js.map +1 -0
  186. package/dist/_chunks/search-bar.agent-DxFAxctc.js +562 -0
  187. package/dist/_chunks/search-bar.agent-DxFAxctc.js.map +1 -0
  188. package/dist/_chunks/search-input-Xw3cdWXW.js +227 -0
  189. package/dist/_chunks/search-input-Xw3cdWXW.js.map +1 -0
  190. package/dist/_chunks/search-input.agent-CfZvViOd.js +69 -0
  191. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +1 -0
  192. package/dist/_chunks/select-DY1Cb2Tg.js +410 -0
  193. package/dist/_chunks/select-DY1Cb2Tg.js.map +1 -0
  194. package/dist/_chunks/send-CySZIRPJ.js.map +1 -0
  195. package/dist/_chunks/separator-B4wXDLNC.js.map +1 -0
  196. package/dist/_chunks/{sheet-BhNpLHc9.js → sheet-B9kH9pcI.js} +55 -54
  197. package/dist/_chunks/sheet-B9kH9pcI.js.map +1 -0
  198. package/dist/_chunks/sheet.agent-QAyTOxgk.js +46 -0
  199. package/dist/_chunks/sheet.agent-QAyTOxgk.js.map +1 -0
  200. package/dist/_chunks/{sidebar-OVzwN3jE.js → sidebar-CHF5xr_P.js} +188 -185
  201. package/dist/_chunks/sidebar-CHF5xr_P.js.map +1 -0
  202. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js +49 -0
  203. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js.map +1 -0
  204. package/dist/_chunks/sign-in-with-alfadocs-button-BN_FPGHT.js.map +1 -0
  205. package/dist/_chunks/{signature-capture.agent-C38VPXxg.js → signature-capture.agent-BpeDwFht.js} +127 -120
  206. package/dist/_chunks/signature-capture.agent-BpeDwFht.js.map +1 -0
  207. package/dist/_chunks/skeleton-dtqyF09N.js.map +1 -0
  208. package/dist/_chunks/skip-link-DmZ3c6cb.js.map +1 -0
  209. package/dist/_chunks/slider-CcsQTZTA.js +322 -0
  210. package/dist/_chunks/slider-CcsQTZTA.js.map +1 -0
  211. package/dist/_chunks/slot-grid-D_l5VsHG.js.map +1 -0
  212. package/dist/_chunks/sparkline.agent-56Sj7nOP.js +245 -0
  213. package/dist/_chunks/sparkline.agent-56Sj7nOP.js.map +1 -0
  214. package/dist/_chunks/spinner-GCcv67vh.js.map +1 -0
  215. package/dist/_chunks/square-CZoGU14v.js.map +1 -0
  216. package/dist/_chunks/square-check-big-Jr-0202D.js.map +1 -0
  217. package/dist/_chunks/stat-DUB6g90R.js.map +1 -0
  218. package/dist/_chunks/stepper-C-sIpRRU.js.map +1 -0
  219. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js +322 -0
  220. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js.map +1 -0
  221. package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js +646 -0
  222. package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js.map +1 -0
  223. package/dist/_chunks/stepper-progress-Bmen-YXB.js +149 -0
  224. package/dist/_chunks/stepper-progress-Bmen-YXB.js.map +1 -0
  225. package/dist/_chunks/stepper-progress.agent-q9InWca4.js +61 -0
  226. package/dist/_chunks/stepper-progress.agent-q9InWca4.js.map +1 -0
  227. package/dist/_chunks/streaming-text-BgjCTVOw.js.map +1 -0
  228. package/dist/_chunks/suggestion-chip-DhFrkRPj.js +169 -0
  229. package/dist/_chunks/suggestion-chip-DhFrkRPj.js.map +1 -0
  230. package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js +46 -0
  231. package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js.map +1 -0
  232. package/dist/_chunks/switch-BYEH8I53.js +196 -0
  233. package/dist/_chunks/switch-BYEH8I53.js.map +1 -0
  234. package/dist/_chunks/{tabs.agent-BpbVA-Zh.js → tabs.agent-h7NvsTR1.js} +146 -123
  235. package/dist/_chunks/tabs.agent-h7NvsTR1.js.map +1 -0
  236. package/dist/_chunks/tag-BqidXKo3.js.map +1 -0
  237. package/dist/_chunks/{task-card-yW7tKlG4.js → task-card-CY5ztNkU.js} +2 -1
  238. package/dist/_chunks/task-card-CY5ztNkU.js.map +1 -0
  239. package/dist/_chunks/task-card.agent-CUPKYd7w.js +22 -0
  240. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +1 -0
  241. package/dist/_chunks/task-tray-CCoUdorl.js +194 -0
  242. package/dist/_chunks/task-tray-CCoUdorl.js.map +1 -0
  243. package/dist/_chunks/text-area-C_M8wliK.js +239 -0
  244. package/dist/_chunks/text-area-C_M8wliK.js.map +1 -0
  245. package/dist/_chunks/text-input-BX39e6T6.js +272 -0
  246. package/dist/_chunks/text-input-BX39e6T6.js.map +1 -0
  247. package/dist/_chunks/theme-root-DDb0TJjd.js.map +1 -0
  248. package/dist/_chunks/theme-toggle.agent-btmXTWdW.js +394 -0
  249. package/dist/_chunks/theme-toggle.agent-btmXTWdW.js.map +1 -0
  250. package/dist/_chunks/time-picker-B8AMIrX7.js +410 -0
  251. package/dist/_chunks/time-picker-B8AMIrX7.js.map +1 -0
  252. package/dist/_chunks/timeline.agent-CRPza9wc.js +279 -0
  253. package/dist/_chunks/timeline.agent-CRPza9wc.js.map +1 -0
  254. package/dist/_chunks/timestamp-BV2lC-wV.js.map +1 -0
  255. package/dist/_chunks/{toast-lOhJDKOH.js → toast.agent-BjEGuq1Z.js} +403 -342
  256. package/dist/_chunks/toast.agent-BjEGuq1Z.js.map +1 -0
  257. package/dist/_chunks/tooltip-DHik5yRI.js.map +1 -0
  258. package/dist/_chunks/{tooth-scheme.agent-BlDyu-Gx.js → tooth-scheme.agent-CWrQBjJM.js} +218 -211
  259. package/dist/_chunks/tooth-scheme.agent-CWrQBjJM.js.map +1 -0
  260. package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js +337 -0
  261. package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js.map +1 -0
  262. package/dist/_chunks/triangle-alert-CBPUIzQo.js.map +1 -0
  263. package/dist/_chunks/typing-indicator-CbUBf-Dx.js.map +1 -0
  264. package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +1 -0
  265. package/dist/_chunks/use-direction-D6rvvG9G.js.map +1 -0
  266. package/dist/_chunks/use-locale-BuXR_Zl9.js.map +1 -0
  267. package/dist/_chunks/use-prefers-reduced-motion-BMwIQRjB.js.map +1 -0
  268. package/dist/_chunks/use-theme-BMUhembX.js.map +1 -0
  269. package/dist/_chunks/user-CPxpqFjJ.js.map +1 -0
  270. package/dist/_chunks/visually-hidden-Bw7vBHLm.js.map +1 -0
  271. package/dist/_chunks/warning-stack-8Pa3pekh.js.map +1 -0
  272. package/dist/_chunks/{workflow-map-XeqHDFvp.js → workflow-map-D2A7rTEG.js} +465 -368
  273. package/dist/_chunks/workflow-map-D2A7rTEG.js.map +1 -0
  274. package/dist/_chunks/x-CCcI3eJp.js.map +1 -0
  275. package/dist/agent/index.d.ts.map +1 -0
  276. package/dist/agent/registry.d.ts.map +1 -0
  277. package/dist/agent/types.d.ts.map +1 -0
  278. package/dist/agent-catalog.json +2929 -268
  279. package/dist/brand/logo-asset/Alfadocs_Logo_BW.d.ts.map +1 -0
  280. package/dist/brand/logo-asset/Alfadocs_Logo_Main.d.ts.map +1 -0
  281. package/dist/brand/logo-asset/Alfadocs_Logo_Mark.d.ts.map +1 -0
  282. package/dist/brand/logo-asset/Alfadocs_Logo_Neg.d.ts.map +1 -0
  283. package/dist/brand/logo-asset/Alfadocs_Logo_Purple.d.ts.map +1 -0
  284. package/dist/brand/logo-asset/index.d.ts.map +1 -0
  285. package/dist/components/_shared/calendar-chevron.d.ts.map +1 -0
  286. package/dist/components/_shared/compose-refs.d.ts.map +1 -0
  287. package/dist/components/_shared/date-locale.d.ts.map +1 -0
  288. package/dist/components/_shared/date-picker-variants.d.ts.map +1 -0
  289. package/dist/components/_shared/date-utils.d.ts.map +1 -0
  290. package/dist/components/_shared/group-options.d.ts.map +1 -0
  291. package/dist/components/_shared/index.d.ts.map +1 -0
  292. package/dist/components/_shared/input-surface.d.ts.map +1 -0
  293. package/dist/components/_shared/normalize-diacritics.d.ts.map +1 -0
  294. package/dist/components/_shared/option.d.ts.map +1 -0
  295. package/dist/components/_shared/safe-html.d.ts.map +1 -0
  296. package/dist/components/_shared/safe-image-src.d.ts.map +1 -0
  297. package/dist/components/_shared/stepper.d.ts.map +1 -0
  298. package/dist/components/_shared/time.d.ts.map +1 -0
  299. package/dist/components/_shared/use-debounced-callback.d.ts.map +1 -0
  300. package/dist/components/_shared/use-direction.d.ts.map +1 -0
  301. package/dist/components/_shared/use-focus-trap.d.ts.map +1 -0
  302. package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +1 -0
  303. package/dist/components/accordion/accordion.agent.d.ts +2 -1
  304. package/dist/components/accordion/accordion.agent.d.ts.map +1 -0
  305. package/dist/components/accordion/accordion.d.ts +6 -0
  306. package/dist/components/accordion/accordion.d.ts.map +1 -0
  307. package/dist/components/accordion/index.d.ts.map +1 -0
  308. package/dist/components/accordion/index.js +2 -2
  309. package/dist/components/accordion/index.js.map +1 -0
  310. package/dist/components/agenda-card/agenda-card.agent.d.ts +3 -0
  311. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -0
  312. package/dist/components/agenda-card/agenda-card.d.ts.map +1 -0
  313. package/dist/components/agenda-card/index.d.ts +1 -0
  314. package/dist/components/agenda-card/index.d.ts.map +1 -0
  315. package/dist/components/agenda-card/index.js +3 -1
  316. package/dist/components/agenda-card/index.js.map +1 -0
  317. package/dist/components/agenda-tray/agenda-tray.agent.d.ts +4 -0
  318. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -0
  319. package/dist/components/agenda-tray/agenda-tray.d.ts +19 -2
  320. package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -0
  321. package/dist/components/agenda-tray/index.d.ts +2 -1
  322. package/dist/components/agenda-tray/index.d.ts.map +1 -0
  323. package/dist/components/agenda-tray/index.js +3 -2
  324. package/dist/components/agenda-tray/index.js.map +1 -0
  325. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts +4 -0
  326. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -0
  327. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +18 -1
  328. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -0
  329. package/dist/components/ai-prompt-input/index.d.ts +2 -1
  330. package/dist/components/ai-prompt-input/index.d.ts.map +1 -0
  331. package/dist/components/ai-prompt-input/index.js +3 -2
  332. package/dist/components/ai-prompt-input/index.js.map +1 -0
  333. package/dist/components/alert/alert.d.ts.map +1 -0
  334. package/dist/components/alert/index.d.ts.map +1 -0
  335. package/dist/components/alert/index.js.map +1 -0
  336. package/dist/components/app-frame/app-frame.d.ts.map +1 -0
  337. package/dist/components/app-frame/index.d.ts.map +1 -0
  338. package/dist/components/app-frame/index.js.map +1 -0
  339. package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +1 -0
  340. package/dist/components/aspect-ratio/index.d.ts.map +1 -0
  341. package/dist/components/aspect-ratio/index.js +1 -1
  342. package/dist/components/aspect-ratio/index.js.map +1 -0
  343. package/dist/components/audio-recorder/audio-recorder.agent.d.ts +4 -0
  344. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -0
  345. package/dist/components/audio-recorder/audio-recorder.d.ts +10 -1
  346. package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -0
  347. package/dist/components/audio-recorder/index.d.ts +2 -1
  348. package/dist/components/audio-recorder/index.d.ts.map +1 -0
  349. package/dist/components/audio-recorder/index.js +3 -2
  350. package/dist/components/audio-recorder/index.js.map +1 -0
  351. package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +1 -0
  352. package/dist/components/audio-visualiser/index.d.ts.map +1 -0
  353. package/dist/components/audio-visualiser/index.js.map +1 -0
  354. package/dist/components/autocomplete/autocomplete.agent.d.ts +2 -1
  355. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -0
  356. package/dist/components/autocomplete/autocomplete.d.ts +10 -0
  357. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -0
  358. package/dist/components/autocomplete/index.d.ts.map +1 -0
  359. package/dist/components/autocomplete/index.js +1 -1
  360. package/dist/components/autocomplete/index.js.map +1 -0
  361. package/dist/components/avatar/avatar.d.ts.map +1 -0
  362. package/dist/components/avatar/index.d.ts.map +1 -0
  363. package/dist/components/avatar/index.js.map +1 -0
  364. package/dist/components/badge/badge.d.ts.map +1 -0
  365. package/dist/components/badge/index.d.ts.map +1 -0
  366. package/dist/components/badge/index.js.map +1 -0
  367. package/dist/components/breadcrumb/breadcrumb.agent.d.ts +8 -0
  368. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -0
  369. package/dist/components/breadcrumb/breadcrumb.d.ts +21 -2
  370. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  371. package/dist/components/breadcrumb/index.d.ts +2 -1
  372. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  373. package/dist/components/breadcrumb/index.js +5 -4
  374. package/dist/components/breadcrumb/index.js.map +1 -0
  375. package/dist/components/button/button.agent.d.ts.map +1 -0
  376. package/dist/components/button/button.d.ts +1 -1
  377. package/dist/components/button/button.d.ts.map +1 -0
  378. package/dist/components/button/icon-button.d.ts.map +1 -0
  379. package/dist/components/button/index.d.ts.map +1 -0
  380. package/dist/components/button/index.js.map +1 -0
  381. package/dist/components/button-group/button-group.d.ts.map +1 -0
  382. package/dist/components/button-group/index.d.ts.map +1 -0
  383. package/dist/components/button-group/index.js.map +1 -0
  384. package/dist/components/calendar/calendar.agent.d.ts.map +1 -0
  385. package/dist/components/calendar/calendar.d.ts.map +1 -0
  386. package/dist/components/calendar/contrast-warning.d.ts.map +1 -0
  387. package/dist/components/calendar/index.d.ts.map +1 -0
  388. package/dist/components/calendar/index.js.map +1 -0
  389. package/dist/components/card/card.d.ts.map +1 -0
  390. package/dist/components/card/index.d.ts.map +1 -0
  391. package/dist/components/card/index.js.map +1 -0
  392. package/dist/components/chart/chart.agent.d.ts.map +1 -0
  393. package/dist/components/chart/chart.d.ts +2 -0
  394. package/dist/components/chart/chart.d.ts.map +1 -0
  395. package/dist/components/chart/index.d.ts.map +1 -0
  396. package/dist/components/chart/index.js +1 -1
  397. package/dist/components/chart/index.js.map +1 -0
  398. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -0
  399. package/dist/components/chat-container/chat-container.d.ts +3 -1
  400. package/dist/components/chat-container/chat-container.d.ts.map +1 -0
  401. package/dist/components/chat-container/index.d.ts.map +1 -0
  402. package/dist/components/chat-container/index.js +2 -2
  403. package/dist/components/chat-container/index.js.map +1 -0
  404. package/dist/components/chat-input/chat-input.agent.d.ts +4 -0
  405. package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -0
  406. package/dist/components/chat-input/chat-input.d.ts +10 -1
  407. package/dist/components/chat-input/chat-input.d.ts.map +1 -0
  408. package/dist/components/chat-input/index.d.ts +2 -1
  409. package/dist/components/chat-input/index.d.ts.map +1 -0
  410. package/dist/components/chat-input/index.js +4 -2
  411. package/dist/components/chat-input/index.js.map +1 -0
  412. package/dist/components/chat-message/chat-message.d.ts.map +1 -0
  413. package/dist/components/chat-message/index.d.ts.map +1 -0
  414. package/dist/components/chat-message/index.js.map +1 -0
  415. package/dist/components/checkbox/checkbox-group-context.d.ts.map +1 -0
  416. package/dist/components/checkbox/checkbox.agent.d.ts +4 -0
  417. package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -0
  418. package/dist/components/checkbox/checkbox.d.ts +6 -0
  419. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  420. package/dist/components/checkbox/index.d.ts.map +1 -0
  421. package/dist/components/checkbox/index.js +1 -1
  422. package/dist/components/checkbox/index.js.map +1 -0
  423. package/dist/components/checkbox-group/checkbox-group.agent.d.ts +4 -0
  424. package/dist/components/checkbox-group/checkbox-group.agent.d.ts.map +1 -0
  425. package/dist/components/checkbox-group/checkbox-group.d.ts +8 -0
  426. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -0
  427. package/dist/components/checkbox-group/index.d.ts.map +1 -0
  428. package/dist/components/checkbox-group/index.js +1 -1
  429. package/dist/components/checkbox-group/index.js.map +1 -0
  430. package/dist/components/collapsible/collapsible.agent.d.ts +4 -0
  431. package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -0
  432. package/dist/components/collapsible/collapsible.d.ts +8 -1
  433. package/dist/components/collapsible/collapsible.d.ts.map +1 -0
  434. package/dist/components/collapsible/index.d.ts +2 -1
  435. package/dist/components/collapsible/index.d.ts.map +1 -0
  436. package/dist/components/collapsible/index.js +4 -3
  437. package/dist/components/collapsible/index.js.map +1 -0
  438. package/dist/components/color-picker/color-picker.agent.d.ts +4 -0
  439. package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -0
  440. package/dist/components/color-picker/color-picker.d.ts +5 -0
  441. package/dist/components/color-picker/color-picker.d.ts.map +1 -0
  442. package/dist/components/color-picker/color-utils.d.ts.map +1 -0
  443. package/dist/components/color-picker/index.d.ts.map +1 -0
  444. package/dist/components/color-picker/index.js +1 -1
  445. package/dist/components/color-picker/index.js.map +1 -0
  446. package/dist/components/color-picker/palettes.d.ts.map +1 -0
  447. package/dist/components/combobox/combobox.agent.d.ts +2 -1
  448. package/dist/components/combobox/combobox.agent.d.ts.map +1 -0
  449. package/dist/components/combobox/combobox.d.ts +10 -0
  450. package/dist/components/combobox/combobox.d.ts.map +1 -0
  451. package/dist/components/combobox/index.d.ts.map +1 -0
  452. package/dist/components/combobox/index.js +1 -1
  453. package/dist/components/combobox/index.js.map +1 -0
  454. package/dist/components/command-palette/command-palette.agent.d.ts +2 -1
  455. package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -0
  456. package/dist/components/command-palette/command-palette.d.ts +7 -0
  457. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  458. package/dist/components/command-palette/index.d.ts.map +1 -0
  459. package/dist/components/command-palette/index.js +1 -1
  460. package/dist/components/command-palette/index.js.map +1 -0
  461. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +1 -0
  462. package/dist/components/data-table/cell-renderers/balance-cell-renderer.d.ts.map +1 -0
  463. package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +1 -0
  464. package/dist/components/data-table/cell-renderers/currency-cell-renderer.d.ts.map +1 -0
  465. package/dist/components/data-table/cell-renderers/date-cell-renderer.d.ts.map +1 -0
  466. package/dist/components/data-table/cell-renderers/link-cell-renderer.d.ts.map +1 -0
  467. package/dist/components/data-table/cell-renderers/status-cell-renderer.d.ts.map +1 -0
  468. package/dist/components/data-table/cell-renderers/tag-list-cell-renderer.d.ts.map +1 -0
  469. package/dist/components/data-table/cell-renderers/toggle-cell-renderer.d.ts.map +1 -0
  470. package/dist/components/data-table/cell-renderers/user-cell-renderer.d.ts.map +1 -0
  471. package/dist/components/data-table/data-table.agent.d.ts.map +1 -0
  472. package/dist/components/data-table/data-table.d.ts.map +1 -0
  473. package/dist/components/data-table/hooks/use-total-row.d.ts.map +1 -0
  474. package/dist/components/data-table/index.d.ts.map +1 -0
  475. package/dist/components/data-table/index.js +1 -1
  476. package/dist/components/data-table/index.js.map +1 -0
  477. package/dist/components/data-table/toolbar.d.ts.map +1 -0
  478. package/dist/components/date-picker/date-picker.agent.d.ts +4 -0
  479. package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -0
  480. package/dist/components/date-picker/date-picker.d.ts +16 -1
  481. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  482. package/dist/components/date-picker/index.d.ts +2 -1
  483. package/dist/components/date-picker/index.d.ts.map +1 -0
  484. package/dist/components/date-picker/index.js +3 -2
  485. package/dist/components/date-picker/index.js.map +1 -0
  486. package/dist/components/date-range-picker/date-range-picker.agent.d.ts +4 -0
  487. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -0
  488. package/dist/components/date-range-picker/date-range-picker.d.ts +16 -1
  489. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  490. package/dist/components/date-range-picker/index.d.ts +2 -1
  491. package/dist/components/date-range-picker/index.d.ts.map +1 -0
  492. package/dist/components/date-range-picker/index.js +3 -2
  493. package/dist/components/date-range-picker/index.js.map +1 -0
  494. package/dist/components/date-time-picker/date-time-picker.agent.d.ts +4 -0
  495. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -0
  496. package/dist/components/date-time-picker/date-time-picker.d.ts +16 -1
  497. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -0
  498. package/dist/components/date-time-picker/index.d.ts +2 -1
  499. package/dist/components/date-time-picker/index.d.ts.map +1 -0
  500. package/dist/components/date-time-picker/index.js +3 -2
  501. package/dist/components/date-time-picker/index.js.map +1 -0
  502. package/dist/components/description-list/description-list.d.ts.map +1 -0
  503. package/dist/components/description-list/index.d.ts.map +1 -0
  504. package/dist/components/description-list/index.js.map +1 -0
  505. package/dist/components/dialog/dialog.agent.d.ts +5 -6
  506. package/dist/components/dialog/dialog.agent.d.ts.map +1 -0
  507. package/dist/components/dialog/dialog.d.ts +11 -2
  508. package/dist/components/dialog/dialog.d.ts.map +1 -0
  509. package/dist/components/dialog/index.d.ts.map +1 -0
  510. package/dist/components/dialog/index.js +1 -1
  511. package/dist/components/dialog/index.js.map +1 -0
  512. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts +2 -1
  513. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -0
  514. package/dist/components/dropdown-menu/dropdown-menu.d.ts +10 -2
  515. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -0
  516. package/dist/components/dropdown-menu/index.d.ts.map +1 -0
  517. package/dist/components/dropdown-menu/index.js +2 -2
  518. package/dist/components/dropdown-menu/index.js.map +1 -0
  519. package/dist/components/empty-state/empty-state.d.ts.map +1 -0
  520. package/dist/components/empty-state/index.d.ts.map +1 -0
  521. package/dist/components/empty-state/index.js.map +1 -0
  522. package/dist/components/file-upload/file-upload.agent.d.ts +2 -1
  523. package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -0
  524. package/dist/components/file-upload/file-upload.d.ts +12 -0
  525. package/dist/components/file-upload/file-upload.d.ts.map +1 -0
  526. package/dist/components/file-upload/index.d.ts.map +1 -0
  527. package/dist/components/file-upload/index.js +1 -1
  528. package/dist/components/file-upload/index.js.map +1 -0
  529. package/dist/components/flag/flag.d.ts.map +1 -0
  530. package/dist/components/flag/index.d.ts.map +1 -0
  531. package/dist/components/flag/index.js.map +1 -0
  532. package/dist/components/floating-action-button/floating-action-button.d.ts.map +1 -0
  533. package/dist/components/floating-action-button/index.d.ts.map +1 -0
  534. package/dist/components/floating-action-button/index.js.map +1 -0
  535. package/dist/components/form-field/form-field-context.d.ts.map +1 -0
  536. package/dist/components/form-field/form-field.d.ts.map +1 -0
  537. package/dist/components/form-field/index.d.ts.map +1 -0
  538. package/dist/components/form-field/index.js.map +1 -0
  539. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts +4 -0
  540. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -0
  541. package/dist/components/freemium-paywall/freemium-paywall.d.ts +8 -1
  542. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -0
  543. package/dist/components/freemium-paywall/index.d.ts +2 -1
  544. package/dist/components/freemium-paywall/index.d.ts.map +1 -0
  545. package/dist/components/freemium-paywall/index.js +3 -2
  546. package/dist/components/freemium-paywall/index.js.map +1 -0
  547. package/dist/components/header/header.d.ts.map +1 -0
  548. package/dist/components/header/index.d.ts.map +1 -0
  549. package/dist/components/header/index.js.map +1 -0
  550. package/dist/components/icon-button/index.d.ts.map +1 -0
  551. package/dist/components/icon-button/index.js.map +1 -0
  552. package/dist/components/icon-button-group/icon-button-group.d.ts.map +1 -0
  553. package/dist/components/icon-button-group/index.d.ts.map +1 -0
  554. package/dist/components/icon-button-group/index.js.map +1 -0
  555. package/dist/components/index.d.ts +2 -0
  556. package/dist/components/index.d.ts.map +1 -0
  557. package/dist/components/kbd/index.d.ts.map +1 -0
  558. package/dist/components/kbd/index.js.map +1 -0
  559. package/dist/components/kbd/kbd.d.ts.map +1 -0
  560. package/dist/components/key-value-pair/index.d.ts.map +1 -0
  561. package/dist/components/key-value-pair/index.js.map +1 -0
  562. package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -0
  563. package/dist/components/link/index.d.ts +2 -0
  564. package/dist/components/link/index.d.ts.map +1 -0
  565. package/dist/components/link/index.js +5 -0
  566. package/dist/components/link/index.js.map +1 -0
  567. package/dist/components/link/link.d.ts +39 -0
  568. package/dist/components/link/link.d.ts.map +1 -0
  569. package/dist/components/list/index.d.ts +2 -1
  570. package/dist/components/list/index.d.ts.map +1 -0
  571. package/dist/components/list/index.js +3 -2
  572. package/dist/components/list/index.js.map +1 -0
  573. package/dist/components/list/list.agent.d.ts +4 -0
  574. package/dist/components/list/list.agent.d.ts.map +1 -0
  575. package/dist/components/list/list.d.ts +8 -2
  576. package/dist/components/list/list.d.ts.map +1 -0
  577. package/dist/components/live-region/index.d.ts.map +1 -0
  578. package/dist/components/live-region/index.js.map +1 -0
  579. package/dist/components/live-region/live-region.d.ts.map +1 -0
  580. package/dist/components/logo/index.d.ts.map +1 -0
  581. package/dist/components/logo/index.js.map +1 -0
  582. package/dist/components/logo/logo.d.ts.map +1 -0
  583. package/dist/components/matrix-rain/index.d.ts.map +1 -0
  584. package/dist/components/matrix-rain/index.js.map +1 -0
  585. package/dist/components/matrix-rain/matrix-rain.d.ts.map +1 -0
  586. package/dist/components/message-card/index.d.ts +1 -0
  587. package/dist/components/message-card/index.d.ts.map +1 -0
  588. package/dist/components/message-card/index.js +5 -3
  589. package/dist/components/message-card/index.js.map +1 -0
  590. package/dist/components/message-card/message-card.agent.d.ts +3 -0
  591. package/dist/components/message-card/message-card.agent.d.ts.map +1 -0
  592. package/dist/components/message-card/message-card.d.ts.map +1 -0
  593. package/dist/components/message-tray/index.d.ts +2 -1
  594. package/dist/components/message-tray/index.d.ts.map +1 -0
  595. package/dist/components/message-tray/index.js +3 -2
  596. package/dist/components/message-tray/index.js.map +1 -0
  597. package/dist/components/message-tray/message-tray.agent.d.ts +4 -0
  598. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -0
  599. package/dist/components/message-tray/message-tray.d.ts +27 -2
  600. package/dist/components/message-tray/message-tray.d.ts.map +1 -0
  601. package/dist/components/multi-select/index.d.ts.map +1 -0
  602. package/dist/components/multi-select/index.js +1 -1
  603. package/dist/components/multi-select/index.js.map +1 -0
  604. package/dist/components/multi-select/multi-select.agent.d.ts +2 -1
  605. package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -0
  606. package/dist/components/multi-select/multi-select.d.ts +10 -0
  607. package/dist/components/multi-select/multi-select.d.ts.map +1 -0
  608. package/dist/components/navigation-menu/index.d.ts +2 -1
  609. package/dist/components/navigation-menu/index.d.ts.map +1 -0
  610. package/dist/components/navigation-menu/index.js +7 -6
  611. package/dist/components/navigation-menu/index.js.map +1 -0
  612. package/dist/components/navigation-menu/navigation-menu.agent.d.ts +4 -0
  613. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -0
  614. package/dist/components/navigation-menu/navigation-menu.d.ts +28 -2
  615. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -0
  616. package/dist/components/notification-card/index.d.ts +1 -0
  617. package/dist/components/notification-card/index.d.ts.map +1 -0
  618. package/dist/components/notification-card/index.js +5 -3
  619. package/dist/components/notification-card/index.js.map +1 -0
  620. package/dist/components/notification-card/notification-card.agent.d.ts +3 -0
  621. package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -0
  622. package/dist/components/notification-card/notification-card.d.ts.map +1 -0
  623. package/dist/components/notification-tray/index.d.ts +2 -1
  624. package/dist/components/notification-tray/index.d.ts.map +1 -0
  625. package/dist/components/notification-tray/index.js +3 -2
  626. package/dist/components/notification-tray/index.js.map +1 -0
  627. package/dist/components/notification-tray/notification-tray.agent.d.ts +4 -0
  628. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -0
  629. package/dist/components/notification-tray/notification-tray.d.ts +27 -2
  630. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -0
  631. package/dist/components/number-input/index.d.ts.map +1 -0
  632. package/dist/components/number-input/index.js +1 -1
  633. package/dist/components/number-input/index.js.map +1 -0
  634. package/dist/components/number-input/number-input.agent.d.ts +4 -0
  635. package/dist/components/number-input/number-input.agent.d.ts.map +1 -0
  636. package/dist/components/number-input/number-input.d.ts +7 -0
  637. package/dist/components/number-input/number-input.d.ts.map +1 -0
  638. package/dist/components/number-input/use-locale-number.d.ts.map +1 -0
  639. package/dist/components/otp-input/index.d.ts.map +1 -0
  640. package/dist/components/otp-input/index.js +1 -1
  641. package/dist/components/otp-input/index.js.map +1 -0
  642. package/dist/components/otp-input/otp-input.agent.d.ts +4 -0
  643. package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -0
  644. package/dist/components/otp-input/otp-input.d.ts +10 -0
  645. package/dist/components/otp-input/otp-input.d.ts.map +1 -0
  646. package/dist/components/pagination/index.d.ts.map +1 -0
  647. package/dist/components/pagination/index.js +1 -1
  648. package/dist/components/pagination/index.js.map +1 -0
  649. package/dist/components/pagination/pagination.agent.d.ts +2 -1
  650. package/dist/components/pagination/pagination.agent.d.ts.map +1 -0
  651. package/dist/components/pagination/pagination.d.ts +7 -0
  652. package/dist/components/pagination/pagination.d.ts.map +1 -0
  653. package/dist/components/password-input/index.d.ts.map +1 -0
  654. package/dist/components/password-input/index.js +1 -1
  655. package/dist/components/password-input/index.js.map +1 -0
  656. package/dist/components/password-input/password-input.agent.d.ts +4 -0
  657. package/dist/components/password-input/password-input.agent.d.ts.map +1 -0
  658. package/dist/components/password-input/password-input.d.ts +9 -0
  659. package/dist/components/password-input/password-input.d.ts.map +1 -0
  660. package/dist/components/payment-form/index.d.ts.map +1 -0
  661. package/dist/components/payment-form/index.js +2 -2
  662. package/dist/components/payment-form/index.js.map +1 -0
  663. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -0
  664. package/dist/components/payment-form/payment-form.d.ts +2 -0
  665. package/dist/components/payment-form/payment-form.d.ts.map +1 -0
  666. package/dist/components/pdf-viewer/index.d.ts.map +1 -0
  667. package/dist/components/pdf-viewer/index.js +1 -1
  668. package/dist/components/pdf-viewer/index.js.map +1 -0
  669. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -0
  670. package/dist/components/pdf-viewer/pdf-viewer.d.ts +2 -0
  671. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -0
  672. package/dist/components/phone-input/index.d.ts.map +1 -0
  673. package/dist/components/phone-input/index.js +1 -1
  674. package/dist/components/phone-input/index.js.map +1 -0
  675. package/dist/components/phone-input/phone-input.agent.d.ts +4 -0
  676. package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -0
  677. package/dist/components/phone-input/phone-input.d.ts +7 -0
  678. package/dist/components/phone-input/phone-input.d.ts.map +1 -0
  679. package/dist/components/popover/index.d.ts.map +1 -0
  680. package/dist/components/popover/index.js +2 -2
  681. package/dist/components/popover/index.js.map +1 -0
  682. package/dist/components/popover/popover.agent.d.ts +2 -1
  683. package/dist/components/popover/popover.agent.d.ts.map +1 -0
  684. package/dist/components/popover/popover.d.ts +8 -1
  685. package/dist/components/popover/popover.d.ts.map +1 -0
  686. package/dist/components/privacy-lock/index.d.ts +2 -1
  687. package/dist/components/privacy-lock/index.d.ts.map +1 -0
  688. package/dist/components/privacy-lock/index.js +3 -2
  689. package/dist/components/privacy-lock/index.js.map +1 -0
  690. package/dist/components/privacy-lock/privacy-lock.agent.d.ts +4 -0
  691. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -0
  692. package/dist/components/privacy-lock/privacy-lock.d.ts +7 -1
  693. package/dist/components/privacy-lock/privacy-lock.d.ts.map +1 -0
  694. package/dist/components/progress/index.d.ts.map +1 -0
  695. package/dist/components/progress/index.js +2 -2
  696. package/dist/components/progress/index.js.map +1 -0
  697. package/dist/components/progress/progress.agent.d.ts.map +1 -0
  698. package/dist/components/progress/progress.d.ts.map +1 -0
  699. package/dist/components/radio/index.d.ts.map +1 -0
  700. package/dist/components/radio/index.js +1 -1
  701. package/dist/components/radio/index.js.map +1 -0
  702. package/dist/components/radio-group/index.d.ts.map +1 -0
  703. package/dist/components/radio-group/index.js +2 -2
  704. package/dist/components/radio-group/index.js.map +1 -0
  705. package/dist/components/radio-group/radio-group-context.d.ts.map +1 -0
  706. package/dist/components/radio-group/radio-group.agent.d.ts +4 -0
  707. package/dist/components/radio-group/radio-group.agent.d.ts.map +1 -0
  708. package/dist/components/radio-group/radio-group.d.ts +5 -0
  709. package/dist/components/radio-group/radio-group.d.ts.map +1 -0
  710. package/dist/components/radio-group/radio.d.ts.map +1 -0
  711. package/dist/components/recaptcha-widget/index.d.ts +3 -0
  712. package/dist/components/recaptcha-widget/index.d.ts.map +1 -0
  713. package/dist/components/recaptcha-widget/index.js +6 -0
  714. package/dist/components/recaptcha-widget/index.js.map +1 -0
  715. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts +4 -0
  716. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -0
  717. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts +56 -0
  718. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +1 -0
  719. package/dist/components/resizable/index.d.ts.map +1 -0
  720. package/dist/components/resizable/index.js +1 -1
  721. package/dist/components/resizable/index.js.map +1 -0
  722. package/dist/components/resizable/resizable-context.d.ts.map +1 -0
  723. package/dist/components/resizable/resizable.agent.d.ts +2 -1
  724. package/dist/components/resizable/resizable.agent.d.ts.map +1 -0
  725. package/dist/components/resizable/resizable.d.ts +6 -0
  726. package/dist/components/resizable/resizable.d.ts.map +1 -0
  727. package/dist/components/rich-text-editor/index.d.ts.map +1 -0
  728. package/dist/components/rich-text-editor/index.js +1 -1
  729. package/dist/components/rich-text-editor/index.js.map +1 -0
  730. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -0
  731. package/dist/components/rich-text-editor/rich-text-editor.d.ts +2 -0
  732. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -0
  733. package/dist/components/scroll-area/index.d.ts.map +1 -0
  734. package/dist/components/scroll-area/index.js.map +1 -0
  735. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -0
  736. package/dist/components/search-bar/index.d.ts +2 -1
  737. package/dist/components/search-bar/index.d.ts.map +1 -0
  738. package/dist/components/search-bar/index.js +3 -2
  739. package/dist/components/search-bar/index.js.map +1 -0
  740. package/dist/components/search-bar/search-bar.agent.d.ts +4 -0
  741. package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -0
  742. package/dist/components/search-bar/search-bar.d.ts +27 -1
  743. package/dist/components/search-bar/search-bar.d.ts.map +1 -0
  744. package/dist/components/search-input/index.d.ts +2 -1
  745. package/dist/components/search-input/index.d.ts.map +1 -0
  746. package/dist/components/search-input/index.js +4 -2
  747. package/dist/components/search-input/index.js.map +1 -0
  748. package/dist/components/search-input/search-input.agent.d.ts +4 -0
  749. package/dist/components/search-input/search-input.agent.d.ts.map +1 -0
  750. package/dist/components/search-input/search-input.d.ts +27 -0
  751. package/dist/components/search-input/search-input.d.ts.map +1 -0
  752. package/dist/components/select/index.d.ts.map +1 -0
  753. package/dist/components/select/index.js +1 -1
  754. package/dist/components/select/index.js.map +1 -0
  755. package/dist/components/select/select.agent.d.ts +4 -0
  756. package/dist/components/select/select.agent.d.ts.map +1 -0
  757. package/dist/components/select/select.d.ts +9 -0
  758. package/dist/components/select/select.d.ts.map +1 -0
  759. package/dist/components/separator/index.d.ts.map +1 -0
  760. package/dist/components/separator/index.js.map +1 -0
  761. package/dist/components/separator/separator.d.ts.map +1 -0
  762. package/dist/components/sheet/index.d.ts.map +1 -0
  763. package/dist/components/sheet/index.js +2 -2
  764. package/dist/components/sheet/index.js.map +1 -0
  765. package/dist/components/sheet/sheet.agent.d.ts +2 -1
  766. package/dist/components/sheet/sheet.agent.d.ts.map +1 -0
  767. package/dist/components/sheet/sheet.d.ts +11 -2
  768. package/dist/components/sheet/sheet.d.ts.map +1 -0
  769. package/dist/components/sidebar/index.d.ts.map +1 -0
  770. package/dist/components/sidebar/index.js +2 -2
  771. package/dist/components/sidebar/index.js.map +1 -0
  772. package/dist/components/sidebar/sidebar.agent.d.ts +2 -1
  773. package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -0
  774. package/dist/components/sidebar/sidebar.d.ts +6 -0
  775. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  776. package/dist/components/sign-in-with-alfadocs-button/index.d.ts.map +1 -0
  777. package/dist/components/sign-in-with-alfadocs-button/index.js.map +1 -0
  778. package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +1 -0
  779. package/dist/components/signature-capture/index.d.ts.map +1 -0
  780. package/dist/components/signature-capture/index.js +1 -1
  781. package/dist/components/signature-capture/index.js.map +1 -0
  782. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -0
  783. package/dist/components/signature-capture/signature-capture.d.ts +2 -0
  784. package/dist/components/signature-capture/signature-capture.d.ts.map +1 -0
  785. package/dist/components/skeleton/index.d.ts.map +1 -0
  786. package/dist/components/skeleton/index.js.map +1 -0
  787. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  788. package/dist/components/skip-link/index.d.ts.map +1 -0
  789. package/dist/components/skip-link/index.js.map +1 -0
  790. package/dist/components/skip-link/skip-link.d.ts.map +1 -0
  791. package/dist/components/slider/index.d.ts.map +1 -0
  792. package/dist/components/slider/index.js +1 -1
  793. package/dist/components/slider/index.js.map +1 -0
  794. package/dist/components/slider/slider.agent.d.ts +4 -0
  795. package/dist/components/slider/slider.agent.d.ts.map +1 -0
  796. package/dist/components/slider/slider.d.ts +5 -0
  797. package/dist/components/slider/slider.d.ts.map +1 -0
  798. package/dist/components/slot-grid/index.d.ts.map +1 -0
  799. package/dist/components/slot-grid/index.js.map +1 -0
  800. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -0
  801. package/dist/components/sparkline/index.d.ts.map +1 -0
  802. package/dist/components/sparkline/index.js +1 -1
  803. package/dist/components/sparkline/index.js.map +1 -0
  804. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -0
  805. package/dist/components/sparkline/sparkline.d.ts.map +1 -0
  806. package/dist/components/sparkline/use-linear-trend.d.ts.map +1 -0
  807. package/dist/components/spinner/index.d.ts.map +1 -0
  808. package/dist/components/spinner/index.js.map +1 -0
  809. package/dist/components/spinner/spinner.d.ts.map +1 -0
  810. package/dist/components/stat/index.d.ts.map +1 -0
  811. package/dist/components/stat/index.js.map +1 -0
  812. package/dist/components/stat/stat.d.ts.map +1 -0
  813. package/dist/components/stepper-accordion/index.d.ts +2 -1
  814. package/dist/components/stepper-accordion/index.d.ts.map +1 -0
  815. package/dist/components/stepper-accordion/index.js +3 -2
  816. package/dist/components/stepper-accordion/index.js.map +1 -0
  817. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts +4 -0
  818. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -0
  819. package/dist/components/stepper-accordion/stepper-accordion.d.ts +19 -1
  820. package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -0
  821. package/dist/components/stepper-calendar/index.d.ts +2 -1
  822. package/dist/components/stepper-calendar/index.d.ts.map +1 -0
  823. package/dist/components/stepper-calendar/index.js +3 -2
  824. package/dist/components/stepper-calendar/index.js.map +1 -0
  825. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts +4 -0
  826. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts.map +1 -0
  827. package/dist/components/stepper-calendar/stepper-calendar.d.ts +19 -1
  828. package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +1 -0
  829. package/dist/components/stepper-progress/index.d.ts +2 -1
  830. package/dist/components/stepper-progress/index.d.ts.map +1 -0
  831. package/dist/components/stepper-progress/index.js +4 -2
  832. package/dist/components/stepper-progress/index.js.map +1 -0
  833. package/dist/components/stepper-progress/stepper-progress.agent.d.ts +4 -0
  834. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -0
  835. package/dist/components/stepper-progress/stepper-progress.d.ts +26 -1
  836. package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -0
  837. package/dist/components/streaming-text/index.d.ts.map +1 -0
  838. package/dist/components/streaming-text/index.js.map +1 -0
  839. package/dist/components/streaming-text/streaming-text.d.ts.map +1 -0
  840. package/dist/components/suggestion-chip/index.d.ts +2 -1
  841. package/dist/components/suggestion-chip/index.d.ts.map +1 -0
  842. package/dist/components/suggestion-chip/index.js +5 -3
  843. package/dist/components/suggestion-chip/index.js.map +1 -0
  844. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts +4 -0
  845. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -0
  846. package/dist/components/suggestion-chip/suggestion-chip.d.ts +7 -1
  847. package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +1 -0
  848. package/dist/components/switch/index.d.ts.map +1 -0
  849. package/dist/components/switch/index.js +1 -1
  850. package/dist/components/switch/index.js.map +1 -0
  851. package/dist/components/switch/switch.agent.d.ts +4 -0
  852. package/dist/components/switch/switch.agent.d.ts.map +1 -0
  853. package/dist/components/switch/switch.d.ts +6 -0
  854. package/dist/components/switch/switch.d.ts.map +1 -0
  855. package/dist/components/tabs/index.d.ts.map +1 -0
  856. package/dist/components/tabs/index.js +1 -1
  857. package/dist/components/tabs/index.js.map +1 -0
  858. package/dist/components/tabs/tabs.agent.d.ts +2 -1
  859. package/dist/components/tabs/tabs.agent.d.ts.map +1 -0
  860. package/dist/components/tabs/tabs.d.ts +4 -0
  861. package/dist/components/tabs/tabs.d.ts.map +1 -0
  862. package/dist/components/tag/index.d.ts.map +1 -0
  863. package/dist/components/tag/index.js.map +1 -0
  864. package/dist/components/tag/tag.d.ts.map +1 -0
  865. package/dist/components/task-card/index.d.ts +1 -0
  866. package/dist/components/task-card/index.d.ts.map +1 -0
  867. package/dist/components/task-card/index.js +5 -3
  868. package/dist/components/task-card/index.js.map +1 -0
  869. package/dist/components/task-card/task-card.agent.d.ts +3 -0
  870. package/dist/components/task-card/task-card.agent.d.ts.map +1 -0
  871. package/dist/components/task-card/task-card.d.ts.map +1 -0
  872. package/dist/components/task-tray/index.d.ts +2 -1
  873. package/dist/components/task-tray/index.d.ts.map +1 -0
  874. package/dist/components/task-tray/index.js +3 -2
  875. package/dist/components/task-tray/index.js.map +1 -0
  876. package/dist/components/task-tray/task-tray.agent.d.ts +4 -0
  877. package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -0
  878. package/dist/components/task-tray/task-tray.d.ts +25 -2
  879. package/dist/components/task-tray/task-tray.d.ts.map +1 -0
  880. package/dist/components/text-area/index.d.ts.map +1 -0
  881. package/dist/components/text-area/index.js +1 -1
  882. package/dist/components/text-area/index.js.map +1 -0
  883. package/dist/components/text-area/text-area.agent.d.ts +4 -0
  884. package/dist/components/text-area/text-area.agent.d.ts.map +1 -0
  885. package/dist/components/text-area/text-area.d.ts +7 -0
  886. package/dist/components/text-area/text-area.d.ts.map +1 -0
  887. package/dist/components/text-input/index.d.ts.map +1 -0
  888. package/dist/components/text-input/index.js +1 -1
  889. package/dist/components/text-input/index.js.map +1 -0
  890. package/dist/components/text-input/text-input.agent.d.ts +4 -0
  891. package/dist/components/text-input/text-input.agent.d.ts.map +1 -0
  892. package/dist/components/text-input/text-input.d.ts +10 -0
  893. package/dist/components/text-input/text-input.d.ts.map +1 -0
  894. package/dist/components/theme-root/index.d.ts.map +1 -0
  895. package/dist/components/theme-root/index.js.map +1 -0
  896. package/dist/components/theme-root/theme-root.d.ts.map +1 -0
  897. package/dist/components/theme-toggle/index.d.ts +2 -1
  898. package/dist/components/theme-toggle/index.d.ts.map +1 -0
  899. package/dist/components/theme-toggle/index.js +3 -2
  900. package/dist/components/theme-toggle/index.js.map +1 -0
  901. package/dist/components/theme-toggle/theme-toggle.agent.d.ts +4 -0
  902. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -0
  903. package/dist/components/theme-toggle/theme-toggle.d.ts +9 -2
  904. package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -0
  905. package/dist/components/time-picker/index.d.ts +2 -1
  906. package/dist/components/time-picker/index.d.ts.map +1 -0
  907. package/dist/components/time-picker/index.js +3 -2
  908. package/dist/components/time-picker/index.js.map +1 -0
  909. package/dist/components/time-picker/time-picker.agent.d.ts +4 -0
  910. package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -0
  911. package/dist/components/time-picker/time-picker.d.ts +16 -1
  912. package/dist/components/time-picker/time-picker.d.ts.map +1 -0
  913. package/dist/components/timeline/index.d.ts +2 -1
  914. package/dist/components/timeline/index.d.ts.map +1 -0
  915. package/dist/components/timeline/index.js +3 -2
  916. package/dist/components/timeline/index.js.map +1 -0
  917. package/dist/components/timeline/timeline.agent.d.ts +4 -0
  918. package/dist/components/timeline/timeline.agent.d.ts.map +1 -0
  919. package/dist/components/timeline/timeline.d.ts +8 -1
  920. package/dist/components/timeline/timeline.d.ts.map +1 -0
  921. package/dist/components/timestamp/index.d.ts.map +1 -0
  922. package/dist/components/timestamp/index.js.map +1 -0
  923. package/dist/components/timestamp/timestamp.d.ts.map +1 -0
  924. package/dist/components/toast/index.d.ts +3 -2
  925. package/dist/components/toast/index.d.ts.map +1 -0
  926. package/dist/components/toast/index.js +7 -5
  927. package/dist/components/toast/index.js.map +1 -0
  928. package/dist/components/toast/toast.agent.d.ts +4 -0
  929. package/dist/components/toast/toast.agent.d.ts.map +1 -0
  930. package/dist/components/toast/toast.d.ts +8 -0
  931. package/dist/components/toast/toast.d.ts.map +1 -0
  932. package/dist/components/tooltip/index.d.ts.map +1 -0
  933. package/dist/components/tooltip/index.js.map +1 -0
  934. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  935. package/dist/components/tooth-scheme/index.d.ts.map +1 -0
  936. package/dist/components/tooth-scheme/index.js +1 -1
  937. package/dist/components/tooth-scheme/index.js.map +1 -0
  938. package/dist/components/tooth-scheme/tooth-data.d.ts.map +1 -0
  939. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -0
  940. package/dist/components/tooth-scheme/tooth-scheme.d.ts +2 -0
  941. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -0
  942. package/dist/components/transcript-panel/index.d.ts +2 -1
  943. package/dist/components/transcript-panel/index.d.ts.map +1 -0
  944. package/dist/components/transcript-panel/index.js +3 -2
  945. package/dist/components/transcript-panel/index.js.map +1 -0
  946. package/dist/components/transcript-panel/transcript-panel.agent.d.ts +4 -0
  947. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -0
  948. package/dist/components/transcript-panel/transcript-panel.d.ts +10 -1
  949. package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -0
  950. package/dist/components/typing-indicator/index.d.ts.map +1 -0
  951. package/dist/components/typing-indicator/index.js.map +1 -0
  952. package/dist/components/typing-indicator/typing-indicator.d.ts.map +1 -0
  953. package/dist/components/visually-hidden/index.d.ts.map +1 -0
  954. package/dist/components/visually-hidden/index.js.map +1 -0
  955. package/dist/components/visually-hidden/visually-hidden.d.ts.map +1 -0
  956. package/dist/components/warning-stack/index.d.ts.map +1 -0
  957. package/dist/components/warning-stack/index.js.map +1 -0
  958. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -0
  959. package/dist/components/workflow/index.d.ts +2 -1
  960. package/dist/components/workflow/index.d.ts.map +1 -0
  961. package/dist/components/workflow/index.js +10 -7
  962. package/dist/components/workflow/index.js.map +1 -0
  963. package/dist/components/workflow/workflow-card.d.ts.map +1 -0
  964. package/dist/components/workflow/workflow-editor.d.ts +7 -1
  965. package/dist/components/workflow/workflow-editor.d.ts.map +1 -0
  966. package/dist/components/workflow/workflow-map.d.ts +2 -0
  967. package/dist/components/workflow/workflow-map.d.ts.map +1 -0
  968. package/dist/components/workflow/workflow-types.d.ts.map +1 -0
  969. package/dist/components/workflow/workflow.agent.d.ts +6 -0
  970. package/dist/components/workflow/workflow.agent.d.ts.map +1 -0
  971. package/dist/hooks/index.d.ts.map +1 -0
  972. package/dist/hooks/index.js.map +1 -0
  973. package/dist/hooks/use-locale.d.ts.map +1 -0
  974. package/dist/hooks/use-media-query.d.ts.map +1 -0
  975. package/dist/hooks/use-prefers-reduced-motion.d.ts.map +1 -0
  976. package/dist/hooks/use-theme.d.ts.map +1 -0
  977. package/dist/i18n/config.d.ts.map +1 -0
  978. package/dist/i18n/config.js +24 -11
  979. package/dist/i18n/config.js.map +1 -0
  980. package/dist/i18n/resources.d.ts +7 -0
  981. package/dist/i18n/resources.d.ts.map +1 -0
  982. package/dist/index.js +471 -423
  983. package/dist/index.js.map +1 -0
  984. package/dist/locales/en.json +7 -0
  985. package/dist/option/index.js.map +1 -0
  986. package/dist/patterns/leo-assistant/index.d.ts.map +1 -0
  987. package/dist/patterns/leo-assistant/index.js +1 -1
  988. package/dist/patterns/leo-assistant/index.js.map +1 -0
  989. package/dist/patterns/leo-assistant/leo-chat-surface.d.ts.map +1 -0
  990. package/dist/patterns/leo-assistant/leo-embedded.d.ts.map +1 -0
  991. package/dist/patterns/leo-assistant/leo-popout.d.ts.map +1 -0
  992. package/dist/patterns/leo-assistant/leo-sidebar.d.ts.map +1 -0
  993. package/dist/patterns/leo-assistant/leo-types.d.ts.map +1 -0
  994. package/dist/patterns/patient-shell/index.d.ts.map +1 -0
  995. package/dist/patterns/patient-shell/index.js +1 -1
  996. package/dist/patterns/patient-shell/index.js.map +1 -0
  997. package/dist/patterns/patient-shell/patient-shell.d.ts.map +1 -0
  998. package/dist/safe-html/index.js.map +1 -0
  999. package/dist/tokens/apexcharts-theme.d.ts.map +1 -0
  1000. package/dist/tokens/themes/bridges/stripe-appearance.d.ts.map +1 -0
  1001. package/dist/tokens.css +1 -1
  1002. package/package.json +26 -2
  1003. package/dist/_chunks/accordion.agent-Cz-yglRa.js +0 -17
  1004. package/dist/_chunks/agenda-tray-BqQZwiHc.js +0 -120
  1005. package/dist/_chunks/ai-prompt-input-CI27KmZ1.js +0 -380
  1006. package/dist/_chunks/audio-recorder-B-8SKgKn.js +0 -376
  1007. package/dist/_chunks/autocomplete.agent-DqOy0_1P.js +0 -372
  1008. package/dist/_chunks/breadcrumb-D6xpsP7n.js +0 -293
  1009. package/dist/_chunks/checkbox-DNK4qS2_.js +0 -116
  1010. package/dist/_chunks/checkbox-group-CWpGZEF6.js +0 -146
  1011. package/dist/_chunks/collapsible-D4LOdLxp.js +0 -67
  1012. package/dist/_chunks/combobox.agent-ByobCLJ_.js +0 -350
  1013. package/dist/_chunks/date-picker-DYXNsWmM.js +0 -1726
  1014. package/dist/_chunks/date-range-picker-BcNDJI7m.js +0 -183
  1015. package/dist/_chunks/date-time-picker-CmGiTU__.js +0 -202
  1016. package/dist/_chunks/dialog.agent-DEG_fVzG.js +0 -147
  1017. package/dist/_chunks/dropdown-menu.agent-Cry4Nmes.js +0 -17
  1018. package/dist/_chunks/freemium-paywall-CkefGLM_.js +0 -198
  1019. package/dist/_chunks/list-B1ozIjQe.js +0 -359
  1020. package/dist/_chunks/message-tray-VaLpQU5t.js +0 -303
  1021. package/dist/_chunks/navigation-menu-EVFau1O2.js +0 -180
  1022. package/dist/_chunks/notification-tray-B7U5YZYg.js +0 -328
  1023. package/dist/_chunks/number-input-DjpT_RXJ.js +0 -249
  1024. package/dist/_chunks/otp-input-De5_Ih7B.js +0 -189
  1025. package/dist/_chunks/pagination.agent-oEaqmtx5.js +0 -380
  1026. package/dist/_chunks/password-input-DJDVznWH.js +0 -193
  1027. package/dist/_chunks/phone-input-DE_39q65.js +0 -428
  1028. package/dist/_chunks/popover-C3CTUsqh.js +0 -227
  1029. package/dist/_chunks/popover.agent-C0qOx9WT.js +0 -13
  1030. package/dist/_chunks/privacy-lock-CQpgkLec.js +0 -132
  1031. package/dist/_chunks/progress-B4Of_pzz.js +0 -252
  1032. package/dist/_chunks/progress.agent-CXkHURjX.js +0 -22
  1033. package/dist/_chunks/radio-group-BIUbpWml.js +0 -89
  1034. package/dist/_chunks/resizable.agent-DBpPGNdy.js +0 -435
  1035. package/dist/_chunks/search-bar-fcGqDFW3.js +0 -397
  1036. package/dist/_chunks/search-input-BVMCONyN.js +0 -197
  1037. package/dist/_chunks/select-IY_JQa-F.js +0 -321
  1038. package/dist/_chunks/sheet.agent-DwQlBqK9.js +0 -13
  1039. package/dist/_chunks/sidebar.agent-B0fnH9CC.js +0 -17
  1040. package/dist/_chunks/slider-DjyRt3Mp.js +0 -274
  1041. package/dist/_chunks/sparkline.agent-C_xp3NRB.js +0 -238
  1042. package/dist/_chunks/stepper-accordion-CGog0JSF.js +0 -233
  1043. package/dist/_chunks/stepper-calendar-_fLOAjus.js +0 -570
  1044. package/dist/_chunks/stepper-progress-rE7tn7WY.js +0 -129
  1045. package/dist/_chunks/suggestion-chip-BNJ2M8Os.js +0 -158
  1046. package/dist/_chunks/switch-aN2EYxHh.js +0 -138
  1047. package/dist/_chunks/task-tray-BzahI5FQ.js +0 -100
  1048. package/dist/_chunks/text-area-DmKSd2DG.js +0 -152
  1049. package/dist/_chunks/text-input-CRHvl5zk.js +0 -188
  1050. package/dist/_chunks/theme-toggle-BHiMMEQN.js +0 -329
  1051. package/dist/_chunks/time-picker-D-EueWUG.js +0 -322
  1052. package/dist/_chunks/timeline-RgAIzpMd.js +0 -220
  1053. package/dist/_chunks/transcript-panel-CNbVGG9L.js +0 -266
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooth-scheme.agent-CWrQBjJM.js","sources":["../../src/components/tooth-scheme/tooth-data.ts","../../src/components/tooth-scheme/tooth-scheme.tsx","../../src/components/tooth-scheme/tooth-scheme.agent.ts"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* ToothScheme — data model + lookup tables. */\n/* */\n/* FDI ISO 3950 is the canonical internal id. This module exposes */\n/* conversion tables to Universal (ADA) and a simplified Palmer-style */\n/* quadrant+position string so consuming UIs can toggle numbering. */\n/* */\n/* Why simplified Palmer? True Palmer notation uses quadrant bracket */\n/* glyphs (\"⌐\", \"¬\", \"L\", \"J\") that do not render reliably in every */\n/* browser/font combination. We emit a readable `UR3` / `LL6` form */\n/* instead and document the deviation in the component MDX. */\n/* ------------------------------------------------------------------ */\n\n/* ------------------------------------------------------------------ */\n/* Core types */\n/* ------------------------------------------------------------------ */\n\nexport type FdiId = string; // '11'–'48' permanent, '51'–'85' primary\n\nexport type Dentition = 'permanent' | 'primary' | 'mixed';\nexport type Numbering = 'fdi' | 'universal' | 'palmer';\nexport type ToothMode = 'interactive' | 'display';\nexport type Surface = 'mesial' | 'distal' | 'occlusal' | 'buccal' | 'lingual';\nexport type ToothCondition =\n | 'caries'\n | 'filled'\n | 'crowned'\n | 'missing'\n | 'implant'\n | 'rootCanal';\n\nexport interface ToothState {\n conditions: ToothCondition[];\n surfaces: Surface[];\n notes?: string;\n}\n\nexport type ToothChart = Record<FdiId, ToothState>;\n\nexport type Anatomy = 'incisor' | 'canine' | 'premolar' | 'molar';\nexport type Arch = 'upper' | 'lower';\nexport type Side = 'right' | 'left'; // patient's side (NOT viewer's)\nexport type Quadrant = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface ToothMeta {\n fdi: FdiId;\n /** '1'–'32' for permanent, 'A'–'T' for primary. */\n universal: string;\n /** Simplified Palmer quadrant-and-position string, e.g. 'UR3', 'LL6'. */\n palmer: string;\n quadrant: Quadrant;\n /** 1–8 (permanent) or 1–5 (primary), counted from the midline outward. */\n positionInQuadrant: number;\n anatomy: Anatomy;\n arch: Arch;\n side: Side;\n dentition: 'permanent' | 'primary';\n}\n\n/* ------------------------------------------------------------------ */\n/* Layout orders */\n/* */\n/* Layout reads from the viewer's perspective, top-left to bottom- */\n/* right. The chart is FIXED in clinical convention: the patient's */\n/* right side sits on the viewer's left, regardless of document `dir`. */\n/* ------------------------------------------------------------------ */\n\n/**\n * 32 permanent teeth in visual layout order:\n * upper row: 18..11 (patient upper-right, outermost → midline), then 21..28 (upper-left, midline → outermost)\n * lower row: 48..41 (patient lower-right, outermost → midline), then 31..38 (lower-left, midline → outermost)\n */\nexport const PERMANENT_TEETH: FdiId[] = [\n // upper\n '18', '17', '16', '15', '14', '13', '12', '11',\n '21', '22', '23', '24', '25', '26', '27', '28',\n // lower\n '48', '47', '46', '45', '44', '43', '42', '41',\n '31', '32', '33', '34', '35', '36', '37', '38',\n];\n\n/**\n * 20 primary teeth in visual layout order:\n * upper row: 55..51 (upper-right outermost → midline), then 61..65\n * lower row: 85..81, then 71..75\n */\nexport const PRIMARY_TEETH: FdiId[] = [\n // upper\n '55', '54', '53', '52', '51',\n '61', '62', '63', '64', '65',\n // lower\n '85', '84', '83', '82', '81',\n '71', '72', '73', '74', '75',\n];\n\n/* ------------------------------------------------------------------ */\n/* Anatomy by position */\n/* ------------------------------------------------------------------ */\n\nfunction permanentAnatomy(positionInQuadrant: number): Anatomy {\n if (positionInQuadrant <= 2) return 'incisor';\n if (positionInQuadrant === 3) return 'canine';\n if (positionInQuadrant <= 5) return 'premolar';\n return 'molar';\n}\n\nfunction primaryAnatomy(positionInQuadrant: number): Anatomy {\n if (positionInQuadrant <= 2) return 'incisor';\n if (positionInQuadrant === 3) return 'canine';\n // Primary dentition has no premolars — positions 4 & 5 are molars.\n return 'molar';\n}\n\n/* ------------------------------------------------------------------ */\n/* Palmer helper */\n/* ------------------------------------------------------------------ */\n\nfunction palmerCode(quadrant: Quadrant, position: number): string {\n // Permanent: 1=UR, 2=UL, 3=LL, 4=LR. Primary: 5=UR, 6=UL, 7=LL, 8=LR.\n // Mapping is identical within each dentition ring; the number is what\n // changes, so we fold 5→1, 6→2, 7→3, 8→4 to derive the quadrant code.\n const normalised = ((quadrant - 1) % 4) + 1;\n const code =\n normalised === 1 ? 'UR'\n : normalised === 2 ? 'UL'\n : normalised === 3 ? 'LL'\n : 'LR';\n return `${code}${position}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Universal (ADA) conversion */\n/* */\n/* Permanent — Universal numbers 1..32 run clockwise from the */\n/* patient's upper-right 3rd molar (FDI 18 = Universal 1), across */\n/* the upper arch (18→11 = 1→8, 21→28 = 9→16), then down the left */\n/* lower arch (38→31 = 17→24) and across the right lower (41→48 = */\n/* 25→32). */\n/* */\n/* Primary — Universal letters A..T walk the same path: */\n/* 55→51 = A→E, 61→65 = F→J, 75→71 = K→O, 81→85 = P→T. */\n/* ------------------------------------------------------------------ */\n\nfunction permanentUniversal(quadrant: Quadrant, position: number): string {\n switch (quadrant) {\n case 1:\n // 18→1, 17→2, …, 11→8\n return String(1 + (8 - position));\n case 2:\n // 21→9, 22→10, …, 28→16\n return String(8 + position);\n case 3:\n // 38→17, 37→18, …, 31→24\n return String(17 + (8 - position));\n case 4:\n // 41→25, 42→26, …, 48→32\n return String(24 + position);\n default:\n return '';\n }\n}\n\nfunction primaryUniversal(quadrant: Quadrant, position: number): string {\n const letters = 'ABCDEFGHIJKLMNOPQRST';\n let index = -1;\n switch (quadrant) {\n case 5:\n // 55→A, 54→B, 53→C, 52→D, 51→E\n index = 0 + (5 - position);\n break;\n case 6:\n // 61→F, 62→G, 63→H, 64→I, 65→J\n index = 5 + (position - 1);\n break;\n case 7:\n // 75→K, 74→L, 73→M, 72→N, 71→O\n index = 10 + (5 - position);\n break;\n case 8:\n // 81→P, 82→Q, 83→R, 84→S, 85→T\n index = 15 + (position - 1);\n break;\n default:\n index = -1;\n }\n return index >= 0 ? letters[index] : '';\n}\n\n/* ------------------------------------------------------------------ */\n/* Meta builder */\n/* ------------------------------------------------------------------ */\n\nfunction buildMeta(fdi: FdiId): ToothMeta {\n const quadrant = Number(fdi[0]) as Quadrant;\n const position = Number(fdi[1]);\n const isPrimary = quadrant >= 5;\n const anatomy = isPrimary ? primaryAnatomy(position) : permanentAnatomy(position);\n const arch: Arch = quadrant === 1 || quadrant === 2 || quadrant === 5 || quadrant === 6 ? 'upper' : 'lower';\n const side: Side = quadrant === 1 || quadrant === 4 || quadrant === 5 || quadrant === 8 ? 'right' : 'left';\n const universal = isPrimary ? primaryUniversal(quadrant, position) : permanentUniversal(quadrant, position);\n const palmer = palmerCode(quadrant, position);\n return {\n fdi,\n universal,\n palmer,\n quadrant,\n positionInQuadrant: position,\n anatomy,\n arch,\n side,\n dentition: isPrimary ? 'primary' : 'permanent',\n };\n}\n\nexport const FDI_TO_META: Record<FdiId, ToothMeta> = [\n ...PERMANENT_TEETH,\n ...PRIMARY_TEETH,\n].reduce<Record<FdiId, ToothMeta>>((acc, fdi) => {\n acc[fdi] = buildMeta(fdi);\n return acc;\n}, {});\n\nexport const FDI_TO_UNIVERSAL: Record<FdiId, string> = Object.fromEntries(\n Object.entries(FDI_TO_META).map(([fdi, meta]) => [fdi, meta.universal]),\n);\n\nexport const FDI_TO_PALMER: Record<FdiId, string> = Object.fromEntries(\n Object.entries(FDI_TO_META).map(([fdi, meta]) => [fdi, meta.palmer]),\n);\n\n/* ------------------------------------------------------------------ */\n/* Condition → token + pattern */\n/* */\n/* Every condition carries BOTH a colour AND a fill pattern so */\n/* colour-blind clinicians can distinguish states in the SVG (and in */\n/* black-and-white prints) — colour is never the sole channel. */\n/* ------------------------------------------------------------------ */\n\n/** CSS variable name (without the leading `var(...)`) that drives a condition's colour. */\nexport const CONDITION_TOKENS: Record<ToothCondition, string> = {\n caries: '--destructive',\n filled: '--info',\n crowned: '--warning',\n missing: '--muted-foreground',\n implant: '--accent',\n rootCanal: '--primary',\n};\n\n/**\n * Convenience: the `fill=\"var(--destructive)\"` string ready to paste onto\n * an SVG attribute. Kept in sync with `CONDITION_TOKENS`.\n */\nexport const CONDITION_COLORS: Record<ToothCondition, string> = {\n caries: 'var(--destructive)',\n filled: 'var(--info)',\n crowned: 'var(--warning)',\n missing: 'var(--muted-foreground)',\n implant: 'var(--accent)',\n rootCanal: 'var(--primary)',\n};\n\n/** SVG `<pattern>` ids declared in `<defs>`. `missing` renders an X glyph instead of a pattern. */\nexport const CONDITION_PATTERNS: Record<ToothCondition, string> = {\n caries: 'tooth-scheme-pattern-diagonal',\n filled: 'tooth-scheme-pattern-dots',\n crowned: 'tooth-scheme-pattern-crosshatch',\n missing: 'tooth-scheme-pattern-blank',\n implant: 'tooth-scheme-pattern-vertical',\n rootCanal: 'tooth-scheme-pattern-horizontal',\n};\n\n/* ------------------------------------------------------------------ */\n/* SVG shape paths — one per anatomy class */\n/* */\n/* Artistry is deliberately minimal for this first pass: each tooth is */\n/* a rounded rectangle with a small anatomy cue (cusp notch for */\n/* molars, pointed tip for canines, narrower body for incisors). The */\n/* shapes accept a `translate(x, y)` on the enclosing `<g>` and draw */\n/* within a 30×50 bounding box (22×50 for incisors). */\n/* ------------------------------------------------------------------ */\n\nexport interface ToothShape {\n /** Visual width inside the enclosing `<g>`. */\n width: number;\n /** Visual height inside the enclosing `<g>`. */\n height: number;\n /** SVG `d` attribute for the crown outline. */\n path: string;\n /** Optional inner decorative path (occlusal surface on molars, etc.). */\n innerPath?: string;\n}\n\nexport const TOOTH_SHAPES: Record<Anatomy, ToothShape> = {\n incisor: {\n width: 22,\n height: 50,\n // Narrow rounded rectangle — slightly wider at the occlusal/biting edge.\n path: 'M4 4 C4 2 6 0 8 0 L14 0 C16 0 18 2 18 4 L20 44 C20 47 18 50 14 50 L8 50 C4 50 2 47 2 44 Z',\n },\n canine: {\n width: 26,\n height: 50,\n // Pointed cusp at the bottom — canines present a single prominent cusp.\n path: 'M4 4 C4 2 6 0 8 0 L18 0 C20 0 22 2 22 4 L24 40 L13 50 L2 40 Z',\n },\n premolar: {\n width: 28,\n height: 50,\n // Wider rounded rectangle with a subtle horizontal notch hinting at two cusps.\n path: 'M4 4 C4 2 6 0 8 0 L20 0 C22 0 24 2 24 4 L26 44 C26 47 24 50 20 50 L8 50 C4 50 2 47 2 44 Z',\n innerPath: 'M6 34 L22 34',\n },\n molar: {\n width: 32,\n height: 50,\n // Widest rounded rectangle with a cross-notch hinting at the occlusal fissure pattern.\n path: 'M4 4 C4 2 6 0 8 0 L24 0 C26 0 28 2 28 4 L30 44 C30 47 28 50 24 50 L8 50 C4 50 2 47 2 44 Z',\n innerPath: 'M6 32 L26 32 M16 22 L16 42',\n },\n};\n\n/* ------------------------------------------------------------------ */\n/* Viewport layout helpers */\n/* ------------------------------------------------------------------ */\n\nexport const TOOTH_GAP = 4;\nexport const TOOTH_ROW_GAP = 24;\nexport const TOOTH_HIT_PAD = 4;\n\nexport interface PositionedTooth {\n fdi: FdiId;\n meta: ToothMeta;\n shape: ToothShape;\n x: number;\n y: number;\n}\n\n/**\n * Produce the positioned list of teeth for a given dentition. The layout\n * is a two-row grid reading viewer-left-to-right across the upper arch,\n * then viewer-left-to-right across the lower arch. Clinical convention\n * is preserved: the patient's right sits on the viewer's left in both\n * arches, regardless of document direction.\n */\nexport function layoutTeeth(dentition: Dentition): {\n teeth: PositionedTooth[];\n width: number;\n height: number;\n} {\n const ids: FdiId[] =\n dentition === 'primary'\n ? PRIMARY_TEETH\n : dentition === 'mixed'\n ? [...PERMANENT_TEETH, ...PRIMARY_TEETH]\n : PERMANENT_TEETH;\n\n // Upper / lower partition is inferred from meta.arch.\n const upper: FdiId[] = [];\n const lower: FdiId[] = [];\n for (const id of ids) {\n const meta = FDI_TO_META[id];\n if (meta.arch === 'upper') upper.push(id);\n else lower.push(id);\n }\n\n const rowHeight = 50;\n const maxPerRow = Math.max(upper.length, lower.length);\n\n // Centre each row on the widest one.\n function positionRow(row: FdiId[], yOffset: number): PositionedTooth[] {\n const rowWidth = row.reduce((acc, id) => {\n const shape = TOOTH_SHAPES[FDI_TO_META[id].anatomy];\n return acc + shape.width + TOOTH_GAP;\n }, 0);\n const fullRowWidth = row.length > 0 ? rowWidth - TOOTH_GAP : 0;\n\n const maxRowWidth = (function computeMax(): number {\n const bigger = upper.length >= lower.length ? upper : lower;\n const biggerWidth = bigger.reduce((acc, id) => {\n const shape = TOOTH_SHAPES[FDI_TO_META[id].anatomy];\n return acc + shape.width + TOOTH_GAP;\n }, 0);\n return biggerWidth - TOOTH_GAP;\n })();\n\n const startX = (maxRowWidth - fullRowWidth) / 2;\n let cursor = startX;\n return row.map((id) => {\n const meta = FDI_TO_META[id];\n const shape = TOOTH_SHAPES[meta.anatomy];\n const tooth: PositionedTooth = {\n fdi: id,\n meta,\n shape,\n x: cursor,\n y: yOffset,\n };\n cursor += shape.width + TOOTH_GAP;\n return tooth;\n });\n }\n\n const upperRow = positionRow(upper, 0);\n const lowerRow = positionRow(lower, rowHeight + TOOTH_ROW_GAP);\n\n // Compute the true content width / height for the viewBox.\n const maxRowWidth = Math.max(\n upperRow.reduce((acc, t) => Math.max(acc, t.x + t.shape.width), 0),\n lowerRow.reduce((acc, t) => Math.max(acc, t.x + t.shape.width), 0),\n );\n\n // Fall back to a reasonable default if a row is empty.\n const width = maxRowWidth > 0 ? maxRowWidth : maxPerRow * 30;\n const height = rowHeight * 2 + TOOTH_ROW_GAP;\n\n return { teeth: [...upperRow, ...lowerRow], width, height };\n}\n\n/* ------------------------------------------------------------------ */\n/* Labels by numbering */\n/* ------------------------------------------------------------------ */\n\nexport function labelFor(id: FdiId, numbering: Numbering): string {\n switch (numbering) {\n case 'universal':\n return FDI_TO_UNIVERSAL[id] ?? id;\n case 'palmer':\n return FDI_TO_PALMER[id] ?? id;\n case 'fdi':\n default:\n return id;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Chart helpers */\n/* ------------------------------------------------------------------ */\n\nexport function emptyChart(): ToothChart {\n return {};\n}\n\nexport function chartFromConditions(\n conditions: Partial<Record<FdiId, ToothCondition[]>>,\n): ToothChart {\n const chart: ToothChart = {};\n for (const [id, list] of Object.entries(conditions)) {\n if (!list || list.length === 0) continue;\n chart[id] = { conditions: list, surfaces: [] };\n }\n return chart;\n}\n","/* ------------------------------------------------------------------ */\n/* ToothScheme — in-house SVG dental chart. */\n/* */\n/* - The ONLY Domain-Specific component without a third-party engine. */\n/* No DentalChart.js, no toothchart, no canvas — `src/docs/08-third- */\n/* party.mdx §Dental chart` flags every candidate as rejected (jQuery */\n/* dependency, abandoned, poor a11y), so we draw SVG ourselves. */\n/* */\n/* - Colour-not-alone: each `ToothCondition` has a translated label, a */\n/* token colour AND a `<pattern>` fill. Pattern ids live in */\n/* `CONDITION_PATTERNS`; the six `<pattern>` nodes live once per */\n/* mounted chart inside a single `<defs>` block. */\n/* */\n/* - Chart orientation is FIXED to clinical convention: the patient's */\n/* right side sits on the viewer's left in both upper and lower */\n/* arches, regardless of document `dir`. RTL mirrors the surrounding */\n/* chrome (labels, controls) but NEVER the anatomy — a mirrored */\n/* chart would invert every diagnosis recorded against it. */\n/* */\n/* TODO: */\n/* - SVG artistry is deliberately minimal (rounded-rect crowns with */\n/* anatomy cues). A future pass should replace each `<path>` with */\n/* a clinically-correct crown outline from the dental design team. */\n/* - Surface selection sub-control (mesial / distal / occlusal / …) */\n/* is stubbed via the data model only; the interactive surface */\n/* picker will land in a follow-up. */\n/* - Condition editing is a single-step cycle on Space/Enter — good */\n/* enough for demos and stories; a richer picker belongs in a */\n/* popover and will reuse Radix Popover when it's wired in. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n} from 'react';\nimport * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n CONDITION_COLORS,\n CONDITION_PATTERNS,\n CONDITION_TOKENS,\n FDI_TO_META,\n PERMANENT_TEETH,\n PRIMARY_TEETH,\n TOOTH_HIT_PAD,\n chartFromConditions,\n labelFor,\n layoutTeeth,\n type Dentition,\n type FdiId,\n type Numbering,\n type ToothChart,\n type ToothCondition,\n type ToothMode,\n type ToothState,\n} from './tooth-data';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface ToothSchemeProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Which teeth to render. Default `'permanent'`. */\n dentition?: Dentition;\n /** Numbering system shown on each tooth label. Default `'fdi'`. */\n numbering?: Numbering;\n /** `'interactive'` enables selection + keyboard nav; `'display'` is read-only. Default `'interactive'`. */\n mode?: ToothMode;\n /** Controlled chart state — the full `Record<FdiId, ToothState>`. */\n value?: ToothChart;\n /** Uncontrolled initial chart state. */\n defaultValue?: ToothChart;\n /** Fired whenever the chart changes — always emits FDI ids. */\n onChange?: (next: ToothChart) => void;\n /** Fired when a tooth is focused or clicked. */\n onSelect?: (toothId: FdiId) => void;\n /** Shortcut for pre-populating conditions: `{ '16': ['caries'], '36': ['filled'] }`. */\n conditions?: Partial<Record<FdiId, ToothCondition[]>>;\n /** Accessible label override for the chart region. */\n ariaLabel?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface ToothSchemeHandle {\n /** Programmatically focus a tooth by FDI id. */\n focusTooth: (id: FdiId) => void;\n /** Read the current chart state. */\n getChart: () => ToothChart;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:tooth-scheme-alfadocs',\n 'ds:inline-flex ds:flex-col',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\nconst svgVariants = cva(\n [\n 'ds:block ds:max-w-full ds:h-auto',\n 'ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\n// `group` here is load-bearing — the focus-ring <rect> below uses\n// `group-focus-visible:opacity-100` to appear when the parent <g> takes\n// focus. Without this class the selector never fires and keyboard users\n// see no focus indicator (a11y-critical-fixes.mdx).\nconst toothGroupVariants = cva(\n [\n 'ds:group ds:cursor-pointer',\n 'ds:focus:outline-none',\n 'ds:transition-[fill,stroke,opacity] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\nconst legendVariants = cva(\n [\n 'ds:flex ds:flex-wrap ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'type-meta ds:text-[var(--muted-foreground)]',\n ].join(' '),\n);\n\nconst legendItemVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:gap-[var(--spacing-xs)]',\n ].join(' '),\n);\n\nconst legendSwatchVariants = cva(\n [\n 'ds:inline-block',\n 'ds:inline-size-[0.75rem] ds:block-size-[0.75rem]',\n 'ds:rounded-[var(--radius-xs)]',\n 'ds:border ds:border-[color:var(--border)]',\n ].join(' '),\n);\n\nconst liveRegionVariants = cva(\n [\n 'ds:sr-only',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction isControlled(props: Pick<ToothSchemeProps, 'value'>): boolean {\n return props.value !== undefined;\n}\n\nfunction emptyState(): ToothState {\n return { conditions: [], surfaces: [] };\n}\n\nfunction cycleCondition(current: ToothCondition[] | undefined): ToothCondition[] {\n if (!current || current.length === 0) return ['caries'];\n return [];\n}\n\nfunction sanitiseIdSuffix(raw: string): string {\n return raw.replace(/[^a-zA-Z0-9-_]/g, '');\n}\n\n/* ------------------------------------------------------------------ */\n/* Patterns <defs> */\n/* ------------------------------------------------------------------ */\n\ninterface PatternDefsProps {\n idPrefix: string;\n}\n\nfunction PatternDefs({ idPrefix }: PatternDefsProps): JSX.Element {\n // We namespace pattern ids per-instance so multiple ToothScheme charts\n // on a page don't collide. References inside the component use\n // `${idPrefix}-${CONDITION_PATTERNS[condition]}`.\n const pid = (id: string): string => `${idPrefix}-${id}`;\n return (\n <defs>\n <pattern\n id={pid(CONDITION_PATTERNS.caries)}\n patternUnits=\"userSpaceOnUse\"\n width=\"6\"\n height=\"6\"\n patternTransform=\"rotate(45)\"\n >\n <line\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"6\"\n stroke={CONDITION_COLORS.caries}\n strokeWidth=\"2\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.filled)}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n >\n <circle cx=\"2.5\" cy=\"2.5\" r=\"1\" fill={CONDITION_COLORS.filled} />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.crowned)}\n patternUnits=\"userSpaceOnUse\"\n width=\"6\"\n height=\"6\"\n >\n <path\n d=\"M0 0 L6 6 M6 0 L0 6\"\n stroke={CONDITION_COLORS.crowned}\n strokeWidth=\"1\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.implant)}\n patternUnits=\"userSpaceOnUse\"\n width=\"4\"\n height=\"4\"\n >\n <line\n x1=\"1\"\n y1=\"0\"\n x2=\"1\"\n y2=\"4\"\n stroke={CONDITION_COLORS.implant}\n strokeWidth=\"1\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.rootCanal)}\n patternUnits=\"userSpaceOnUse\"\n width=\"4\"\n height=\"4\"\n >\n <line\n x1=\"0\"\n y1=\"1\"\n x2=\"4\"\n y2=\"1\"\n stroke={CONDITION_COLORS.rootCanal}\n strokeWidth=\"1\"\n />\n </pattern>\n {/* `missing` does not need a pattern — the renderer draws an X glyph. */}\n </defs>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Legend */\n/* ------------------------------------------------------------------ */\n\nconst ALL_CONDITIONS: ToothCondition[] = [\n 'caries',\n 'filled',\n 'crowned',\n 'missing',\n 'implant',\n 'rootCanal',\n];\n\ninterface LegendProps {\n idPrefix: string;\n}\n\nfunction Legend({ idPrefix: _idPrefix }: LegendProps): JSX.Element {\n const { t } = useTranslation();\n return (\n <ul\n className={legendVariants()}\n data-testid=\"tooth-scheme-legend\"\n aria-label={t('toothScheme.legendLabel')}\n >\n {ALL_CONDITIONS.map((condition) => (\n <li key={condition} className={legendItemVariants()}>\n <span\n className={legendSwatchVariants()}\n aria-hidden=\"true\"\n data-condition={condition}\n data-token={CONDITION_TOKENS[condition]}\n data-testid={`tooth-scheme-legend-swatch-${condition}`}\n />\n <span>{t(`toothScheme.condition.${condition}`)}</span>\n </li>\n ))}\n </ul>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const ToothScheme = forwardRef<ToothSchemeHandle, ToothSchemeProps>(\n (\n {\n id,\n dentition = 'permanent',\n numbering = 'fdi',\n mode = 'interactive',\n value,\n defaultValue,\n onChange,\n onSelect,\n conditions,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const rawId = useId();\n const idPrefix = useMemo(\n () => `ts-${sanitiseIdSuffix(rawId)}`,\n [rawId],\n );\n\n // Chart state — controlled / uncontrolled.\n const [internalChart, setInternalChart] = useState<ToothChart>(() => {\n if (value !== undefined) return value;\n if (defaultValue !== undefined) return defaultValue;\n if (conditions) return chartFromConditions(conditions);\n return {};\n });\n\n const chart: ToothChart = isControlled({ value }) ? (value as ToothChart) : internalChart;\n\n // Keep uncontrolled chart in sync when `conditions` shortcut updates.\n useEffect(() => {\n if (isControlled({ value })) return;\n if (conditions === undefined) return;\n setInternalChart(chartFromConditions(conditions));\n // Intentionally depend on a stable key — swapping the entire prop\n // snapshot is the consumer's signal to reset.\n }, [conditions, value]);\n\n // Layout.\n const layout = useMemo(() => layoutTeeth(dentition), [dentition]);\n const visibleIds = useMemo(\n () => layout.teeth.map((t) => t.fdi),\n [layout],\n );\n\n // Roving tabindex: which tooth owns `tabindex=\"0\"`.\n const firstId: FdiId | undefined = visibleIds[0];\n const [focusedId, setFocusedId] = useState<FdiId | undefined>(firstId);\n useEffect(() => {\n if (!focusedId || !visibleIds.includes(focusedId)) {\n setFocusedId(firstId);\n }\n }, [firstId, focusedId, visibleIds]);\n\n // Live-region announcement text.\n const [announcement, setAnnouncement] = useState<string>('');\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const commitChart = useCallback(\n (next: ToothChart) => {\n if (!isControlled({ value })) {\n setInternalChart(next);\n }\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const focusToothById = useCallback((id: FdiId) => {\n const svg = svgRef.current;\n if (!svg) return;\n const node = svg.querySelector<SVGGElement>(`g[data-fdi=\"${id}\"]`);\n if (node) {\n node.focus();\n setFocusedId(id);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n (): ToothSchemeHandle => ({\n focusTooth: (id: FdiId) => {\n focusToothById(id);\n },\n getChart: () => chart,\n }),\n [chart, focusToothById],\n );\n\n /* ------------------------------------------------------------- */\n /* Keyboard navigation */\n /* ------------------------------------------------------------- */\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<SVGGElement>, id: FdiId) => {\n if (mode !== 'interactive') return;\n const meta = FDI_TO_META[id];\n if (!meta) return;\n\n // Resolve the ordered list of visible ids for Left/Right.\n const order = visibleIds;\n const currentIndex = order.indexOf(id);\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const nextIndex = Math.min(order.length - 1, currentIndex + 1);\n focusToothById(order[nextIndex]);\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const nextIndex = Math.max(0, currentIndex - 1);\n focusToothById(order[nextIndex]);\n return;\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n event.preventDefault();\n // Map to the opposing arch, same FDI position where possible.\n // Permanent: 1 ↔ 4, 2 ↔ 3. Primary: 5 ↔ 8, 6 ↔ 7.\n const quadrantMap: Record<number, number> = {\n 1: 4,\n 4: 1,\n 2: 3,\n 3: 2,\n 5: 8,\n 8: 5,\n 6: 7,\n 7: 6,\n };\n const targetQuadrant = quadrantMap[meta.quadrant];\n if (!targetQuadrant) return;\n const candidate = `${targetQuadrant}${meta.positionInQuadrant}`;\n if (order.includes(candidate)) {\n focusToothById(candidate);\n }\n return;\n }\n case 'Home': {\n event.preventDefault();\n // First tooth in the same quadrant (visible).\n const inQuadrant = order.filter(\n (other) => FDI_TO_META[other].quadrant === meta.quadrant,\n );\n if (inQuadrant.length > 0) {\n focusToothById(inQuadrant[0]);\n }\n return;\n }\n case 'End': {\n event.preventDefault();\n const inQuadrant = order.filter(\n (other) => FDI_TO_META[other].quadrant === meta.quadrant,\n );\n if (inQuadrant.length > 0) {\n focusToothById(inQuadrant[inQuadrant.length - 1]);\n }\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n const prev = chart[id]?.conditions;\n const nextConditions = cycleCondition(prev);\n const next: ToothChart = { ...chart };\n if (nextConditions.length === 0) {\n delete next[id];\n setAnnouncement(t('toothScheme.deselected', { id }));\n } else {\n next[id] = {\n ...(chart[id] ?? emptyState()),\n conditions: nextConditions,\n };\n setAnnouncement(\n t('toothScheme.selected', {\n id,\n conditions: nextConditions\n .map((c) => t(`toothScheme.condition.${c}`))\n .join(', '),\n }),\n );\n }\n commitChart(next);\n onSelect?.(id);\n return;\n }\n default:\n return;\n }\n },\n [chart, commitChart, focusToothById, mode, onSelect, t, visibleIds],\n );\n\n const handleClick = useCallback(\n (id: FdiId) => {\n if (mode !== 'interactive') return;\n setFocusedId(id);\n const prev = chart[id]?.conditions;\n const nextConditions = cycleCondition(prev);\n const next: ToothChart = { ...chart };\n if (nextConditions.length === 0) {\n delete next[id];\n setAnnouncement(t('toothScheme.deselected', { id }));\n } else {\n next[id] = {\n ...(chart[id] ?? emptyState()),\n conditions: nextConditions,\n };\n setAnnouncement(\n t('toothScheme.selected', {\n id,\n conditions: nextConditions\n .map((c) => t(`toothScheme.condition.${c}`))\n .join(', '),\n }),\n );\n }\n commitChart(next);\n onSelect?.(id);\n },\n [chart, commitChart, mode, onSelect, t],\n );\n\n /* ------------------------------------------------------------- */\n /* Rendering */\n /* ------------------------------------------------------------- */\n\n const viewBoxWidth = layout.width + 4; // small padding for stroke\n const viewBoxHeight = layout.height + 4;\n\n const regionLabel = ariaLabel ?? t('toothScheme.ariaLabel');\n\n return (\n <RadixTooltip.Provider delayDuration={200}>\n <div\n role=\"region\"\n aria-label={regionLabel}\n className={[rootVariants(), className].filter(Boolean).join(' ')}\n data-component=\"tooth-scheme\"\n data-component-id={id}\n data-testid=\"tooth-scheme-root\"\n data-dentition={dentition}\n data-numbering={numbering}\n data-mode={mode}\n >\n <svg\n ref={svgRef}\n viewBox={`0 0 ${viewBoxWidth} ${viewBoxHeight}`}\n className={svgVariants()}\n role=\"group\"\n aria-label={regionLabel}\n data-testid=\"tooth-scheme-svg\"\n focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <PatternDefs idPrefix={idPrefix} />\n\n {layout.teeth.map((tooth) => {\n const state = chart[tooth.fdi];\n const primaryCondition: ToothCondition | undefined =\n state?.conditions?.[0];\n\n const anatomyLabel = t(\n `toothScheme.anatomy.${tooth.meta.anatomy}`,\n );\n const conditionSuffix = primaryCondition\n ? `, ${t(`toothScheme.condition.${primaryCondition}`)}`\n : '';\n const label = t('toothScheme.toothLabel', {\n id: labelFor(tooth.fdi, numbering),\n anatomy: anatomyLabel,\n conditionSuffix,\n });\n\n const tabIndex =\n mode === 'interactive'\n ? tooth.fdi === focusedId\n ? 0\n : -1\n : undefined;\n\n const fillColour: string =\n primaryCondition && primaryCondition !== 'missing'\n ? `url(#${idPrefix}-${CONDITION_PATTERNS[primaryCondition]})`\n : 'var(--muted)';\n\n const strokeColour: string =\n primaryCondition && primaryCondition !== 'missing'\n ? CONDITION_COLORS[primaryCondition]\n : 'var(--border)';\n\n const tooltipContent = primaryCondition\n ? `${anatomyLabel} · ${t(`toothScheme.condition.${primaryCondition}`)}`\n : anatomyLabel;\n\n const labelText = labelFor(tooth.fdi, numbering);\n\n return (\n <RadixTooltip.Root key={tooth.fdi}>\n <RadixTooltip.Trigger asChild>\n <g\n data-fdi={tooth.fdi}\n data-anatomy={tooth.meta.anatomy}\n data-arch={tooth.meta.arch}\n data-side={tooth.meta.side}\n data-quadrant={tooth.meta.quadrant}\n data-condition={primaryCondition ?? 'none'}\n data-testid={`tooth-${tooth.fdi}`}\n transform={`translate(${tooth.x}, ${tooth.y})`}\n tabIndex={tabIndex}\n role={mode === 'interactive' ? 'button' : undefined}\n aria-label={label}\n aria-pressed={\n mode === 'interactive'\n ? (primaryCondition !== undefined)\n : undefined\n }\n className={toothGroupVariants()}\n onClick={\n mode === 'interactive'\n ? () => handleClick(tooth.fdi)\n : undefined\n }\n onFocus={() => setFocusedId(tooth.fdi)}\n onKeyDown={(event) => handleKeyDown(event, tooth.fdi)}\n >\n {/* Invisible ≥44px hit target (WCAG 2.5.5). */}\n <rect\n x={-TOOTH_HIT_PAD}\n y={-TOOTH_HIT_PAD}\n width={tooth.shape.width + TOOTH_HIT_PAD * 2}\n height={tooth.shape.height + TOOTH_HIT_PAD * 2}\n fill=\"transparent\"\n />\n {/* Crown outline. */}\n <path\n d={tooth.shape.path}\n fill={fillColour}\n stroke={strokeColour}\n strokeWidth=\"1.5\"\n vectorEffect=\"non-scaling-stroke\"\n />\n {tooth.shape.innerPath ? (\n <path\n d={tooth.shape.innerPath}\n fill=\"none\"\n stroke=\"var(--muted-foreground)\"\n strokeWidth=\"0.75\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ) : null}\n {/* Focus ring — drawn as a rect so it tracks the hit\n area. `group` on the parent <g> makes this\n group-focus-visible selector fire when a keyboard\n user focuses the tooth. In forced-colors mode the\n ring falls back to `CanvasText` so it stays visible\n when `var(--ring)` is remapped. */}\n <rect\n x={-TOOTH_HIT_PAD}\n y={-TOOTH_HIT_PAD}\n width={tooth.shape.width + TOOTH_HIT_PAD * 2}\n height={tooth.shape.height + TOOTH_HIT_PAD * 2}\n fill=\"none\"\n stroke=\"var(--ring)\"\n strokeWidth=\"var(--focus-ring-width)\"\n className={[\n 'ds:opacity-0',\n 'ds:group-focus-visible:opacity-100',\n 'ds:forced-colors:stroke-[CanvasText]',\n ].join(' ')}\n data-testid={`tooth-${tooth.fdi}-focus-ring`}\n pointerEvents=\"none\"\n rx=\"4\"\n />\n {/* Missing-tooth X glyph. */}\n {primaryCondition === 'missing' ? (\n <path\n d={`M2 2 L${tooth.shape.width - 2} ${tooth.shape.height - 2} M${tooth.shape.width - 2} 2 L2 ${tooth.shape.height - 2}`}\n stroke={CONDITION_COLORS.missing}\n strokeWidth=\"2\"\n fill=\"none\"\n />\n ) : null}\n {/* Tooth number label — sits below (upper arch) or above (lower) the crown. */}\n <text\n x={tooth.shape.width / 2}\n y={\n tooth.meta.arch === 'upper'\n ? tooth.shape.height + 12\n : -4\n }\n textAnchor=\"middle\"\n fontSize=\"10\"\n fill=\"var(--muted-foreground)\"\n className=\"ds:select-none\"\n aria-hidden=\"true\"\n >\n {labelText}\n </text>\n </g>\n </RadixTooltip.Trigger>\n <RadixTooltip.Portal>\n <RadixTooltip.Content\n side=\"top\"\n sideOffset={6}\n className=\"ds:z-[var(--z-tooltip)] ds:rounded-[var(--radius-sm)] ds:bg-[var(--foreground)] ds:text-[var(--background)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[calc(var(--spacing-xs)/2)] ds:pb-[calc(var(--spacing-xs)/2)] ds:text-[length:var(--font-size-xs)]\"\n >\n {tooltipContent}\n <RadixTooltip.Arrow className=\"ds:fill-[var(--foreground)]\" />\n </RadixTooltip.Content>\n </RadixTooltip.Portal>\n </RadixTooltip.Root>\n );\n })}\n </svg>\n\n <Legend idPrefix={idPrefix} />\n\n <div\n className={liveRegionVariants()}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-testid=\"tooth-scheme-live\"\n >\n {announcement}\n </div>\n </div>\n </RadixTooltip.Provider>\n );\n },\n);\n\nToothScheme.displayName = 'ToothScheme';\n\n/* ------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------ */\n\nexport {\n rootVariants as toothSchemeVariants,\n PERMANENT_TEETH,\n PRIMARY_TEETH,\n};\nexport type {\n Dentition,\n FdiId,\n Numbering,\n ToothChart,\n ToothCondition,\n ToothMode,\n ToothState,\n} from './tooth-data';\n","import type { AgentAdapter } from '../../agent/types';\nimport type { ToothSchemeHandle } from './tooth-scheme';\n\nexport const toothSchemeAgent: AgentAdapter<ToothSchemeHandle> = {\n id: 'tooth-scheme',\n capabilities: ['pick'],\n state: {\n chart: {\n type: 'object',\n description: 'Current dental chart state — tooth conditions keyed by FDI id.',\n read: (handle) => handle.getChart(),\n },\n },\n actions: {\n focus_tooth: {\n safety: 'read',\n argsType: '{ id: FdiId }',\n description: 'Move focus to a specific tooth by FDI id.',\n invoke: (handle, args: { id: Parameters<ToothSchemeHandle['focusTooth']>[0] }) => {\n handle.focusTooth(args.id);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'tooth-scheme' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-fdi',\n description: 'Each rendered tooth `<g>` carries its FDI id as `data-fdi`. Tests still use `data-testid=\"tooth-<fdi>\"` separately.',\n },\n },\n};\n"],"names":["PERMANENT_TEETH","PRIMARY_TEETH","permanentAnatomy","positionInQuadrant","primaryAnatomy","palmerCode","quadrant","position","normalised","permanentUniversal","primaryUniversal","letters","index","buildMeta","fdi","isPrimary","anatomy","arch","side","universal","palmer","FDI_TO_META","acc","FDI_TO_UNIVERSAL","meta","FDI_TO_PALMER","CONDITION_TOKENS","CONDITION_COLORS","CONDITION_PATTERNS","TOOTH_SHAPES","TOOTH_GAP","TOOTH_ROW_GAP","TOOTH_HIT_PAD","layoutTeeth","dentition","ids","upper","lower","id","rowHeight","maxPerRow","positionRow","row","yOffset","rowWidth","shape","fullRowWidth","cursor","tooth","upperRow","lowerRow","maxRowWidth","t","width","height","labelFor","numbering","emptyChart","chartFromConditions","conditions","chart","list","rootVariants","cva","svgVariants","toothGroupVariants","legendVariants","legendItemVariants","legendSwatchVariants","liveRegionVariants","isControlled","props","emptyState","cycleCondition","current","sanitiseIdSuffix","raw","PatternDefs","idPrefix","pid","jsx","ALL_CONDITIONS","Legend","_idPrefix","useTranslation","condition","ToothScheme","forwardRef","mode","value","defaultValue","onChange","onSelect","ariaLabel","className","ref","rawId","useId","useMemo","internalChart","setInternalChart","useState","useEffect","layout","visibleIds","firstId","focusedId","setFocusedId","announcement","setAnnouncement","svgRef","useRef","commitChart","useCallback","next","focusToothById","svg","node","useImperativeHandle","handleKeyDown","event","order","currentIndex","nextIndex","targetQuadrant","candidate","inQuadrant","other","prev","_a","nextConditions","c","handleClick","viewBoxWidth","viewBoxHeight","regionLabel","RadixTooltip","jsxs","state","primaryCondition","anatomyLabel","conditionSuffix","label","tabIndex","fillColour","strokeColour","tooltipContent","labelText","toothSchemeAgent","handle","args"],"mappings":";;;;;AAwEO,MAAMA,IAA2B;AAAA;AAAA,EAEtC;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1C;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA;AAAA,EAE1C;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1C;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAC5C,GAOaC,IAAyB;AAAA;AAAA,EAEpC;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EACxB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA;AAAA,EAExB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EACxB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAC1B;AAMA,SAASC,GAAiBC,GAAqC;AAC7D,SAAIA,KAAsB,IAAU,YAChCA,MAAuB,IAAU,WACjCA,KAAsB,IAAU,aAC7B;AACT;AAEA,SAASC,GAAeD,GAAqC;AAC3D,SAAIA,KAAsB,IAAU,YAChCA,MAAuB,IAAU,WAE9B;AACT;AAMA,SAASE,GAAWC,GAAoBC,GAA0B;AAIhE,QAAMC,KAAeF,IAAW,KAAK,IAAK;AAM1C,SAAO,GAJLE,MAAe,IAAI,OACjBA,MAAe,IAAI,OACnBA,MAAe,IAAI,OACnB,IACU,GAAGD,CAAQ;AAC3B;AAeA,SAASE,GAAmBH,GAAoBC,GAA0B;AACxE,UAAQD,GAAA;AAAA,IACN,KAAK;AAEH,aAAO,OAAO,KAAK,IAAIC,EAAS;AAAA,IAClC,KAAK;AAEH,aAAO,OAAO,IAAIA,CAAQ;AAAA,IAC5B,KAAK;AAEH,aAAO,OAAO,MAAM,IAAIA,EAAS;AAAA,IACnC,KAAK;AAEH,aAAO,OAAO,KAAKA,CAAQ;AAAA,IAC7B;AACE,aAAO;AAAA,EAAA;AAEb;AAEA,SAASG,GAAiBJ,GAAoBC,GAA0B;AACtE,QAAMI,IAAU;AAChB,MAAIC,IAAQ;AACZ,UAAQN,GAAA;AAAA,IACN,KAAK;AAEH,MAAAM,IAAQ,KAAK,IAAIL;AACjB;AAAA,IACF,KAAK;AAEH,MAAAK,IAAQ,KAAKL,IAAW;AACxB;AAAA,IACF,KAAK;AAEH,MAAAK,IAAQ,MAAM,IAAIL;AAClB;AAAA,IACF,KAAK;AAEH,MAAAK,IAAQ,MAAML,IAAW;AACzB;AAAA,IACF;AACE,MAAAK,IAAQ;AAAA,EAAA;AAEZ,SAAOA,KAAS,IAAID,EAAQC,CAAK,IAAI;AACvC;AAMA,SAASC,GAAUC,GAAuB;AACxC,QAAMR,IAAW,OAAOQ,EAAI,CAAC,CAAC,GACxBP,IAAW,OAAOO,EAAI,CAAC,CAAC,GACxBC,IAAYT,KAAY,GACxBU,IAAUD,IAAYX,GAAeG,CAAQ,IAAIL,GAAiBK,CAAQ,GAC1EU,IAAaX,MAAa,KAAKA,MAAa,KAAKA,MAAa,KAAKA,MAAa,IAAI,UAAU,SAC9FY,IAAaZ,MAAa,KAAKA,MAAa,KAAKA,MAAa,KAAKA,MAAa,IAAI,UAAU,QAC9Fa,IAAYJ,IAAYL,GAAiBJ,GAAUC,CAAQ,IAAIE,GAAmBH,GAAUC,CAAQ,GACpGa,IAASf,GAAWC,GAAUC,CAAQ;AAC5C,SAAO;AAAA,IACL,KAAAO;AAAA,IACA,WAAAK;AAAA,IACA,QAAAC;AAAA,IACA,UAAAd;AAAA,IACA,oBAAoBC;AAAA,IACpB,SAAAS;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,WAAWH,IAAY,YAAY;AAAA,EAAA;AAEvC;AAEO,MAAMM,IAAwC;AAAA,EACnD,GAAGrB;AAAA,EACH,GAAGC;AACL,EAAE,OAAiC,CAACqB,GAAKR,OACvCQ,EAAIR,CAAG,IAAID,GAAUC,CAAG,GACjBQ,IACN,CAAA,CAAE,GAEQC,KAA0C,OAAO;AAAA,EAC5D,OAAO,QAAQF,CAAW,EAAE,IAAI,CAAC,CAACP,GAAKU,CAAI,MAAM,CAACV,GAAKU,EAAK,SAAS,CAAC;AACxE,GAEaC,KAAuC,OAAO;AAAA,EACzD,OAAO,QAAQJ,CAAW,EAAE,IAAI,CAAC,CAACP,GAAKU,CAAI,MAAM,CAACV,GAAKU,EAAK,MAAM,CAAC;AACrE,GAWaE,KAAmD;AAAA,EAC9D,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb,GAMaC,IAAmD;AAAA,EAC9D,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb,GAGaC,IAAqD;AAAA,EAChE,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb,GAuBaC,IAA4C;AAAA,EACvD,SAAS;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA,IAER,MAAM;AAAA,EAAA;AAAA,EAER,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA,IAER,MAAM;AAAA,EAAA;AAAA,EAER,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA,IAER,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAAA,EAEb,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA,IAER,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAEf,GAMaC,IAAY,GACZC,KAAgB,IAChBC,IAAgB;AAiBtB,SAASC,GAAYC,GAI1B;AACA,QAAMC,IACJD,MAAc,YACVjC,IACAiC,MAAc,UACZ,CAAC,GAAGlC,GAAiB,GAAGC,CAAa,IACrCD,GAGFoC,IAAiB,CAAA,GACjBC,IAAiB,CAAA;AACvB,aAAWC,KAAMH;AAEf,IADad,EAAYiB,CAAE,EAClB,SAAS,UAASF,EAAM,KAAKE,CAAE,IACnCD,EAAM,KAAKC,CAAE;AAGpB,QAAMC,IAAY,IACZC,IAAY,KAAK,IAAIJ,EAAM,QAAQC,EAAM,MAAM;AAGrD,WAASI,EAAYC,GAAcC,GAAoC;AACrE,UAAMC,IAAWF,EAAI,OAAO,CAACpB,GAAKgB,MAAO;AACvC,YAAMO,IAAQhB,EAAaR,EAAYiB,CAAE,EAAE,OAAO;AAClD,aAAOhB,IAAMuB,EAAM,QAAQf;AAAA,IAC7B,GAAG,CAAC,GACEgB,IAAeJ,EAAI,SAAS,IAAIE,IAAWd,IAAY;AAY7D,QAAIiB,MAViB,WAA8B;AAMjD,cALeX,EAAM,UAAUC,EAAM,SAASD,IAAQC,GAC3B,OAAO,CAACf,GAAKgB,MAAO;AAC7C,cAAMO,IAAQhB,EAAaR,EAAYiB,CAAE,EAAE,OAAO;AAClD,eAAOhB,IAAMuB,EAAM,QAAQf;AAAA,MAC7B,GAAG,CAAC,IACiBA;AAAA,IACvB,GAAA,IAE8BgB,KAAgB;AAE9C,WAAOJ,EAAI,IAAI,CAACJ,MAAO;AACrB,YAAMd,IAAOH,EAAYiB,CAAE,GACrBO,IAAQhB,EAAaL,EAAK,OAAO,GACjCwB,IAAyB;AAAA,QAC7B,KAAKV;AAAA,QACL,MAAAd;AAAA,QACA,OAAAqB;AAAA,QACA,GAAGE;AAAA,QACH,GAAGJ;AAAA,MAAA;AAEL,aAAAI,KAAUF,EAAM,QAAQf,GACjBkB;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAMC,IAAWR,EAAYL,GAAO,CAAC,GAC/Bc,IAAWT,EAAYJ,GAAOE,IAAYR,EAAa,GAGvDoB,IAAc,KAAK;AAAA,IACvBF,EAAS,OAAO,CAAC3B,GAAK8B,MAAM,KAAK,IAAI9B,GAAK8B,EAAE,IAAIA,EAAE,MAAM,KAAK,GAAG,CAAC;AAAA,IACjEF,EAAS,OAAO,CAAC5B,GAAK8B,MAAM,KAAK,IAAI9B,GAAK8B,EAAE,IAAIA,EAAE,MAAM,KAAK,GAAG,CAAC;AAAA,EAAA,GAI7DC,IAAQF,IAAc,IAAIA,IAAcX,IAAY,IACpDc,IAASf,IAAY,IAAIR;AAE/B,SAAO,EAAE,OAAO,CAAC,GAAGkB,GAAU,GAAGC,CAAQ,GAAG,OAAAG,GAAO,QAAAC,EAAA;AACrD;AAMO,SAASC,GAASjB,GAAWkB,GAA8B;AAChE,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAOjC,GAAiBe,CAAE,KAAKA;AAAA,IACjC,KAAK;AACH,aAAOb,GAAca,CAAE,KAAKA;AAAA,IAC9B,KAAK;AAAA,IACL;AACE,aAAOA;AAAA,EAAA;AAEb;AAMO,SAASmB,KAAyB;AACvC,SAAO,CAAA;AACT;AAEO,SAASC,GACdC,GACY;AACZ,QAAMC,IAAoB,CAAA;AAC1B,aAAW,CAACtB,GAAIuB,CAAI,KAAK,OAAO,QAAQF,CAAU;AAChD,IAAI,CAACE,KAAQA,EAAK,WAAW,MAC7BD,EAAMtB,CAAE,IAAI,EAAE,YAAYuB,GAAM,UAAU,GAAC;AAE7C,SAAOD;AACT;ACzVA,MAAME,KAAeC;AAAA,EACnB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMC,KAAcD;AAAA,EAClB;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAMME,KAAqBF;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMG,KAAiBH;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMI,KAAqBJ;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMK,KAAuBL;AAAA,EAC3B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ,GAEMM,KAAqBN;AAAA,EACzB;AAAA,IACE;AAAA,EAAA,EACA,KAAK,GAAG;AACZ;AAMA,SAASO,EAAaC,GAAiD;AACrE,SAAOA,EAAM,UAAU;AACzB;AAEA,SAASC,KAAyB;AAChC,SAAO,EAAE,YAAY,IAAI,UAAU,CAAA,EAAC;AACtC;AAEA,SAASC,GAAeC,GAAyD;AAC/E,SAAI,CAACA,KAAWA,EAAQ,WAAW,IAAU,CAAC,QAAQ,IAC/C,CAAA;AACT;AAEA,SAASC,GAAiBC,GAAqB;AAC7C,SAAOA,EAAI,QAAQ,mBAAmB,EAAE;AAC1C;AAUA,SAASC,GAAY,EAAE,UAAAC,KAA2C;AAIhE,QAAMC,IAAM,CAACzC,MAAuB,GAAGwC,CAAQ,IAAIxC,CAAE;AACrD,2BACG,QAAA,EACC,UAAA;AAAA,IAAA,gBAAA0C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAID,EAAInD,EAAmB,MAAM;AAAA,QACjC,cAAa;AAAA,QACb,OAAM;AAAA,QACN,QAAO;AAAA,QACP,kBAAiB;AAAA,QAEjB,UAAA,gBAAAoD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,QAAQrD,EAAiB;AAAA,YACzB,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,IAEF,gBAAAqD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAID,EAAInD,EAAmB,MAAM;AAAA,QACjC,cAAa;AAAA,QACb,OAAM;AAAA,QACN,QAAO;AAAA,QAEP,UAAA,gBAAAoD,EAAC,UAAA,EAAO,IAAG,OAAM,IAAG,OAAM,GAAE,KAAI,MAAMrD,EAAiB,OAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjE,gBAAAqD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAID,EAAInD,EAAmB,OAAO;AAAA,QAClC,cAAa;AAAA,QACb,OAAM;AAAA,QACN,QAAO;AAAA,QAEP,UAAA,gBAAAoD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAQrD,EAAiB;AAAA,YACzB,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,IAEF,gBAAAqD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAID,EAAInD,EAAmB,OAAO;AAAA,QAClC,cAAa;AAAA,QACb,OAAM;AAAA,QACN,QAAO;AAAA,QAEP,UAAA,gBAAAoD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,QAAQrD,EAAiB;AAAA,YACzB,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,IAEF,gBAAAqD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAID,EAAInD,EAAmB,SAAS;AAAA,QACpC,cAAa;AAAA,QACb,OAAM;AAAA,QACN,QAAO;AAAA,QAEP,UAAA,gBAAAoD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,QAAQrD,EAAiB;AAAA,YACzB,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EACF,GAEF;AAEJ;AAMA,MAAMsD,KAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMA,SAASC,GAAO,EAAE,UAAUC,KAAuC;AACjE,QAAM,EAAE,GAAA/B,EAAA,IAAMgC,GAAA;AACd,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd,GAAA;AAAA,MACX,eAAY;AAAA,MACZ,cAAYd,EAAE,yBAAyB;AAAA,MAEtC,UAAA6B,GAAe,IAAI,CAACI,wBAClB,MAAA,EAAmB,WAAWlB,MAC7B,UAAA;AAAA,QAAA,gBAAAa;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWZ,GAAA;AAAA,YACX,eAAY;AAAA,YACZ,kBAAgBiB;AAAA,YAChB,cAAY3D,GAAiB2D,CAAS;AAAA,YACtC,eAAa,8BAA8BA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,0BAErD,QAAA,EAAM,UAAAjC,EAAE,yBAAyBiC,CAAS,EAAE,EAAA,CAAE;AAAA,MAAA,EAAA,GARxCA,CAST,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;AAMO,MAAMC,KAAcC;AAAA,EACzB,CACE;AAAA,IACE,IAAAjD;AAAA,IACA,WAAAJ,IAAY;AAAA,IACZ,WAAAsB,IAAY;AAAA,IACZ,MAAAgC,IAAO;AAAA,IACP,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAjC;AAAA,IACA,WAAAkC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,MACG;AACH,UAAM,EAAE,GAAA3C,EAAA,IAAMgC,GAAA,GAERY,IAAQC,GAAA,GACRnB,IAAWoB;AAAA,MACf,MAAM,MAAMvB,GAAiBqB,CAAK,CAAC;AAAA,MACnC,CAACA,CAAK;AAAA,IAAA,GAIF,CAACG,GAAeC,CAAgB,IAAIC,EAAqB,MACzDZ,MAAU,SAAkBA,IAC5BC,MAAiB,SAAkBA,IACnC/B,IAAmBD,GAAoBC,CAAU,IAC9C,CAAA,CACR,GAEKC,IAAoBU,EAAa,EAAE,OAAAmB,EAAA,CAAO,IAAKA,IAAuBU;AAG5E,IAAAG,GAAU,MAAM;AACd,MAAIhC,EAAa,EAAE,OAAAmB,EAAA,CAAO,KACtB9B,MAAe,UACnByC,EAAiB1C,GAAoBC,CAAU,CAAC;AAAA,IAGlD,GAAG,CAACA,GAAY8B,CAAK,CAAC;AAGtB,UAAMc,IAASL,EAAQ,MAAMjE,GAAYC,CAAS,GAAG,CAACA,CAAS,CAAC,GAC1DsE,IAAaN;AAAA,MACjB,MAAMK,EAAO,MAAM,IAAI,CAACnD,MAAMA,EAAE,GAAG;AAAA,MACnC,CAACmD,CAAM;AAAA,IAAA,GAIHE,IAA6BD,EAAW,CAAC,GACzC,CAACE,GAAWC,CAAY,IAAIN,EAA4BI,CAAO;AACrE,IAAAH,GAAU,MAAM;AACd,OAAI,CAACI,KAAa,CAACF,EAAW,SAASE,CAAS,MAC9CC,EAAaF,CAAO;AAAA,IAExB,GAAG,CAACA,GAASC,GAAWF,CAAU,CAAC;AAGnC,UAAM,CAACI,GAAcC,CAAe,IAAIR,EAAiB,EAAE,GAErDS,IAASC,GAAsB,IAAI,GAEnCC,IAAcC;AAAA,MAClB,CAACC,MAAqB;AACpB,QAAK5C,EAAa,EAAE,OAAAmB,EAAA,CAAO,KACzBW,EAAiBc,CAAI,GAEvBvB,KAAA,QAAAA,EAAWuB;AAAA,MACb;AAAA,MACA,CAACvB,GAAUF,CAAK;AAAA,IAAA,GAGZ0B,IAAiBF,EAAY,CAAC3E,MAAc;AAChD,YAAM8E,IAAMN,EAAO;AACnB,UAAI,CAACM,EAAK;AACV,YAAMC,IAAOD,EAAI,cAA2B,eAAe9E,CAAE,IAAI;AACjE,MAAI+E,MACFA,EAAK,MAAA,GACLV,EAAarE,CAAE;AAAA,IAEnB,GAAG,CAAA,CAAE;AAEL,IAAAgF;AAAA,MACEvB;AAAA,MACA,OAA0B;AAAA,QACxB,YAAY,CAACzD,MAAc;AACzB,UAAA6E,EAAe7E,CAAE;AAAA,QACnB;AAAA,QACA,UAAU,MAAMsB;AAAA,MAAA;AAAA,MAElB,CAACA,GAAOuD,CAAc;AAAA,IAAA;AAOxB,UAAMI,KAAgBN;AAAA,MACpB,CAACO,GAAmClF,MAAc;;AAChD,YAAIkD,MAAS,cAAe;AAC5B,cAAMhE,IAAOH,EAAYiB,CAAE;AAC3B,YAAI,CAACd,EAAM;AAGX,cAAMiG,IAAQjB,GACRkB,IAAeD,EAAM,QAAQnF,CAAE;AAErC,gBAAQkF,EAAM,KAAA;AAAA,UACZ,KAAK,cAAc;AACjB,YAAAA,EAAM,eAAA;AACN,kBAAMG,IAAY,KAAK,IAAIF,EAAM,SAAS,GAAGC,IAAe,CAAC;AAC7D,YAAAP,EAAeM,EAAME,CAAS,CAAC;AAC/B;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAChB,YAAAH,EAAM,eAAA;AACN,kBAAMG,IAAY,KAAK,IAAI,GAAGD,IAAe,CAAC;AAC9C,YAAAP,EAAeM,EAAME,CAAS,CAAC;AAC/B;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK,aAAa;AAChB,YAAAH,EAAM,eAAA;AAaN,kBAAMI,IAVsC;AAAA,cAC1C,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,cACH,GAAG;AAAA,YAAA,EAE8BpG,EAAK,QAAQ;AAChD,gBAAI,CAACoG,EAAgB;AACrB,kBAAMC,IAAY,GAAGD,CAAc,GAAGpG,EAAK,kBAAkB;AAC7D,YAAIiG,EAAM,SAASI,CAAS,KAC1BV,EAAeU,CAAS;AAE1B;AAAA,UACF;AAAA,UACA,KAAK,QAAQ;AACX,YAAAL,EAAM,eAAA;AAEN,kBAAMM,IAAaL,EAAM;AAAA,cACvB,CAACM,MAAU1G,EAAY0G,CAAK,EAAE,aAAavG,EAAK;AAAA,YAAA;AAElD,YAAIsG,EAAW,SAAS,KACtBX,EAAeW,EAAW,CAAC,CAAC;AAE9B;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,YAAAN,EAAM,eAAA;AACN,kBAAMM,IAAaL,EAAM;AAAA,cACvB,CAACM,MAAU1G,EAAY0G,CAAK,EAAE,aAAavG,EAAK;AAAA,YAAA;AAElD,YAAIsG,EAAW,SAAS,KACtBX,EAAeW,EAAWA,EAAW,SAAS,CAAC,CAAC;AAElD;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK,SAAS;AACZ,YAAAN,EAAM,eAAA;AACN,kBAAMQ,KAAOC,IAAArE,EAAMtB,CAAE,MAAR,gBAAA2F,EAAW,YAClBC,IAAiBzD,GAAeuD,CAAI,GACpCd,IAAmB,EAAE,GAAGtD,EAAA;AAC9B,YAAIsE,EAAe,WAAW,KAC5B,OAAOhB,EAAK5E,CAAE,GACduE,EAAgBzD,EAAE,0BAA0B,EAAE,IAAAd,EAAAA,CAAI,CAAC,MAEnD4E,EAAK5E,CAAE,IAAI;AAAA,cACT,GAAIsB,EAAMtB,CAAE,KAAKkC,GAAA;AAAA,cACjB,YAAY0D;AAAA,YAAA,GAEdrB;AAAA,cACEzD,EAAE,wBAAwB;AAAA,gBACxB,IAAAd;AAAAA,gBACA,YAAY4F,EACT,IAAI,CAACC,MAAM/E,EAAE,yBAAyB+E,CAAC,EAAE,CAAC,EAC1C,KAAK,IAAI;AAAA,cAAA,CACb;AAAA,YAAA,IAGLnB,EAAYE,CAAI,GAChBtB,KAAA,QAAAA,EAAWtD;AACX;AAAA,UACF;AAAA,UACA;AACE;AAAA,QAAA;AAAA,MAEN;AAAA,MACA,CAACsB,GAAOoD,GAAaG,GAAgB3B,GAAMI,GAAUxC,GAAGoD,CAAU;AAAA,IAAA,GAG9D4B,KAAcnB;AAAA,MAClB,CAAC3E,MAAc;;AACb,YAAIkD,MAAS,cAAe;AAC5B,QAAAmB,EAAarE,CAAE;AACf,cAAM0F,KAAOC,IAAArE,EAAMtB,CAAE,MAAR,gBAAA2F,EAAW,YAClBC,IAAiBzD,GAAeuD,CAAI,GACpCd,IAAmB,EAAE,GAAGtD,EAAA;AAC9B,QAAIsE,EAAe,WAAW,KAC5B,OAAOhB,EAAK5E,CAAE,GACduE,EAAgBzD,EAAE,0BAA0B,EAAE,IAAAd,EAAAA,CAAI,CAAC,MAEnD4E,EAAK5E,CAAE,IAAI;AAAA,UACT,GAAIsB,EAAMtB,CAAE,KAAKkC,GAAA;AAAA,UACjB,YAAY0D;AAAA,QAAA,GAEdrB;AAAA,UACEzD,EAAE,wBAAwB;AAAA,YACxB,IAAAd;AAAAA,YACA,YAAY4F,EACT,IAAI,CAACC,MAAM/E,EAAE,yBAAyB+E,CAAC,EAAE,CAAC,EAC1C,KAAK,IAAI;AAAA,UAAA,CACb;AAAA,QAAA,IAGLnB,EAAYE,CAAI,GAChBtB,KAAA,QAAAA,EAAWtD;AAAAA,MACb;AAAA,MACA,CAACsB,GAAOoD,GAAaxB,GAAMI,GAAUxC,CAAC;AAAA,IAAA,GAOlCiF,KAAe9B,EAAO,QAAQ,GAC9B+B,KAAgB/B,EAAO,SAAS,GAEhCgC,KAAc1C,KAAazC,EAAE,uBAAuB;AAE1D,WACE,gBAAA4B,EAACwD,EAAa,UAAb,EAAsB,eAAe,KACpC,UAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAYF;AAAA,QACZ,WAAW,CAACzE,GAAA,GAAgBgC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QAC/D,kBAAe;AAAA,QACf,qBAAmBxD;AAAA,QACnB,eAAY;AAAA,QACZ,kBAAgBJ;AAAA,QAChB,kBAAgBsB;AAAA,QAChB,aAAWgC;AAAA,QAEX,UAAA;AAAA,UAAA,gBAAAiD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK3B;AAAA,cACL,SAAS,OAAOuB,EAAY,IAAIC,EAAa;AAAA,cAC7C,WAAWtE,GAAA;AAAA,cACX,MAAK;AAAA,cACL,cAAYuE;AAAA,cACZ,eAAY;AAAA,cACZ,WAAU;AAAA,cACV,OAAM;AAAA,cAEN,UAAA;AAAA,gBAAA,gBAAAvD,EAACH,MAAY,UAAAC,GAAoB;AAAA,gBAEhCyB,EAAO,MAAM,IAAI,CAACvD,MAAU;;AAC3B,wBAAM0F,IAAQ9E,EAAMZ,EAAM,GAAG,GACvB2F,KACJV,KAAAS,KAAA,gBAAAA,EAAO,eAAP,gBAAAT,GAAoB,IAEhBW,IAAexF;AAAA,oBACnB,uBAAuBJ,EAAM,KAAK,OAAO;AAAA,kBAAA,GAErC6F,IAAkBF,IACpB,KAAKvF,EAAE,yBAAyBuF,CAAgB,EAAE,CAAC,KACnD,IACEG,IAAQ1F,EAAE,0BAA0B;AAAA,oBACxC,IAAIG,GAASP,EAAM,KAAKQ,CAAS;AAAA,oBACjC,SAASoF;AAAA,oBACT,iBAAAC;AAAA,kBAAA,CACD,GAEKE,IACJvD,MAAS,gBACLxC,EAAM,QAAQ0D,IACZ,IACA,KACF,QAEAsC,IACJL,KAAoBA,MAAqB,YACrC,QAAQ7D,CAAQ,IAAIlD,EAAmB+G,CAAgB,CAAC,MACxD,gBAEAM,IACJN,KAAoBA,MAAqB,YACrChH,EAAiBgH,CAAgB,IACjC,iBAEAO,IAAiBP,IACnB,GAAGC,CAAY,MAAMxF,EAAE,yBAAyBuF,CAAgB,EAAE,CAAC,KACnEC,GAEEO,KAAY5F,GAASP,EAAM,KAAKQ,CAAS;AAE/C,yBACE,gBAAAiF,EAACD,EAAa,MAAb,EACC,UAAA;AAAA,oBAAA,gBAAAxD,EAACwD,EAAa,SAAb,EAAqB,SAAO,IAC3B,UAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,YAAUzF,EAAM;AAAA,wBAChB,gBAAcA,EAAM,KAAK;AAAA,wBACzB,aAAWA,EAAM,KAAK;AAAA,wBACtB,aAAWA,EAAM,KAAK;AAAA,wBACtB,iBAAeA,EAAM,KAAK;AAAA,wBAC1B,kBAAgB2F,KAAoB;AAAA,wBACpC,eAAa,SAAS3F,EAAM,GAAG;AAAA,wBAC/B,WAAW,aAAaA,EAAM,CAAC,KAAKA,EAAM,CAAC;AAAA,wBAC3C,UAAA+F;AAAA,wBACA,MAAMvD,MAAS,gBAAgB,WAAW;AAAA,wBAC1C,cAAYsD;AAAA,wBACZ,gBACEtD,MAAS,gBACJmD,MAAqB,SACtB;AAAA,wBAEN,WAAW1E,GAAA;AAAA,wBACX,SACEuB,MAAS,gBACL,MAAM4C,GAAYpF,EAAM,GAAG,IAC3B;AAAA,wBAEN,SAAS,MAAM2D,EAAa3D,EAAM,GAAG;AAAA,wBACrC,WAAW,CAACwE,OAAUD,GAAcC,IAAOxE,EAAM,GAAG;AAAA,wBAGpD,UAAA;AAAA,0BAAA,gBAAAgC;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAG,CAAChD;AAAA,8BACJ,GAAG,CAACA;AAAA,8BACJ,OAAOgB,EAAM,MAAM,QAAQhB,IAAgB;AAAA,8BAC3C,QAAQgB,EAAM,MAAM,SAAShB,IAAgB;AAAA,8BAC7C,MAAK;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAGP,gBAAAgD;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAGhC,EAAM,MAAM;AAAA,8BACf,MAAMgG;AAAA,8BACN,QAAQC;AAAA,8BACR,aAAY;AAAA,8BACZ,cAAa;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAEdjG,EAAM,MAAM,YACX,gBAAAgC;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAGhC,EAAM,MAAM;AAAA,8BACf,MAAK;AAAA,8BACL,QAAO;AAAA,8BACP,aAAY;AAAA,8BACZ,cAAa;AAAA,4BAAA;AAAA,0BAAA,IAEb;AAAA,0BAOJ,gBAAAgC;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAG,CAAChD;AAAA,8BACJ,GAAG,CAACA;AAAA,8BACJ,OAAOgB,EAAM,MAAM,QAAQhB,IAAgB;AAAA,8BAC3C,QAAQgB,EAAM,MAAM,SAAShB,IAAgB;AAAA,8BAC7C,MAAK;AAAA,8BACL,QAAO;AAAA,8BACP,aAAY;AAAA,8BACZ,WAAW;AAAA,gCACT;AAAA,gCACA;AAAA,gCACA;AAAA,8BAAA,EACA,KAAK,GAAG;AAAA,8BACV,eAAa,SAASgB,EAAM,GAAG;AAAA,8BAC/B,eAAc;AAAA,8BACd,IAAG;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAGJ2F,MAAqB,YACpB,gBAAA3D;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAG,SAAShC,EAAM,MAAM,QAAQ,CAAC,IAAIA,EAAM,MAAM,SAAS,CAAC,KAAKA,EAAM,MAAM,QAAQ,CAAC,SAASA,EAAM,MAAM,SAAS,CAAC;AAAA,8BACpH,QAAQrB,EAAiB;AAAA,8BACzB,aAAY;AAAA,8BACZ,MAAK;AAAA,4BAAA;AAAA,0BAAA,IAEL;AAAA,0BAEJ,gBAAAqD;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,GAAGhC,EAAM,MAAM,QAAQ;AAAA,8BACvB,GACEA,EAAM,KAAK,SAAS,UAChBA,EAAM,MAAM,SAAS,KACrB;AAAA,8BAEN,YAAW;AAAA,8BACX,UAAS;AAAA,8BACT,MAAK;AAAA,8BACL,WAAU;AAAA,8BACV,eAAY;AAAA,8BAEX,UAAAmG;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACH;AAAA,sBAAA;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAAnE,EAACwD,EAAa,QAAb,EACC,UAAA,gBAAAC;AAAA,sBAACD,EAAa;AAAA,sBAAb;AAAA,wBACC,MAAK;AAAA,wBACL,YAAY;AAAA,wBACZ,WAAU;AAAA,wBAET,UAAA;AAAA,0BAAAU;AAAA,0BACD,gBAAAlE,EAACwD,EAAa,OAAb,EAAmB,WAAU,8BAAA,CAA8B;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA,EAC9D,CACF;AAAA,kBAAA,EAAA,GAhHsBxF,EAAM,GAiH9B;AAAA,gBAEJ,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGH,gBAAAgC,EAACE,MAAO,UAAAJ,GAAoB;AAAA,UAE5B,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWX,GAAA;AAAA,cACX,aAAU;AAAA,cACV,eAAY;AAAA,cACZ,eAAY;AAAA,cAEX,UAAAuC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAtB,GAAY,cAAc;AClvBnB,MAAM8D,KAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,cAAc,CAAC,MAAM;AAAA,EACrB,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,EACpC;AAAA,EAEF,SAAS;AAAA,IACP,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,aAAa;AAAA,MACb,QAAQ,CAACA,GAAQC,MAAiE;AAChF,QAAAD,EAAO,WAAWC,EAAK,EAAE;AAAA,MAC3B;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM,EAAE,MAAM,kBAAkB,OAAO,eAAA;AAAA,IACvC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,IAEf,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
@@ -0,0 +1,337 @@
1
+ import { jsxs as f, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as $, useState as E, useRef as S, useId as K, useMemo as I, useCallback as C, useLayoutEffect as A, useImperativeHandle as _, Fragment as j } from "react";
3
+ import { c as O } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as V } from "react-i18next";
5
+ import { u as D } from "./index-CJE9uQmb.js";
6
+ import { S as F } from "./search-input-Xw3cdWXW.js";
7
+ const H = O(
8
+ [
9
+ "ds:flex ds:flex-col ds:w-full ds:min-h-0",
10
+ "ds:rounded-[var(--radius-md)] ds:border ds:border-border",
11
+ "ds:bg-background",
12
+ "ds:focus-within:border-[color:var(--primary)]"
13
+ ].join(" "),
14
+ {
15
+ variants: {
16
+ size: {
17
+ sm: "ds:text-[length:var(--font-size-sm)]",
18
+ md: "ds:text-[length:var(--font-size-base)]",
19
+ lg: "ds:text-[length:var(--font-size-lg)]"
20
+ }
21
+ },
22
+ defaultVariants: { size: "md" }
23
+ }
24
+ ), q = 100, B = 8;
25
+ function z(t, n) {
26
+ const a = Math.max(0, Math.floor(t)), i = Math.floor(a / 60), u = a % 60, p = (v) => new Intl.NumberFormat(n, { minimumIntegerDigits: 2 }).format(v);
27
+ return `${p(i)}:${p(u)}`;
28
+ }
29
+ function U(t) {
30
+ const n = Math.max(0, Math.floor(t)), a = Math.floor(n / 60), i = n % 60;
31
+ return `PT${a}M${i}S`;
32
+ }
33
+ function G(t) {
34
+ let n = 0;
35
+ for (let a = 0; a < t.length; a += 1)
36
+ n = n * 31 + t.charCodeAt(a) | 0;
37
+ return Math.abs(n) % B;
38
+ }
39
+ const Q = [
40
+ "ds:bg-[color:var(--transcript-speaker-1)]",
41
+ "ds:bg-[color:var(--transcript-speaker-2)]",
42
+ "ds:bg-[color:var(--transcript-speaker-3)]",
43
+ "ds:bg-[color:var(--transcript-speaker-4)]",
44
+ "ds:bg-[color:var(--transcript-speaker-5)]",
45
+ "ds:bg-[color:var(--transcript-speaker-6)]",
46
+ "ds:bg-[color:var(--transcript-speaker-7)]",
47
+ "ds:bg-[color:var(--transcript-speaker-8)]"
48
+ ];
49
+ function Y(t) {
50
+ return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
51
+ }
52
+ function Z({ text: t, query: n }) {
53
+ if (!n) return t;
54
+ const a = Y(n);
55
+ return t.split(new RegExp(`(${a})`, "gi")).map(
56
+ (u, p) => u.toLocaleLowerCase() === n.toLocaleLowerCase() ? /* @__PURE__ */ o(
57
+ "mark",
58
+ {
59
+ className: "ds:bg-[color:var(--warning)]/30 ds:text-[color:var(--foreground)] ds:rounded-[var(--radius-sm)]",
60
+ children: u
61
+ },
62
+ p
63
+ ) : /* @__PURE__ */ o(j, { children: u }, p)
64
+ );
65
+ }
66
+ const J = $(
67
+ ({
68
+ lines: t,
69
+ currentTime: n = 0,
70
+ onSeek: a,
71
+ searchable: i = !0,
72
+ size: u = "md",
73
+ className: p,
74
+ ...v
75
+ }, L) => {
76
+ const { t: d, i18n: b } = V(), [m, M] = E(""), h = S(null), x = S(null), R = K(), c = I(() => {
77
+ if (!Number.isFinite(n)) return -1;
78
+ for (let e = 0; e < t.length; e += 1) {
79
+ const r = t[e];
80
+ if (r.start <= n && n < r.end) return e;
81
+ }
82
+ return -1;
83
+ }, [t, n]), w = I(() => {
84
+ if (!m) return 0;
85
+ let e = 0;
86
+ const r = m.toLocaleLowerCase();
87
+ for (const s of t) {
88
+ const l = s.text.toLocaleLowerCase();
89
+ let g = l.indexOf(r);
90
+ for (; g !== -1; )
91
+ e += 1, g = l.indexOf(r, g + r.length);
92
+ }
93
+ return e;
94
+ }, [t, m]), P = C(
95
+ (e) => {
96
+ var r;
97
+ (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" && i && (e.preventDefault(), (r = x.current) == null || r.focus());
98
+ },
99
+ [i]
100
+ ), T = t.length > q, y = D({
101
+ count: T ? t.length : 0,
102
+ getScrollElement: () => h.current,
103
+ estimateSize: () => 48,
104
+ overscan: 8,
105
+ getItemKey: (e) => e
106
+ });
107
+ A(() => {
108
+ if (c < 0) return;
109
+ const e = h.current;
110
+ if (!e) return;
111
+ const r = e.querySelector(
112
+ `[data-line-index="${c}"]`
113
+ );
114
+ if (!r) return;
115
+ const s = typeof window < "u" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
116
+ r.scrollIntoView({
117
+ block: "center",
118
+ behavior: s ? "auto" : "smooth"
119
+ });
120
+ }, [c]);
121
+ const k = C(
122
+ (e, r, s) => {
123
+ const l = r === c, g = G(e.speaker), N = typeof e.confidence == "number" && e.confidence < 0.6;
124
+ return /* @__PURE__ */ f(
125
+ "li",
126
+ {
127
+ ref: s == null ? void 0 : s.liRef,
128
+ "data-line-index": r,
129
+ "data-turn-id": String(r),
130
+ "data-index": s == null ? void 0 : s.dataIndex,
131
+ "aria-current": l ? "true" : void 0,
132
+ style: s == null ? void 0 : s.style,
133
+ className: [
134
+ "ds:flex ds:items-start ds:gap-[var(--spacing-sm)]",
135
+ "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]",
136
+ l ? "ds:bg-[color:var(--accent)]/12 ds:border-s-[3px] ds:border-[color:var(--primary)]" : "ds:border-s-[3px] ds:border-transparent",
137
+ s != null && s.absolutePositioning ? "ds:absolute ds:start-0 ds:end-0 ds:top-0 ds:w-full" : ""
138
+ ].filter(Boolean).join(" "),
139
+ children: [
140
+ /* @__PURE__ */ o(
141
+ "button",
142
+ {
143
+ type: "button",
144
+ onClick: () => a == null ? void 0 : a(e.start),
145
+ "aria-label": d("ui.chat.transcript.seekTo", {
146
+ time: z(e.start, b.language)
147
+ }),
148
+ className: [
149
+ "ds:inline-flex ds:items-center ds:justify-center",
150
+ "ds:font-[family-name:var(--font-mono)]",
151
+ "type-meta",
152
+ "ds:tabular-nums",
153
+ "ds:text-[color:var(--muted-foreground)]",
154
+ "ds:rounded-[var(--radius-sm)]",
155
+ "ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]",
156
+ // WCAG 2.5.5 target size: 44×44 default, 48×48 in accessible
157
+ // themes — matches the DS `--min-target-size` token.
158
+ "ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]",
159
+ "ds:hover:bg-muted/20",
160
+ "ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid",
161
+ "ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
162
+ "ds:forced-colors:focus-visible:outline-[CanvasText]"
163
+ ].join(" "),
164
+ children: /* @__PURE__ */ o("time", { dir: "ltr", dateTime: U(e.start), children: z(e.start, b.language) })
165
+ }
166
+ ),
167
+ /* @__PURE__ */ f("div", { className: "ds:flex-1 ds:min-w-0", children: [
168
+ /* @__PURE__ */ f("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-xs)]", children: [
169
+ /* @__PURE__ */ o(
170
+ "span",
171
+ {
172
+ "aria-hidden": "true",
173
+ className: `ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ${Q[g]}`
174
+ }
175
+ ),
176
+ /* @__PURE__ */ o("strong", { className: "type-title-item", children: d("ui.chat.transcript.speaker", { name: e.speaker }) }),
177
+ N ? /* @__PURE__ */ f("span", { className: "type-meta ds:italic ds:text-[color:var(--muted-foreground)]", children: [
178
+ "(",
179
+ d("ui.chat.transcript.lowConfidence"),
180
+ ")"
181
+ ] }) : null
182
+ ] }),
183
+ /* @__PURE__ */ o(
184
+ "span",
185
+ {
186
+ dir: "auto",
187
+ className: [
188
+ "ds:block",
189
+ N ? "ds:underline ds:decoration-dotted ds:decoration-[color:var(--muted-foreground)]" : ""
190
+ ].join(" "),
191
+ children: /* @__PURE__ */ o(Z, { text: e.text, query: m })
192
+ }
193
+ )
194
+ ] })
195
+ ]
196
+ },
197
+ r
198
+ );
199
+ },
200
+ [c, b.language, a, m, d]
201
+ );
202
+ return _(
203
+ L,
204
+ () => ({
205
+ getSelectedTurn: () => c >= 0 ? String(c) : null,
206
+ focusTurn: (e) => {
207
+ var l;
208
+ const r = (l = h.current) == null ? void 0 : l.querySelector(
209
+ `[data-turn-id="${e}"]`
210
+ );
211
+ if (!r) return;
212
+ r.scrollIntoView({ block: "center", behavior: "auto" });
213
+ const s = r.querySelector("button");
214
+ s == null || s.focus();
215
+ },
216
+ copyTurn: (e) => {
217
+ const r = Number.parseInt(e, 10);
218
+ if (!Number.isFinite(r)) return;
219
+ const s = t[r];
220
+ if (s && typeof navigator < "u" && navigator.clipboard)
221
+ return navigator.clipboard.writeText(s.text);
222
+ }
223
+ }),
224
+ [c, t]
225
+ ), /* @__PURE__ */ f(
226
+ "div",
227
+ {
228
+ onKeyDown: P,
229
+ "data-component": "transcript-panel",
230
+ "data-component-id": v.id,
231
+ className: H({ size: u, className: p }),
232
+ ...v,
233
+ children: [
234
+ i ? /* @__PURE__ */ f("div", { className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:border-b ds:border-border", children: [
235
+ /* @__PURE__ */ o(
236
+ F,
237
+ {
238
+ ref: x,
239
+ id: R,
240
+ placeholder: d("ui.chat.transcript.search"),
241
+ "aria-label": d("ui.chat.transcript.search"),
242
+ "aria-keyshortcuts": "Meta+F Control+F",
243
+ debounceMs: 150,
244
+ onChange: (e) => M(e),
245
+ size: "sm"
246
+ }
247
+ ),
248
+ m ? /* @__PURE__ */ o(
249
+ "span",
250
+ {
251
+ role: "status",
252
+ "aria-live": "polite",
253
+ className: "type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums",
254
+ children: w === 0 ? d("ui.chat.transcript.noMatches") : d("ui.chat.transcript.matchCount", { count: w })
255
+ }
256
+ ) : null
257
+ ] }) : null,
258
+ /* @__PURE__ */ o(
259
+ "div",
260
+ {
261
+ ref: h,
262
+ className: "ds:flex-1 ds:min-h-0 ds:overflow-y-auto ds:overflow-x-hidden",
263
+ children: T ? /* @__PURE__ */ o(
264
+ "ol",
265
+ {
266
+ className: "ds:relative ds:list-none ds:ps-0 ds:m-0",
267
+ style: { blockSize: `${y.getTotalSize()}px` },
268
+ children: y.getVirtualItems().map((e) => {
269
+ const r = t[e.index];
270
+ return r ? k(r, e.index, {
271
+ liRef: y.measureElement,
272
+ dataIndex: e.index,
273
+ style: { transform: `translateY(${e.start}px)` },
274
+ absolutePositioning: !0
275
+ }) : null;
276
+ })
277
+ }
278
+ ) : /* @__PURE__ */ o("ol", { className: "ds:list-none ds:ps-0 ds:m-0", children: t.map((e, r) => k(e, r)) })
279
+ }
280
+ )
281
+ ]
282
+ }
283
+ );
284
+ }
285
+ );
286
+ J.displayName = "TranscriptPanel";
287
+ const ne = {
288
+ id: "transcript-panel",
289
+ capabilities: ["select_single"],
290
+ state: {
291
+ selectedTurn: {
292
+ type: "string | null",
293
+ descriptionKey: "ui.agent.transcriptPanel.state.selectedTurn",
294
+ description: "Opaque id (line index) of the currently-active turn, or null when none is active.",
295
+ read: (t) => t.getSelectedTurn()
296
+ }
297
+ },
298
+ actions: {
299
+ focus_turn: {
300
+ safety: "read",
301
+ argsType: "{ id: string }",
302
+ descriptionKey: "ui.agent.transcriptPanel.actions.focusTurn",
303
+ description: "Scroll the given turn into view and focus its seek button.",
304
+ invoke: (t, n) => {
305
+ t.focusTurn(n.id);
306
+ }
307
+ },
308
+ copy_turn: {
309
+ safety: "read",
310
+ argsType: "{ id: string }",
311
+ descriptionKey: "ui.agent.transcriptPanel.actions.copyTurn",
312
+ description: "Copy the given turn's text to the clipboard.",
313
+ invoke: (t, n) => t.copyTurn(n.id)
314
+ }
315
+ },
316
+ domHooks: {
317
+ root: {
318
+ attr: "data-component",
319
+ value: "transcript-panel",
320
+ description: "Marks the TranscriptPanel wrapper."
321
+ },
322
+ instanceId: {
323
+ attr: "data-component-id",
324
+ sourceProp: "id",
325
+ description: "Sourced from the id prop."
326
+ },
327
+ item: {
328
+ attr: "data-turn-id",
329
+ description: "Stable opaque turn id (line index). Never carries the turn's dictated text."
330
+ }
331
+ }
332
+ };
333
+ export {
334
+ J as T,
335
+ ne as t
336
+ };
337
+ //# sourceMappingURL=transcript-panel.agent-BXEYP6w-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-panel.agent-BXEYP6w-.js","sources":["../../src/components/transcript-panel/transcript-panel.tsx","../../src/components/transcript-panel/transcript-panel.agent.ts"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n useCallback,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { SearchInput } from '../search-input';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface TranscriptLine {\n speaker: string;\n text: string;\n /** Seconds, floating-point — matches HTMLMediaElement.currentTime. */\n start: number;\n end: number;\n /** 0..1 — rendered with a dotted underline when below 0.6. */\n confidence?: number;\n}\n\n/** Curated imperative handle for agent / external automation. */\nexport interface TranscriptPanelHandle {\n /** Opaque id (line index) of the active turn, or null. */\n getSelectedTurn: () => string | null;\n /** Scroll the turn with the given id into view and focus its seek button. */\n focusTurn: (id: string) => void;\n /** Copy the turn's text to the clipboard. */\n copyTurn: (id: string) => Promise<void> | void;\n}\n\nexport interface TranscriptPanelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>,\n VariantProps<typeof rootVariants> {\n lines: TranscriptLine[];\n /** Current playback time in seconds — drives the active line highlight. */\n currentTime?: number;\n onSeek?: (seconds: number) => void;\n /** Show the search bar. */\n searchable?: boolean;\n}\n\nconst rootVariants = cva(\n [\n 'ds:flex ds:flex-col ds:w-full ds:min-h-0',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-background',\n 'ds:focus-within:border-[color:var(--primary)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst VIRTUALIZATION_THRESHOLD = 100;\nconst SPEAKER_SLOT_COUNT = 8;\n\nfunction formatTime(seconds: number, locale: string): string {\n const total = Math.max(0, Math.floor(seconds));\n const m = Math.floor(total / 60);\n const s = total % 60;\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale, { minimumIntegerDigits: 2 }).format(n);\n return `${fmt(m)}:${fmt(s)}`;\n}\n\n/** ISO-8601 duration (PT#M#S) for <time datetime=\"...\">. */\nfunction secondsToIsoDuration(seconds: number): string {\n const total = Math.max(0, Math.floor(seconds));\n const m = Math.floor(total / 60);\n const s = total % 60;\n return `PT${m}M${s}S`;\n}\n\n/** Deterministic speaker slot (0..7) based on name hash. */\nfunction speakerSlot(name: string): number {\n let hash = 0;\n for (let i = 0; i < name.length; i += 1) {\n hash = (hash * 31 + name.charCodeAt(i)) | 0;\n }\n return Math.abs(hash) % SPEAKER_SLOT_COUNT;\n}\n\n/** Per-slot background classes. Indices align with the speaker palette tokens\n * in tokens/index.css. Static strings so Tailwind can pick them up at build. */\nconst SPEAKER_BG_CLASSES = [\n 'ds:bg-[color:var(--transcript-speaker-1)]',\n 'ds:bg-[color:var(--transcript-speaker-2)]',\n 'ds:bg-[color:var(--transcript-speaker-3)]',\n 'ds:bg-[color:var(--transcript-speaker-4)]',\n 'ds:bg-[color:var(--transcript-speaker-5)]',\n 'ds:bg-[color:var(--transcript-speaker-6)]',\n 'ds:bg-[color:var(--transcript-speaker-7)]',\n 'ds:bg-[color:var(--transcript-speaker-8)]',\n] as const;\n\n/** Escape a literal string for safe use inside a RegExp. */\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\ninterface HighlightedTextProps {\n text: string;\n query: string;\n}\n\n/** Renders text with <mark> wrapping around case-insensitive matches.\n * No dangerouslySetInnerHTML — splits text nodes only. */\nfunction HighlightedText({ text, query }: HighlightedTextProps): ReactNode {\n if (!query) return text;\n const escaped = escapeRegExp(query);\n const parts = text.split(new RegExp(`(${escaped})`, 'gi'));\n return parts.map((part, i) =>\n part.toLocaleLowerCase() === query.toLocaleLowerCase() ? (\n <mark\n key={i}\n className=\"ds:bg-[color:var(--warning)]/30 ds:text-[color:var(--foreground)] ds:rounded-[var(--radius-sm)]\"\n >\n {part}\n </mark>\n ) : (\n <Fragment key={i}>{part}</Fragment>\n ),\n );\n}\n\nexport const TranscriptPanel = forwardRef<TranscriptPanelHandle, TranscriptPanelProps>(\n (\n {\n lines,\n currentTime = 0,\n onSeek,\n searchable = true,\n size = 'md',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const [query, setQuery] = useState('');\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const searchInputRef = useRef<HTMLInputElement | null>(null);\n const searchId = useId();\n\n /* Active-line index */\n const activeIndex = useMemo(() => {\n if (!Number.isFinite(currentTime)) return -1;\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i];\n if (line.start <= currentTime && currentTime < line.end) return i;\n }\n return -1;\n }, [lines, currentTime]);\n\n /* Match count for search */\n const matchCount = useMemo(() => {\n if (!query) return 0;\n let count = 0;\n const needle = query.toLocaleLowerCase();\n for (const line of lines) {\n const hay = line.text.toLocaleLowerCase();\n let idx = hay.indexOf(needle);\n while (idx !== -1) {\n count += 1;\n idx = hay.indexOf(needle, idx + needle.length);\n }\n }\n return count;\n }, [lines, query]);\n\n /* Ctrl/Cmd+F shortcut — focuses the search field when focus is within. */\n const handleRootKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'f' && searchable) {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n },\n [searchable],\n );\n\n /* Virtualisation above 100 lines */\n const virtualized = lines.length > VIRTUALIZATION_THRESHOLD;\n const virtualizer = useVirtualizer({\n count: virtualized ? lines.length : 0,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => 48,\n overscan: 8,\n getItemKey: (i) => i,\n });\n\n /* Auto-scroll active line into view when it changes. */\n useLayoutEffect(() => {\n if (activeIndex < 0) return;\n const scroller = scrollRef.current;\n if (!scroller) return;\n const target = scroller.querySelector(\n `[data-line-index=\"${activeIndex}\"]`,\n ) as HTMLElement | null;\n if (!target) return;\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n target.scrollIntoView({\n block: 'center',\n behavior: prefersReducedMotion ? 'auto' : 'smooth',\n });\n }, [activeIndex]);\n\n const renderLine = useCallback(\n (\n line: TranscriptLine,\n index: number,\n extras?: {\n liRef?: (node: HTMLLIElement | null) => void;\n dataIndex?: number;\n // Style is an inline-style escape hatch — virtualizer offsets\n // cannot be expressed as static Tailwind. See 23-constraints §4.\n style?: CSSProperties;\n absolutePositioning?: boolean;\n },\n ) => {\n const isActive = index === activeIndex;\n const slot = speakerSlot(line.speaker);\n const lowConfidence =\n typeof line.confidence === 'number' && line.confidence < 0.6;\n return (\n <li\n key={index}\n ref={extras?.liRef}\n data-line-index={index}\n data-turn-id={String(index)}\n data-index={extras?.dataIndex}\n aria-current={isActive ? 'true' : undefined}\n // Inline style — permitted per 23-constraints\n // §Runtime-computed dimensions (virtualizer translateY).\n style={extras?.style}\n className={[\n 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n isActive\n ? 'ds:bg-[color:var(--accent)]/12 ds:border-s-[3px] ds:border-[color:var(--primary)]'\n : 'ds:border-s-[3px] ds:border-transparent',\n extras?.absolutePositioning\n ? 'ds:absolute ds:start-0 ds:end-0 ds:top-0 ds:w-full'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <button\n type=\"button\"\n onClick={() => onSeek?.(line.start)}\n aria-label={t('ui.chat.transcript.seekTo', {\n time: formatTime(line.start, i18n.language),\n })}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:font-[family-name:var(--font-mono)]',\n 'type-meta',\n 'ds:tabular-nums',\n 'ds:text-[color:var(--muted-foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n // WCAG 2.5.5 target size: 44×44 default, 48×48 in accessible\n // themes — matches the DS `--min-target-size` token.\n 'ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:hover:bg-muted/20',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n <time dir=\"ltr\" dateTime={secondsToIsoDuration(line.start)}>\n {formatTime(line.start, i18n.language)}\n </time>\n </button>\n <div className=\"ds:flex-1 ds:min-w-0\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span\n aria-hidden=\"true\"\n className={`ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ${SPEAKER_BG_CLASSES[slot]}`}\n />\n <strong className=\"type-title-item\">\n {t('ui.chat.transcript.speaker', { name: line.speaker })}\n </strong>\n {lowConfidence ? (\n <span className=\"type-meta ds:italic ds:text-[color:var(--muted-foreground)]\">\n ({t('ui.chat.transcript.lowConfidence')})\n </span>\n ) : null}\n </div>\n <span\n dir=\"auto\"\n className={[\n 'ds:block',\n lowConfidence\n ? 'ds:underline ds:decoration-dotted ds:decoration-[color:var(--muted-foreground)]'\n : '',\n ].join(' ')}\n >\n <HighlightedText text={line.text} query={query} />\n </span>\n </div>\n </li>\n );\n },\n [activeIndex, i18n.language, onSeek, query, t],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getSelectedTurn: () => (activeIndex >= 0 ? String(activeIndex) : null),\n focusTurn: (id: string) => {\n const target = scrollRef.current?.querySelector(\n `[data-turn-id=\"${id}\"]`,\n ) as HTMLElement | null;\n if (!target) return;\n target.scrollIntoView({ block: 'center', behavior: 'auto' });\n const btn = target.querySelector('button') as HTMLButtonElement | null;\n btn?.focus();\n },\n copyTurn: (id: string) => {\n const index = Number.parseInt(id, 10);\n if (!Number.isFinite(index)) return;\n const line = lines[index];\n if (!line) return;\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n return navigator.clipboard.writeText(line.text);\n }\n },\n }),\n [activeIndex, lines],\n );\n\n return (\n <div\n onKeyDown={handleRootKeyDown}\n data-component=\"transcript-panel\"\n data-component-id={rest.id}\n className={rootVariants({ size, className })}\n {...rest}\n >\n {searchable ? (\n <div className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:border-b ds:border-border\">\n <SearchInput\n ref={searchInputRef}\n id={searchId}\n placeholder={t('ui.chat.transcript.search')}\n aria-label={t('ui.chat.transcript.search')}\n aria-keyshortcuts=\"Meta+F Control+F\"\n debounceMs={150}\n onChange={(v) => setQuery(v)}\n size=\"sm\"\n />\n {query ? (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\"\n >\n {matchCount === 0\n ? t('ui.chat.transcript.noMatches')\n : t('ui.chat.transcript.matchCount', { count: matchCount })}\n </span>\n ) : null}\n </div>\n ) : null}\n\n <div\n ref={scrollRef}\n className=\"ds:flex-1 ds:min-h-0 ds:overflow-y-auto ds:overflow-x-hidden\"\n >\n {virtualized ? (\n <ol\n className=\"ds:relative ds:list-none ds:ps-0 ds:m-0\"\n // Inline style — permitted per 23-constraints\n // §Runtime-computed dimensions (virtualizer total size).\n style={{ blockSize: `${virtualizer.getTotalSize()}px` }}\n >\n {virtualizer.getVirtualItems().map((vi) => {\n const line = lines[vi.index];\n if (!line) return null;\n // Put the measureElement ref on the <li> directly — a <div>\n // child of <ol> is invalid and breaks list semantics for\n // assistive tech.\n return renderLine(line, vi.index, {\n liRef: virtualizer.measureElement,\n dataIndex: vi.index,\n style: { transform: `translateY(${vi.start}px)` },\n absolutePositioning: true,\n });\n })}\n </ol>\n ) : (\n <ol className=\"ds:list-none ds:ps-0 ds:m-0\">\n {lines.map((line, index) => renderLine(line, index))}\n </ol>\n )}\n </div>\n </div>\n );\n },\n);\n\nTranscriptPanel.displayName = 'TranscriptPanel';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — TranscriptPanel. */\n/* */\n/* `data-turn-id` carries the line's stable index (opaque id) — never */\n/* the dictated text. Transcript content frequently contains PHI; the */\n/* DOM hook MUST NOT leak it. See PRS §26 §6.1. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { TranscriptPanelHandle } from './transcript-panel';\n\nexport const transcriptPanelAgent: AgentAdapter<TranscriptPanelHandle> = {\n id: 'transcript-panel',\n capabilities: ['select_single'],\n state: {\n selectedTurn: {\n type: 'string | null',\n descriptionKey: 'ui.agent.transcriptPanel.state.selectedTurn',\n description: 'Opaque id (line index) of the currently-active turn, or null when none is active.',\n read: (handle) => handle.getSelectedTurn(),\n },\n },\n actions: {\n focus_turn: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.transcriptPanel.actions.focusTurn',\n description: 'Scroll the given turn into view and focus its seek button.',\n invoke: (handle, args: { id: string }) => {\n handle.focusTurn(args.id);\n },\n },\n copy_turn: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.transcriptPanel.actions.copyTurn',\n description: 'Copy the given turn\\'s text to the clipboard.',\n invoke: (handle, args: { id: string }) => handle.copyTurn(args.id),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'transcript-panel',\n description: 'Marks the TranscriptPanel wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-turn-id',\n description: 'Stable opaque turn id (line index). Never carries the turn\\'s dictated text.',\n },\n },\n};\n"],"names":["rootVariants","cva","VIRTUALIZATION_THRESHOLD","SPEAKER_SLOT_COUNT","formatTime","seconds","locale","total","m","s","fmt","n","secondsToIsoDuration","speakerSlot","name","hash","i","SPEAKER_BG_CLASSES","escapeRegExp","input","HighlightedText","text","query","escaped","part","jsx","Fragment","TranscriptPanel","forwardRef","lines","currentTime","onSeek","searchable","size","className","rest","ref","t","i18n","useTranslation","setQuery","useState","scrollRef","useRef","searchInputRef","searchId","useId","activeIndex","useMemo","line","matchCount","count","needle","hay","idx","handleRootKeyDown","useCallback","_a","virtualized","virtualizer","useVirtualizer","useLayoutEffect","scroller","target","prefersReducedMotion","renderLine","index","extras","isActive","slot","lowConfidence","jsxs","useImperativeHandle","id","btn","SearchInput","v","vi","transcriptPanelAgent","handle","args"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangle-alert-CBPUIzQo.js","sources":["../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n"],"names":["__iconNode","TriangleAlert","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C,GACMC,IAAgBC,EAAiB,kBAAkBF,CAAU;","x_google_ignoreList":[0]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing-indicator-CbUBf-Dx.js","sources":["../../src/components/typing-indicator/typing-indicator.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nconst indicatorVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:text-[color:var(--muted-foreground)]',\n ].join(' '),\n {\n variants: {\n density: {\n default: 'ds:gap-[var(--spacing-sm)]',\n compact: 'ds:gap-[var(--spacing-xs)]',\n },\n size: {\n sm: 'ds:text-[length:var(--font-size-xs)]',\n md: 'ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { density: 'default', size: 'md' },\n },\n);\n\nconst dotsVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n density: {\n default: 'ds:gap-[var(--spacing-xs)]',\n compact: 'ds:gap-[calc(var(--spacing)*0.75)]',\n },\n },\n defaultVariants: { density: 'default' },\n});\n\nconst dotVariants = cva(\n [\n 'ds:inline-block ds:rounded-[var(--radius-full)]',\n 'ds:bg-[color:currentColor]',\n // Accessible themes set --animation-duration:0ms; reduced-motion falls back via media query below\n 'ds:motion-safe:animate-[typing-indicator-dot_var(--animation-duration-typing,1.4s)_ease-in-out_infinite]',\n 'ds:motion-reduce:opacity-60',\n 'ds:[.theme-accessible_&]:animate-none ds:[.theme-accessible_&]:opacity-60',\n 'ds:forced-colors:bg-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:size-[6px]',\n md: 'ds:size-[8px]',\n lg: 'ds:size-[10px]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\ntype NativeDivProps = Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-live' | 'aria-atomic'>;\n\nexport interface TypingIndicatorProps\n extends NativeDivProps,\n VariantProps<typeof indicatorVariants> {\n /** Optional override. When omitted, uses t('ui.chat.typing'). */\n label?: string;\n /** Hide the visible label, keeping only the animated dots. The label still\n * carries the accessible name via aria-label. */\n hideLabel?: boolean;\n}\n\nexport const TypingIndicator = forwardRef<HTMLDivElement, TypingIndicatorProps>(\n (\n { size = 'md', density = 'default', label, hideLabel = false, className, ...rest },\n ref,\n ) => {\n const { t } = useTranslation();\n const resolvedLabel = label ?? t('ui.chat.typing');\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n aria-label={hideLabel ? resolvedLabel : undefined}\n data-component=\"typing-indicator\"\n className={indicatorVariants({ size, density, className })}\n {...rest}\n >\n <span aria-hidden=\"true\" className={dotsVariants({ density })}>\n <span className={`${dotVariants({ size })} ds:[animation-delay:0ms]`} />\n <span className={`${dotVariants({ size })} ds:[animation-delay:200ms]`} />\n <span className={`${dotVariants({ size })} ds:[animation-delay:400ms]`} />\n </span>\n {!hideLabel ? (\n <span className=\"ds:font-medium\">{resolvedLabel}</span>\n ) : null}\n </div>\n );\n },\n);\n\nTypingIndicator.displayName = 'TypingIndicator';\n"],"names":["indicatorVariants","cva","dotsVariants","dotVariants","TypingIndicator","forwardRef","size","density","label","hideLabel","className","rest","ref","t","useTranslation","resolvedLabel","jsxs","jsx"],"mappings":";;;;AAIA,MAAMA,IAAoBC;AAAA,EACxB;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,SAAS,WAAW,MAAM,KAAA;AAAA,EAAK;AAEtD,GAEMC,IAAeD,EAAI,kCAAkC;AAAA,EACzD,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,iBAAiB,EAAE,SAAS,UAAA;AAC9B,CAAC,GAEKE,IAAcF;AAAA,EAClB;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAcaG,IAAkBC;AAAA,EAC7B,CACE,EAAE,MAAAC,IAAO,MAAM,SAAAC,IAAU,WAAW,OAAAC,GAAO,WAAAC,IAAY,IAAO,WAAAC,GAAW,GAAGC,EAAA,GAC5EC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAgBP,KAASK,EAAE,gBAAgB;AAEjD,WACE,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,MAAK;AAAA,QACL,aAAU;AAAA,QACV,eAAY;AAAA,QACZ,cAAYH,IAAYM,IAAgB;AAAA,QACxC,kBAAe;AAAA,QACf,WAAWf,EAAkB,EAAE,MAAAM,GAAM,SAAAC,GAAS,WAAAG,GAAW;AAAA,QACxD,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAK,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWd,EAAa,EAAE,SAAAK,GAAS,GAC1D,UAAA;AAAA,YAAA,gBAAAU,EAAC,QAAA,EAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,6BAA6B;AAAA,YACtE,gBAAAW,EAAC,UAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,+BAA+B;AAAA,YACxE,gBAAAW,EAAC,UAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,8BAAA,CAA+B;AAAA,UAAA,GAC1E;AAAA,UACEG,IAEE,OADF,gBAAAQ,EAAC,UAAK,WAAU,kBAAkB,aAAc;AAAA,QAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAb,EAAgB,cAAc;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-callback-BisrB-Fq.js","sources":["../../src/components/_shared/use-debounced-callback.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react';\n\nexport type DebouncedCallback<A extends unknown[]> = ((...args: A) => void) & {\n cancel: () => void;\n flush: () => void;\n};\n\nexport function useDebouncedCallback<A extends unknown[]>(\n callback: (...args: A) => void,\n delayMs: number,\n): DebouncedCallback<A> {\n const callbackRef = useRef(callback);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingArgsRef = useRef<A | null>(null);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const cancel = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n pendingArgsRef.current = null;\n }, []);\n\n const flush = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n const args = pendingArgsRef.current;\n pendingArgsRef.current = null;\n if (args) callbackRef.current(...args);\n }, []);\n\n useEffect(() => cancel, [cancel]);\n\n return useMemo<DebouncedCallback<A>>(() => {\n const fn = (...args: A) => {\n pendingArgsRef.current = args;\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n timerRef.current = null;\n const latest = pendingArgsRef.current;\n pendingArgsRef.current = null;\n if (latest) callbackRef.current(...latest);\n }, delayMs);\n };\n const debounced = fn as DebouncedCallback<A>;\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }, [delayMs, cancel, flush]);\n}\n"],"names":["useDebouncedCallback","callback","delayMs","callbackRef","useRef","timerRef","pendingArgsRef","useEffect","cancel","useCallback","flush","args","useMemo","debounced","latest"],"mappings":";AAOO,SAASA,EACdC,GACAC,GACsB;AACtB,QAAMC,IAAcC,EAAOH,CAAQ,GAC7BI,IAAWD,EAA6C,IAAI,GAC5DE,IAAiBF,EAAiB,IAAI;AAE5C,EAAAG,EAAU,MAAM;AACd,IAAAJ,EAAY,UAAUF;AAAA,EACxB,GAAG,CAACA,CAAQ,CAAC;AAEb,QAAMO,IAASC,EAAY,MAAM;AAC/B,IAAIJ,EAAS,YAAY,SACvB,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU,OAErBC,EAAe,UAAU;AAAA,EAC3B,GAAG,CAAA,CAAE,GAECI,IAAQD,EAAY,MAAM;AAC9B,IAAIJ,EAAS,YAAY,SACvB,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU;AAErB,UAAMM,IAAOL,EAAe;AAC5B,IAAAA,EAAe,UAAU,MACrBK,KAAMR,EAAY,QAAQ,GAAGQ,CAAI;AAAA,EACvC,GAAG,CAAA,CAAE;AAEL,SAAAJ,EAAU,MAAMC,GAAQ,CAACA,CAAM,CAAC,GAEzBI,EAA8B,MAAM;AAWzC,UAAMC,IAVK,IAAIF,MAAY;AACzB,MAAAL,EAAe,UAAUK,GACrBN,EAAS,YAAY,QAAM,aAAaA,EAAS,OAAO,GAC5DA,EAAS,UAAU,WAAW,MAAM;AAClC,QAAAA,EAAS,UAAU;AACnB,cAAMS,IAASR,EAAe;AAC9B,QAAAA,EAAe,UAAU,MACrBQ,KAAQX,EAAY,QAAQ,GAAGW,CAAM;AAAA,MAC3C,GAAGZ,CAAO;AAAA,IACZ;AAEA,WAAAW,EAAU,SAASL,GACnBK,EAAU,QAAQH,GACXG;AAAA,EACT,GAAG,CAACX,GAASM,GAAQE,CAAK,CAAC;AAC7B;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-direction-D6rvvG9G.js","sources":["../../src/components/_shared/use-direction.ts"],"sourcesContent":["import { useLayoutEffect, useState, type RefObject } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nconst initialDocumentDir = (): Direction => {\n if (typeof document === 'undefined') return 'ltr';\n return document.documentElement.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr';\n};\n\n/**\n * Resolves the effective writing direction for `ref`'s element by walking its\n * ancestor chain and reacting to `dir` attribute mutations along the way.\n *\n * Radix primitives default to `dir=\"ltr\"` when no `DirectionProvider` is\n * present and then stamp `dir=\"ltr\"` onto the rendered element — which\n * overrides any inherited `dir=\"rtl\"` from a parent. Pass the result of this\n * hook to the primitive's `dir` prop so the logical layout flips correctly.\n */\nexport function useDirection(ref: RefObject<HTMLElement | null>): Direction {\n const [dir, setDir] = useState<Direction>(initialDocumentDir);\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n // Read from the parent so Radix's own `dir=\"ltr\"` stamp on `element`\n // (which overrides the inherited direction) doesn't feed back into us.\n const source = element.parentElement ?? element;\n\n const read = () => {\n const computed = window.getComputedStyle(source).direction;\n setDir(computed === 'rtl' ? 'rtl' : 'ltr');\n };\n\n read();\n\n const observer = new MutationObserver(read);\n let node: Element | null = source;\n while (node) {\n observer.observe(node, { attributes: true, attributeFilter: ['dir'] });\n node = node.parentElement;\n }\n\n return () => observer.disconnect();\n }, [ref]);\n\n return dir;\n}\n\n/**\n * Resolves the document-level writing direction. Use for components whose\n * Root is a pure context provider (no DOM element to ref) — e.g. Radix\n * DropdownMenu/ContextMenu/Menubar Roots.\n */\nexport function useDocumentDirection(): Direction {\n const [dir, setDir] = useState<Direction>(initialDocumentDir);\n\n useLayoutEffect(() => {\n if (typeof document === 'undefined') return;\n const read = () => {\n const value = document.documentElement.getAttribute('dir');\n setDir(value === 'rtl' ? 'rtl' : 'ltr');\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n });\n return () => observer.disconnect();\n }, []);\n\n return dir;\n}\n"],"names":["initialDocumentDir","useDirection","ref","dir","setDir","useState","useLayoutEffect","element","source","read","computed","observer","node","useDocumentDirection","value"],"mappings":";AAIA,MAAMA,IAAqB,MACrB,OAAO,WAAa,MAAoB,QACrC,SAAS,gBAAgB,aAAa,KAAK,MAAM,QAAQ,QAAQ;AAYnE,SAASC,EAAaC,GAA+C;AAC1E,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAoBL,CAAkB;AAE5D,SAAAM,EAAgB,MAAM;AACpB,UAAMC,IAAUL,EAAI;AACpB,QAAI,CAACK,EAAS;AAId,UAAMC,IAASD,EAAQ,iBAAiBA,GAElCE,IAAO,MAAM;AACjB,YAAMC,IAAW,OAAO,iBAAiBF,CAAM,EAAE;AACjD,MAAAJ,EAAOM,MAAa,QAAQ,QAAQ,KAAK;AAAA,IAC3C;AAEA,IAAAD,EAAA;AAEA,UAAME,IAAW,IAAI,iBAAiBF,CAAI;AAC1C,QAAIG,IAAuBJ;AAC3B,WAAOI;AACL,MAAAD,EAAS,QAAQC,GAAM,EAAE,YAAY,IAAM,iBAAiB,CAAC,KAAK,GAAG,GACrEA,IAAOA,EAAK;AAGd,WAAO,MAAMD,EAAS,WAAA;AAAA,EACxB,GAAG,CAACT,CAAG,CAAC,GAEDC;AACT;AAOO,SAASU,IAAkC;AAChD,QAAM,CAACV,GAAKC,CAAM,IAAIC,EAAoBL,CAAkB;AAE5D,SAAAM,EAAgB,MAAM;AACpB,QAAI,OAAO,WAAa,IAAa;AACrC,UAAMG,IAAO,MAAM;AACjB,YAAMK,IAAQ,SAAS,gBAAgB,aAAa,KAAK;AACzD,MAAAV,EAAOU,MAAU,QAAQ,QAAQ,KAAK;AAAA,IACxC;AACA,IAAAL,EAAA;AACA,UAAME,IAAW,IAAI,iBAAiBF,CAAI;AAC1C,WAAAE,EAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,KAAK;AAAA,IAAA,CACxB,GACM,MAAMA,EAAS,WAAA;AAAA,EACxB,GAAG,CAAA,CAAE,GAEER;AACT;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-locale-BuXR_Zl9.js","sources":["../../src/hooks/use-media-query.ts","../../src/hooks/use-locale.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Subscribe to an arbitrary media query and return whether it currently\n * matches. Useful for responsive components that need to branch on\n * viewport size without hand-rolling `matchMedia` plumbing.\n *\n * SSR-safe: returns `false` when `window` is undefined. The effect is\n * client-only, so hydration mismatches are avoided without a null\n * sentinel at the type level.\n *\n * Mirrors the shape of `usePrefersReducedMotion` — Safari < 14 fallback\n * via `addListener` / `removeListener` is included.\n *\n * @example\n * const isMobile = useMediaQuery('(max-width: 640px)');\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState<boolean>(() => {\n if (\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return false;\n }\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return;\n }\n const mql = window.matchMedia(query);\n // Re-sync in case the query (or the OS state) changed between the\n // initial useState read and the first effect.\n setMatches(mql.matches);\n const onChange = (ev: MediaQueryListEvent) => setMatches(ev.matches);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }\n mql.addListener(onChange);\n return () => mql.removeListener(onChange);\n }, [query]);\n\n return matches;\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport i18n from '../i18n/config';\n\nexport type LocaleDir = 'ltr' | 'rtl';\n\nexport interface UseLocaleReturn {\n /** Current i18next language tag (e.g. `'en'`, `'ar'`, `'ja'`). */\n locale: string;\n /** Reading direction for the current locale, derived from `i18n.dir(locale)`. */\n dir: LocaleDir;\n /** Change the active i18next language. */\n setLocale: (next: string) => Promise<void>;\n}\n\n/**\n * Read the active i18n locale and its reading direction. Subscribes to\n * `i18next.on('languageChanged')` so consumers re-render when the locale\n * changes (e.g. via `<select>` in a settings page).\n *\n * SSR-safe: the initial state is read synchronously from the i18next\n * instance, which itself ships an SSR-friendly default. The\n * `languageChanged` listener attaches in `useEffect`, so it only runs\n * client-side.\n *\n * Thin wrapper — the underlying source of truth is the i18next instance\n * exported from `src/i18n/config.ts`. Use this hook over reading\n * `i18n.language` directly so components can:\n * 1. Re-render on language change without ad-hoc state.\n * 2. Get `dir` derived correctly (RTL for `ar`).\n */\nexport function useLocale(): UseLocaleReturn {\n const [locale, setLocaleState] = useState<string>(() => i18n.language);\n\n useEffect(() => {\n const onChange = (next: string) => setLocaleState(next);\n i18n.on('languageChanged', onChange);\n // Re-sync — the `i18n.language` may have settled between the\n // initial useState read and effect attach (async language load).\n if (i18n.language !== locale) setLocaleState(i18n.language);\n return () => {\n i18n.off('languageChanged', onChange);\n };\n }, [locale]);\n\n const setLocale = useCallback(async (next: string) => {\n await i18n.changeLanguage(next);\n }, []);\n\n // `i18n.dir(locale)` returns `'ltr' | 'rtl'` — the i18next types declare\n // it as `string`, so we narrow.\n const dir = (i18n.dir(locale) === 'rtl' ? 'rtl' : 'ltr') as LocaleDir;\n\n return { locale, dir, setLocale };\n}\n"],"names":["useMediaQuery","query","matches","setMatches","useState","useEffect","mql","onChange","ev","useLocale","locale","setLocaleState","i18n","next","setLocale","useCallback","dir"],"mappings":";;;AAiBO,SAASA,EAAcC,GAAwB;AACpD,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAkB,MAE5C,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,aAEtB,KAEF,OAAO,WAAWH,CAAK,EAAE,OACjC;AAED,SAAAI,EAAU,MAAM;AACd,QACE,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe;AAE7B;AAEF,UAAMC,IAAM,OAAO,WAAWL,CAAK;AAGnC,IAAAE,EAAWG,EAAI,OAAO;AACtB,UAAMC,IAAW,CAACC,MAA4BL,EAAWK,EAAG,OAAO;AACnE,WAAI,OAAOF,EAAI,oBAAqB,cAClCA,EAAI,iBAAiB,UAAUC,CAAQ,GAChC,MAAMD,EAAI,oBAAoB,UAAUC,CAAQ,MAEzDD,EAAI,YAAYC,CAAQ,GACjB,MAAMD,EAAI,eAAeC,CAAQ;AAAA,EAC1C,GAAG,CAACN,CAAK,CAAC,GAEHC;AACT;ACnBO,SAASO,IAA6B;AAC3C,QAAM,CAACC,GAAQC,CAAc,IAAIP,EAAiB,MAAMQ,EAAK,QAAQ;AAErE,EAAAP,EAAU,MAAM;AACd,UAAME,IAAW,CAACM,MAAiBF,EAAeE,CAAI;AACtDD,WAAAA,EAAK,GAAG,mBAAmBL,CAAQ,GAG/BK,EAAK,aAAaF,KAAQC,EAAeC,EAAK,QAAQ,GACnD,MAAM;AACXA,MAAAA,EAAK,IAAI,mBAAmBL,CAAQ;AAAA,IACtC;AAAA,EACF,GAAG,CAACG,CAAM,CAAC;AAEX,QAAMI,IAAYC,EAAY,OAAOF,MAAiB;AACpD,UAAMD,EAAK,eAAeC,CAAI;AAAA,EAChC,GAAG,CAAA,CAAE,GAICG,IAAOJ,EAAK,IAAIF,CAAM,MAAM,QAAQ,QAAQ;AAElD,SAAO,EAAE,QAAAA,GAAQ,KAAAM,GAAK,WAAAF,EAAA;AACxB;"}