@alfadocs/ui-kit 0.1.10 → 0.2.1

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 (958) hide show
  1. package/dist/_chunks/accordion-DOmxGEWU.js +228 -0
  2. package/dist/_chunks/{agenda-card-DwLIxgi7.js → agenda-card-CalZqycc.js} +12 -3
  3. package/dist/_chunks/{agenda-tray-DUvengGQ.js → agenda-tray-3ffFDQZC.js} +54 -51
  4. package/dist/_chunks/{ai-prompt-input.agent-0NHYLTWD.js → ai-prompt-input-BBiDlEIS.js} +231 -231
  5. package/dist/_chunks/{alert-BlOUMkXj.js → alert-B1sj8Ss0.js} +24 -14
  6. package/dist/_chunks/{apexcharts-theme-BkSShpEy.js → apexcharts-theme-BJigns_V.js} +7 -2
  7. package/dist/_chunks/{app-frame-6d7Lu4ea.js → app-frame-CDJOgPXe.js} +7 -16
  8. package/dist/_chunks/{audio-recorder.agent--VKeykUp.js → audio-recorder-B4U1LuiQ.js} +161 -162
  9. package/dist/_chunks/{audio-visualiser-CeMPCZkd.js → audio-visualiser-ByDEFLNm.js} +25 -19
  10. package/dist/_chunks/autocomplete-D4oUZbsP.js +466 -0
  11. package/dist/_chunks/{badge-mrstWxve.js → badge-DKFbntoa.js} +16 -13
  12. package/dist/_chunks/{balance-cell-renderer-5CA7zpAi.js → balance-cell-renderer-B8zgIM-m.js} +63 -44
  13. package/dist/_chunks/{breadcrumb.agent-GM2hAKFX.js → breadcrumb-D1snXjPb.js} +165 -157
  14. package/dist/_chunks/{button-7mLWcMp_.js → button-DD_0Xdmr.js} +12 -2
  15. package/dist/_chunks/{calendar-nGEgelJs.js → calendar-zy0tUUVG.js} +13 -18
  16. package/dist/_chunks/{card-BEy58ZKp.js → card-CWzuTLYE.js} +40 -34
  17. package/dist/_chunks/{chart.agent-_pRYS17d.js → chart-BLvFl169.js} +147 -131
  18. package/dist/_chunks/chat-container-ClzsWXp2.js +220 -0
  19. package/dist/_chunks/chat-input-DOlsB1fm.js +333 -0
  20. package/dist/_chunks/{chat-message-ByouZpPP.js → chat-message-DoAhgUTj.js} +23 -13
  21. package/dist/_chunks/{collapsible.agent-DkS1jVyn.js → collapsible-CuxUBoHJ.js} +97 -99
  22. package/dist/_chunks/{color-picker-94qcBZqZ.js → color-picker-CTIcHlDF.js} +111 -45
  23. package/dist/_chunks/combobox-BLWruOxK.js +459 -0
  24. package/dist/_chunks/command-palette-C_vgSgrI.js +441 -0
  25. package/dist/_chunks/{date-picker-BqPTn7bO.js → date-picker-B1PO1ZQP.js} +190 -181
  26. package/dist/_chunks/{date-range-picker-B2hGsffw.js → date-range-picker-mix2nEVC.js} +21 -8
  27. package/dist/_chunks/{date-time-picker-Bzt0S8yO.js → date-time-picker-Dnong_BY.js} +30 -15
  28. package/dist/_chunks/{description-list-DvJbp6Yg.js → description-list-BYA77Yud.js} +26 -23
  29. package/dist/_chunks/dialog-BPD7wlGE.js +211 -0
  30. package/dist/_chunks/dropdown-menu-CpiF6CPz.js +300 -0
  31. package/dist/_chunks/{empty-state-DQPtRp2b.js → empty-state-3CLJIXSj.js} +132 -101
  32. package/dist/_chunks/file-upload-C947ACDK.js +829 -0
  33. package/dist/_chunks/{floating-action-button-Cnw-f6AG.js → floating-action-button-C8OYj8mE.js} +9 -2
  34. package/dist/_chunks/{form-field-BfsPLTSc.js → form-field-Bmkeh7WY.js} +12 -11
  35. package/dist/_chunks/{form-field-context-94LwgYTQ.js → form-field-context-B3APVHKx.js} +4 -2
  36. package/dist/_chunks/{freemium-paywall.agent-_nQqLyRF.js → freemium-paywall-CrVefV0M.js} +124 -117
  37. package/dist/_chunks/{header-BGn1mRp8.js → header-D0ULgQl3.js} +69 -68
  38. package/dist/_chunks/{icon-button-Wnnde5lc.js → icon-button-C4CGcYuz.js} +11 -3
  39. package/dist/_chunks/{kbd-8baVw3KU.js → kbd-Cglkd7CY.js} +6 -2
  40. package/dist/_chunks/{key-value-pair-JRFS9Xrh.js → key-value-pair-CgWvAIGb.js} +2 -2
  41. package/dist/_chunks/{leo-sidebar-BwINPdix.js → leo-sidebar-CfEY-xi2.js} +16 -20
  42. package/dist/_chunks/{link-QheANk74.js → link-BcYW1eNM.js} +48 -35
  43. package/dist/_chunks/list-qP6p0NTw.js +434 -0
  44. package/dist/_chunks/{logo-BpFoCL-s.js → logo-_Z-jLq80.js} +155 -26
  45. package/dist/_chunks/{matrix-rain-BEkvux64.js → matrix-rain-CRPMXcVx.js} +8 -2
  46. package/dist/_chunks/{message-card-qhoGv947.js → message-card-DjvsB_3U.js} +58 -55
  47. package/dist/_chunks/{message-tray-xHUCra-Y.js → message-tray-BbnAzlLH.js} +86 -91
  48. package/dist/_chunks/{multi-select.agent-Do6CeQUT.js → multi-select-wqqrgjUQ.js} +326 -291
  49. package/dist/_chunks/{navigation-menu.agent-D69ND6Qq.js → navigation-menu-ClbHeawy.js} +136 -123
  50. package/dist/_chunks/{notification-card-CsVEYJE-.js → notification-card-uTPEvAQS.js} +22 -22
  51. package/dist/_chunks/{notification-tray-DTXMq42J.js → notification-tray-PGtMqXbP.js} +84 -80
  52. package/dist/_chunks/{number-input-fvGmnRy9.js → number-input-Q7wkHnvQ.js} +7 -3
  53. package/dist/_chunks/{otp-input-EglXOUue.js → otp-input-C9gUByF0.js} +6 -3
  54. package/dist/_chunks/{pagination.agent-BkZQl45y.js → pagination-3AC4zTsi.js} +234 -194
  55. package/dist/_chunks/{password-input-D6kuYXmr.js → password-input-C4LmjIH1.js} +6 -9
  56. package/dist/_chunks/{patient-shell-BRmrrUUW.js → patient-shell-BlsEUKWB.js} +10 -15
  57. package/dist/_chunks/{payment-form-BWaXas8z.js → payment-form-B_BdHwjb.js} +197 -188
  58. package/dist/_chunks/{pdf-viewer.agent-BaGEDheA.js → pdf-viewer-CZIfY08H.js} +270 -241
  59. package/dist/_chunks/{phone-input-C8Op4sEc.js → phone-input-CSHJOJ13.js} +4 -9
  60. package/dist/_chunks/popover-DekUKNBk.js +293 -0
  61. package/dist/_chunks/{privacy-lock.agent-C1i1-T58.js → privacy-lock-BKsI6ReN.js} +117 -109
  62. package/dist/_chunks/progress-C11tqhoI.js +298 -0
  63. package/dist/_chunks/{recaptcha-widget.agent-BGHpU5zD.js → recaptcha-widget-NyfOfLII.js} +95 -86
  64. package/dist/_chunks/resizable-mpXXyIsN.js +483 -0
  65. package/dist/_chunks/{rich-text-editor.agent-DnE125Tz.js → rich-text-editor-C7TCIlQO.js} +298 -209
  66. package/dist/_chunks/{scroll-area-DLr5w9Dd.js → scroll-area-DEDU-lp-.js} +67 -54
  67. package/dist/_chunks/{search-bar.agent-DxFAxctc.js → search-bar-BTDfgYtg.js} +291 -268
  68. package/dist/_chunks/{search-input-Xw3cdWXW.js → search-input-CdJIEjFo.js} +116 -107
  69. package/dist/_chunks/{select-DY1Cb2Tg.js → select-y6bXV1f1.js} +84 -83
  70. package/dist/_chunks/{separator-B4wXDLNC.js → separator-CYU_bGFn.js} +2 -5
  71. package/dist/_chunks/{sheet-B9kH9pcI.js → sheet-4tgMFwj0.js} +135 -60
  72. package/dist/_chunks/{sidebar-CHF5xr_P.js → sidebar-Bx3wCDyy.js} +546 -457
  73. package/dist/_chunks/{sign-in-with-alfadocs-button-BN_FPGHT.js → sign-in-with-alfadocs-button-B9UrqOqH.js} +9 -5
  74. package/dist/_chunks/{signature-capture.agent-BpeDwFht.js → signature-capture-DjMlFOzS.js} +210 -212
  75. package/dist/_chunks/{skeleton-dtqyF09N.js → skeleton-CZbwyJAA.js} +9 -3
  76. package/dist/_chunks/{slider-CcsQTZTA.js → slider-BT2bZWsy.js} +138 -134
  77. package/dist/_chunks/{slot-grid-D_l5VsHG.js → slot-grid-CgpYgBkW.js} +105 -95
  78. package/dist/_chunks/{sparkline.agent-56Sj7nOP.js → sparkline-_gy8aJDG.js} +107 -100
  79. package/dist/_chunks/{spinner-GCcv67vh.js → spinner-DLaYfLPl.js} +66 -14
  80. package/dist/_chunks/{stat-DUB6g90R.js → stat-B9PHSPbN.js} +45 -27
  81. package/dist/_chunks/{stepper-calendar.agent-9iT3ClIB.js → stepper-calendar-BLOJUE0-.js} +189 -187
  82. package/dist/_chunks/stepper-progress-jFY8BSf7.js +208 -0
  83. package/dist/_chunks/{suggestion-chip-DhFrkRPj.js → suggestion-chip-C4Jz0LrM.js} +50 -52
  84. package/dist/_chunks/{switch-BYEH8I53.js → switch-C0psfIQF.js} +2 -2
  85. package/dist/_chunks/{tabs.agent-h7NvsTR1.js → tabs-DaFA3Muo.js} +183 -155
  86. package/dist/_chunks/{tag-BqidXKo3.js → tag-DuLMjRbF.js} +90 -32
  87. package/dist/_chunks/{task-card-CY5ztNkU.js → task-card-Dw_ZJDL8.js} +5 -2
  88. package/dist/_chunks/{task-tray-CCoUdorl.js → task-tray-XlIW9ueh.js} +50 -49
  89. package/dist/_chunks/{text-area-C_M8wliK.js → text-area-CO9Dz0qX.js} +2 -2
  90. package/dist/_chunks/{text-input-BX39e6T6.js → text-input-DZwt9L8H.js} +65 -62
  91. package/dist/_chunks/{theme-root-DDb0TJjd.js → theme-root-CSKD5ZRm.js} +9 -2
  92. package/dist/_chunks/{theme-toggle.agent-btmXTWdW.js → theme-toggle-B9zzCnvl.js} +179 -177
  93. package/dist/_chunks/{time-picker-B8AMIrX7.js → time-picker-DvPUmHH-.js} +95 -93
  94. package/dist/_chunks/{timeline.agent-CRPza9wc.js → timeline-BvmnQadS.js} +96 -96
  95. package/dist/_chunks/{toast.agent-BjEGuq1Z.js → toast.agent-BwKXA0km.js} +46 -8
  96. package/dist/_chunks/{tooth-scheme.agent-CWrQBjJM.js → tooth-scheme-3mITSXiZ.js} +146 -162
  97. package/dist/_chunks/transaction-chip-DE6DITun.js +196 -0
  98. package/dist/_chunks/{transcript-panel.agent-BXEYP6w-.js → transcript-panel-Bx5ANMsv.js} +110 -101
  99. package/dist/_chunks/{typing-indicator-CbUBf-Dx.js → typing-indicator-BZ5jXZPn.js} +27 -5
  100. package/dist/_chunks/{use-theme-BMUhembX.js → use-theme-B1cwAXJR.js} +2 -5
  101. package/dist/_chunks/{visually-hidden-Bw7vBHLm.js → visually-hidden-BHxEUGyT.js} +11 -2
  102. package/dist/_chunks/{warning-stack-8Pa3pekh.js → warning-stack-VygGHSqC.js} +11 -13
  103. package/dist/_chunks/{workflow-map-D2A7rTEG.js → workflow-map-C-nlogPC.js} +430 -452
  104. package/dist/agent-catalog.json +594 -15
  105. package/dist/components/_shared/index.d.ts +2 -2
  106. package/dist/components/accordion/index.d.ts +1 -1
  107. package/dist/components/accordion/index.js +5 -6
  108. package/dist/components/agenda-card/index.js +1 -1
  109. package/dist/components/agenda-tray/agenda-tray.d.ts +1 -1
  110. package/dist/components/agenda-tray/index.js +1 -1
  111. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +1 -1
  112. package/dist/components/ai-prompt-input/index.js +1 -1
  113. package/dist/components/alert/index.d.ts +1 -1
  114. package/dist/components/alert/index.js +1 -1
  115. package/dist/components/app-frame/index.js +1 -1
  116. package/dist/components/audio-recorder/index.js +1 -1
  117. package/dist/components/audio-visualiser/index.js +1 -1
  118. package/dist/components/autocomplete/index.js +1 -1
  119. package/dist/components/badge/index.js +1 -1
  120. package/dist/components/breadcrumb/breadcrumb.d.ts +1 -1
  121. package/dist/components/breadcrumb/index.js +1 -1
  122. package/dist/components/button/index.js +2 -2
  123. package/dist/components/calendar/index.js +1 -1
  124. package/dist/components/card/index.js +1 -1
  125. package/dist/components/chart/index.d.ts +1 -1
  126. package/dist/components/chart/index.js +1 -1
  127. package/dist/components/chat-container/chat-container.d.ts +1 -1
  128. package/dist/components/chat-container/index.js +2 -3
  129. package/dist/components/chat-input/chat-input.d.ts +1 -1
  130. package/dist/components/chat-input/index.js +3 -4
  131. package/dist/components/chat-message/index.js +1 -1
  132. package/dist/components/checkbox-group/index.d.ts +1 -1
  133. package/dist/components/collapsible/collapsible.d.ts +1 -1
  134. package/dist/components/collapsible/index.d.ts +1 -1
  135. package/dist/components/collapsible/index.js +1 -1
  136. package/dist/components/color-picker/index.js +1 -1
  137. package/dist/components/combobox/index.d.ts +1 -1
  138. package/dist/components/combobox/index.js +1 -1
  139. package/dist/components/command-palette/command-palette.d.ts +46 -13
  140. package/dist/components/command-palette/index.js +1 -1
  141. package/dist/components/data-table/data-table.d.ts +3 -1
  142. package/dist/components/data-table/index.js +1 -1
  143. package/dist/components/data-table/toolbar.d.ts +6 -5
  144. package/dist/components/date-picker/date-picker.d.ts +1 -1
  145. package/dist/components/date-picker/index.d.ts +1 -1
  146. package/dist/components/date-picker/index.js +1 -1
  147. package/dist/components/date-range-picker/index.js +1 -1
  148. package/dist/components/date-time-picker/index.d.ts +1 -1
  149. package/dist/components/date-time-picker/index.js +1 -1
  150. package/dist/components/description-list/description-list.d.ts +1 -2
  151. package/dist/components/description-list/index.js +1 -1
  152. package/dist/components/dialog/dialog.d.ts +2 -2
  153. package/dist/components/dialog/index.js +1 -1
  154. package/dist/components/dropdown-menu/dropdown-menu.d.ts +11 -16
  155. package/dist/components/dropdown-menu/index.js +3 -4
  156. package/dist/components/empty-state/index.js +1 -1
  157. package/dist/components/file-upload/index.d.ts +1 -1
  158. package/dist/components/file-upload/index.js +1 -1
  159. package/dist/components/floating-action-button/index.js +1 -1
  160. package/dist/components/form-field/index.js +2 -2
  161. package/dist/components/freemium-paywall/freemium-paywall.d.ts +1 -1
  162. package/dist/components/freemium-paywall/index.js +1 -1
  163. package/dist/components/header/index.js +1 -1
  164. package/dist/components/icon-button/index.js +1 -1
  165. package/dist/components/index.d.ts +1 -0
  166. package/dist/components/kbd/index.js +1 -1
  167. package/dist/components/key-value-pair/index.js +1 -1
  168. package/dist/components/link/index.js +1 -1
  169. package/dist/components/link/link.d.ts +1 -0
  170. package/dist/components/list/index.js +1 -1
  171. package/dist/components/logo/index.js +1 -1
  172. package/dist/components/matrix-rain/index.js +1 -1
  173. package/dist/components/message-card/index.d.ts +1 -1
  174. package/dist/components/message-card/index.js +1 -1
  175. package/dist/components/message-tray/index.js +1 -1
  176. package/dist/components/message-tray/message-tray.d.ts +1 -1
  177. package/dist/components/multi-select/index.js +1 -1
  178. package/dist/components/navigation-menu/index.js +1 -1
  179. package/dist/components/navigation-menu/navigation-menu.d.ts +1 -1
  180. package/dist/components/notification-card/index.d.ts +1 -1
  181. package/dist/components/notification-card/index.js +1 -1
  182. package/dist/components/notification-tray/index.js +1 -1
  183. package/dist/components/notification-tray/notification-tray.d.ts +1 -1
  184. package/dist/components/number-input/index.js +1 -1
  185. package/dist/components/otp-input/index.js +1 -1
  186. package/dist/components/pagination/index.js +1 -1
  187. package/dist/components/pagination/pagination.d.ts +4 -6
  188. package/dist/components/password-input/index.js +1 -1
  189. package/dist/components/payment-form/index.js +7 -8
  190. package/dist/components/payment-form/payment-form.d.ts +1 -1
  191. package/dist/components/pdf-viewer/index.js +1 -1
  192. package/dist/components/phone-input/index.d.ts +1 -1
  193. package/dist/components/phone-input/index.js +1 -1
  194. package/dist/components/popover/index.js +3 -4
  195. package/dist/components/privacy-lock/index.js +1 -1
  196. package/dist/components/privacy-lock/privacy-lock.d.ts +1 -1
  197. package/dist/components/progress/index.js +3 -4
  198. package/dist/components/recaptcha-widget/index.js +1 -1
  199. package/dist/components/resizable/index.d.ts +1 -1
  200. package/dist/components/resizable/index.js +1 -1
  201. package/dist/components/rich-text-editor/index.js +1 -1
  202. package/dist/components/scroll-area/index.js +1 -1
  203. package/dist/components/search-bar/index.js +1 -1
  204. package/dist/components/search-bar/search-bar.d.ts +1 -1
  205. package/dist/components/search-input/index.js +1 -1
  206. package/dist/components/select/index.js +1 -1
  207. package/dist/components/select/select.d.ts +1 -1
  208. package/dist/components/separator/index.js +1 -1
  209. package/dist/components/sheet/index.js +3 -4
  210. package/dist/components/sheet/sheet.d.ts +2 -2
  211. package/dist/components/sidebar/index.js +7 -8
  212. package/dist/components/sidebar/sidebar.d.ts +0 -2
  213. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  214. package/dist/components/signature-capture/index.js +1 -1
  215. package/dist/components/skeleton/index.js +1 -1
  216. package/dist/components/slider/index.js +1 -1
  217. package/dist/components/slot-grid/index.js +1 -1
  218. package/dist/components/sparkline/index.js +1 -1
  219. package/dist/components/spinner/index.js +1 -1
  220. package/dist/components/stat/index.js +1 -1
  221. package/dist/components/stepper-calendar/index.js +1 -1
  222. package/dist/components/stepper-calendar/stepper-calendar.d.ts +1 -1
  223. package/dist/components/stepper-progress/index.d.ts +1 -1
  224. package/dist/components/stepper-progress/index.js +1 -2
  225. package/dist/components/stepper-progress/stepper-progress.d.ts +1 -1
  226. package/dist/components/suggestion-chip/index.js +1 -1
  227. package/dist/components/switch/index.js +1 -1
  228. package/dist/components/tabs/index.d.ts +1 -1
  229. package/dist/components/tabs/index.js +1 -1
  230. package/dist/components/tag/index.js +1 -1
  231. package/dist/components/task-card/index.js +1 -1
  232. package/dist/components/task-tray/index.js +1 -1
  233. package/dist/components/task-tray/task-tray.d.ts +1 -1
  234. package/dist/components/text-area/index.js +1 -1
  235. package/dist/components/text-input/index.js +1 -1
  236. package/dist/components/theme-root/index.js +1 -1
  237. package/dist/components/theme-toggle/index.js +1 -1
  238. package/dist/components/theme-toggle/theme-toggle.d.ts +1 -1
  239. package/dist/components/time-picker/index.js +1 -1
  240. package/dist/components/time-picker/time-picker.d.ts +1 -1
  241. package/dist/components/timeline/index.js +1 -1
  242. package/dist/components/timeline/timeline.d.ts +1 -1
  243. package/dist/components/toast/index.js +1 -1
  244. package/dist/components/tooth-scheme/index.js +1 -1
  245. package/dist/components/tooth-scheme/tooth-scheme.d.ts +1 -1
  246. package/dist/components/transaction-chip/index.d.ts +3 -0
  247. package/dist/components/transaction-chip/index.js +5 -0
  248. package/dist/components/transaction-chip/transaction-chip.d.ts +30 -0
  249. package/dist/components/transcript-panel/index.js +1 -1
  250. package/dist/components/transcript-panel/transcript-panel.d.ts +1 -1
  251. package/dist/components/typing-indicator/index.js +1 -1
  252. package/dist/components/visually-hidden/index.js +1 -1
  253. package/dist/components/warning-stack/index.js +1 -1
  254. package/dist/components/workflow/index.js +1 -1
  255. package/dist/components/workflow/workflow-editor.d.ts +1 -1
  256. package/dist/hooks/index.js +1 -1
  257. package/dist/i18n/config.js +36 -0
  258. package/dist/i18n/resources.d.ts +36 -0
  259. package/dist/index.js +394 -402
  260. package/dist/locales/de.json +12 -0
  261. package/dist/locales/en.json +12 -0
  262. package/dist/locales/it.json +12 -0
  263. package/dist/patterns/leo-assistant/index.js +1 -1
  264. package/dist/patterns/patient-shell/index.js +1 -1
  265. package/dist/safe-html/index.js +20 -3
  266. package/dist/tokens.css +2 -2
  267. package/package.json +8 -6
  268. package/dist/_chunks/accordion-BEnrZmAn.js +0 -120
  269. package/dist/_chunks/accordion-BEnrZmAn.js.map +0 -1
  270. package/dist/_chunks/accordion.agent-BTjeO1Sx.js +0 -52
  271. package/dist/_chunks/accordion.agent-BTjeO1Sx.js.map +0 -1
  272. package/dist/_chunks/agenda-card-DwLIxgi7.js.map +0 -1
  273. package/dist/_chunks/agenda-card.agent-B_R47-c9.js.map +0 -1
  274. package/dist/_chunks/agenda-tray-DUvengGQ.js.map +0 -1
  275. package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js.map +0 -1
  276. package/dist/_chunks/alert-BlOUMkXj.js.map +0 -1
  277. package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +0 -1
  278. package/dist/_chunks/app-frame-6d7Lu4ea.js.map +0 -1
  279. package/dist/_chunks/aspect-ratio-DeSNzASA.js.map +0 -1
  280. package/dist/_chunks/audio-recorder.agent--VKeykUp.js.map +0 -1
  281. package/dist/_chunks/audio-visualiser-CeMPCZkd.js.map +0 -1
  282. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js +0 -432
  283. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js.map +0 -1
  284. package/dist/_chunks/avatar-Dcr6XuDQ.js.map +0 -1
  285. package/dist/_chunks/badge-mrstWxve.js.map +0 -1
  286. package/dist/_chunks/balance-cell-renderer-5CA7zpAi.js.map +0 -1
  287. package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js.map +0 -1
  288. package/dist/_chunks/button-7mLWcMp_.js.map +0 -1
  289. package/dist/_chunks/button-group-CONver7M.js.map +0 -1
  290. package/dist/_chunks/button.agent-BuGZBktn.js.map +0 -1
  291. package/dist/_chunks/calendar-nGEgelJs.js.map +0 -1
  292. package/dist/_chunks/card-BEy58ZKp.js.map +0 -1
  293. package/dist/_chunks/chart.agent-_pRYS17d.js.map +0 -1
  294. package/dist/_chunks/chat-container-Dl0Kfy5a.js +0 -175
  295. package/dist/_chunks/chat-container-Dl0Kfy5a.js.map +0 -1
  296. package/dist/_chunks/chat-container.agent-CM4WModE.js +0 -27
  297. package/dist/_chunks/chat-container.agent-CM4WModE.js.map +0 -1
  298. package/dist/_chunks/chat-input-C_tMQv92.js +0 -252
  299. package/dist/_chunks/chat-input-C_tMQv92.js.map +0 -1
  300. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js +0 -69
  301. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js.map +0 -1
  302. package/dist/_chunks/chat-message-ByouZpPP.js.map +0 -1
  303. package/dist/_chunks/check-DPdL_Sm7.js.map +0 -1
  304. package/dist/_chunks/checkbox-CtPM6Rup.js.map +0 -1
  305. package/dist/_chunks/checkbox-group-BTdEB6Yo.js.map +0 -1
  306. package/dist/_chunks/chevron-down-BX_NP2Yh.js.map +0 -1
  307. package/dist/_chunks/chevron-left-CX1jqD2M.js.map +0 -1
  308. package/dist/_chunks/chevron-right-BrpYejk0.js.map +0 -1
  309. package/dist/_chunks/chevron-up-zOEDrmBB.js.map +0 -1
  310. package/dist/_chunks/chevrons-right-d9MwesPG.js.map +0 -1
  311. package/dist/_chunks/circle-BkqTgYmt.js.map +0 -1
  312. package/dist/_chunks/circle-alert-ChA9opNA.js.map +0 -1
  313. package/dist/_chunks/circle-check-9AeSgJD_.js.map +0 -1
  314. package/dist/_chunks/circle-x-Du2CmjaU.js.map +0 -1
  315. package/dist/_chunks/clock-21AGPWJ5.js.map +0 -1
  316. package/dist/_chunks/collapsible.agent-DkS1jVyn.js.map +0 -1
  317. package/dist/_chunks/color-picker-94qcBZqZ.js.map +0 -1
  318. package/dist/_chunks/combobox.agent-CAvUkkIe.js +0 -410
  319. package/dist/_chunks/combobox.agent-CAvUkkIe.js.map +0 -1
  320. package/dist/_chunks/command-palette.agent-HatEt_EM.js +0 -391
  321. package/dist/_chunks/command-palette.agent-HatEt_EM.js.map +0 -1
  322. package/dist/_chunks/compose-refs-C0k0tdqF.js.map +0 -1
  323. package/dist/_chunks/copy-B00HK7tj.js.map +0 -1
  324. package/dist/_chunks/createLucideIcon-CrFbzy84.js.map +0 -1
  325. package/dist/_chunks/date-picker-BqPTn7bO.js.map +0 -1
  326. package/dist/_chunks/date-range-picker-B2hGsffw.js.map +0 -1
  327. package/dist/_chunks/date-time-picker-Bzt0S8yO.js.map +0 -1
  328. package/dist/_chunks/description-list-DvJbp6Yg.js.map +0 -1
  329. package/dist/_chunks/dialog.agent-Daf1TTko.js +0 -179
  330. package/dist/_chunks/dialog.agent-Daf1TTko.js.map +0 -1
  331. package/dist/_chunks/dropdown-menu-C7AZipNz.js +0 -219
  332. package/dist/_chunks/dropdown-menu-C7AZipNz.js.map +0 -1
  333. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js +0 -43
  334. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js.map +0 -1
  335. package/dist/_chunks/ellipsis-rgGdiK_9.js.map +0 -1
  336. package/dist/_chunks/empty-state-DQPtRp2b.js.map +0 -1
  337. package/dist/_chunks/eye-off-xEXDAh5z.js.map +0 -1
  338. package/dist/_chunks/file-text-DSNuv2B8.js.map +0 -1
  339. package/dist/_chunks/file-upload.agent-DJaH2dHg.js +0 -681
  340. package/dist/_chunks/file-upload.agent-DJaH2dHg.js.map +0 -1
  341. package/dist/_chunks/flag-DZ6V7-hU.js.map +0 -1
  342. package/dist/_chunks/floating-action-button-Cnw-f6AG.js.map +0 -1
  343. package/dist/_chunks/form-field-BfsPLTSc.js.map +0 -1
  344. package/dist/_chunks/form-field-context-94LwgYTQ.js.map +0 -1
  345. package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js.map +0 -1
  346. package/dist/_chunks/globe-BkEFMNSg.js.map +0 -1
  347. package/dist/_chunks/group-options-BvKhQ3xb.js.map +0 -1
  348. package/dist/_chunks/header-BGn1mRp8.js.map +0 -1
  349. package/dist/_chunks/icon-button-Wnnde5lc.js.map +0 -1
  350. package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +0 -1
  351. package/dist/_chunks/index-4xgbg-sn.js.map +0 -1
  352. package/dist/_chunks/index-CJE9uQmb.js.map +0 -1
  353. package/dist/_chunks/index-CeY1nNvd.js.map +0 -1
  354. package/dist/_chunks/index-D2ZczOXr.js.map +0 -1
  355. package/dist/_chunks/info-B9XNKn05.js.map +0 -1
  356. package/dist/_chunks/input-surface-u4QB0lxe.js.map +0 -1
  357. package/dist/_chunks/isSameDay-ecuM8PBB.js.map +0 -1
  358. package/dist/_chunks/isSameMonth-5wNF2f4I.js.map +0 -1
  359. package/dist/_chunks/kbd-8baVw3KU.js.map +0 -1
  360. package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +0 -1
  361. package/dist/_chunks/leo-sidebar-BwINPdix.js.map +0 -1
  362. package/dist/_chunks/link-QheANk74.js.map +0 -1
  363. package/dist/_chunks/list.agent-D0iWt4VI.js +0 -420
  364. package/dist/_chunks/list.agent-D0iWt4VI.js.map +0 -1
  365. package/dist/_chunks/live-region-C41SO3cA.js.map +0 -1
  366. package/dist/_chunks/log-out-616hnn2-.js.map +0 -1
  367. package/dist/_chunks/logo-BpFoCL-s.js.map +0 -1
  368. package/dist/_chunks/mail-C8irm52s.js.map +0 -1
  369. package/dist/_chunks/matrix-rain-BEkvux64.js.map +0 -1
  370. package/dist/_chunks/message-card-qhoGv947.js.map +0 -1
  371. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
  372. package/dist/_chunks/message-tray-xHUCra-Y.js.map +0 -1
  373. package/dist/_chunks/multi-select.agent-Do6CeQUT.js.map +0 -1
  374. package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js.map +0 -1
  375. package/dist/_chunks/normalize-diacritics-BNGbFNlJ.js.map +0 -1
  376. package/dist/_chunks/notification-card-CsVEYJE-.js.map +0 -1
  377. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
  378. package/dist/_chunks/notification-tray-DTXMq42J.js.map +0 -1
  379. package/dist/_chunks/number-input-fvGmnRy9.js.map +0 -1
  380. package/dist/_chunks/otp-input-EglXOUue.js.map +0 -1
  381. package/dist/_chunks/pagination.agent-BkZQl45y.js.map +0 -1
  382. package/dist/_chunks/password-input-D6kuYXmr.js.map +0 -1
  383. package/dist/_chunks/patient-shell-BRmrrUUW.js.map +0 -1
  384. package/dist/_chunks/payment-form-BWaXas8z.js.map +0 -1
  385. package/dist/_chunks/payment-form.agent-kuIfodCj.js +0 -31
  386. package/dist/_chunks/payment-form.agent-kuIfodCj.js.map +0 -1
  387. package/dist/_chunks/pdf-viewer.agent-BaGEDheA.js.map +0 -1
  388. package/dist/_chunks/phone-input-C8Op4sEc.js.map +0 -1
  389. package/dist/_chunks/plus-CYKNmfuA.js.map +0 -1
  390. package/dist/_chunks/popover-kFN8s84V.js +0 -229
  391. package/dist/_chunks/popover-kFN8s84V.js.map +0 -1
  392. package/dist/_chunks/popover.agent-K_d1cfbj.js +0 -39
  393. package/dist/_chunks/popover.agent-K_d1cfbj.js.map +0 -1
  394. package/dist/_chunks/printer-CeVEWfQq.js.map +0 -1
  395. package/dist/_chunks/privacy-lock.agent-C1i1-T58.js.map +0 -1
  396. package/dist/_chunks/progress-wNsqkw8I.js +0 -253
  397. package/dist/_chunks/progress-wNsqkw8I.js.map +0 -1
  398. package/dist/_chunks/progress.agent-C68rDOXL.js +0 -27
  399. package/dist/_chunks/progress.agent-C68rDOXL.js.map +0 -1
  400. package/dist/_chunks/purify.es-DpIUMBYC.js.map +0 -1
  401. package/dist/_chunks/radio-DvF59ThA.js.map +0 -1
  402. package/dist/_chunks/radio-group-Cz1a4QCA.js.map +0 -1
  403. package/dist/_chunks/react-day-picker-C04L_28V.js.map +0 -1
  404. package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js.map +0 -1
  405. package/dist/_chunks/registry-C9nwlNyL.js.map +0 -1
  406. package/dist/_chunks/resizable.agent-CMwZzvsi.js +0 -456
  407. package/dist/_chunks/resizable.agent-CMwZzvsi.js.map +0 -1
  408. package/dist/_chunks/rich-text-editor.agent-DnE125Tz.js.map +0 -1
  409. package/dist/_chunks/safe-image-src-DstKgCo7.js.map +0 -1
  410. package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +0 -1
  411. package/dist/_chunks/search-BonnQsHv.js.map +0 -1
  412. package/dist/_chunks/search-bar.agent-DxFAxctc.js.map +0 -1
  413. package/dist/_chunks/search-input-Xw3cdWXW.js.map +0 -1
  414. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
  415. package/dist/_chunks/select-DY1Cb2Tg.js.map +0 -1
  416. package/dist/_chunks/send-CySZIRPJ.js.map +0 -1
  417. package/dist/_chunks/separator-B4wXDLNC.js.map +0 -1
  418. package/dist/_chunks/sheet-B9kH9pcI.js.map +0 -1
  419. package/dist/_chunks/sheet.agent-QAyTOxgk.js +0 -46
  420. package/dist/_chunks/sheet.agent-QAyTOxgk.js.map +0 -1
  421. package/dist/_chunks/sidebar-CHF5xr_P.js.map +0 -1
  422. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js +0 -49
  423. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js.map +0 -1
  424. package/dist/_chunks/sign-in-with-alfadocs-button-BN_FPGHT.js.map +0 -1
  425. package/dist/_chunks/signature-capture.agent-BpeDwFht.js.map +0 -1
  426. package/dist/_chunks/skeleton-dtqyF09N.js.map +0 -1
  427. package/dist/_chunks/skip-link-DmZ3c6cb.js.map +0 -1
  428. package/dist/_chunks/slider-CcsQTZTA.js.map +0 -1
  429. package/dist/_chunks/slot-grid-D_l5VsHG.js.map +0 -1
  430. package/dist/_chunks/sparkline.agent-56Sj7nOP.js.map +0 -1
  431. package/dist/_chunks/spinner-GCcv67vh.js.map +0 -1
  432. package/dist/_chunks/square-CZoGU14v.js.map +0 -1
  433. package/dist/_chunks/square-check-big-Jr-0202D.js.map +0 -1
  434. package/dist/_chunks/stat-DUB6g90R.js.map +0 -1
  435. package/dist/_chunks/stepper-C-sIpRRU.js.map +0 -1
  436. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js.map +0 -1
  437. package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js.map +0 -1
  438. package/dist/_chunks/stepper-progress-Bmen-YXB.js +0 -149
  439. package/dist/_chunks/stepper-progress-Bmen-YXB.js.map +0 -1
  440. package/dist/_chunks/stepper-progress.agent-q9InWca4.js +0 -61
  441. package/dist/_chunks/stepper-progress.agent-q9InWca4.js.map +0 -1
  442. package/dist/_chunks/streaming-text-BgjCTVOw.js.map +0 -1
  443. package/dist/_chunks/suggestion-chip-DhFrkRPj.js.map +0 -1
  444. package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js.map +0 -1
  445. package/dist/_chunks/switch-BYEH8I53.js.map +0 -1
  446. package/dist/_chunks/tabs.agent-h7NvsTR1.js.map +0 -1
  447. package/dist/_chunks/tag-BqidXKo3.js.map +0 -1
  448. package/dist/_chunks/task-card-CY5ztNkU.js.map +0 -1
  449. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
  450. package/dist/_chunks/task-tray-CCoUdorl.js.map +0 -1
  451. package/dist/_chunks/text-area-C_M8wliK.js.map +0 -1
  452. package/dist/_chunks/text-input-BX39e6T6.js.map +0 -1
  453. package/dist/_chunks/theme-root-DDb0TJjd.js.map +0 -1
  454. package/dist/_chunks/theme-toggle.agent-btmXTWdW.js.map +0 -1
  455. package/dist/_chunks/time-picker-B8AMIrX7.js.map +0 -1
  456. package/dist/_chunks/timeline.agent-CRPza9wc.js.map +0 -1
  457. package/dist/_chunks/timestamp-BV2lC-wV.js.map +0 -1
  458. package/dist/_chunks/toast.agent-BjEGuq1Z.js.map +0 -1
  459. package/dist/_chunks/tooltip-DHik5yRI.js.map +0 -1
  460. package/dist/_chunks/tooth-scheme.agent-CWrQBjJM.js.map +0 -1
  461. package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js.map +0 -1
  462. package/dist/_chunks/triangle-alert-CBPUIzQo.js.map +0 -1
  463. package/dist/_chunks/typing-indicator-CbUBf-Dx.js.map +0 -1
  464. package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +0 -1
  465. package/dist/_chunks/use-direction-D6rvvG9G.js.map +0 -1
  466. package/dist/_chunks/use-locale-BuXR_Zl9.js.map +0 -1
  467. package/dist/_chunks/use-prefers-reduced-motion-BMwIQRjB.js.map +0 -1
  468. package/dist/_chunks/use-theme-BMUhembX.js.map +0 -1
  469. package/dist/_chunks/user-CPxpqFjJ.js.map +0 -1
  470. package/dist/_chunks/visually-hidden-Bw7vBHLm.js.map +0 -1
  471. package/dist/_chunks/warning-stack-8Pa3pekh.js.map +0 -1
  472. package/dist/_chunks/workflow-map-D2A7rTEG.js.map +0 -1
  473. package/dist/_chunks/x-CCcI3eJp.js.map +0 -1
  474. package/dist/agent/index.d.ts.map +0 -1
  475. package/dist/agent/registry.d.ts.map +0 -1
  476. package/dist/agent/types.d.ts.map +0 -1
  477. package/dist/brand/logo-asset/Alfadocs_Logo_BW.d.ts.map +0 -1
  478. package/dist/brand/logo-asset/Alfadocs_Logo_Main.d.ts.map +0 -1
  479. package/dist/brand/logo-asset/Alfadocs_Logo_Mark.d.ts.map +0 -1
  480. package/dist/brand/logo-asset/Alfadocs_Logo_Neg.d.ts.map +0 -1
  481. package/dist/brand/logo-asset/Alfadocs_Logo_Purple.d.ts.map +0 -1
  482. package/dist/brand/logo-asset/index.d.ts.map +0 -1
  483. package/dist/components/_shared/calendar-chevron.d.ts.map +0 -1
  484. package/dist/components/_shared/compose-refs.d.ts.map +0 -1
  485. package/dist/components/_shared/date-locale.d.ts.map +0 -1
  486. package/dist/components/_shared/date-picker-variants.d.ts.map +0 -1
  487. package/dist/components/_shared/date-utils.d.ts.map +0 -1
  488. package/dist/components/_shared/group-options.d.ts.map +0 -1
  489. package/dist/components/_shared/index.d.ts.map +0 -1
  490. package/dist/components/_shared/input-surface.d.ts.map +0 -1
  491. package/dist/components/_shared/normalize-diacritics.d.ts.map +0 -1
  492. package/dist/components/_shared/option.d.ts.map +0 -1
  493. package/dist/components/_shared/safe-html.d.ts.map +0 -1
  494. package/dist/components/_shared/safe-image-src.d.ts.map +0 -1
  495. package/dist/components/_shared/stepper.d.ts.map +0 -1
  496. package/dist/components/_shared/time.d.ts.map +0 -1
  497. package/dist/components/_shared/use-debounced-callback.d.ts.map +0 -1
  498. package/dist/components/_shared/use-direction.d.ts.map +0 -1
  499. package/dist/components/_shared/use-focus-trap.d.ts.map +0 -1
  500. package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +0 -1
  501. package/dist/components/accordion/accordion.agent.d.ts.map +0 -1
  502. package/dist/components/accordion/accordion.d.ts.map +0 -1
  503. package/dist/components/accordion/index.d.ts.map +0 -1
  504. package/dist/components/accordion/index.js.map +0 -1
  505. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +0 -1
  506. package/dist/components/agenda-card/agenda-card.d.ts.map +0 -1
  507. package/dist/components/agenda-card/index.d.ts.map +0 -1
  508. package/dist/components/agenda-card/index.js.map +0 -1
  509. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +0 -1
  510. package/dist/components/agenda-tray/agenda-tray.d.ts.map +0 -1
  511. package/dist/components/agenda-tray/index.d.ts.map +0 -1
  512. package/dist/components/agenda-tray/index.js.map +0 -1
  513. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +0 -1
  514. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +0 -1
  515. package/dist/components/ai-prompt-input/index.d.ts.map +0 -1
  516. package/dist/components/ai-prompt-input/index.js.map +0 -1
  517. package/dist/components/alert/alert.d.ts.map +0 -1
  518. package/dist/components/alert/index.d.ts.map +0 -1
  519. package/dist/components/alert/index.js.map +0 -1
  520. package/dist/components/app-frame/app-frame.d.ts.map +0 -1
  521. package/dist/components/app-frame/index.d.ts.map +0 -1
  522. package/dist/components/app-frame/index.js.map +0 -1
  523. package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +0 -1
  524. package/dist/components/aspect-ratio/index.d.ts.map +0 -1
  525. package/dist/components/aspect-ratio/index.js.map +0 -1
  526. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +0 -1
  527. package/dist/components/audio-recorder/audio-recorder.d.ts.map +0 -1
  528. package/dist/components/audio-recorder/index.d.ts.map +0 -1
  529. package/dist/components/audio-recorder/index.js.map +0 -1
  530. package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +0 -1
  531. package/dist/components/audio-visualiser/index.d.ts.map +0 -1
  532. package/dist/components/audio-visualiser/index.js.map +0 -1
  533. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +0 -1
  534. package/dist/components/autocomplete/autocomplete.d.ts.map +0 -1
  535. package/dist/components/autocomplete/index.d.ts.map +0 -1
  536. package/dist/components/autocomplete/index.js.map +0 -1
  537. package/dist/components/avatar/avatar.d.ts.map +0 -1
  538. package/dist/components/avatar/index.d.ts.map +0 -1
  539. package/dist/components/avatar/index.js.map +0 -1
  540. package/dist/components/badge/badge.d.ts.map +0 -1
  541. package/dist/components/badge/index.d.ts.map +0 -1
  542. package/dist/components/badge/index.js.map +0 -1
  543. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +0 -1
  544. package/dist/components/breadcrumb/breadcrumb.d.ts.map +0 -1
  545. package/dist/components/breadcrumb/index.d.ts.map +0 -1
  546. package/dist/components/breadcrumb/index.js.map +0 -1
  547. package/dist/components/button/button.agent.d.ts.map +0 -1
  548. package/dist/components/button/button.d.ts.map +0 -1
  549. package/dist/components/button/icon-button.d.ts.map +0 -1
  550. package/dist/components/button/index.d.ts.map +0 -1
  551. package/dist/components/button/index.js.map +0 -1
  552. package/dist/components/button-group/button-group.d.ts.map +0 -1
  553. package/dist/components/button-group/index.d.ts.map +0 -1
  554. package/dist/components/button-group/index.js.map +0 -1
  555. package/dist/components/calendar/calendar.agent.d.ts.map +0 -1
  556. package/dist/components/calendar/calendar.d.ts.map +0 -1
  557. package/dist/components/calendar/contrast-warning.d.ts.map +0 -1
  558. package/dist/components/calendar/index.d.ts.map +0 -1
  559. package/dist/components/calendar/index.js.map +0 -1
  560. package/dist/components/card/card.d.ts.map +0 -1
  561. package/dist/components/card/index.d.ts.map +0 -1
  562. package/dist/components/card/index.js.map +0 -1
  563. package/dist/components/chart/chart.agent.d.ts.map +0 -1
  564. package/dist/components/chart/chart.d.ts.map +0 -1
  565. package/dist/components/chart/index.d.ts.map +0 -1
  566. package/dist/components/chart/index.js.map +0 -1
  567. package/dist/components/chat-container/chat-container.agent.d.ts.map +0 -1
  568. package/dist/components/chat-container/chat-container.d.ts.map +0 -1
  569. package/dist/components/chat-container/index.d.ts.map +0 -1
  570. package/dist/components/chat-container/index.js.map +0 -1
  571. package/dist/components/chat-input/chat-input.agent.d.ts.map +0 -1
  572. package/dist/components/chat-input/chat-input.d.ts.map +0 -1
  573. package/dist/components/chat-input/index.d.ts.map +0 -1
  574. package/dist/components/chat-input/index.js.map +0 -1
  575. package/dist/components/chat-message/chat-message.d.ts.map +0 -1
  576. package/dist/components/chat-message/index.d.ts.map +0 -1
  577. package/dist/components/chat-message/index.js.map +0 -1
  578. package/dist/components/checkbox/checkbox-group-context.d.ts.map +0 -1
  579. package/dist/components/checkbox/checkbox.agent.d.ts.map +0 -1
  580. package/dist/components/checkbox/checkbox.d.ts.map +0 -1
  581. package/dist/components/checkbox/index.d.ts.map +0 -1
  582. package/dist/components/checkbox/index.js.map +0 -1
  583. package/dist/components/checkbox-group/checkbox-group.agent.d.ts.map +0 -1
  584. package/dist/components/checkbox-group/checkbox-group.d.ts.map +0 -1
  585. package/dist/components/checkbox-group/index.d.ts.map +0 -1
  586. package/dist/components/checkbox-group/index.js.map +0 -1
  587. package/dist/components/collapsible/collapsible.agent.d.ts.map +0 -1
  588. package/dist/components/collapsible/collapsible.d.ts.map +0 -1
  589. package/dist/components/collapsible/index.d.ts.map +0 -1
  590. package/dist/components/collapsible/index.js.map +0 -1
  591. package/dist/components/color-picker/color-picker.agent.d.ts.map +0 -1
  592. package/dist/components/color-picker/color-picker.d.ts.map +0 -1
  593. package/dist/components/color-picker/color-utils.d.ts.map +0 -1
  594. package/dist/components/color-picker/index.d.ts.map +0 -1
  595. package/dist/components/color-picker/index.js.map +0 -1
  596. package/dist/components/color-picker/palettes.d.ts.map +0 -1
  597. package/dist/components/combobox/combobox.agent.d.ts.map +0 -1
  598. package/dist/components/combobox/combobox.d.ts.map +0 -1
  599. package/dist/components/combobox/index.d.ts.map +0 -1
  600. package/dist/components/combobox/index.js.map +0 -1
  601. package/dist/components/command-palette/command-palette.agent.d.ts.map +0 -1
  602. package/dist/components/command-palette/command-palette.d.ts.map +0 -1
  603. package/dist/components/command-palette/index.d.ts.map +0 -1
  604. package/dist/components/command-palette/index.js.map +0 -1
  605. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +0 -1
  606. package/dist/components/data-table/cell-renderers/balance-cell-renderer.d.ts.map +0 -1
  607. package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +0 -1
  608. package/dist/components/data-table/cell-renderers/currency-cell-renderer.d.ts.map +0 -1
  609. package/dist/components/data-table/cell-renderers/date-cell-renderer.d.ts.map +0 -1
  610. package/dist/components/data-table/cell-renderers/link-cell-renderer.d.ts.map +0 -1
  611. package/dist/components/data-table/cell-renderers/status-cell-renderer.d.ts.map +0 -1
  612. package/dist/components/data-table/cell-renderers/tag-list-cell-renderer.d.ts.map +0 -1
  613. package/dist/components/data-table/cell-renderers/toggle-cell-renderer.d.ts.map +0 -1
  614. package/dist/components/data-table/cell-renderers/user-cell-renderer.d.ts.map +0 -1
  615. package/dist/components/data-table/data-table.agent.d.ts.map +0 -1
  616. package/dist/components/data-table/data-table.d.ts.map +0 -1
  617. package/dist/components/data-table/hooks/use-total-row.d.ts.map +0 -1
  618. package/dist/components/data-table/index.d.ts.map +0 -1
  619. package/dist/components/data-table/index.js.map +0 -1
  620. package/dist/components/data-table/toolbar.d.ts.map +0 -1
  621. package/dist/components/date-picker/date-picker.agent.d.ts.map +0 -1
  622. package/dist/components/date-picker/date-picker.d.ts.map +0 -1
  623. package/dist/components/date-picker/index.d.ts.map +0 -1
  624. package/dist/components/date-picker/index.js.map +0 -1
  625. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +0 -1
  626. package/dist/components/date-range-picker/date-range-picker.d.ts.map +0 -1
  627. package/dist/components/date-range-picker/index.d.ts.map +0 -1
  628. package/dist/components/date-range-picker/index.js.map +0 -1
  629. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +0 -1
  630. package/dist/components/date-time-picker/date-time-picker.d.ts.map +0 -1
  631. package/dist/components/date-time-picker/index.d.ts.map +0 -1
  632. package/dist/components/date-time-picker/index.js.map +0 -1
  633. package/dist/components/description-list/description-list.d.ts.map +0 -1
  634. package/dist/components/description-list/index.d.ts.map +0 -1
  635. package/dist/components/description-list/index.js.map +0 -1
  636. package/dist/components/dialog/dialog.agent.d.ts.map +0 -1
  637. package/dist/components/dialog/dialog.d.ts.map +0 -1
  638. package/dist/components/dialog/index.d.ts.map +0 -1
  639. package/dist/components/dialog/index.js.map +0 -1
  640. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +0 -1
  641. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
  642. package/dist/components/dropdown-menu/index.d.ts.map +0 -1
  643. package/dist/components/dropdown-menu/index.js.map +0 -1
  644. package/dist/components/empty-state/empty-state.d.ts.map +0 -1
  645. package/dist/components/empty-state/index.d.ts.map +0 -1
  646. package/dist/components/empty-state/index.js.map +0 -1
  647. package/dist/components/file-upload/file-upload.agent.d.ts.map +0 -1
  648. package/dist/components/file-upload/file-upload.d.ts.map +0 -1
  649. package/dist/components/file-upload/index.d.ts.map +0 -1
  650. package/dist/components/file-upload/index.js.map +0 -1
  651. package/dist/components/flag/flag.d.ts.map +0 -1
  652. package/dist/components/flag/index.d.ts.map +0 -1
  653. package/dist/components/flag/index.js.map +0 -1
  654. package/dist/components/floating-action-button/floating-action-button.d.ts.map +0 -1
  655. package/dist/components/floating-action-button/index.d.ts.map +0 -1
  656. package/dist/components/floating-action-button/index.js.map +0 -1
  657. package/dist/components/form-field/form-field-context.d.ts.map +0 -1
  658. package/dist/components/form-field/form-field.d.ts.map +0 -1
  659. package/dist/components/form-field/index.d.ts.map +0 -1
  660. package/dist/components/form-field/index.js.map +0 -1
  661. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +0 -1
  662. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +0 -1
  663. package/dist/components/freemium-paywall/index.d.ts.map +0 -1
  664. package/dist/components/freemium-paywall/index.js.map +0 -1
  665. package/dist/components/header/header.d.ts.map +0 -1
  666. package/dist/components/header/index.d.ts.map +0 -1
  667. package/dist/components/header/index.js.map +0 -1
  668. package/dist/components/icon-button/index.d.ts.map +0 -1
  669. package/dist/components/icon-button/index.js.map +0 -1
  670. package/dist/components/icon-button-group/icon-button-group.d.ts.map +0 -1
  671. package/dist/components/icon-button-group/index.d.ts.map +0 -1
  672. package/dist/components/icon-button-group/index.js.map +0 -1
  673. package/dist/components/index.d.ts.map +0 -1
  674. package/dist/components/kbd/index.d.ts.map +0 -1
  675. package/dist/components/kbd/index.js.map +0 -1
  676. package/dist/components/kbd/kbd.d.ts.map +0 -1
  677. package/dist/components/key-value-pair/index.d.ts.map +0 -1
  678. package/dist/components/key-value-pair/index.js.map +0 -1
  679. package/dist/components/key-value-pair/key-value-pair.d.ts.map +0 -1
  680. package/dist/components/link/index.d.ts.map +0 -1
  681. package/dist/components/link/index.js.map +0 -1
  682. package/dist/components/link/link.d.ts.map +0 -1
  683. package/dist/components/list/index.d.ts.map +0 -1
  684. package/dist/components/list/index.js.map +0 -1
  685. package/dist/components/list/list.agent.d.ts.map +0 -1
  686. package/dist/components/list/list.d.ts.map +0 -1
  687. package/dist/components/live-region/index.d.ts.map +0 -1
  688. package/dist/components/live-region/index.js.map +0 -1
  689. package/dist/components/live-region/live-region.d.ts.map +0 -1
  690. package/dist/components/logo/index.d.ts.map +0 -1
  691. package/dist/components/logo/index.js.map +0 -1
  692. package/dist/components/logo/logo.d.ts.map +0 -1
  693. package/dist/components/matrix-rain/index.d.ts.map +0 -1
  694. package/dist/components/matrix-rain/index.js.map +0 -1
  695. package/dist/components/matrix-rain/matrix-rain.d.ts.map +0 -1
  696. package/dist/components/message-card/index.d.ts.map +0 -1
  697. package/dist/components/message-card/index.js.map +0 -1
  698. package/dist/components/message-card/message-card.agent.d.ts.map +0 -1
  699. package/dist/components/message-card/message-card.d.ts.map +0 -1
  700. package/dist/components/message-tray/index.d.ts.map +0 -1
  701. package/dist/components/message-tray/index.js.map +0 -1
  702. package/dist/components/message-tray/message-tray.agent.d.ts.map +0 -1
  703. package/dist/components/message-tray/message-tray.d.ts.map +0 -1
  704. package/dist/components/multi-select/index.d.ts.map +0 -1
  705. package/dist/components/multi-select/index.js.map +0 -1
  706. package/dist/components/multi-select/multi-select.agent.d.ts.map +0 -1
  707. package/dist/components/multi-select/multi-select.d.ts.map +0 -1
  708. package/dist/components/navigation-menu/index.d.ts.map +0 -1
  709. package/dist/components/navigation-menu/index.js.map +0 -1
  710. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +0 -1
  711. package/dist/components/navigation-menu/navigation-menu.d.ts.map +0 -1
  712. package/dist/components/notification-card/index.d.ts.map +0 -1
  713. package/dist/components/notification-card/index.js.map +0 -1
  714. package/dist/components/notification-card/notification-card.agent.d.ts.map +0 -1
  715. package/dist/components/notification-card/notification-card.d.ts.map +0 -1
  716. package/dist/components/notification-tray/index.d.ts.map +0 -1
  717. package/dist/components/notification-tray/index.js.map +0 -1
  718. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +0 -1
  719. package/dist/components/notification-tray/notification-tray.d.ts.map +0 -1
  720. package/dist/components/number-input/index.d.ts.map +0 -1
  721. package/dist/components/number-input/index.js.map +0 -1
  722. package/dist/components/number-input/number-input.agent.d.ts.map +0 -1
  723. package/dist/components/number-input/number-input.d.ts.map +0 -1
  724. package/dist/components/number-input/use-locale-number.d.ts.map +0 -1
  725. package/dist/components/otp-input/index.d.ts.map +0 -1
  726. package/dist/components/otp-input/index.js.map +0 -1
  727. package/dist/components/otp-input/otp-input.agent.d.ts.map +0 -1
  728. package/dist/components/otp-input/otp-input.d.ts.map +0 -1
  729. package/dist/components/pagination/index.d.ts.map +0 -1
  730. package/dist/components/pagination/index.js.map +0 -1
  731. package/dist/components/pagination/pagination.agent.d.ts.map +0 -1
  732. package/dist/components/pagination/pagination.d.ts.map +0 -1
  733. package/dist/components/password-input/index.d.ts.map +0 -1
  734. package/dist/components/password-input/index.js.map +0 -1
  735. package/dist/components/password-input/password-input.agent.d.ts.map +0 -1
  736. package/dist/components/password-input/password-input.d.ts.map +0 -1
  737. package/dist/components/payment-form/index.d.ts.map +0 -1
  738. package/dist/components/payment-form/index.js.map +0 -1
  739. package/dist/components/payment-form/payment-form.agent.d.ts.map +0 -1
  740. package/dist/components/payment-form/payment-form.d.ts.map +0 -1
  741. package/dist/components/pdf-viewer/index.d.ts.map +0 -1
  742. package/dist/components/pdf-viewer/index.js.map +0 -1
  743. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +0 -1
  744. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +0 -1
  745. package/dist/components/phone-input/index.d.ts.map +0 -1
  746. package/dist/components/phone-input/index.js.map +0 -1
  747. package/dist/components/phone-input/phone-input.agent.d.ts.map +0 -1
  748. package/dist/components/phone-input/phone-input.d.ts.map +0 -1
  749. package/dist/components/popover/index.d.ts.map +0 -1
  750. package/dist/components/popover/index.js.map +0 -1
  751. package/dist/components/popover/popover.agent.d.ts.map +0 -1
  752. package/dist/components/popover/popover.d.ts.map +0 -1
  753. package/dist/components/privacy-lock/index.d.ts.map +0 -1
  754. package/dist/components/privacy-lock/index.js.map +0 -1
  755. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +0 -1
  756. package/dist/components/privacy-lock/privacy-lock.d.ts.map +0 -1
  757. package/dist/components/progress/index.d.ts.map +0 -1
  758. package/dist/components/progress/index.js.map +0 -1
  759. package/dist/components/progress/progress.agent.d.ts.map +0 -1
  760. package/dist/components/progress/progress.d.ts.map +0 -1
  761. package/dist/components/radio/index.d.ts.map +0 -1
  762. package/dist/components/radio/index.js.map +0 -1
  763. package/dist/components/radio-group/index.d.ts.map +0 -1
  764. package/dist/components/radio-group/index.js.map +0 -1
  765. package/dist/components/radio-group/radio-group-context.d.ts.map +0 -1
  766. package/dist/components/radio-group/radio-group.agent.d.ts.map +0 -1
  767. package/dist/components/radio-group/radio-group.d.ts.map +0 -1
  768. package/dist/components/radio-group/radio.d.ts.map +0 -1
  769. package/dist/components/recaptcha-widget/index.d.ts.map +0 -1
  770. package/dist/components/recaptcha-widget/index.js.map +0 -1
  771. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +0 -1
  772. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +0 -1
  773. package/dist/components/resizable/index.d.ts.map +0 -1
  774. package/dist/components/resizable/index.js.map +0 -1
  775. package/dist/components/resizable/resizable-context.d.ts.map +0 -1
  776. package/dist/components/resizable/resizable.agent.d.ts.map +0 -1
  777. package/dist/components/resizable/resizable.d.ts.map +0 -1
  778. package/dist/components/rich-text-editor/index.d.ts.map +0 -1
  779. package/dist/components/rich-text-editor/index.js.map +0 -1
  780. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +0 -1
  781. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +0 -1
  782. package/dist/components/scroll-area/index.d.ts.map +0 -1
  783. package/dist/components/scroll-area/index.js.map +0 -1
  784. package/dist/components/scroll-area/scroll-area.d.ts.map +0 -1
  785. package/dist/components/search-bar/index.d.ts.map +0 -1
  786. package/dist/components/search-bar/index.js.map +0 -1
  787. package/dist/components/search-bar/search-bar.agent.d.ts.map +0 -1
  788. package/dist/components/search-bar/search-bar.d.ts.map +0 -1
  789. package/dist/components/search-input/index.d.ts.map +0 -1
  790. package/dist/components/search-input/index.js.map +0 -1
  791. package/dist/components/search-input/search-input.agent.d.ts.map +0 -1
  792. package/dist/components/search-input/search-input.d.ts.map +0 -1
  793. package/dist/components/select/index.d.ts.map +0 -1
  794. package/dist/components/select/index.js.map +0 -1
  795. package/dist/components/select/select.agent.d.ts.map +0 -1
  796. package/dist/components/select/select.d.ts.map +0 -1
  797. package/dist/components/separator/index.d.ts.map +0 -1
  798. package/dist/components/separator/index.js.map +0 -1
  799. package/dist/components/separator/separator.d.ts.map +0 -1
  800. package/dist/components/sheet/index.d.ts.map +0 -1
  801. package/dist/components/sheet/index.js.map +0 -1
  802. package/dist/components/sheet/sheet.agent.d.ts.map +0 -1
  803. package/dist/components/sheet/sheet.d.ts.map +0 -1
  804. package/dist/components/sidebar/index.d.ts.map +0 -1
  805. package/dist/components/sidebar/index.js.map +0 -1
  806. package/dist/components/sidebar/sidebar.agent.d.ts.map +0 -1
  807. package/dist/components/sidebar/sidebar.d.ts.map +0 -1
  808. package/dist/components/sign-in-with-alfadocs-button/index.d.ts.map +0 -1
  809. package/dist/components/sign-in-with-alfadocs-button/index.js.map +0 -1
  810. package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +0 -1
  811. package/dist/components/signature-capture/index.d.ts.map +0 -1
  812. package/dist/components/signature-capture/index.js.map +0 -1
  813. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +0 -1
  814. package/dist/components/signature-capture/signature-capture.d.ts.map +0 -1
  815. package/dist/components/skeleton/index.d.ts.map +0 -1
  816. package/dist/components/skeleton/index.js.map +0 -1
  817. package/dist/components/skeleton/skeleton.d.ts.map +0 -1
  818. package/dist/components/skip-link/index.d.ts.map +0 -1
  819. package/dist/components/skip-link/index.js.map +0 -1
  820. package/dist/components/skip-link/skip-link.d.ts.map +0 -1
  821. package/dist/components/slider/index.d.ts.map +0 -1
  822. package/dist/components/slider/index.js.map +0 -1
  823. package/dist/components/slider/slider.agent.d.ts.map +0 -1
  824. package/dist/components/slider/slider.d.ts.map +0 -1
  825. package/dist/components/slot-grid/index.d.ts.map +0 -1
  826. package/dist/components/slot-grid/index.js.map +0 -1
  827. package/dist/components/slot-grid/slot-grid.d.ts.map +0 -1
  828. package/dist/components/sparkline/index.d.ts.map +0 -1
  829. package/dist/components/sparkline/index.js.map +0 -1
  830. package/dist/components/sparkline/sparkline.agent.d.ts.map +0 -1
  831. package/dist/components/sparkline/sparkline.d.ts.map +0 -1
  832. package/dist/components/sparkline/use-linear-trend.d.ts.map +0 -1
  833. package/dist/components/spinner/index.d.ts.map +0 -1
  834. package/dist/components/spinner/index.js.map +0 -1
  835. package/dist/components/spinner/spinner.d.ts.map +0 -1
  836. package/dist/components/stat/index.d.ts.map +0 -1
  837. package/dist/components/stat/index.js.map +0 -1
  838. package/dist/components/stat/stat.d.ts.map +0 -1
  839. package/dist/components/stepper-accordion/index.d.ts.map +0 -1
  840. package/dist/components/stepper-accordion/index.js.map +0 -1
  841. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +0 -1
  842. package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +0 -1
  843. package/dist/components/stepper-calendar/index.d.ts.map +0 -1
  844. package/dist/components/stepper-calendar/index.js.map +0 -1
  845. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts.map +0 -1
  846. package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +0 -1
  847. package/dist/components/stepper-progress/index.d.ts.map +0 -1
  848. package/dist/components/stepper-progress/index.js.map +0 -1
  849. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +0 -1
  850. package/dist/components/stepper-progress/stepper-progress.d.ts.map +0 -1
  851. package/dist/components/streaming-text/index.d.ts.map +0 -1
  852. package/dist/components/streaming-text/index.js.map +0 -1
  853. package/dist/components/streaming-text/streaming-text.d.ts.map +0 -1
  854. package/dist/components/suggestion-chip/index.d.ts.map +0 -1
  855. package/dist/components/suggestion-chip/index.js.map +0 -1
  856. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +0 -1
  857. package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +0 -1
  858. package/dist/components/switch/index.d.ts.map +0 -1
  859. package/dist/components/switch/index.js.map +0 -1
  860. package/dist/components/switch/switch.agent.d.ts.map +0 -1
  861. package/dist/components/switch/switch.d.ts.map +0 -1
  862. package/dist/components/tabs/index.d.ts.map +0 -1
  863. package/dist/components/tabs/index.js.map +0 -1
  864. package/dist/components/tabs/tabs.agent.d.ts.map +0 -1
  865. package/dist/components/tabs/tabs.d.ts.map +0 -1
  866. package/dist/components/tag/index.d.ts.map +0 -1
  867. package/dist/components/tag/index.js.map +0 -1
  868. package/dist/components/tag/tag.d.ts.map +0 -1
  869. package/dist/components/task-card/index.d.ts.map +0 -1
  870. package/dist/components/task-card/index.js.map +0 -1
  871. package/dist/components/task-card/task-card.agent.d.ts.map +0 -1
  872. package/dist/components/task-card/task-card.d.ts.map +0 -1
  873. package/dist/components/task-tray/index.d.ts.map +0 -1
  874. package/dist/components/task-tray/index.js.map +0 -1
  875. package/dist/components/task-tray/task-tray.agent.d.ts.map +0 -1
  876. package/dist/components/task-tray/task-tray.d.ts.map +0 -1
  877. package/dist/components/text-area/index.d.ts.map +0 -1
  878. package/dist/components/text-area/index.js.map +0 -1
  879. package/dist/components/text-area/text-area.agent.d.ts.map +0 -1
  880. package/dist/components/text-area/text-area.d.ts.map +0 -1
  881. package/dist/components/text-input/index.d.ts.map +0 -1
  882. package/dist/components/text-input/index.js.map +0 -1
  883. package/dist/components/text-input/text-input.agent.d.ts.map +0 -1
  884. package/dist/components/text-input/text-input.d.ts.map +0 -1
  885. package/dist/components/theme-root/index.d.ts.map +0 -1
  886. package/dist/components/theme-root/index.js.map +0 -1
  887. package/dist/components/theme-root/theme-root.d.ts.map +0 -1
  888. package/dist/components/theme-toggle/index.d.ts.map +0 -1
  889. package/dist/components/theme-toggle/index.js.map +0 -1
  890. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +0 -1
  891. package/dist/components/theme-toggle/theme-toggle.d.ts.map +0 -1
  892. package/dist/components/time-picker/index.d.ts.map +0 -1
  893. package/dist/components/time-picker/index.js.map +0 -1
  894. package/dist/components/time-picker/time-picker.agent.d.ts.map +0 -1
  895. package/dist/components/time-picker/time-picker.d.ts.map +0 -1
  896. package/dist/components/timeline/index.d.ts.map +0 -1
  897. package/dist/components/timeline/index.js.map +0 -1
  898. package/dist/components/timeline/timeline.agent.d.ts.map +0 -1
  899. package/dist/components/timeline/timeline.d.ts.map +0 -1
  900. package/dist/components/timestamp/index.d.ts.map +0 -1
  901. package/dist/components/timestamp/index.js.map +0 -1
  902. package/dist/components/timestamp/timestamp.d.ts.map +0 -1
  903. package/dist/components/toast/index.d.ts.map +0 -1
  904. package/dist/components/toast/index.js.map +0 -1
  905. package/dist/components/toast/toast.agent.d.ts.map +0 -1
  906. package/dist/components/toast/toast.d.ts.map +0 -1
  907. package/dist/components/tooltip/index.d.ts.map +0 -1
  908. package/dist/components/tooltip/index.js.map +0 -1
  909. package/dist/components/tooltip/tooltip.d.ts.map +0 -1
  910. package/dist/components/tooth-scheme/index.d.ts.map +0 -1
  911. package/dist/components/tooth-scheme/index.js.map +0 -1
  912. package/dist/components/tooth-scheme/tooth-data.d.ts.map +0 -1
  913. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +0 -1
  914. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +0 -1
  915. package/dist/components/transcript-panel/index.d.ts.map +0 -1
  916. package/dist/components/transcript-panel/index.js.map +0 -1
  917. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +0 -1
  918. package/dist/components/transcript-panel/transcript-panel.d.ts.map +0 -1
  919. package/dist/components/typing-indicator/index.d.ts.map +0 -1
  920. package/dist/components/typing-indicator/index.js.map +0 -1
  921. package/dist/components/typing-indicator/typing-indicator.d.ts.map +0 -1
  922. package/dist/components/visually-hidden/index.d.ts.map +0 -1
  923. package/dist/components/visually-hidden/index.js.map +0 -1
  924. package/dist/components/visually-hidden/visually-hidden.d.ts.map +0 -1
  925. package/dist/components/warning-stack/index.d.ts.map +0 -1
  926. package/dist/components/warning-stack/index.js.map +0 -1
  927. package/dist/components/warning-stack/warning-stack.d.ts.map +0 -1
  928. package/dist/components/workflow/index.d.ts.map +0 -1
  929. package/dist/components/workflow/index.js.map +0 -1
  930. package/dist/components/workflow/workflow-card.d.ts.map +0 -1
  931. package/dist/components/workflow/workflow-editor.d.ts.map +0 -1
  932. package/dist/components/workflow/workflow-map.d.ts.map +0 -1
  933. package/dist/components/workflow/workflow-types.d.ts.map +0 -1
  934. package/dist/components/workflow/workflow.agent.d.ts.map +0 -1
  935. package/dist/hooks/index.d.ts.map +0 -1
  936. package/dist/hooks/index.js.map +0 -1
  937. package/dist/hooks/use-locale.d.ts.map +0 -1
  938. package/dist/hooks/use-media-query.d.ts.map +0 -1
  939. package/dist/hooks/use-prefers-reduced-motion.d.ts.map +0 -1
  940. package/dist/hooks/use-theme.d.ts.map +0 -1
  941. package/dist/i18n/config.d.ts.map +0 -1
  942. package/dist/i18n/config.js.map +0 -1
  943. package/dist/i18n/resources.d.ts.map +0 -1
  944. package/dist/index.js.map +0 -1
  945. package/dist/option/index.js.map +0 -1
  946. package/dist/patterns/leo-assistant/index.d.ts.map +0 -1
  947. package/dist/patterns/leo-assistant/index.js.map +0 -1
  948. package/dist/patterns/leo-assistant/leo-chat-surface.d.ts.map +0 -1
  949. package/dist/patterns/leo-assistant/leo-embedded.d.ts.map +0 -1
  950. package/dist/patterns/leo-assistant/leo-popout.d.ts.map +0 -1
  951. package/dist/patterns/leo-assistant/leo-sidebar.d.ts.map +0 -1
  952. package/dist/patterns/leo-assistant/leo-types.d.ts.map +0 -1
  953. package/dist/patterns/patient-shell/index.d.ts.map +0 -1
  954. package/dist/patterns/patient-shell/index.js.map +0 -1
  955. package/dist/patterns/patient-shell/patient-shell.d.ts.map +0 -1
  956. package/dist/safe-html/index.js.map +0 -1
  957. package/dist/tokens/apexcharts-theme.d.ts.map +0 -1
  958. package/dist/tokens/themes/bridges/stripe-appearance.d.ts.map +0 -1
@@ -1 +0,0 @@
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":"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"}
@@ -1 +0,0 @@
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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"}
@@ -1 +0,0 @@
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]}
@@ -1 +0,0 @@
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;"}
@@ -1 +0,0 @@
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;"}
@@ -1 +0,0 @@
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;"}
@@ -1 +0,0 @@
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;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-prefers-reduced-motion-BMwIQRjB.js","sources":["../../src/hooks/use-prefers-reduced-motion.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nconst QUERY = '(prefers-reduced-motion: reduce)';\n\n/**\n * Subscribe to the `prefers-reduced-motion` media query so the return value\n * updates when the user toggles the OS preference during the session.\n *\n * SSR-safe: returns `false` when `window` is undefined. `useEffect` runs on\n * the client only, so hydration mismatches are avoided without a null\n * sentinel at the type level.\n */\nexport function usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState<boolean>(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(QUERY).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n const mql = window.matchMedia(QUERY);\n const onChange = (ev: MediaQueryListEvent) => setReduced(ev.matches);\n // Safari < 14 only supports addListener/removeListener.\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 }, []);\n\n return reduced;\n}\n"],"names":["QUERY","usePrefersReducedMotion","reduced","setReduced","useState","useEffect","mql","onChange","ev"],"mappings":";AAEA,MAAMA,IAAQ;AAUP,SAASC,IAAmC;AACjD,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAkB,MAC1C,OAAO,SAAW,OAAe,OAAO,OAAO,cAAe,aACzD,KAEF,OAAO,WAAWJ,CAAK,EAAE,OACjC;AAED,SAAAK,EAAU,MAAM;AACd,QAAI,OAAO,SAAW,OAAe,OAAO,OAAO,cAAe;AAChE;AAEF,UAAMC,IAAM,OAAO,WAAWN,CAAK,GAC7BO,IAAW,CAACC,MAA4BL,EAAWK,EAAG,OAAO;AAEnE,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,CAAA,CAAE,GAEEL;AACT;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-theme-BMUhembX.js","sources":["../../src/hooks/use-theme.ts"],"sourcesContent":["import { useCallback, useEffect, useSyncExternalStore } from 'react';\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* */\n/* Modelled as two orthogonal axes per `src/docs/04-theming.mdx` — base */\n/* colour scheme and AAA contrast modifier — plus an explicit `system` */\n/* value meaning \"no user override, follow OS preferences\". The four */\n/* concrete applied themes called out in `hooks-gaps.mdx` are exposed */\n/* via `resolvedTheme` for code that needs to branch on the composed */\n/* result (e.g. data-visualisation libraries with their own theme */\n/* machinery). */\n/* -------------------------------------------------------------------- */\n\nexport type ThemeBase = 'light' | 'dark';\nexport type ThemePreference = ThemeBase | 'system';\nexport type AccessibilityPreference = 'default' | 'accessible' | 'system';\nexport type ResolvedTheme =\n | 'light'\n | 'dark'\n | 'light-accessible'\n | 'dark-accessible';\n\nexport interface UseThemeReturn {\n /** User's stored base-theme preference, or `'system'` when no override is set. */\n theme: ThemePreference;\n /** User's stored AAA-contrast preference, or `'system'` when no override is set. */\n accessibility: AccessibilityPreference;\n /** The theme actually applied to the DOM once the preferences + OS signals are resolved. */\n resolvedTheme: ResolvedTheme;\n /** Persist a new base-theme preference. Pass `'system'` to clear the override. */\n setTheme: (next: ThemePreference) => void;\n /** Persist a new AAA-contrast preference. Pass `'system'` to clear the override. */\n setAccessibility: (next: AccessibilityPreference) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* SSR-safe named constants */\n/* */\n/* Exported so a consuming app's SSR shim can plant the correct classes */\n/* on `<html>` at render time without importing the whole hook (which */\n/* pulls in React, `useSyncExternalStore`, etc.). See the acceptance */\n/* criterion in `src/user_stories/to-do/review-findings/hooks-gaps.mdx`. */\n/* -------------------------------------------------------------------- */\n\nexport const THEME_STORAGE_KEY = 'alfadocs-ui.theme';\nexport const ACCESSIBILITY_STORAGE_KEY = 'alfadocs-ui.accessibility';\n\nexport const THEME_CLASS = {\n light: 'theme-light',\n dark: 'theme-dark',\n accessible: 'theme-accessible',\n} as const;\n\nconst COLOR_SCHEME_QUERY = '(prefers-color-scheme: dark)';\nconst CONTRAST_QUERY = '(prefers-contrast: more)';\n\n/* -------------------------------------------------------------------- */\n/* Persistence — guarded against private-mode / disabled-storage throws */\n/* -------------------------------------------------------------------- */\n\nfunction safeReadStorage(key: string): string | null {\n if (typeof window === 'undefined') return null;\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeWriteStorage(key: string, value: string | null): void {\n if (typeof window === 'undefined') return;\n try {\n if (value === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, value);\n }\n } catch {\n /* Storage can throw in private mode or when quota is exceeded — the\n in-memory state is the source of truth, so a write failure is\n recoverable. Silent-fail matches how `usePrefersReducedMotion`\n handles `matchMedia` being unavailable. */\n }\n}\n\nfunction isValidTheme(value: unknown): value is ThemePreference {\n return value === 'light' || value === 'dark' || value === 'system';\n}\n\nfunction isValidAccessibility(\n value: unknown,\n): value is AccessibilityPreference {\n return value === 'default' || value === 'accessible' || value === 'system';\n}\n\n/* -------------------------------------------------------------------- */\n/* External store — singleton so every `useTheme()` consumer in the */\n/* tree reads the same snapshot and only one `matchMedia` / storage */\n/* subscription is registered per tab. */\n/* -------------------------------------------------------------------- */\n\ninterface ThemeSnapshot {\n theme: ThemePreference;\n accessibility: AccessibilityPreference;\n prefersDark: boolean;\n prefersMoreContrast: boolean;\n}\n\nfunction readInitialSnapshot(): ThemeSnapshot {\n const storedTheme = safeReadStorage(THEME_STORAGE_KEY);\n const storedA11y = safeReadStorage(ACCESSIBILITY_STORAGE_KEY);\n\n const hasMatchMedia =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function';\n\n return {\n theme: isValidTheme(storedTheme) ? storedTheme : 'system',\n accessibility: isValidAccessibility(storedA11y) ? storedA11y : 'system',\n prefersDark: hasMatchMedia\n ? window.matchMedia(COLOR_SCHEME_QUERY).matches\n : false,\n prefersMoreContrast: hasMatchMedia\n ? window.matchMedia(CONTRAST_QUERY).matches\n : false,\n };\n}\n\nlet snapshot: ThemeSnapshot = readInitialSnapshot();\nconst listeners = new Set<() => void>();\n\nfunction commit(next: ThemeSnapshot): void {\n if (\n next.theme === snapshot.theme &&\n next.accessibility === snapshot.accessibility &&\n next.prefersDark === snapshot.prefersDark &&\n next.prefersMoreContrast === snapshot.prefersMoreContrast\n ) {\n return;\n }\n snapshot = next;\n listeners.forEach((listener) => listener());\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nfunction getSnapshot(): ThemeSnapshot {\n return snapshot;\n}\n\nfunction getServerSnapshot(): ThemeSnapshot {\n return {\n theme: 'system',\n accessibility: 'system',\n prefersDark: false,\n prefersMoreContrast: false,\n };\n}\n\n/* -------------------------------------------------------------------- */\n/* Media-query subscriptions — mounted once per tab, on the first time */\n/* `useTheme` is called in the browser. Cleanup happens via a ref-count */\n/* in the subscription effect below. */\n/* -------------------------------------------------------------------- */\n\nlet mediaSubscriberCount = 0;\nlet colorSchemeMql: MediaQueryList | null = null;\nlet contrastMql: MediaQueryList | null = null;\nlet storageHandler: ((event: StorageEvent) => void) | null = null;\n\nfunction onColorSchemeChange(event: MediaQueryListEvent): void {\n commit({ ...snapshot, prefersDark: event.matches });\n}\n\nfunction onContrastChange(event: MediaQueryListEvent): void {\n commit({ ...snapshot, prefersMoreContrast: event.matches });\n}\n\nfunction onStorage(event: StorageEvent): void {\n if (event.key === THEME_STORAGE_KEY) {\n const next = isValidTheme(event.newValue) ? event.newValue : 'system';\n commit({ ...snapshot, theme: next });\n } else if (event.key === ACCESSIBILITY_STORAGE_KEY) {\n const next = isValidAccessibility(event.newValue)\n ? event.newValue\n : 'system';\n commit({ ...snapshot, accessibility: next });\n }\n}\n\nfunction attachMqlListener(\n mql: MediaQueryList,\n handler: (event: MediaQueryListEvent) => void,\n): () => void {\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }\n // Safari < 14 fallback.\n mql.addListener(handler);\n return () => mql.removeListener(handler);\n}\n\nfunction mountMediaSubscriptions(): () => void {\n mediaSubscriberCount += 1;\n if (mediaSubscriberCount > 1) {\n return disposeOneSubscriber;\n }\n\n if (typeof window === 'undefined') {\n return disposeOneSubscriber;\n }\n\n if (typeof window.matchMedia === 'function') {\n colorSchemeMql = window.matchMedia(COLOR_SCHEME_QUERY);\n contrastMql = window.matchMedia(CONTRAST_QUERY);\n // Re-sync the module snapshot in case the OS preferences changed\n // between initial read and first effect run (hydration window).\n commit({\n ...snapshot,\n prefersDark: colorSchemeMql.matches,\n prefersMoreContrast: contrastMql.matches,\n });\n detachColorScheme = attachMqlListener(colorSchemeMql, onColorSchemeChange);\n detachContrast = attachMqlListener(contrastMql, onContrastChange);\n }\n\n // Cross-tab sync — `storage` only fires on *other* tabs, so the local\n // tab still needs setTheme to update snapshot directly (it does).\n storageHandler = onStorage;\n window.addEventListener('storage', storageHandler);\n\n return disposeOneSubscriber;\n}\n\nlet detachColorScheme: (() => void) | null = null;\nlet detachContrast: (() => void) | null = null;\n\nfunction disposeOneSubscriber(): void {\n mediaSubscriberCount -= 1;\n if (mediaSubscriberCount > 0) return;\n detachColorScheme?.();\n detachContrast?.();\n detachColorScheme = null;\n detachContrast = null;\n colorSchemeMql = null;\n contrastMql = null;\n if (storageHandler && typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n }\n storageHandler = null;\n}\n\n/* -------------------------------------------------------------------- */\n/* Resolution helpers */\n/* -------------------------------------------------------------------- */\n\nexport function resolveTheme(state: ThemeSnapshot): ResolvedTheme {\n const base: ThemeBase =\n state.theme === 'system'\n ? state.prefersDark\n ? 'dark'\n : 'light'\n : state.theme;\n const accessible =\n state.accessibility === 'system'\n ? state.prefersMoreContrast\n : state.accessibility === 'accessible';\n if (base === 'dark' && accessible) return 'dark-accessible';\n if (base === 'dark') return 'dark';\n if (accessible) return 'light-accessible';\n return 'light';\n}\n\nexport function themeClassList(resolved: ResolvedTheme): string[] {\n switch (resolved) {\n case 'light':\n return [THEME_CLASS.light];\n case 'dark':\n return [THEME_CLASS.dark];\n case 'light-accessible':\n return [THEME_CLASS.light, THEME_CLASS.accessible];\n case 'dark-accessible':\n return [THEME_CLASS.dark, THEME_CLASS.accessible];\n }\n}\n\nconst ALL_THEME_CLASSES = [\n THEME_CLASS.light,\n THEME_CLASS.dark,\n THEME_CLASS.accessible,\n];\n\nfunction applyToDocument(resolved: ResolvedTheme): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const next = new Set(themeClassList(resolved));\n ALL_THEME_CLASSES.forEach((cls) => {\n if (next.has(cls)) {\n root.classList.add(cls);\n } else {\n root.classList.remove(cls);\n }\n });\n}\n\n/* -------------------------------------------------------------------- */\n/* Public hook */\n/* -------------------------------------------------------------------- */\n\n/**\n * Read and update the DS theme preference.\n *\n * - `theme` / `accessibility` are the stored user preferences, with\n * `'system'` meaning \"no override — follow OS\".\n * - `resolvedTheme` composes preferences + live `matchMedia` state into\n * one of the four concrete themes.\n * - `setTheme` / `setAccessibility` persist the override to\n * `localStorage` and re-apply classes to `document.documentElement`\n * synchronously. Pass `'system'` to clear.\n *\n * Singleton under the hood — every hook call shares one `matchMedia`\n * subscription, so mounting the hook many times does not multiply the\n * listener count. The hook also listens for cross-tab `storage` events\n * so a theme change in tab A is reflected in tab B without a reload.\n */\nexport function useTheme(): UseThemeReturn {\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => mountMediaSubscriptions(), []);\n\n useEffect(() => {\n applyToDocument(resolveTheme(state));\n }, [state]);\n\n const setTheme = useCallback((next: ThemePreference) => {\n safeWriteStorage(\n THEME_STORAGE_KEY,\n next === 'system' ? null : next,\n );\n commit({ ...snapshot, theme: next });\n }, []);\n\n const setAccessibility = useCallback((next: AccessibilityPreference) => {\n safeWriteStorage(\n ACCESSIBILITY_STORAGE_KEY,\n next === 'system' ? null : next,\n );\n commit({ ...snapshot, accessibility: next });\n }, []);\n\n return {\n theme: state.theme,\n accessibility: state.accessibility,\n resolvedTheme: resolveTheme(state),\n setTheme,\n setAccessibility,\n };\n}\n\n/* -------------------------------------------------------------------- */\n/* Test hook — reset module-level state between tests. Not exported */\n/* from the barrel. */\n/* -------------------------------------------------------------------- */\n\nexport function __resetThemeStoreForTests(): void {\n snapshot = readInitialSnapshot();\n listeners.clear();\n mediaSubscriberCount = 0;\n detachColorScheme?.();\n detachContrast?.();\n detachColorScheme = null;\n detachContrast = null;\n colorSchemeMql = null;\n contrastMql = null;\n if (storageHandler && typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n }\n storageHandler = null;\n}\n"],"names":["THEME_STORAGE_KEY","ACCESSIBILITY_STORAGE_KEY","THEME_CLASS","COLOR_SCHEME_QUERY","CONTRAST_QUERY","safeReadStorage","key","safeWriteStorage","value","isValidTheme","isValidAccessibility","readInitialSnapshot","storedTheme","storedA11y","hasMatchMedia","snapshot","listeners","commit","next","listener","subscribe","getSnapshot","getServerSnapshot","mediaSubscriberCount","colorSchemeMql","contrastMql","storageHandler","onColorSchemeChange","event","onContrastChange","onStorage","attachMqlListener","mql","handler","mountMediaSubscriptions","detachColorScheme","detachContrast","disposeOneSubscriber","resolveTheme","state","base","accessible","themeClassList","resolved","ALL_THEME_CLASSES","applyToDocument","root","cls","useTheme","useSyncExternalStore","useEffect","setTheme","useCallback","setAccessibility"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-CPxpqFjJ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/user.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 [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n"],"names":["__iconNode","User","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,6CAA6C,KAAK,SAAQ,CAAE;AAAA,EAC1E,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,KAAK,GAAG,KAAK,KAAK,SAAQ,CAAE;AACzD,GACMC,IAAOC,EAAiB,QAAQF,CAAU;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"visually-hidden-Bw7vBHLm.js","sources":["../../src/components/visually-hidden/visually-hidden.tsx"],"sourcesContent":["import {\n forwardRef,\n cloneElement,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type Ref,\n} from 'react';\n\n/**\n * VisuallyHidden — renders content that is invisible to sighted users but\n * available to assistive technology (screen readers).\n *\n * Implementation note (constraint §2 + §4):\n * We use Tailwind's built-in `sr-only` utility, which compiles to the\n * canonical visually-hidden recipe:\n * position: absolute;\n * width: 1px; height: 1px;\n * padding: 0; margin: -1px;\n * overflow: hidden;\n * clip: rect(0, 0, 0, 0);\n * white-space: nowrap;\n * border-width: 0;\n * This keeps the element in the accessibility tree (unlike `display: none`\n * or `aria-hidden`) while removing it from the visual layout. No tokens are\n * relevant here — there are no colours, spacing, or typography choices to\n * make. We deliberately avoid hand-rolling the CSS so we stay aligned with\n * Tailwind's vetted recipe.\n *\n * The `asChild` prop (Radix Slot–style) clones the single child element and\n * merges the `sr-only` class onto it, letting consumers preserve the child's\n * own DOM type (e.g. `<a>` for skip-links) without an extra wrapper element.\n */\n\ntype ChildWithClassName = ReactElement<{\n className?: string;\n ref?: Ref<unknown>;\n}>;\n\nexport interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * When true, merges the visually-hidden class onto the single child element\n * rather than wrapping it in a `<span>`. The child must accept `className`\n * and `ref`.\n */\n asChild?: boolean;\n}\n\nconst VISUALLY_HIDDEN_CLASS = 'ds:sr-only';\n\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n ({ asChild = false, className, children, ...rest }, ref) => {\n const merged = className\n ? `${VISUALLY_HIDDEN_CLASS} ${className}`\n : VISUALLY_HIDDEN_CLASS;\n\n if (asChild && isValidElement(children)) {\n const child = children as ChildWithClassName;\n const childClassName = child.props.className\n ? `${merged} ${child.props.className}`\n : merged;\n return cloneElement(child, {\n ...rest,\n className: childClassName,\n ref,\n });\n }\n\n return (\n <span ref={ref} className={merged} data-component=\"visually-hidden\" {...rest}>\n {children}\n </span>\n );\n },\n);\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n"],"names":["VISUALLY_HIDDEN_CLASS","VisuallyHidden","forwardRef","asChild","className","children","rest","ref","merged","isValidElement","child","childClassName","cloneElement","jsx"],"mappings":";;AAgDA,MAAMA,IAAwB,cAEjBC,IAAiBC;AAAA,EAC5B,CAAC,EAAE,SAAAC,IAAU,IAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAAQC,MAAQ;AAC1D,UAAMC,IAASJ,IACX,GAAGJ,CAAqB,IAAII,CAAS,KACrCJ;AAEJ,QAAIG,KAAWM,EAAeJ,CAAQ,GAAG;AACvC,YAAMK,IAAQL,GACRM,IAAiBD,EAAM,MAAM,YAC/B,GAAGF,CAAM,IAAIE,EAAM,MAAM,SAAS,KAClCF;AACJ,aAAOI,EAAaF,GAAO;AAAA,QACzB,GAAGJ;AAAA,QACH,WAAWK;AAAA,QACX,KAAAJ;AAAA,MAAA,CACD;AAAA,IACH;AAEA,WACE,gBAAAM,EAAC,UAAK,KAAAN,GAAU,WAAWC,GAAQ,kBAAe,mBAAmB,GAAGF,GACrE,UAAAD,EAAA,CACH;AAAA,EAEJ;AACF;AAEAJ,EAAe,cAAc;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"warning-stack-8Pa3pekh.js","sources":["../../src/components/warning-stack/warning-stack.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport { Alert, type AlertProps } from '../alert/alert';\nimport { Button } from '../button/button';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface WarningStackItem {\n id: string;\n variant?: AlertProps['variant'];\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n actions?: ReactNode;\n dismissible?: boolean;\n}\n\nconst stackVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:shadow-[var(--shadow-card)]',\n 'ds:p-[var(--spacing-md)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:gap-[var(--spacing-sm)]',\n md: 'ds:gap-[var(--spacing-md)]',\n },\n // `stretch: true` fills the parent layout cell — mirrors the `stretch`\n // prop on `Card` so a WarningStack rendered next to a Card in a grid\n // row ends up at matching height.\n stretch: {\n true: 'ds:h-full ds:self-stretch',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n stretch: false,\n },\n },\n);\n\nconst listVariants = cva('ds:flex ds:flex-col', {\n variants: {\n size: {\n sm: 'ds:gap-[var(--spacing-sm)]',\n md: 'ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst TOGGLE_CLASSES = [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:self-start',\n].join(' ');\n\nexport interface WarningStackProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'title'>,\n VariantProps<typeof stackVariants> {\n /** Items rendered inside the stack. */\n items: WarningStackItem[];\n /** Fill the parent layout cell — use in a dashboard grid row so the\n * stack ends up with matching height to sibling Cards. */\n stretch?: boolean;\n /** Visible title rendered as an `<h2>` above the stack. Also labels the\n * region for assistive tech. When omitted, the region is labelled via a\n * visually hidden heading using `ariaLabel` (or the default \"Warnings\"). */\n title?: ReactNode;\n /** Optional short description rendered under the title. */\n description?: ReactNode;\n /** Cap on visible items before a \"Show N more\" toggle appears. */\n maxVisible?: number;\n /** Whether the stack starts collapsed when items exceed `maxVisible`. */\n defaultCollapsed?: boolean;\n /** Fires when a dismissible item's close control is activated. */\n onDismiss?: (item: WarningStackItem) => void;\n /** Accessible label for the region when `title` is not set. */\n ariaLabel?: string;\n /** Optional node rendered when the stack has zero items. */\n emptyState?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const WarningStack = forwardRef<HTMLDivElement, WarningStackProps>(\n (\n {\n items,\n title,\n description,\n maxVisible,\n defaultCollapsed = true,\n onDismiss,\n size = 'md',\n stretch = false,\n ariaLabel,\n emptyState,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const labelId = useId();\n const listId = useId();\n\n const overflow = maxVisible !== undefined && items.length > maxVisible;\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n // Live-region announces the count when items change.\n const liveRef = useRef<HTMLDivElement>(null);\n const lastCountRef = useRef<number>(items.length);\n\n useEffect(() => {\n if (!liveRef.current) return;\n const prev = lastCountRef.current;\n const next = items.length;\n if (prev !== next) {\n liveRef.current.textContent = t('ui.warningStack.countChanged', {\n count: next,\n defaultValue: '{{count}} warnings to review',\n });\n }\n lastCountRef.current = next;\n }, [items.length, t]);\n\n const visible = useMemo(() => {\n if (!overflow || !collapsed) return items;\n return items.slice(0, maxVisible);\n }, [items, overflow, collapsed, maxVisible]);\n\n const hiddenCount = overflow ? items.length - (maxVisible ?? 0) : 0;\n\n const handleDismiss = useCallback(\n (item: WarningStackItem) => (open: boolean) => {\n if (!open) onDismiss?.(item);\n },\n [onDismiss],\n );\n\n const toggle = useCallback(() => setCollapsed((c) => !c), []);\n\n const regionLabel = ariaLabel ?? t('ui.warningStack.regionLabel', 'Warnings');\n\n // Title block: a visible header when `title` is provided; otherwise a\n // visually hidden heading so the region still has a programmatic name.\n // A `<div>` rather than `<header>` wrapper keeps the `<header>` element's\n // implicit banner role from leaking out of the region.\n const header = title ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-3xs)]\">\n <h2\n id={labelId}\n className=\"ds:text-start type-title-section ds:text-[var(--foreground)]\"\n >\n {title}\n </h2>\n {description ? (\n <p className=\"ds:text-start type-body-sm ds:text-[var(--muted-foreground)]\">\n {description}\n </p>\n ) : null}\n </div>\n ) : (\n <h2 id={labelId} className=\"ds:sr-only\">\n {regionLabel}\n </h2>\n );\n\n if (items.length === 0) {\n if (!emptyState) return null;\n return (\n <section\n ref={ref}\n role=\"region\"\n aria-labelledby={labelId}\n data-component=\"warning-stack\"\n className={[stackVariants({ size, stretch }), className].filter(Boolean).join(' ')}\n {...rest}\n >\n {header}\n {emptyState}\n </section>\n );\n }\n\n return (\n <section\n ref={ref}\n role=\"region\"\n aria-labelledby={labelId}\n data-component=\"warning-stack\"\n className={[stackVariants({ size, stretch }), className].filter(Boolean).join(' ')}\n {...rest}\n >\n {header}\n <div\n ref={liveRef}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n />\n <ul\n id={listId}\n className={listVariants({ size })}\n aria-label={t('ui.warningStack.listLabel', 'Warning list')}\n >\n {visible.map((item) => {\n const variant = item.variant ?? 'warning';\n return (\n <li key={item.id}>\n <Alert\n variant={variant}\n dismissible={item.dismissible}\n icon={item.icon}\n onOpenChange={handleDismiss(item)}\n >\n {/* `as=\"h3\"` keeps a clean heading ladder — the stack's\n h2 labels the region, then each item's h3 rises from it. */}\n <Alert.Title as=\"h3\">{item.title}</Alert.Title>\n {item.description ? (\n <Alert.Description>{item.description}</Alert.Description>\n ) : null}\n {item.actions ? <Alert.Action>{item.actions}</Alert.Action> : null}\n </Alert>\n </li>\n );\n })}\n </ul>\n\n {overflow ? (\n <Button\n type=\"button\"\n intent=\"link\"\n size=\"sm\"\n aria-expanded={!collapsed}\n aria-controls={listId}\n onClick={toggle}\n className={TOGGLE_CLASSES}\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n 'ds:size-4 ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n collapsed ? '' : 'ds:rotate-180',\n ].join(' ')}\n />\n {collapsed\n ? t('ui.warningStack.showMore', {\n count: hiddenCount,\n defaultValue: 'Show {{count}} more warnings',\n })\n : t('ui.warningStack.showLess', 'Show less')}\n </Button>\n ) : null}\n </section>\n );\n },\n);\n\nWarningStack.displayName = 'WarningStack';\n"],"names":["stackVariants","cva","listVariants","TOGGLE_CLASSES","WarningStack","forwardRef","items","title","description","maxVisible","defaultCollapsed","onDismiss","size","stretch","ariaLabel","emptyState","className","rest","ref","t","useTranslation","labelId","useId","listId","overflow","collapsed","setCollapsed","useState","liveRef","useRef","lastCountRef","useEffect","prev","next","visible","useMemo","hiddenCount","handleDismiss","useCallback","item","open","toggle","c","regionLabel","header","jsxs","jsx","variant","Alert","Button","ChevronDown"],"mappings":"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"}