@alfadocs/ui-kit-debug 0.1.8 → 0.1.9

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 (742) hide show
  1. package/dist/_chunks/{accordion-B6fyINUk.js → accordion-BEnrZmAn.js} +34 -32
  2. package/dist/_chunks/accordion-BEnrZmAn.js.map +1 -0
  3. package/dist/_chunks/accordion.agent-BTjeO1Sx.js +52 -0
  4. package/dist/_chunks/accordion.agent-BTjeO1Sx.js.map +1 -0
  5. package/dist/_chunks/{agenda-card-DIWDvWum.js → agenda-card-DwLIxgi7.js} +2 -1
  6. package/dist/_chunks/{agenda-card-DIWDvWum.js.map → agenda-card-DwLIxgi7.js.map} +1 -1
  7. package/dist/_chunks/agenda-card.agent-B_R47-c9.js +22 -0
  8. package/dist/_chunks/agenda-card.agent-B_R47-c9.js.map +1 -0
  9. package/dist/_chunks/agenda-tray-DUvengGQ.js +178 -0
  10. package/dist/_chunks/agenda-tray-DUvengGQ.js.map +1 -0
  11. package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js +476 -0
  12. package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js.map +1 -0
  13. package/dist/_chunks/{aspect-ratio-CxsdG8vk.js → aspect-ratio-DeSNzASA.js} +12 -12
  14. package/dist/_chunks/aspect-ratio-DeSNzASA.js.map +1 -0
  15. package/dist/_chunks/audio-recorder.agent--VKeykUp.js +458 -0
  16. package/dist/_chunks/audio-recorder.agent--VKeykUp.js.map +1 -0
  17. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js +432 -0
  18. package/dist/_chunks/autocomplete.agent-Dh7KioS6.js.map +1 -0
  19. package/dist/_chunks/{balance-cell-renderer-BWm3knY9.js → balance-cell-renderer-5CA7zpAi.js} +3 -3
  20. package/dist/_chunks/{balance-cell-renderer-BWm3knY9.js.map → balance-cell-renderer-5CA7zpAi.js.map} +1 -1
  21. package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js +371 -0
  22. package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js.map +1 -0
  23. package/dist/_chunks/{chart.agent-BdS-_8MO.js → chart.agent-_pRYS17d.js} +112 -105
  24. package/dist/_chunks/chart.agent-_pRYS17d.js.map +1 -0
  25. package/dist/_chunks/{chat-container-Cm3SlR2p.js → chat-container-Dl0Kfy5a.js} +33 -32
  26. package/dist/_chunks/chat-container-Dl0Kfy5a.js.map +1 -0
  27. package/dist/_chunks/{chat-container.agent-Dhw9xCJt.js → chat-container.agent-CM4WModE.js} +9 -4
  28. package/dist/_chunks/{chat-container.agent-Dhw9xCJt.js.map → chat-container.agent-CM4WModE.js.map} +1 -1
  29. package/dist/_chunks/{chat-input-DreOPP8A.js → chat-input-C_tMQv92.js} +108 -82
  30. package/dist/_chunks/chat-input-C_tMQv92.js.map +1 -0
  31. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js +69 -0
  32. package/dist/_chunks/chat-input.agent-Bsz3ckGa.js.map +1 -0
  33. package/dist/_chunks/checkbox-CtPM6Rup.js +196 -0
  34. package/dist/_chunks/checkbox-CtPM6Rup.js.map +1 -0
  35. package/dist/_chunks/checkbox-group-BTdEB6Yo.js +208 -0
  36. package/dist/_chunks/checkbox-group-BTdEB6Yo.js.map +1 -0
  37. package/dist/_chunks/collapsible.agent-DkS1jVyn.js +149 -0
  38. package/dist/_chunks/collapsible.agent-DkS1jVyn.js.map +1 -0
  39. package/dist/_chunks/{color-picker-e9PmpaGH.js → color-picker-94qcBZqZ.js} +234 -184
  40. package/dist/_chunks/color-picker-94qcBZqZ.js.map +1 -0
  41. package/dist/_chunks/combobox.agent-CAvUkkIe.js +410 -0
  42. package/dist/_chunks/combobox.agent-CAvUkkIe.js.map +1 -0
  43. package/dist/_chunks/{command-palette.agent-js2rxgeR.js → command-palette.agent-HatEt_EM.js} +161 -121
  44. package/dist/_chunks/command-palette.agent-HatEt_EM.js.map +1 -0
  45. package/dist/_chunks/date-picker-BqPTn7bO.js +1813 -0
  46. package/dist/_chunks/date-picker-BqPTn7bO.js.map +1 -0
  47. package/dist/_chunks/date-range-picker-B2hGsffw.js +274 -0
  48. package/dist/_chunks/date-range-picker-B2hGsffw.js.map +1 -0
  49. package/dist/_chunks/date-time-picker-Bzt0S8yO.js +293 -0
  50. package/dist/_chunks/date-time-picker-Bzt0S8yO.js.map +1 -0
  51. package/dist/_chunks/dialog.agent-Daf1TTko.js +179 -0
  52. package/dist/_chunks/dialog.agent-Daf1TTko.js.map +1 -0
  53. package/dist/_chunks/{dropdown-menu-Cw3EyPZv.js → dropdown-menu-C7AZipNz.js} +75 -71
  54. package/dist/_chunks/dropdown-menu-C7AZipNz.js.map +1 -0
  55. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js +43 -0
  56. package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js.map +1 -0
  57. package/dist/_chunks/{file-upload.agent-B9AN82LA.js → file-upload.agent-DJaH2dHg.js} +275 -243
  58. package/dist/_chunks/file-upload.agent-DJaH2dHg.js.map +1 -0
  59. package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js +260 -0
  60. package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js.map +1 -0
  61. package/dist/_chunks/{leo-sidebar-nbHib2D-.js → leo-sidebar-BwINPdix.js} +6 -6
  62. package/dist/_chunks/{leo-sidebar-nbHib2D-.js.map → leo-sidebar-BwINPdix.js.map} +1 -1
  63. package/dist/_chunks/link-QheANk74.js +121 -0
  64. package/dist/_chunks/link-QheANk74.js.map +1 -0
  65. package/dist/_chunks/list.agent-D0iWt4VI.js +420 -0
  66. package/dist/_chunks/list.agent-D0iWt4VI.js.map +1 -0
  67. package/dist/_chunks/{message-card-qAp2-WQK.js → message-card-qhoGv947.js} +2 -1
  68. package/dist/_chunks/message-card-qhoGv947.js.map +1 -0
  69. package/dist/_chunks/message-card.agent-4IeIgrnJ.js +22 -0
  70. package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +1 -0
  71. package/dist/_chunks/message-tray-xHUCra-Y.js +419 -0
  72. package/dist/_chunks/message-tray-xHUCra-Y.js.map +1 -0
  73. package/dist/_chunks/{multi-select.agent-CNsyW3n9.js → multi-select.agent-Do6CeQUT.js} +239 -179
  74. package/dist/_chunks/multi-select.agent-Do6CeQUT.js.map +1 -0
  75. package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js +266 -0
  76. package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js.map +1 -0
  77. package/dist/_chunks/{notification-card-BF2_veHy.js → notification-card-CsVEYJE-.js} +13 -12
  78. package/dist/_chunks/{notification-card-BF2_veHy.js.map → notification-card-CsVEYJE-.js.map} +1 -1
  79. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js +22 -0
  80. package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +1 -0
  81. package/dist/_chunks/notification-tray-DTXMq42J.js +444 -0
  82. package/dist/_chunks/notification-tray-DTXMq42J.js.map +1 -0
  83. package/dist/_chunks/number-input-fvGmnRy9.js +333 -0
  84. package/dist/_chunks/number-input-fvGmnRy9.js.map +1 -0
  85. package/dist/_chunks/otp-input-EglXOUue.js +257 -0
  86. package/dist/_chunks/otp-input-EglXOUue.js.map +1 -0
  87. package/dist/_chunks/pagination.agent-BkZQl45y.js +422 -0
  88. package/dist/_chunks/pagination.agent-BkZQl45y.js.map +1 -0
  89. package/dist/_chunks/password-input-D6kuYXmr.js +304 -0
  90. package/dist/_chunks/password-input-D6kuYXmr.js.map +1 -0
  91. package/dist/_chunks/{patient-shell-7cXqIMFg.js → patient-shell-BRmrrUUW.js} +3 -3
  92. package/dist/_chunks/{patient-shell-7cXqIMFg.js.map → patient-shell-BRmrrUUW.js.map} +1 -1
  93. package/dist/_chunks/{payment-form-hcl-gGrp.js → payment-form-BWaXas8z.js} +120 -118
  94. package/dist/_chunks/payment-form-BWaXas8z.js.map +1 -0
  95. package/dist/_chunks/{payment-form.agent-BkEnRerR.js → payment-form.agent-kuIfodCj.js} +7 -2
  96. package/dist/_chunks/payment-form.agent-kuIfodCj.js.map +1 -0
  97. package/dist/_chunks/{pdf-viewer.agent-CfIHhcHx.js → pdf-viewer.agent-BaGEDheA.js} +358 -351
  98. package/dist/_chunks/pdf-viewer.agent-BaGEDheA.js.map +1 -0
  99. package/dist/_chunks/phone-input-C8Op4sEc.js +513 -0
  100. package/dist/_chunks/phone-input-C8Op4sEc.js.map +1 -0
  101. package/dist/_chunks/popover-kFN8s84V.js +229 -0
  102. package/dist/_chunks/popover-kFN8s84V.js.map +1 -0
  103. package/dist/_chunks/popover.agent-K_d1cfbj.js +39 -0
  104. package/dist/_chunks/popover.agent-K_d1cfbj.js.map +1 -0
  105. package/dist/_chunks/privacy-lock.agent-C1i1-T58.js +185 -0
  106. package/dist/_chunks/privacy-lock.agent-C1i1-T58.js.map +1 -0
  107. package/dist/_chunks/progress-wNsqkw8I.js +253 -0
  108. package/dist/_chunks/progress-wNsqkw8I.js.map +1 -0
  109. package/dist/_chunks/progress.agent-C68rDOXL.js +27 -0
  110. package/dist/_chunks/progress.agent-C68rDOXL.js.map +1 -0
  111. package/dist/_chunks/{radio-cs8N1wJi.js → radio-DvF59ThA.js} +14 -13
  112. package/dist/_chunks/radio-DvF59ThA.js.map +1 -0
  113. package/dist/_chunks/radio-group-Cz1a4QCA.js +152 -0
  114. package/dist/_chunks/radio-group-Cz1a4QCA.js.map +1 -0
  115. package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js +183 -0
  116. package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js.map +1 -0
  117. package/dist/_chunks/resizable.agent-CMwZzvsi.js +456 -0
  118. package/dist/_chunks/resizable.agent-CMwZzvsi.js.map +1 -0
  119. package/dist/_chunks/{rich-text-editor.agent-COSb5_2D.js → rich-text-editor.agent-DnE125Tz.js} +221 -214
  120. package/dist/_chunks/rich-text-editor.agent-DnE125Tz.js.map +1 -0
  121. package/dist/_chunks/search-bar.agent-DxFAxctc.js +562 -0
  122. package/dist/_chunks/search-bar.agent-DxFAxctc.js.map +1 -0
  123. package/dist/_chunks/search-input-Xw3cdWXW.js +227 -0
  124. package/dist/_chunks/search-input-Xw3cdWXW.js.map +1 -0
  125. package/dist/_chunks/search-input.agent-CfZvViOd.js +69 -0
  126. package/dist/_chunks/search-input.agent-CfZvViOd.js.map +1 -0
  127. package/dist/_chunks/select-DY1Cb2Tg.js +410 -0
  128. package/dist/_chunks/select-DY1Cb2Tg.js.map +1 -0
  129. package/dist/_chunks/{sheet-BhNpLHc9.js → sheet-B9kH9pcI.js} +55 -54
  130. package/dist/_chunks/sheet-B9kH9pcI.js.map +1 -0
  131. package/dist/_chunks/sheet.agent-QAyTOxgk.js +46 -0
  132. package/dist/_chunks/sheet.agent-QAyTOxgk.js.map +1 -0
  133. package/dist/_chunks/{sidebar-OVzwN3jE.js → sidebar-CHF5xr_P.js} +188 -185
  134. package/dist/_chunks/sidebar-CHF5xr_P.js.map +1 -0
  135. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js +49 -0
  136. package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js.map +1 -0
  137. package/dist/_chunks/{signature-capture.agent-C38VPXxg.js → signature-capture.agent-BpeDwFht.js} +127 -120
  138. package/dist/_chunks/signature-capture.agent-BpeDwFht.js.map +1 -0
  139. package/dist/_chunks/slider-CcsQTZTA.js +322 -0
  140. package/dist/_chunks/slider-CcsQTZTA.js.map +1 -0
  141. package/dist/_chunks/sparkline.agent-56Sj7nOP.js +245 -0
  142. package/dist/_chunks/sparkline.agent-56Sj7nOP.js.map +1 -0
  143. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js +322 -0
  144. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js.map +1 -0
  145. package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js +646 -0
  146. package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js.map +1 -0
  147. package/dist/_chunks/stepper-progress-Bmen-YXB.js +149 -0
  148. package/dist/_chunks/stepper-progress-Bmen-YXB.js.map +1 -0
  149. package/dist/_chunks/stepper-progress.agent-q9InWca4.js +61 -0
  150. package/dist/_chunks/stepper-progress.agent-q9InWca4.js.map +1 -0
  151. package/dist/_chunks/suggestion-chip-DhFrkRPj.js +169 -0
  152. package/dist/_chunks/suggestion-chip-DhFrkRPj.js.map +1 -0
  153. package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js +46 -0
  154. package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js.map +1 -0
  155. package/dist/_chunks/switch-BYEH8I53.js +196 -0
  156. package/dist/_chunks/switch-BYEH8I53.js.map +1 -0
  157. package/dist/_chunks/{tabs.agent-BpbVA-Zh.js → tabs.agent-h7NvsTR1.js} +146 -123
  158. package/dist/_chunks/tabs.agent-h7NvsTR1.js.map +1 -0
  159. package/dist/_chunks/{task-card-yW7tKlG4.js → task-card-CY5ztNkU.js} +2 -1
  160. package/dist/_chunks/{task-card-yW7tKlG4.js.map → task-card-CY5ztNkU.js.map} +1 -1
  161. package/dist/_chunks/task-card.agent-CUPKYd7w.js +22 -0
  162. package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +1 -0
  163. package/dist/_chunks/task-tray-CCoUdorl.js +194 -0
  164. package/dist/_chunks/task-tray-CCoUdorl.js.map +1 -0
  165. package/dist/_chunks/text-area-C_M8wliK.js +239 -0
  166. package/dist/_chunks/text-area-C_M8wliK.js.map +1 -0
  167. package/dist/_chunks/text-input-BX39e6T6.js +272 -0
  168. package/dist/_chunks/text-input-BX39e6T6.js.map +1 -0
  169. package/dist/_chunks/theme-toggle.agent-btmXTWdW.js +394 -0
  170. package/dist/_chunks/theme-toggle.agent-btmXTWdW.js.map +1 -0
  171. package/dist/_chunks/time-picker-B8AMIrX7.js +410 -0
  172. package/dist/_chunks/time-picker-B8AMIrX7.js.map +1 -0
  173. package/dist/_chunks/timeline.agent-CRPza9wc.js +279 -0
  174. package/dist/_chunks/timeline.agent-CRPza9wc.js.map +1 -0
  175. package/dist/_chunks/{toast-lOhJDKOH.js → toast.agent-BjEGuq1Z.js} +403 -342
  176. package/dist/_chunks/toast.agent-BjEGuq1Z.js.map +1 -0
  177. package/dist/_chunks/{tooth-scheme.agent-BlDyu-Gx.js → tooth-scheme.agent-CWrQBjJM.js} +218 -211
  178. package/dist/_chunks/tooth-scheme.agent-CWrQBjJM.js.map +1 -0
  179. package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js +337 -0
  180. package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js.map +1 -0
  181. package/dist/_chunks/{workflow-map-XeqHDFvp.js → workflow-map-D2A7rTEG.js} +465 -368
  182. package/dist/_chunks/workflow-map-D2A7rTEG.js.map +1 -0
  183. package/dist/agent-catalog.json +2929 -268
  184. package/dist/components/accordion/accordion.agent.d.ts +2 -1
  185. package/dist/components/accordion/accordion.agent.d.ts.map +1 -1
  186. package/dist/components/accordion/accordion.d.ts +6 -0
  187. package/dist/components/accordion/accordion.d.ts.map +1 -1
  188. package/dist/components/accordion/index.js +2 -2
  189. package/dist/components/agenda-card/agenda-card.agent.d.ts +3 -0
  190. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -0
  191. package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
  192. package/dist/components/agenda-card/index.d.ts +1 -0
  193. package/dist/components/agenda-card/index.d.ts.map +1 -1
  194. package/dist/components/agenda-card/index.js +3 -1
  195. package/dist/components/agenda-card/index.js.map +1 -1
  196. package/dist/components/agenda-tray/agenda-tray.agent.d.ts +4 -0
  197. package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +1 -0
  198. package/dist/components/agenda-tray/agenda-tray.d.ts +19 -2
  199. package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
  200. package/dist/components/agenda-tray/index.d.ts +2 -1
  201. package/dist/components/agenda-tray/index.d.ts.map +1 -1
  202. package/dist/components/agenda-tray/index.js +3 -2
  203. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts +4 -0
  204. package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +1 -0
  205. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +18 -1
  206. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  207. package/dist/components/ai-prompt-input/index.d.ts +2 -1
  208. package/dist/components/ai-prompt-input/index.d.ts.map +1 -1
  209. package/dist/components/ai-prompt-input/index.js +3 -2
  210. package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +1 -1
  211. package/dist/components/aspect-ratio/index.js +1 -1
  212. package/dist/components/audio-recorder/audio-recorder.agent.d.ts +4 -0
  213. package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +1 -0
  214. package/dist/components/audio-recorder/audio-recorder.d.ts +10 -1
  215. package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -1
  216. package/dist/components/audio-recorder/index.d.ts +2 -1
  217. package/dist/components/audio-recorder/index.d.ts.map +1 -1
  218. package/dist/components/audio-recorder/index.js +3 -2
  219. package/dist/components/autocomplete/autocomplete.agent.d.ts +2 -1
  220. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  221. package/dist/components/autocomplete/autocomplete.d.ts +10 -0
  222. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  223. package/dist/components/autocomplete/index.js +1 -1
  224. package/dist/components/breadcrumb/breadcrumb.agent.d.ts +8 -0
  225. package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +1 -0
  226. package/dist/components/breadcrumb/breadcrumb.d.ts +21 -2
  227. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
  228. package/dist/components/breadcrumb/index.d.ts +2 -1
  229. package/dist/components/breadcrumb/index.d.ts.map +1 -1
  230. package/dist/components/breadcrumb/index.js +5 -4
  231. package/dist/components/button/button.d.ts +1 -1
  232. package/dist/components/chart/chart.agent.d.ts.map +1 -1
  233. package/dist/components/chart/chart.d.ts +2 -0
  234. package/dist/components/chart/chart.d.ts.map +1 -1
  235. package/dist/components/chart/index.js +1 -1
  236. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  237. package/dist/components/chat-container/chat-container.d.ts +3 -1
  238. package/dist/components/chat-container/chat-container.d.ts.map +1 -1
  239. package/dist/components/chat-container/index.js +2 -2
  240. package/dist/components/chat-input/chat-input.agent.d.ts +4 -0
  241. package/dist/components/chat-input/chat-input.agent.d.ts.map +1 -0
  242. package/dist/components/chat-input/chat-input.d.ts +10 -1
  243. package/dist/components/chat-input/chat-input.d.ts.map +1 -1
  244. package/dist/components/chat-input/index.d.ts +2 -1
  245. package/dist/components/chat-input/index.d.ts.map +1 -1
  246. package/dist/components/chat-input/index.js +4 -2
  247. package/dist/components/chat-input/index.js.map +1 -1
  248. package/dist/components/checkbox/checkbox.agent.d.ts +4 -0
  249. package/dist/components/checkbox/checkbox.agent.d.ts.map +1 -0
  250. package/dist/components/checkbox/checkbox.d.ts +6 -0
  251. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  252. package/dist/components/checkbox/index.js +1 -1
  253. package/dist/components/checkbox-group/checkbox-group.agent.d.ts +4 -0
  254. package/dist/components/checkbox-group/checkbox-group.agent.d.ts.map +1 -0
  255. package/dist/components/checkbox-group/checkbox-group.d.ts +8 -0
  256. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  257. package/dist/components/checkbox-group/index.js +1 -1
  258. package/dist/components/collapsible/collapsible.agent.d.ts +4 -0
  259. package/dist/components/collapsible/collapsible.agent.d.ts.map +1 -0
  260. package/dist/components/collapsible/collapsible.d.ts +8 -1
  261. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  262. package/dist/components/collapsible/index.d.ts +2 -1
  263. package/dist/components/collapsible/index.d.ts.map +1 -1
  264. package/dist/components/collapsible/index.js +4 -3
  265. package/dist/components/color-picker/color-picker.agent.d.ts +4 -0
  266. package/dist/components/color-picker/color-picker.agent.d.ts.map +1 -0
  267. package/dist/components/color-picker/color-picker.d.ts +5 -0
  268. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  269. package/dist/components/color-picker/index.js +1 -1
  270. package/dist/components/combobox/combobox.agent.d.ts +2 -1
  271. package/dist/components/combobox/combobox.agent.d.ts.map +1 -1
  272. package/dist/components/combobox/combobox.d.ts +10 -0
  273. package/dist/components/combobox/combobox.d.ts.map +1 -1
  274. package/dist/components/combobox/index.js +1 -1
  275. package/dist/components/command-palette/command-palette.agent.d.ts +2 -1
  276. package/dist/components/command-palette/command-palette.agent.d.ts.map +1 -1
  277. package/dist/components/command-palette/command-palette.d.ts +7 -0
  278. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  279. package/dist/components/command-palette/index.js +1 -1
  280. package/dist/components/data-table/index.js +1 -1
  281. package/dist/components/date-picker/date-picker.agent.d.ts +4 -0
  282. package/dist/components/date-picker/date-picker.agent.d.ts.map +1 -0
  283. package/dist/components/date-picker/date-picker.d.ts +16 -1
  284. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  285. package/dist/components/date-picker/index.d.ts +2 -1
  286. package/dist/components/date-picker/index.d.ts.map +1 -1
  287. package/dist/components/date-picker/index.js +3 -2
  288. package/dist/components/date-range-picker/date-range-picker.agent.d.ts +4 -0
  289. package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +1 -0
  290. package/dist/components/date-range-picker/date-range-picker.d.ts +16 -1
  291. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  292. package/dist/components/date-range-picker/index.d.ts +2 -1
  293. package/dist/components/date-range-picker/index.d.ts.map +1 -1
  294. package/dist/components/date-range-picker/index.js +3 -2
  295. package/dist/components/date-time-picker/date-time-picker.agent.d.ts +4 -0
  296. package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +1 -0
  297. package/dist/components/date-time-picker/date-time-picker.d.ts +16 -1
  298. package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
  299. package/dist/components/date-time-picker/index.d.ts +2 -1
  300. package/dist/components/date-time-picker/index.d.ts.map +1 -1
  301. package/dist/components/date-time-picker/index.js +3 -2
  302. package/dist/components/dialog/dialog.agent.d.ts +5 -6
  303. package/dist/components/dialog/dialog.agent.d.ts.map +1 -1
  304. package/dist/components/dialog/dialog.d.ts +11 -2
  305. package/dist/components/dialog/dialog.d.ts.map +1 -1
  306. package/dist/components/dialog/index.js +1 -1
  307. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts +2 -1
  308. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
  309. package/dist/components/dropdown-menu/dropdown-menu.d.ts +10 -2
  310. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  311. package/dist/components/dropdown-menu/index.js +2 -2
  312. package/dist/components/file-upload/file-upload.agent.d.ts +2 -1
  313. package/dist/components/file-upload/file-upload.agent.d.ts.map +1 -1
  314. package/dist/components/file-upload/file-upload.d.ts +12 -0
  315. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  316. package/dist/components/file-upload/index.js +1 -1
  317. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts +4 -0
  318. package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +1 -0
  319. package/dist/components/freemium-paywall/freemium-paywall.d.ts +8 -1
  320. package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
  321. package/dist/components/freemium-paywall/index.d.ts +2 -1
  322. package/dist/components/freemium-paywall/index.d.ts.map +1 -1
  323. package/dist/components/freemium-paywall/index.js +3 -2
  324. package/dist/components/index.d.ts +2 -0
  325. package/dist/components/index.d.ts.map +1 -1
  326. package/dist/components/link/index.d.ts +2 -0
  327. package/dist/components/link/index.d.ts.map +1 -0
  328. package/dist/components/link/index.js +5 -0
  329. package/dist/components/link/index.js.map +1 -0
  330. package/dist/components/link/link.d.ts +39 -0
  331. package/dist/components/link/link.d.ts.map +1 -0
  332. package/dist/components/list/index.d.ts +2 -1
  333. package/dist/components/list/index.d.ts.map +1 -1
  334. package/dist/components/list/index.js +3 -2
  335. package/dist/components/list/list.agent.d.ts +4 -0
  336. package/dist/components/list/list.agent.d.ts.map +1 -0
  337. package/dist/components/list/list.d.ts +8 -2
  338. package/dist/components/list/list.d.ts.map +1 -1
  339. package/dist/components/message-card/index.d.ts +1 -0
  340. package/dist/components/message-card/index.d.ts.map +1 -1
  341. package/dist/components/message-card/index.js +5 -3
  342. package/dist/components/message-card/index.js.map +1 -1
  343. package/dist/components/message-card/message-card.agent.d.ts +3 -0
  344. package/dist/components/message-card/message-card.agent.d.ts.map +1 -0
  345. package/dist/components/message-card/message-card.d.ts.map +1 -1
  346. package/dist/components/message-tray/index.d.ts +2 -1
  347. package/dist/components/message-tray/index.d.ts.map +1 -1
  348. package/dist/components/message-tray/index.js +3 -2
  349. package/dist/components/message-tray/message-tray.agent.d.ts +4 -0
  350. package/dist/components/message-tray/message-tray.agent.d.ts.map +1 -0
  351. package/dist/components/message-tray/message-tray.d.ts +27 -2
  352. package/dist/components/message-tray/message-tray.d.ts.map +1 -1
  353. package/dist/components/multi-select/index.js +1 -1
  354. package/dist/components/multi-select/multi-select.agent.d.ts +2 -1
  355. package/dist/components/multi-select/multi-select.agent.d.ts.map +1 -1
  356. package/dist/components/multi-select/multi-select.d.ts +10 -0
  357. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  358. package/dist/components/navigation-menu/index.d.ts +2 -1
  359. package/dist/components/navigation-menu/index.d.ts.map +1 -1
  360. package/dist/components/navigation-menu/index.js +7 -6
  361. package/dist/components/navigation-menu/navigation-menu.agent.d.ts +4 -0
  362. package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +1 -0
  363. package/dist/components/navigation-menu/navigation-menu.d.ts +28 -2
  364. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  365. package/dist/components/notification-card/index.d.ts +1 -0
  366. package/dist/components/notification-card/index.d.ts.map +1 -1
  367. package/dist/components/notification-card/index.js +5 -3
  368. package/dist/components/notification-card/index.js.map +1 -1
  369. package/dist/components/notification-card/notification-card.agent.d.ts +3 -0
  370. package/dist/components/notification-card/notification-card.agent.d.ts.map +1 -0
  371. package/dist/components/notification-card/notification-card.d.ts.map +1 -1
  372. package/dist/components/notification-tray/index.d.ts +2 -1
  373. package/dist/components/notification-tray/index.d.ts.map +1 -1
  374. package/dist/components/notification-tray/index.js +3 -2
  375. package/dist/components/notification-tray/notification-tray.agent.d.ts +4 -0
  376. package/dist/components/notification-tray/notification-tray.agent.d.ts.map +1 -0
  377. package/dist/components/notification-tray/notification-tray.d.ts +27 -2
  378. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  379. package/dist/components/number-input/index.js +1 -1
  380. package/dist/components/number-input/number-input.agent.d.ts +4 -0
  381. package/dist/components/number-input/number-input.agent.d.ts.map +1 -0
  382. package/dist/components/number-input/number-input.d.ts +7 -0
  383. package/dist/components/number-input/number-input.d.ts.map +1 -1
  384. package/dist/components/otp-input/index.js +1 -1
  385. package/dist/components/otp-input/otp-input.agent.d.ts +4 -0
  386. package/dist/components/otp-input/otp-input.agent.d.ts.map +1 -0
  387. package/dist/components/otp-input/otp-input.d.ts +10 -0
  388. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  389. package/dist/components/pagination/index.js +1 -1
  390. package/dist/components/pagination/pagination.agent.d.ts +2 -1
  391. package/dist/components/pagination/pagination.agent.d.ts.map +1 -1
  392. package/dist/components/pagination/pagination.d.ts +7 -0
  393. package/dist/components/pagination/pagination.d.ts.map +1 -1
  394. package/dist/components/password-input/index.js +1 -1
  395. package/dist/components/password-input/password-input.agent.d.ts +4 -0
  396. package/dist/components/password-input/password-input.agent.d.ts.map +1 -0
  397. package/dist/components/password-input/password-input.d.ts +9 -0
  398. package/dist/components/password-input/password-input.d.ts.map +1 -1
  399. package/dist/components/payment-form/index.js +2 -2
  400. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  401. package/dist/components/payment-form/payment-form.d.ts +2 -0
  402. package/dist/components/payment-form/payment-form.d.ts.map +1 -1
  403. package/dist/components/pdf-viewer/index.js +1 -1
  404. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  405. package/dist/components/pdf-viewer/pdf-viewer.d.ts +2 -0
  406. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  407. package/dist/components/phone-input/index.js +1 -1
  408. package/dist/components/phone-input/phone-input.agent.d.ts +4 -0
  409. package/dist/components/phone-input/phone-input.agent.d.ts.map +1 -0
  410. package/dist/components/phone-input/phone-input.d.ts +7 -0
  411. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  412. package/dist/components/popover/index.js +2 -2
  413. package/dist/components/popover/popover.agent.d.ts +2 -1
  414. package/dist/components/popover/popover.agent.d.ts.map +1 -1
  415. package/dist/components/popover/popover.d.ts +8 -1
  416. package/dist/components/popover/popover.d.ts.map +1 -1
  417. package/dist/components/privacy-lock/index.d.ts +2 -1
  418. package/dist/components/privacy-lock/index.d.ts.map +1 -1
  419. package/dist/components/privacy-lock/index.js +3 -2
  420. package/dist/components/privacy-lock/privacy-lock.agent.d.ts +4 -0
  421. package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +1 -0
  422. package/dist/components/privacy-lock/privacy-lock.d.ts +7 -1
  423. package/dist/components/privacy-lock/privacy-lock.d.ts.map +1 -1
  424. package/dist/components/progress/index.js +2 -2
  425. package/dist/components/progress/progress.agent.d.ts.map +1 -1
  426. package/dist/components/progress/progress.d.ts.map +1 -1
  427. package/dist/components/radio/index.js +1 -1
  428. package/dist/components/radio-group/index.js +2 -2
  429. package/dist/components/radio-group/radio-group.agent.d.ts +4 -0
  430. package/dist/components/radio-group/radio-group.agent.d.ts.map +1 -0
  431. package/dist/components/radio-group/radio-group.d.ts +5 -0
  432. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  433. package/dist/components/radio-group/radio.d.ts.map +1 -1
  434. package/dist/components/recaptcha-widget/index.d.ts +3 -0
  435. package/dist/components/recaptcha-widget/index.d.ts.map +1 -0
  436. package/dist/components/recaptcha-widget/index.js +6 -0
  437. package/dist/components/recaptcha-widget/index.js.map +1 -0
  438. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts +4 -0
  439. package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +1 -0
  440. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts +56 -0
  441. package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +1 -0
  442. package/dist/components/resizable/index.js +1 -1
  443. package/dist/components/resizable/resizable.agent.d.ts +2 -1
  444. package/dist/components/resizable/resizable.agent.d.ts.map +1 -1
  445. package/dist/components/resizable/resizable.d.ts +6 -0
  446. package/dist/components/resizable/resizable.d.ts.map +1 -1
  447. package/dist/components/rich-text-editor/index.js +1 -1
  448. package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +1 -1
  449. package/dist/components/rich-text-editor/rich-text-editor.d.ts +2 -0
  450. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  451. package/dist/components/search-bar/index.d.ts +2 -1
  452. package/dist/components/search-bar/index.d.ts.map +1 -1
  453. package/dist/components/search-bar/index.js +3 -2
  454. package/dist/components/search-bar/search-bar.agent.d.ts +4 -0
  455. package/dist/components/search-bar/search-bar.agent.d.ts.map +1 -0
  456. package/dist/components/search-bar/search-bar.d.ts +27 -1
  457. package/dist/components/search-bar/search-bar.d.ts.map +1 -1
  458. package/dist/components/search-input/index.d.ts +2 -1
  459. package/dist/components/search-input/index.d.ts.map +1 -1
  460. package/dist/components/search-input/index.js +4 -2
  461. package/dist/components/search-input/index.js.map +1 -1
  462. package/dist/components/search-input/search-input.agent.d.ts +4 -0
  463. package/dist/components/search-input/search-input.agent.d.ts.map +1 -0
  464. package/dist/components/search-input/search-input.d.ts +27 -0
  465. package/dist/components/search-input/search-input.d.ts.map +1 -1
  466. package/dist/components/select/index.js +1 -1
  467. package/dist/components/select/select.agent.d.ts +4 -0
  468. package/dist/components/select/select.agent.d.ts.map +1 -0
  469. package/dist/components/select/select.d.ts +9 -0
  470. package/dist/components/select/select.d.ts.map +1 -1
  471. package/dist/components/sheet/index.js +2 -2
  472. package/dist/components/sheet/sheet.agent.d.ts +2 -1
  473. package/dist/components/sheet/sheet.agent.d.ts.map +1 -1
  474. package/dist/components/sheet/sheet.d.ts +11 -2
  475. package/dist/components/sheet/sheet.d.ts.map +1 -1
  476. package/dist/components/sidebar/index.js +2 -2
  477. package/dist/components/sidebar/sidebar.agent.d.ts +2 -1
  478. package/dist/components/sidebar/sidebar.agent.d.ts.map +1 -1
  479. package/dist/components/sidebar/sidebar.d.ts +6 -0
  480. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  481. package/dist/components/signature-capture/index.js +1 -1
  482. package/dist/components/signature-capture/signature-capture.agent.d.ts.map +1 -1
  483. package/dist/components/signature-capture/signature-capture.d.ts +2 -0
  484. package/dist/components/signature-capture/signature-capture.d.ts.map +1 -1
  485. package/dist/components/slider/index.js +1 -1
  486. package/dist/components/slider/slider.agent.d.ts +4 -0
  487. package/dist/components/slider/slider.agent.d.ts.map +1 -0
  488. package/dist/components/slider/slider.d.ts +5 -0
  489. package/dist/components/slider/slider.d.ts.map +1 -1
  490. package/dist/components/sparkline/index.js +1 -1
  491. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  492. package/dist/components/sparkline/sparkline.d.ts.map +1 -1
  493. package/dist/components/stepper-accordion/index.d.ts +2 -1
  494. package/dist/components/stepper-accordion/index.d.ts.map +1 -1
  495. package/dist/components/stepper-accordion/index.js +3 -2
  496. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts +4 -0
  497. package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +1 -0
  498. package/dist/components/stepper-accordion/stepper-accordion.d.ts +19 -1
  499. package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -1
  500. package/dist/components/stepper-calendar/index.d.ts +2 -1
  501. package/dist/components/stepper-calendar/index.d.ts.map +1 -1
  502. package/dist/components/stepper-calendar/index.js +3 -2
  503. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts +4 -0
  504. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts.map +1 -0
  505. package/dist/components/stepper-calendar/stepper-calendar.d.ts +19 -1
  506. package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +1 -1
  507. package/dist/components/stepper-progress/index.d.ts +2 -1
  508. package/dist/components/stepper-progress/index.d.ts.map +1 -1
  509. package/dist/components/stepper-progress/index.js +4 -2
  510. package/dist/components/stepper-progress/index.js.map +1 -1
  511. package/dist/components/stepper-progress/stepper-progress.agent.d.ts +4 -0
  512. package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +1 -0
  513. package/dist/components/stepper-progress/stepper-progress.d.ts +26 -1
  514. package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -1
  515. package/dist/components/suggestion-chip/index.d.ts +2 -1
  516. package/dist/components/suggestion-chip/index.d.ts.map +1 -1
  517. package/dist/components/suggestion-chip/index.js +5 -3
  518. package/dist/components/suggestion-chip/index.js.map +1 -1
  519. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts +4 -0
  520. package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +1 -0
  521. package/dist/components/suggestion-chip/suggestion-chip.d.ts +7 -1
  522. package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +1 -1
  523. package/dist/components/switch/index.js +1 -1
  524. package/dist/components/switch/switch.agent.d.ts +4 -0
  525. package/dist/components/switch/switch.agent.d.ts.map +1 -0
  526. package/dist/components/switch/switch.d.ts +6 -0
  527. package/dist/components/switch/switch.d.ts.map +1 -1
  528. package/dist/components/tabs/index.js +1 -1
  529. package/dist/components/tabs/tabs.agent.d.ts +2 -1
  530. package/dist/components/tabs/tabs.agent.d.ts.map +1 -1
  531. package/dist/components/tabs/tabs.d.ts +4 -0
  532. package/dist/components/tabs/tabs.d.ts.map +1 -1
  533. package/dist/components/task-card/index.d.ts +1 -0
  534. package/dist/components/task-card/index.d.ts.map +1 -1
  535. package/dist/components/task-card/index.js +5 -3
  536. package/dist/components/task-card/index.js.map +1 -1
  537. package/dist/components/task-card/task-card.agent.d.ts +3 -0
  538. package/dist/components/task-card/task-card.agent.d.ts.map +1 -0
  539. package/dist/components/task-card/task-card.d.ts.map +1 -1
  540. package/dist/components/task-tray/index.d.ts +2 -1
  541. package/dist/components/task-tray/index.d.ts.map +1 -1
  542. package/dist/components/task-tray/index.js +3 -2
  543. package/dist/components/task-tray/task-tray.agent.d.ts +4 -0
  544. package/dist/components/task-tray/task-tray.agent.d.ts.map +1 -0
  545. package/dist/components/task-tray/task-tray.d.ts +25 -2
  546. package/dist/components/task-tray/task-tray.d.ts.map +1 -1
  547. package/dist/components/text-area/index.js +1 -1
  548. package/dist/components/text-area/text-area.agent.d.ts +4 -0
  549. package/dist/components/text-area/text-area.agent.d.ts.map +1 -0
  550. package/dist/components/text-area/text-area.d.ts +7 -0
  551. package/dist/components/text-area/text-area.d.ts.map +1 -1
  552. package/dist/components/text-input/index.js +1 -1
  553. package/dist/components/text-input/text-input.agent.d.ts +4 -0
  554. package/dist/components/text-input/text-input.agent.d.ts.map +1 -0
  555. package/dist/components/text-input/text-input.d.ts +10 -0
  556. package/dist/components/text-input/text-input.d.ts.map +1 -1
  557. package/dist/components/theme-toggle/index.d.ts +2 -1
  558. package/dist/components/theme-toggle/index.d.ts.map +1 -1
  559. package/dist/components/theme-toggle/index.js +3 -2
  560. package/dist/components/theme-toggle/theme-toggle.agent.d.ts +4 -0
  561. package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +1 -0
  562. package/dist/components/theme-toggle/theme-toggle.d.ts +9 -2
  563. package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
  564. package/dist/components/time-picker/index.d.ts +2 -1
  565. package/dist/components/time-picker/index.d.ts.map +1 -1
  566. package/dist/components/time-picker/index.js +3 -2
  567. package/dist/components/time-picker/time-picker.agent.d.ts +4 -0
  568. package/dist/components/time-picker/time-picker.agent.d.ts.map +1 -0
  569. package/dist/components/time-picker/time-picker.d.ts +16 -1
  570. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  571. package/dist/components/timeline/index.d.ts +2 -1
  572. package/dist/components/timeline/index.d.ts.map +1 -1
  573. package/dist/components/timeline/index.js +3 -2
  574. package/dist/components/timeline/timeline.agent.d.ts +4 -0
  575. package/dist/components/timeline/timeline.agent.d.ts.map +1 -0
  576. package/dist/components/timeline/timeline.d.ts +8 -1
  577. package/dist/components/timeline/timeline.d.ts.map +1 -1
  578. package/dist/components/toast/index.d.ts +3 -2
  579. package/dist/components/toast/index.d.ts.map +1 -1
  580. package/dist/components/toast/index.js +7 -5
  581. package/dist/components/toast/toast.agent.d.ts +4 -0
  582. package/dist/components/toast/toast.agent.d.ts.map +1 -0
  583. package/dist/components/toast/toast.d.ts +8 -0
  584. package/dist/components/toast/toast.d.ts.map +1 -1
  585. package/dist/components/tooth-scheme/index.js +1 -1
  586. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +1 -1
  587. package/dist/components/tooth-scheme/tooth-scheme.d.ts +2 -0
  588. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  589. package/dist/components/transcript-panel/index.d.ts +2 -1
  590. package/dist/components/transcript-panel/index.d.ts.map +1 -1
  591. package/dist/components/transcript-panel/index.js +3 -2
  592. package/dist/components/transcript-panel/transcript-panel.agent.d.ts +4 -0
  593. package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +1 -0
  594. package/dist/components/transcript-panel/transcript-panel.d.ts +10 -1
  595. package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
  596. package/dist/components/workflow/index.d.ts +2 -1
  597. package/dist/components/workflow/index.d.ts.map +1 -1
  598. package/dist/components/workflow/index.js +10 -7
  599. package/dist/components/workflow/workflow-card.d.ts.map +1 -1
  600. package/dist/components/workflow/workflow-editor.d.ts +7 -1
  601. package/dist/components/workflow/workflow-editor.d.ts.map +1 -1
  602. package/dist/components/workflow/workflow-map.d.ts +2 -0
  603. package/dist/components/workflow/workflow-map.d.ts.map +1 -1
  604. package/dist/components/workflow/workflow.agent.d.ts +6 -0
  605. package/dist/components/workflow/workflow.agent.d.ts.map +1 -0
  606. package/dist/i18n/config.d.ts.map +1 -1
  607. package/dist/i18n/config.js +24 -11
  608. package/dist/i18n/config.js.map +1 -1
  609. package/dist/i18n/resources.d.ts +7 -0
  610. package/dist/i18n/resources.d.ts.map +1 -1
  611. package/dist/index.js +471 -423
  612. package/dist/index.js.map +1 -1
  613. package/dist/locales/en.json +7 -0
  614. package/dist/patterns/leo-assistant/index.js +1 -1
  615. package/dist/patterns/patient-shell/index.js +1 -1
  616. package/dist/tokens.css +1 -1
  617. package/package.json +18 -2
  618. package/dist/_chunks/accordion-B6fyINUk.js.map +0 -1
  619. package/dist/_chunks/accordion.agent-Cz-yglRa.js +0 -17
  620. package/dist/_chunks/accordion.agent-Cz-yglRa.js.map +0 -1
  621. package/dist/_chunks/agenda-tray-BqQZwiHc.js +0 -120
  622. package/dist/_chunks/agenda-tray-BqQZwiHc.js.map +0 -1
  623. package/dist/_chunks/ai-prompt-input-CI27KmZ1.js +0 -380
  624. package/dist/_chunks/ai-prompt-input-CI27KmZ1.js.map +0 -1
  625. package/dist/_chunks/aspect-ratio-CxsdG8vk.js.map +0 -1
  626. package/dist/_chunks/audio-recorder-B-8SKgKn.js +0 -376
  627. package/dist/_chunks/audio-recorder-B-8SKgKn.js.map +0 -1
  628. package/dist/_chunks/autocomplete.agent-DqOy0_1P.js +0 -372
  629. package/dist/_chunks/autocomplete.agent-DqOy0_1P.js.map +0 -1
  630. package/dist/_chunks/breadcrumb-D6xpsP7n.js +0 -293
  631. package/dist/_chunks/breadcrumb-D6xpsP7n.js.map +0 -1
  632. package/dist/_chunks/chart.agent-BdS-_8MO.js.map +0 -1
  633. package/dist/_chunks/chat-container-Cm3SlR2p.js.map +0 -1
  634. package/dist/_chunks/chat-input-DreOPP8A.js.map +0 -1
  635. package/dist/_chunks/checkbox-DNK4qS2_.js +0 -116
  636. package/dist/_chunks/checkbox-DNK4qS2_.js.map +0 -1
  637. package/dist/_chunks/checkbox-group-CWpGZEF6.js +0 -146
  638. package/dist/_chunks/checkbox-group-CWpGZEF6.js.map +0 -1
  639. package/dist/_chunks/collapsible-D4LOdLxp.js +0 -67
  640. package/dist/_chunks/collapsible-D4LOdLxp.js.map +0 -1
  641. package/dist/_chunks/color-picker-e9PmpaGH.js.map +0 -1
  642. package/dist/_chunks/combobox.agent-ByobCLJ_.js +0 -350
  643. package/dist/_chunks/combobox.agent-ByobCLJ_.js.map +0 -1
  644. package/dist/_chunks/command-palette.agent-js2rxgeR.js.map +0 -1
  645. package/dist/_chunks/date-picker-DYXNsWmM.js +0 -1726
  646. package/dist/_chunks/date-picker-DYXNsWmM.js.map +0 -1
  647. package/dist/_chunks/date-range-picker-BcNDJI7m.js +0 -183
  648. package/dist/_chunks/date-range-picker-BcNDJI7m.js.map +0 -1
  649. package/dist/_chunks/date-time-picker-CmGiTU__.js +0 -202
  650. package/dist/_chunks/date-time-picker-CmGiTU__.js.map +0 -1
  651. package/dist/_chunks/dialog.agent-DEG_fVzG.js +0 -147
  652. package/dist/_chunks/dialog.agent-DEG_fVzG.js.map +0 -1
  653. package/dist/_chunks/dropdown-menu-Cw3EyPZv.js.map +0 -1
  654. package/dist/_chunks/dropdown-menu.agent-Cry4Nmes.js +0 -17
  655. package/dist/_chunks/dropdown-menu.agent-Cry4Nmes.js.map +0 -1
  656. package/dist/_chunks/file-upload.agent-B9AN82LA.js.map +0 -1
  657. package/dist/_chunks/freemium-paywall-CkefGLM_.js +0 -198
  658. package/dist/_chunks/freemium-paywall-CkefGLM_.js.map +0 -1
  659. package/dist/_chunks/list-B1ozIjQe.js +0 -359
  660. package/dist/_chunks/list-B1ozIjQe.js.map +0 -1
  661. package/dist/_chunks/message-card-qAp2-WQK.js.map +0 -1
  662. package/dist/_chunks/message-tray-VaLpQU5t.js +0 -303
  663. package/dist/_chunks/message-tray-VaLpQU5t.js.map +0 -1
  664. package/dist/_chunks/multi-select.agent-CNsyW3n9.js.map +0 -1
  665. package/dist/_chunks/navigation-menu-EVFau1O2.js +0 -180
  666. package/dist/_chunks/navigation-menu-EVFau1O2.js.map +0 -1
  667. package/dist/_chunks/notification-tray-B7U5YZYg.js +0 -328
  668. package/dist/_chunks/notification-tray-B7U5YZYg.js.map +0 -1
  669. package/dist/_chunks/number-input-DjpT_RXJ.js +0 -249
  670. package/dist/_chunks/number-input-DjpT_RXJ.js.map +0 -1
  671. package/dist/_chunks/otp-input-De5_Ih7B.js +0 -189
  672. package/dist/_chunks/otp-input-De5_Ih7B.js.map +0 -1
  673. package/dist/_chunks/pagination.agent-oEaqmtx5.js +0 -380
  674. package/dist/_chunks/pagination.agent-oEaqmtx5.js.map +0 -1
  675. package/dist/_chunks/password-input-DJDVznWH.js +0 -193
  676. package/dist/_chunks/password-input-DJDVznWH.js.map +0 -1
  677. package/dist/_chunks/payment-form-hcl-gGrp.js.map +0 -1
  678. package/dist/_chunks/payment-form.agent-BkEnRerR.js.map +0 -1
  679. package/dist/_chunks/pdf-viewer.agent-CfIHhcHx.js.map +0 -1
  680. package/dist/_chunks/phone-input-DE_39q65.js +0 -428
  681. package/dist/_chunks/phone-input-DE_39q65.js.map +0 -1
  682. package/dist/_chunks/popover-C3CTUsqh.js +0 -227
  683. package/dist/_chunks/popover-C3CTUsqh.js.map +0 -1
  684. package/dist/_chunks/popover.agent-C0qOx9WT.js +0 -13
  685. package/dist/_chunks/popover.agent-C0qOx9WT.js.map +0 -1
  686. package/dist/_chunks/privacy-lock-CQpgkLec.js +0 -132
  687. package/dist/_chunks/privacy-lock-CQpgkLec.js.map +0 -1
  688. package/dist/_chunks/progress-B4Of_pzz.js +0 -252
  689. package/dist/_chunks/progress-B4Of_pzz.js.map +0 -1
  690. package/dist/_chunks/progress.agent-CXkHURjX.js +0 -22
  691. package/dist/_chunks/progress.agent-CXkHURjX.js.map +0 -1
  692. package/dist/_chunks/radio-cs8N1wJi.js.map +0 -1
  693. package/dist/_chunks/radio-group-BIUbpWml.js +0 -89
  694. package/dist/_chunks/radio-group-BIUbpWml.js.map +0 -1
  695. package/dist/_chunks/resizable.agent-DBpPGNdy.js +0 -435
  696. package/dist/_chunks/resizable.agent-DBpPGNdy.js.map +0 -1
  697. package/dist/_chunks/rich-text-editor.agent-COSb5_2D.js.map +0 -1
  698. package/dist/_chunks/search-bar-fcGqDFW3.js +0 -397
  699. package/dist/_chunks/search-bar-fcGqDFW3.js.map +0 -1
  700. package/dist/_chunks/search-input-BVMCONyN.js +0 -197
  701. package/dist/_chunks/search-input-BVMCONyN.js.map +0 -1
  702. package/dist/_chunks/select-IY_JQa-F.js +0 -321
  703. package/dist/_chunks/select-IY_JQa-F.js.map +0 -1
  704. package/dist/_chunks/sheet-BhNpLHc9.js.map +0 -1
  705. package/dist/_chunks/sheet.agent-DwQlBqK9.js +0 -13
  706. package/dist/_chunks/sheet.agent-DwQlBqK9.js.map +0 -1
  707. package/dist/_chunks/sidebar-OVzwN3jE.js.map +0 -1
  708. package/dist/_chunks/sidebar.agent-B0fnH9CC.js +0 -17
  709. package/dist/_chunks/sidebar.agent-B0fnH9CC.js.map +0 -1
  710. package/dist/_chunks/signature-capture.agent-C38VPXxg.js.map +0 -1
  711. package/dist/_chunks/slider-DjyRt3Mp.js +0 -274
  712. package/dist/_chunks/slider-DjyRt3Mp.js.map +0 -1
  713. package/dist/_chunks/sparkline.agent-C_xp3NRB.js +0 -238
  714. package/dist/_chunks/sparkline.agent-C_xp3NRB.js.map +0 -1
  715. package/dist/_chunks/stepper-accordion-CGog0JSF.js +0 -233
  716. package/dist/_chunks/stepper-accordion-CGog0JSF.js.map +0 -1
  717. package/dist/_chunks/stepper-calendar-_fLOAjus.js +0 -570
  718. package/dist/_chunks/stepper-calendar-_fLOAjus.js.map +0 -1
  719. package/dist/_chunks/stepper-progress-rE7tn7WY.js +0 -129
  720. package/dist/_chunks/stepper-progress-rE7tn7WY.js.map +0 -1
  721. package/dist/_chunks/suggestion-chip-BNJ2M8Os.js +0 -158
  722. package/dist/_chunks/suggestion-chip-BNJ2M8Os.js.map +0 -1
  723. package/dist/_chunks/switch-aN2EYxHh.js +0 -138
  724. package/dist/_chunks/switch-aN2EYxHh.js.map +0 -1
  725. package/dist/_chunks/tabs.agent-BpbVA-Zh.js.map +0 -1
  726. package/dist/_chunks/task-tray-BzahI5FQ.js +0 -100
  727. package/dist/_chunks/task-tray-BzahI5FQ.js.map +0 -1
  728. package/dist/_chunks/text-area-DmKSd2DG.js +0 -152
  729. package/dist/_chunks/text-area-DmKSd2DG.js.map +0 -1
  730. package/dist/_chunks/text-input-CRHvl5zk.js +0 -188
  731. package/dist/_chunks/text-input-CRHvl5zk.js.map +0 -1
  732. package/dist/_chunks/theme-toggle-BHiMMEQN.js +0 -329
  733. package/dist/_chunks/theme-toggle-BHiMMEQN.js.map +0 -1
  734. package/dist/_chunks/time-picker-D-EueWUG.js +0 -322
  735. package/dist/_chunks/time-picker-D-EueWUG.js.map +0 -1
  736. package/dist/_chunks/timeline-RgAIzpMd.js +0 -220
  737. package/dist/_chunks/timeline-RgAIzpMd.js.map +0 -1
  738. package/dist/_chunks/toast-lOhJDKOH.js.map +0 -1
  739. package/dist/_chunks/tooth-scheme.agent-BlDyu-Gx.js.map +0 -1
  740. package/dist/_chunks/transcript-panel-CNbVGG9L.js +0 -266
  741. package/dist/_chunks/transcript-panel-CNbVGG9L.js.map +0 -1
  742. package/dist/_chunks/workflow-map-XeqHDFvp.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"password-input-DJDVznWH.js","sources":["../../node_modules/lucide-react/dist/esm/icons/eye.js","../../src/components/password-input/password-input.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","import {\n forwardRef,\n useCallback,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { AlertTriangle, Eye, EyeOff } from 'lucide-react';\nimport { TextInput, type TextInputProps } from '../text-input';\nimport { useFormField } from '../form-field/form-field-context';\n\ntype Strength = 0 | 1 | 2 | 3;\n\ntype SizeKey = NonNullable<TextInputProps['size']>;\n\nconst iconSizeClassBySize: Record<SizeKey, string> = {\n sm: 'ds:size-4',\n md: 'ds:size-[18px]',\n lg: 'ds:size-5',\n};\n\nconst toggleVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:ps-2 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:bg-transparent ds:border-0 ds:cursor-pointer',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-w-[var(--min-target-size)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n);\n\nconst strengthTrackVariants = cva(\n 'ds:h-1 ds:w-full ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted',\n);\n\nconst strengthBarVariants = cva(\n [\n 'ds:h-full ds:rounded-[var(--radius-full)]',\n 'ds:transition-all ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n level: {\n 0: 'ds:w-1/4 ds:bg-destructive',\n 1: 'ds:w-1/2 ds:bg-warning',\n 2: 'ds:w-3/4 ds:bg-success',\n 3: 'ds:w-full ds:bg-success',\n },\n },\n defaultVariants: { level: 0 },\n },\n);\n\nconst strengthLabelByLevel: Record<Strength, 'weak' | 'fair' | 'good' | 'strong'> = {\n 0: 'weak',\n 1: 'fair',\n 2: 'good',\n 3: 'strong',\n};\n\nexport interface PasswordInputProps\n extends Omit<TextInputProps, 'type' | 'endAdornment' | 'startAdornment'>,\n VariantProps<typeof strengthBarVariants> {\n /** Callback when reveal state changes (for analytics). */\n onRevealChange?: (revealed: boolean) => void;\n /** Show the strength meter below the input. */\n showStrength?: boolean;\n /** Strength score: 0 = weak, 1 = fair, 2 = good, 3 = strong. */\n strength?: Strength;\n /**\n * Autocomplete hint. Defaults to 'current-password'.\n * Use 'new-password' for registration/change-password forms.\n */\n autoComplete?: 'current-password' | 'new-password' | (string & {});\n}\n\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n (\n {\n onRevealChange,\n showStrength = false,\n strength = 0,\n autoComplete,\n size = 'md',\n disabled,\n name,\n onKeyDown,\n onKeyUp,\n onBlur,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const effectiveDisabled = ctx.disabled || disabled;\n\n const [revealed, setRevealed] = useState(false);\n const [capsLock, setCapsLock] = useState(false);\n\n const handleToggle = useCallback(() => {\n setRevealed((prev) => {\n const next = !prev;\n onRevealChange?.(next);\n return next;\n });\n }, [onRevealChange]);\n\n const detectCaps = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (typeof event.getModifierState === 'function') {\n setCapsLock(event.getModifierState('CapsLock'));\n }\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n detectCaps(event);\n onKeyDown?.(event);\n },\n [detectCaps, onKeyDown],\n );\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n detectCaps(event);\n onKeyUp?.(event);\n },\n [detectCaps, onKeyUp],\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setCapsLock(false);\n onBlur?.(event);\n },\n [onBlur],\n );\n\n const iconSizeClass = iconSizeClassBySize[size];\n const toggleLabel = t(\n revealed ? 'ui.inputs.password.toggleHide' : 'ui.inputs.password.toggleShow',\n revealed ? 'Hide password' : 'Show password',\n );\n\n const strengthKey = strengthLabelByLevel[strength];\n const strengthText = t(\n `ui.inputs.password.strength.${strengthKey}`,\n strengthKey.charAt(0).toUpperCase() + strengthKey.slice(1),\n );\n\n return (\n <div data-component=\"password-input\" className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:relative\">\n <TextInput\n ref={ref}\n type={revealed ? 'text' : 'password'}\n autoComplete={autoComplete ?? 'current-password'}\n name={name ?? 'password'}\n spellCheck={false}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n size={size}\n disabled={effectiveDisabled}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onBlur={handleBlur}\n endAdornment={<span aria-hidden=\"true\" className=\"ds:block ds:size-4\" />}\n className={className}\n {...rest}\n />\n <button\n type=\"button\"\n aria-pressed={revealed}\n aria-label={toggleLabel}\n disabled={effectiveDisabled}\n onClick={handleToggle}\n className={toggleVariants()}\n >\n {revealed ? (\n <EyeOff aria-hidden=\"true\" className={iconSizeClass} />\n ) : (\n <Eye aria-hidden=\"true\" className={iconSizeClass} />\n )}\n </button>\n </div>\n\n {capsLock ? (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-meta ds:text-warning\"\n >\n <AlertTriangle aria-hidden=\"true\" className=\"ds:size-3.5\" />\n {t('ui.inputs.password.capsLock', 'Caps Lock is on')}\n </span>\n ) : null}\n\n {showStrength ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div\n role=\"progressbar\"\n aria-valuenow={strength}\n aria-valuemin={0}\n aria-valuemax={3}\n aria-label={t(\n 'ui.inputs.password.strengthLabel',\n 'Password strength',\n )}\n aria-valuetext={strengthText}\n className={strengthTrackVariants()}\n >\n <div className={strengthBarVariants({ level: strength })} />\n </div>\n <span\n aria-hidden=\"true\"\n className=\"type-meta ds:text-muted-foreground\"\n >\n {strengthText}\n </span>\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nPasswordInput.displayName = 'PasswordInput';\n"],"names":["__iconNode","Eye","createLucideIcon","iconSizeClassBySize","toggleVariants","cva","strengthTrackVariants","strengthBarVariants","strengthLabelByLevel","PasswordInput","forwardRef","onRevealChange","showStrength","strength","autoComplete","size","disabled","name","onKeyDown","onKeyUp","onBlur","className","rest","ref","t","useTranslation","effectiveDisabled","useFormField","revealed","setRevealed","useState","capsLock","setCapsLock","handleToggle","useCallback","prev","next","detectCaps","event","handleKeyDown","handleKeyUp","handleBlur","iconSizeClass","toggleLabel","strengthKey","strengthText","jsxs","jsx","TextInput","EyeOff","AlertTriangle"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"payment-form-hcl-gGrp.js","sources":["../../src/tokens/themes/bridges/stripe-appearance.ts","../../src/components/payment-form/payment-form.tsx"],"sourcesContent":["import type { Appearance } from '@stripe/stripe-js';\n\n/**\n * Reads the current design-system tokens from a theme-root element and maps\n * them to Stripe Elements' Appearance API. `root` defaults to\n * `document.documentElement` but consumers can pass a scoped theme wrapper\n * (e.g. a modal with its own `.theme-accessible` override) so that Stripe\n * iframes pick up the right token set.\n *\n * Tokens referenced: --primary, --background, --foreground, --muted,\n * --muted-foreground, --border, --destructive, --radius-md, --font-sans,\n * --font-size-base, --spacing-sm, --animation-duration, --focus-ring-width,\n * --ring.\n *\n * No hex / rgb / hsl literals — every value flows from the token layer.\n */\n\nfunction isBrowser(): boolean {\n return typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\nexport function getStripeAppearance(root?: HTMLElement): Appearance {\n if (!isBrowser()) {\n return { theme: 'stripe' };\n }\n\n const target = root ?? document.documentElement;\n const styles = getComputedStyle(target);\n const read = (token: string) => styles.getPropertyValue(token).trim();\n const isDark = target.classList.contains('theme-dark');\n\n return {\n theme: isDark ? 'night' : 'stripe',\n variables: {\n colorPrimary: read('--primary'),\n colorBackground: read('--background'),\n colorText: read('--foreground'),\n colorDanger: read('--destructive'),\n colorTextSecondary: read('--muted-foreground'),\n colorTextPlaceholder: read('--muted-foreground'),\n borderRadius: read('--radius-md'),\n fontFamily: read('--font-sans'),\n fontSizeBase: read('--font-size-base'),\n // Stripe multiplies spacingUnit throughout every Element; --spacing-sm\n // gives readable density. Keep this in sync with the JSDoc above.\n spacingUnit: read('--spacing-sm'),\n },\n rules: {\n '.Input': {\n backgroundColor: read('--background'),\n border: `1px solid ${read('--border')}`,\n color: read('--foreground'),\n padding: read('--spacing-sm'),\n transition: `border-color ${read('--animation-duration')} ease-out`,\n },\n '.Input:focus': {\n borderColor: read('--primary'),\n boxShadow: `0 0 0 ${read('--focus-ring-width')} ${read('--ring')}`,\n outline: 'none',\n },\n '.Input--invalid': {\n borderColor: read('--destructive'),\n color: read('--foreground'),\n },\n '.Label': {\n color: read('--foreground'),\n fontWeight: read('--font-weight-medium'),\n fontSize: read('--font-size-sm'),\n },\n '.Error': {\n color: read('--destructive'),\n fontSize: read('--font-size-sm'),\n },\n '.Tab': {\n border: `1px solid ${read('--border')}`,\n backgroundColor: read('--background'),\n color: read('--foreground'),\n },\n '.Tab--selected': {\n borderColor: read('--primary'),\n backgroundColor: read('--background'),\n color: read('--primary'),\n },\n },\n };\n}\n\n/**\n * Calls `onChange(getStripeAppearance(root))` whenever the theme root's\n * class list mutates (theme switch) or the user toggles\n * `prefers-color-scheme` / `prefers-reduced-motion`. Returns an\n * unsubscribe function.\n */\nexport function subscribeStripeAppearance(\n onChange: (next: Appearance) => void,\n root?: HTMLElement,\n): () => void {\n if (!isBrowser()) return () => undefined;\n\n const target = root ?? document.documentElement;\n const emit = () => onChange(getStripeAppearance(root));\n\n const observer = new MutationObserver(emit);\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'dir', 'lang'],\n });\n\n const schemeMql = window.matchMedia('(prefers-color-scheme: dark)');\n const motionMql = window.matchMedia('(prefers-reduced-motion: reduce)');\n schemeMql.addEventListener('change', emit);\n motionMql.addEventListener('change', emit);\n\n return () => {\n observer.disconnect();\n schemeMql.removeEventListener('change', emit);\n motionMql.removeEventListener('change', emit);\n };\n}\n","/* ------------------------------------------------------------------ */\n/* PaymentForm — Stripe Elements wrapper (PCI DSS SAQ-A). */\n/* */\n/* - Library: `@stripe/react-stripe-js` + `@stripe/stripe-js` (see */\n/* `src/docs/08-third-party.mdx §Payments`). Card number, expiry, */\n/* CVC, and postal code all live inside Stripe-hosted iframes on */\n/* `js.stripe.com` — raw PAN never touches our origin, keeping us */\n/* inside PCI DSS SAQ-A scope. */\n/* */\n/* - Theming: the `stripe-appearance` bridge snapshots our tokens into */\n/* Stripe's Appearance API (`variables`, `rules`). A */\n/* `MutationObserver` on `<html class>` re-runs the snapshot when */\n/* the user flips theme so the embedded iframes repaint. */\n/* */\n/* - Security invariants enforced in this file: */\n/* 1. No `<input type=\"tel\" name=\"card\">` anywhere. */\n/* 2. Error strings are sanitised via `stripCardLikeDigits` before */\n/* forwarding to `onError` (replaces any `\\b\\d{4,}\\b` with */\n/* `****`). */\n/* 3. Element change events are never logged; any dev-only logging */\n/* is gated behind `import.meta.env.DEV` — never runs in prod. */\n/* */\n/* TODO: */\n/* - Stripe's `direction: 'rtl'` is not part of the current */\n/* `Appearance` TypeScript type; we rely on CSS mirroring of our */\n/* chrome via logical properties and let Stripe lay out the iframe */\n/* ltr for now. Revisit when @stripe/stripe-js publishes the type. */\n/* - No `<CardNumberElement>` / split-fields story — `PaymentElement` */\n/* handles accordion + card-only modes via its own `layout` option.*/\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from '../spinner';\nimport { Alert } from '../alert';\nimport {\n loadStripe,\n type Stripe,\n type Appearance,\n type StripeElementLocale,\n} from '@stripe/stripe-js';\nimport {\n Elements,\n PaymentElement,\n AddressElement,\n useElements,\n useStripe,\n} from '@stripe/react-stripe-js';\n\nimport {\n getStripeAppearance,\n subscribeStripeAppearance,\n} from '../../tokens/themes/bridges/stripe-appearance';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type PaymentCurrency = string; // ISO-4217\n\nexport interface PaymentFormProps {\n /** Required — from your server, created via the PaymentIntents API. */\n clientSecret: string;\n /** Stripe publishable key (`pk_test_…` / `pk_live_…`). */\n publishableKey: string;\n /** ISO-4217 currency code (e.g. 'EUR', 'USD', 'JPY'). */\n currency: PaymentCurrency;\n /** Amount in the currency's smallest unit (cents for EUR/USD, yen for JPY). */\n amount: number;\n /** Called with the PaymentIntent id on successful confirmation. */\n onSuccess?: (paymentIntentId: string) => void;\n /** Called with a sanitised error (no PAN digits, no Stripe English strings). */\n onError?: (error: { code: string; translatedMessage: string }) => void;\n /** Show the billing-address collector below the payment fields. */\n billingAddress?: boolean;\n /** Locale override — defaults to the active i18next locale. */\n locale?: string;\n /** Accessible label for the form. */\n ariaLabel?: string;\n /** URL Stripe redirects to when a payment method requires it. */\n returnUrl?: string;\n /** Pre-injected Stripe instance — used by tests + stories to bypass the network. */\n stripePromise?: Promise<Stripe | null> | null;\n className?: string;\n}\n\nexport interface PaymentFormHandle {\n /** Programmatically submit the form (same flow as the Pay button). */\n submit: () => Promise<void>;\n /** Reset the form to its initial state. */\n reset: () => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* Currency helpers */\n/* ------------------------------------------------------------------ */\n\n/**\n * Currencies that Stripe bills in their base unit (no decimals). Source:\n * https://stripe.com/docs/currencies#zero-decimal — list pinned per\n * 08-third-party.mdx.\n */\nconst ZERO_DECIMAL_CURRENCIES = new Set<string>([\n 'BIF',\n 'CLP',\n 'DJF',\n 'GNF',\n 'IDR',\n 'JPY',\n 'KMF',\n 'KRW',\n 'MGA',\n 'PYG',\n 'RWF',\n 'UGX',\n 'VND',\n 'VUV',\n 'XAF',\n 'XOF',\n 'XPF',\n]);\n\nexport function formatPaymentAmount(\n amount: number,\n currency: string,\n locale: string,\n): string {\n const iso = currency.toUpperCase();\n const major = ZERO_DECIMAL_CURRENCIES.has(iso) ? amount : amount / 100;\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: iso,\n }).format(major);\n } catch {\n // Invalid locale/currency pair — fall back to a safe format so we\n // never leak raw amount integers into the UI.\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: iso,\n }).format(major);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Return URL validation */\n/* ------------------------------------------------------------------ */\n\n/**\n * Resolve `returnUrl` against the current origin. Accepts:\n * - absolute URLs on the same origin as `window.location`\n * - relative paths (resolved against the current origin)\n * Rejects (returns `null`):\n * - cross-origin URLs — would leak `payment_intent_client_secret`\n * - `javascript:` / `data:` / `file:` / `blob:` schemes\n * - SSR contexts (no `window`) — the submit path requires a browser\n * anyway, so rejecting here is the safer default.\n * See security-hardening.mdx.\n */\nexport function validateReturnUrl(\n returnUrl: string | undefined,\n): string | null {\n if (returnUrl === undefined) return null;\n const raw = returnUrl.trim();\n if (raw === '') return null;\n if (typeof window === 'undefined') return null;\n try {\n const resolved = new URL(raw, window.location.href);\n const allowedSchemes = new Set(['http:', 'https:']);\n if (!allowedSchemes.has(resolved.protocol)) return null;\n if (resolved.origin !== window.location.origin) return null;\n return resolved.toString();\n } catch {\n return null;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Error sanitisation */\n/* ------------------------------------------------------------------ */\n\n/**\n * Replace any run of 4+ consecutive digits with `****`. Called before any\n * error text leaves the wrapper. Defensive: even though Stripe's error\n * strings don't normally contain PANs, a future SDK change could, and we\n * want a hard guarantee that `console` / analytics / Sentry breadcrumbs\n * stay clear of anything that looks like card data.\n */\nexport function stripCardLikeDigits(message: string): string {\n if (!message) return message;\n // Deliberately no word boundaries: a PAN run embedded between word\n // characters (e.g. \"CARD4242424242424242DECLINED\") must still be masked.\n return message.replace(/\\d{4,}/g, '****');\n}\n\n/**\n * Map a Stripe error code (e.g. `card_declined`, `incorrect_number`) to a\n * translation key under `payment.error.*`. Unknown codes fall through to\n * `payment.error.generic`.\n */\nexport function stripeErrorCodeToI18nKey(code: string | undefined): string {\n switch (code) {\n case 'incorrect_number':\n case 'invalid_number':\n return 'payment.error.cardNumber';\n case 'invalid_expiry_month':\n case 'invalid_expiry_year':\n case 'expired_card':\n return 'payment.error.expiry';\n case 'invalid_cvc':\n case 'incorrect_cvc':\n return 'payment.error.cvc';\n case 'incorrect_zip':\n case 'invalid_zip':\n return 'payment.error.postalCode';\n case 'card_declined':\n case 'do_not_honor':\n case 'generic_decline':\n return 'payment.error.declined';\n case 'network_error':\n case 'api_connection_error':\n return 'payment.error.network';\n default:\n return 'payment.error.generic';\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst formVariants = cva(\n [\n 'ds:payment-form-alfadocs ds:flex ds:flex-col',\n 'ds:gap-[var(--spacing-md)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:p-[var(--spacing-md)]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst fieldLabelVariants = cva(\n ['ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]'].join(' '),\n);\n\nconst labelTextVariants = cva(\n [\n 'type-label',\n 'ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\nconst amountSummaryVariants = cva(\n [\n 'ds:flex ds:items-baseline ds:justify-between',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:bg-[var(--muted)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\nconst submitButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)]',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:text-[length:var(--font-size-base)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--primary-hover)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n 'ds:aria-busy:cursor-wait',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Inner form — lives inside the <Elements> provider */\n/* ------------------------------------------------------------------ */\n\ninterface InnerPaymentFormProps {\n amount: number;\n currency: string;\n locale: string;\n billingAddress: boolean;\n returnUrl: string | undefined;\n onSuccess: PaymentFormProps['onSuccess'];\n onError: PaymentFormProps['onError'];\n}\n\nfunction InnerPaymentForm(props: InnerPaymentFormProps): JSX.Element {\n const {\n amount,\n currency,\n locale,\n billingAddress,\n returnUrl,\n onSuccess,\n onError,\n } = props;\n\n const { t } = useTranslation();\n const stripe = useStripe();\n const elements = useElements();\n\n const rawId = useId();\n const idSafe = useMemo(\n () => `pay-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const paymentFieldId = `${idSafe}-payment`;\n const addressFieldId = `${idSafe}-address`;\n const errorId = `${idSafe}-error`;\n\n const [processing, setProcessing] = useState(false);\n const [elementComplete, setElementComplete] = useState(false);\n const [errorKey, setErrorKey] = useState<string | null>(null);\n const [errorMessage, setErrorMessage] = useState<string>('');\n\n const onSuccessRef = useRef(onSuccess);\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onSuccessRef.current = onSuccess;\n onErrorRef.current = onError;\n }, [onSuccess, onError]);\n\n const handleSubmit = useCallback(\n async (event?: FormEvent<HTMLFormElement>): Promise<void> => {\n if (event) event.preventDefault();\n if (!stripe || !elements) return;\n if (processing) return;\n\n setProcessing(true);\n setErrorKey(null);\n setErrorMessage('');\n\n // Validate returnUrl at the boundary so even a careless consumer\n // cannot leak payment_intent_client_secret to a third-party origin.\n const safeReturnUrl = validateReturnUrl(returnUrl);\n if (returnUrl !== undefined && safeReturnUrl === null) {\n setErrorKey('payment.error.invalidReturnUrl');\n setErrorMessage(t('payment.error.invalidReturnUrl'));\n onErrorRef.current?.({\n code: 'invalid_return_url',\n translatedMessage: t('payment.error.invalidReturnUrl'),\n });\n setProcessing(false);\n return;\n }\n try {\n const result = await stripe.confirmPayment({\n elements,\n confirmParams: safeReturnUrl ? { return_url: safeReturnUrl } : {},\n redirect: 'if_required',\n });\n\n if (result.error) {\n const code = result.error.code ?? 'generic';\n const key = stripeErrorCodeToI18nKey(code);\n // CRITICAL: sanitise before storing OR forwarding.\n const safe = stripCardLikeDigits(result.error.message ?? '');\n setErrorKey(key);\n setErrorMessage(t(key));\n onErrorRef.current?.({\n code,\n translatedMessage: safe || t(key),\n });\n return;\n }\n\n // Success path — only the PaymentIntent id leaves the wrapper.\n if (result.paymentIntent) {\n onSuccessRef.current?.(result.paymentIntent.id);\n }\n } catch (err: unknown) {\n const raw = err instanceof Error ? err.message : '';\n const safe = stripCardLikeDigits(raw);\n setErrorKey('payment.error.generic');\n setErrorMessage(t('payment.error.generic'));\n onErrorRef.current?.({\n code: 'unexpected',\n translatedMessage: safe || t('payment.error.generic'),\n });\n } finally {\n setProcessing(false);\n }\n },\n [stripe, elements, processing, returnUrl, t],\n );\n\n // Imperative submit hook used by the outer component's ref handle.\n useEffect(() => {\n const host = document.getElementById(idSafe);\n if (!host) return;\n const submitter = () => {\n void handleSubmit();\n };\n host.addEventListener('payment-form:submit', submitter);\n return () => host.removeEventListener('payment-form:submit', submitter);\n }, [idSafe, handleSubmit]);\n\n const submitDisabled = !stripe || !elements || !elementComplete || processing;\n\n return (\n <form\n id={idSafe}\n onSubmit={handleSubmit}\n aria-label={t('payment.ariaLabel')}\n aria-busy={processing || undefined}\n noValidate\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <div className={amountSummaryVariants()}>\n <span className={labelTextVariants()}>{t('payment.amountLabel')}</span>\n <span\n className=\"type-title-card\"\n data-testid=\"payment-amount\"\n >\n {formatPaymentAmount(amount, currency, locale)}\n </span>\n </div>\n\n <label\n htmlFor={paymentFieldId}\n className={fieldLabelVariants()}\n data-testid=\"payment-field\"\n >\n <span className={labelTextVariants()}>{t('payment.fields.card')}</span>\n <PaymentElement\n id={paymentFieldId}\n options={{\n layout: { type: 'accordion', defaultCollapsed: false },\n }}\n onChange={(ev) => {\n // NOTE: never log `ev` — change events may include hints\n // about field contents. Keep only the boolean completeness.\n setElementComplete(ev.complete === true);\n if (ev.complete) {\n setErrorKey(null);\n setErrorMessage('');\n }\n }}\n />\n </label>\n\n {billingAddress ? (\n <label\n htmlFor={addressFieldId}\n className={fieldLabelVariants()}\n data-testid=\"payment-address\"\n >\n <span className={labelTextVariants()}>\n {t('payment.billingAddress')}\n </span>\n <AddressElement\n id={addressFieldId}\n options={{ mode: 'billing' }}\n />\n </label>\n ) : null}\n\n {errorKey ? (\n <Alert\n id={errorId}\n variant=\"error\"\n live=\"polite\"\n data-testid=\"payment-error\"\n >\n <Alert.Description>{errorMessage}</Alert.Description>\n </Alert>\n ) : null}\n\n <button\n type=\"submit\"\n aria-disabled={submitDisabled || undefined}\n aria-busy={processing || undefined}\n aria-describedby={errorKey ? errorId : undefined}\n className={submitButtonVariants()}\n data-testid=\"payment-submit\"\n >\n {processing ? (\n <>\n <Spinner size=\"sm\" label={t('payment.processing')} />\n <span>{t('payment.processing')}</span>\n </>\n ) : (\n <span>\n {t('payment.submit', {\n amount: formatPaymentAmount(amount, currency, locale),\n })}\n </span>\n )}\n </button>\n </div>\n </form>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* PaymentForm — outer wrapper */\n/* ------------------------------------------------------------------ */\n\n/**\n * Stripe ships a closed union of supported locales; anything outside it\n * must fall through to `'auto'` (Stripe picks the best match from the\n * browser). We also normalise the legacy `cn` code to `zh` per\n * `src/docs/06-i18n.mdx`.\n */\nconst STRIPE_LOCALES = new Set<StripeElementLocale>([\n 'auto', 'ar', 'bg', 'cs', 'da', 'de', 'el', 'en', 'en-AU', 'en-CA',\n 'en-NZ', 'en-GB', 'es', 'es-ES', 'es-419', 'et', 'fi', 'fil', 'fr',\n 'fr-CA', 'fr-FR', 'he', 'hu', 'hr', 'id', 'it', 'it-IT', 'ja', 'ko',\n 'lt', 'lv', 'ms', 'mt', 'nb', 'nl', 'no', 'pl', 'pt', 'pt-BR', 'ro',\n 'ru', 'sk', 'sl', 'sv', 'th', 'tr', 'vi', 'zh', 'zh-HK', 'zh-TW',\n]);\n\nfunction normaliseLocale(input: string): StripeElementLocale {\n if (!input) return 'auto';\n const candidate = input === 'cn' ? 'zh' : input;\n if ((STRIPE_LOCALES as Set<string>).has(candidate)) {\n return candidate as StripeElementLocale;\n }\n // Try stripping region (\"en-US\" → \"en\") before giving up.\n const base = candidate.split('-')[0];\n if ((STRIPE_LOCALES as Set<string>).has(base)) {\n return base as StripeElementLocale;\n }\n return 'auto';\n}\n\nexport const PaymentForm = forwardRef<PaymentFormHandle, PaymentFormProps>(\n (\n {\n clientSecret,\n publishableKey,\n currency,\n amount,\n onSuccess,\n onError,\n billingAddress = false,\n locale,\n ariaLabel,\n returnUrl,\n stripePromise: injectedStripe,\n className,\n },\n ref,\n ) => {\n const { i18n } = useTranslation();\n const activeLocale = normaliseLocale(locale ?? i18n.language ?? 'en');\n\n // Stripe instance — pre-injected (tests/stories) or lazily loaded.\n const [stripeInstance, setStripeInstance] = useState<Promise<Stripe | null> | null>(\n injectedStripe ?? null,\n );\n\n useEffect(() => {\n if (injectedStripe !== undefined) {\n setStripeInstance(injectedStripe);\n return;\n }\n if (!publishableKey) {\n setStripeInstance(null);\n return;\n }\n // `loadStripe` is cached by the SDK — safe to call per mount.\n setStripeInstance(loadStripe(publishableKey));\n }, [injectedStripe, publishableKey]);\n\n // Appearance bridge — snapshot + subscribe.\n const [appearance, setAppearance] = useState<Appearance>(() =>\n getStripeAppearance(),\n );\n useEffect(() => {\n setAppearance(getStripeAppearance());\n const unsubscribe = subscribeStripeAppearance(setAppearance);\n return unsubscribe;\n }, []);\n\n // Imperative handle — dispatch a custom event at the inner form so we\n // can trigger the same submit path as the button without leaking refs\n // through the Stripe `<Elements>` provider (which owns its own tree).\n const hostRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(\n ref,\n (): PaymentFormHandle => ({\n submit: async () => {\n const form = hostRef.current?.querySelector('form');\n if (form) {\n form.dispatchEvent(\n new CustomEvent('payment-form:submit', { bubbles: true }),\n );\n }\n },\n reset: () => {\n const form = hostRef.current?.querySelector('form');\n if (form instanceof HTMLFormElement) {\n form.reset();\n }\n },\n }),\n [],\n );\n\n const elementsOptions = useMemo(\n () => ({\n clientSecret,\n appearance,\n locale: activeLocale,\n }),\n [clientSecret, appearance, activeLocale],\n );\n\n return (\n <div\n ref={hostRef}\n aria-label={ariaLabel}\n className={[formVariants(), className].filter(Boolean).join(' ')}\n data-component=\"payment-form\"\n data-testid=\"payment-form-root\"\n >\n {stripeInstance && clientSecret ? (\n <Elements\n stripe={stripeInstance}\n options={elementsOptions}\n key={clientSecret}\n >\n <InnerPaymentForm\n amount={amount}\n currency={currency}\n locale={activeLocale}\n billingAddress={billingAddress}\n returnUrl={returnUrl}\n onSuccess={onSuccess}\n onError={onError}\n />\n </Elements>\n ) : (\n <PaymentFormSkeleton\n amount={amount}\n currency={currency}\n locale={activeLocale}\n billingAddress={billingAddress}\n />\n )}\n </div>\n );\n },\n);\n\nPaymentForm.displayName = 'PaymentForm';\n\n/* ------------------------------------------------------------------ */\n/* Skeleton — visual chrome when Stripe hasn't loaded yet */\n/* ------------------------------------------------------------------ */\n\ninterface PaymentFormSkeletonProps {\n amount: number;\n currency: string;\n locale: string;\n billingAddress: boolean;\n}\n\nfunction PaymentFormSkeleton(props: PaymentFormSkeletonProps): JSX.Element {\n const { amount, currency, locale, billingAddress } = props;\n const { t } = useTranslation();\n\n return (\n <div\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n data-testid=\"payment-skeleton\"\n aria-busy=\"true\"\n >\n <div className={amountSummaryVariants()}>\n <span className={labelTextVariants()}>{t('payment.amountLabel')}</span>\n <span className=\"type-title-card\">\n {formatPaymentAmount(amount, currency, locale)}\n </span>\n </div>\n <div className={fieldLabelVariants()}>\n <span className={labelTextVariants()}>{t('payment.fields.card')}</span>\n <div\n className=\"ds:min-block-size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--muted)]\"\n aria-hidden=\"true\"\n />\n </div>\n {billingAddress ? (\n <div className={fieldLabelVariants()}>\n <span className={labelTextVariants()}>\n {t('payment.billingAddress')}\n </span>\n <div\n className=\"ds:min-block-size-[calc(var(--min-target-size)*2)] ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--muted)]\"\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n <button\n type=\"button\"\n aria-disabled=\"true\"\n className={submitButtonVariants()}\n disabled\n >\n <Spinner size=\"sm\" label={t('payment.processing')} />\n <span>{t('payment.processing')}</span>\n </button>\n </div>\n );\n}\n\nexport {\n formVariants as paymentFormVariants,\n submitButtonVariants as paymentSubmitButtonVariants,\n};\n"],"names":["isBrowser","getStripeAppearance","root","target","styles","read","token","subscribeStripeAppearance","onChange","emit","observer","schemeMql","motionMql","ZERO_DECIMAL_CURRENCIES","formatPaymentAmount","amount","currency","locale","iso","major","validateReturnUrl","returnUrl","raw","resolved","stripCardLikeDigits","message","stripeErrorCodeToI18nKey","code","formVariants","cva","fieldLabelVariants","labelTextVariants","amountSummaryVariants","submitButtonVariants","InnerPaymentForm","props","billingAddress","onSuccess","onError","t","useTranslation","stripe","useStripe","elements","useElements","rawId","useId","idSafe","useMemo","paymentFieldId","addressFieldId","errorId","processing","setProcessing","useState","elementComplete","setElementComplete","errorKey","setErrorKey","errorMessage","setErrorMessage","onSuccessRef","useRef","onErrorRef","useEffect","handleSubmit","useCallback","event","safeReturnUrl","_a","result","key","safe","_b","_c","err","_d","host","submitter","submitDisabled","jsx","jsxs","PaymentElement","ev","AddressElement","Alert","Fragment","Spinner","STRIPE_LOCALES","normaliseLocale","input","candidate","base","PaymentForm","forwardRef","clientSecret","publishableKey","ariaLabel","injectedStripe","className","ref","i18n","activeLocale","stripeInstance","setStripeInstance","loadStripe","appearance","setAppearance","hostRef","useImperativeHandle","form","elementsOptions","Elements","PaymentFormSkeleton"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"payment-form.agent-BkEnRerR.js","sources":["../../src/components/payment-form/payment-form.agent.ts"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { PaymentFormHandle } from './payment-form';\n\nexport const paymentFormAgent: AgentAdapter<PaymentFormHandle> = {\n id: 'payment-form',\n capabilities: ['submit'],\n state: {},\n actions: {\n submit: {\n safety: 'destructive',\n description: 'Submit the payment. Charges the configured payment method — irreversible.',\n invoke: (handle) => handle.submit(),\n },\n reset: {\n safety: 'destructive',\n description: 'Reset the form to its initial state. Loses any in-progress input.',\n invoke: (handle) => {\n handle.reset();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'payment-form' },\n },\n};\n"],"names":["paymentFormAgent","handle"],"mappings":"AAGO,MAAMA,IAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,cAAc,CAAC,QAAQ;AAAA,EACvB,OAAO,CAAA;AAAA,EACP,SAAS;AAAA,IACP,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACC,MAAWA,EAAO,OAAA;AAAA,IAAO;AAAA,IAEpC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM,EAAE,MAAM,kBAAkB,OAAO,eAAA;AAAA,EAAe;AAE1D;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pdf-viewer.agent-CfIHhcHx.js","sources":["../../node_modules/lucide-react/dist/esm/icons/zoom-in.js","../../node_modules/lucide-react/dist/esm/icons/zoom-out.js","../../src/components/pdf-viewer/pdf-viewer.tsx","../../src/components/pdf-viewer/pdf-viewer.agent.ts"],"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 [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"11\", x2: \"11\", y1: \"8\", y2: \"14\", key: \"1vmskp\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomIn = createLucideIcon(\"zoom-in\", __iconNode);\n\nexport { __iconNode, ZoomIn as default };\n//# sourceMappingURL=zoom-in.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomOut = createLucideIcon(\"zoom-out\", __iconNode);\n\nexport { __iconNode, ZoomOut as default };\n//# sourceMappingURL=zoom-out.js.map\n","/* ------------------------------------------------------------------ */\n/* PDFViewer — thin React wrapper over Mozilla's pdfjs-dist. */\n/* */\n/* - Worker: loaded once at module scope via Vite's `?url` asset */\n/* import; consumers never configure it (08-third-party §PDF Viewer). */\n/* - Lazy rendering: an IntersectionObserver renders only visible + */\n/* ±1 buffer pages; off-screen pages release GPU memory by setting */\n/* `canvas.width = 0` while the wrapper <article> keeps its reserved */\n/* height so scroll position is stable. */\n/* - Toolbar: WAI-ARIA `role=\"toolbar\"` with roving tabindex (same */\n/* pattern as RichTextEditor — see 05-accessibility.mdx §42). */\n/* - Find bar: Radix Popover; Cmd/Ctrl+F opens; matches decorated in */\n/* the text layer with a `--warning`-tinted background. */\n/* - i18n: every string via `t('pdf.*')`. Icons flipped via `rtl:…`. */\n/* */\n/* TODO: */\n/* - Full PDF.js `printService` integration (A4 / US Letter, 150 DPI,*/\n/* hidden high-DPI canvas). For now `print()` calls `window.print()`*/\n/* which renders the viewer chrome — the `@media print` rule lives */\n/* in a future theme bridge. */\n/* - AnnotationLayer for form fields and links (08-third-party). */\n/* - Accessibility-tag surfacing via `aria-describedby` per the user */\n/* story's screen-reader acceptance row. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport type {\n PDFDocumentProxy,\n PDFPageProxy,\n} from 'pdfjs-dist/types/src/display/api';\nimport type { PageViewport } from 'pdfjs-dist/types/src/display/display_utils';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport {\n ChevronLeft,\n ChevronRight,\n ZoomIn,\n ZoomOut,\n Search,\n Printer,\n X,\n} from 'lucide-react';\n\n/* ------------------------------------------------------------------ */\n/* Worker setup — one-shot at module scope */\n/* ------------------------------------------------------------------ */\n\n// Vite resolves `?url` to a static URL string at build time. This keeps\n// PDF.js off the main bundle and lets the consumer not think about it.\nimport pdfjsWorkerUrl from 'pdfjs-dist/build/pdf.worker.min.mjs?url';\n\nimport { Spinner } from '../spinner';\nimport { Alert } from '../alert';\n\npdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorkerUrl;\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type PDFZoomPreset = 'fit-width' | 'fit-page' | 'actual-size' | number;\n\nexport interface PDFViewerProps {\n /** PDF source — URL string, ArrayBuffer, or Uint8Array. */\n src: string | ArrayBuffer | Uint8Array;\n /** Initial page (1-based). Default 1. */\n initialPage?: number;\n /** Initial zoom preset. Default 'fit-width'. */\n initialZoom?: PDFZoomPreset;\n /** Emits when the currently-most-visible page changes. */\n onPageChange?: (page: number) => void;\n /** Emits once the PDF document has loaded. */\n onLoadComplete?: (info: { numPages: number; title?: string }) => void;\n /** Emits on any load / render error. */\n onError?: (error: Error) => void;\n /** Show the toolbar. Default `true`. */\n toolbar?: boolean;\n /** Accessible label for the viewer region. */\n ariaLabel?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface PDFViewerHandle {\n goToPage: (page: number) => void;\n setZoom: (zoom: PDFZoomPreset) => void;\n search: (query: string) => void;\n print: () => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva(\n [\n 'ds:pdf-viewer-alfadocs ds:flex ds:flex-col',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:overflow-hidden',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst toolbarVariants = cva(\n [\n 'ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:bg-[var(--background)]',\n 'ds:border-b ds:border-[color:var(--border)]',\n ].join(' '),\n);\n\nconst toolbarButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)] ds:bg-transparent ds:text-[var(--foreground)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst pageInputVariants = cva(\n [\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:inline-size-[4rem] ds:text-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst zoomSelectVariants = cva(\n [\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst pagesContainerVariants = cva(\n [\n 'ds:relative ds:flex ds:flex-col ds:items-center',\n 'ds:gap-[var(--spacing-md)]',\n 'ds:p-[var(--spacing-md)]',\n 'ds:bg-[var(--muted)]',\n 'ds:overflow-auto',\n 'ds:min-block-size-[30rem]',\n 'ds:max-block-size-[80vh]',\n ].join(' '),\n);\n\nconst pageArticleVariants = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:justify-center',\n 'ds:bg-[var(--background)]',\n 'ds:shadow-[var(--shadow-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst ZOOM_PRESETS: ReadonlyArray<PDFZoomPreset> = [\n 'fit-width',\n 'fit-page',\n 'actual-size',\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 2,\n];\n\nfunction isNumberZoom(z: PDFZoomPreset): z is number {\n return typeof z === 'number';\n}\n\nfunction resolveScale(\n zoom: PDFZoomPreset,\n viewport: PageViewport,\n container: HTMLElement | null,\n): number {\n if (isNumberZoom(zoom)) return zoom;\n if (zoom === 'actual-size') return 1;\n if (!container) return 1;\n const style = window.getComputedStyle(container);\n const padX =\n parseFloat(style.paddingInlineStart || '0') +\n parseFloat(style.paddingInlineEnd || '0');\n const padY =\n parseFloat(style.paddingBlockStart || '0') +\n parseFloat(style.paddingBlockEnd || '0');\n const availW = Math.max(container.clientWidth - padX, 1);\n const availH = Math.max(container.clientHeight - padY, 1);\n const baseW = viewport.width;\n const baseH = viewport.height;\n if (zoom === 'fit-width') return availW / baseW;\n // fit-page\n return Math.min(availW / baseW, availH / baseH);\n}\n\ninterface LoadedDocument {\n doc: PDFDocumentProxy;\n numPages: number;\n title?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* PDFViewer */\n/* ------------------------------------------------------------------ */\n\nexport const PDFViewer = forwardRef<PDFViewerHandle, PDFViewerProps>(\n (\n {\n src,\n initialPage = 1,\n initialZoom = 'fit-width',\n onPageChange,\n onLoadComplete,\n onError,\n toolbar = true,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const rawId = useId();\n const viewerId = useMemo(\n () => `pdf-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n\n /* ---- RTL / reduced motion ------------------------------------ */\n const [isRtl, setIsRtl] = useState(false);\n const [reducedMotion, setReducedMotion] = useState(false);\n useEffect(() => {\n if (typeof document === 'undefined') return undefined;\n setIsRtl(document.documentElement.dir === 'rtl');\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const sync = (): void => setReducedMotion(mql.matches);\n sync();\n mql.addEventListener('change', sync);\n return () => mql.removeEventListener('change', sync);\n }, []);\n\n /* ---- Document state ------------------------------------------ */\n const [loaded, setLoaded] = useState<LoadedDocument | null>(null);\n const [loadError, setLoadError] = useState<Error | null>(null);\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [zoom, setZoomState] = useState<PDFZoomPreset>(initialZoom);\n const [visibleRange, setVisibleRange] = useState<{ start: number; end: number }>(\n { start: Math.max(1, initialPage - 1), end: initialPage + 1 },\n );\n const [announcement, setAnnouncement] = useState<string>('');\n const [searchOpen, setSearchOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMatches, setSearchMatches] = useState<{ current: number; total: number }>(\n { current: 0, total: 0 },\n );\n\n const onPageChangeRef = useRef<PDFViewerProps['onPageChange']>(onPageChange);\n const onLoadCompleteRef = useRef<PDFViewerProps['onLoadComplete']>(onLoadComplete);\n const onErrorRef = useRef<PDFViewerProps['onError']>(onError);\n useEffect(() => {\n onPageChangeRef.current = onPageChange;\n onLoadCompleteRef.current = onLoadComplete;\n onErrorRef.current = onError;\n }, [onPageChange, onLoadComplete, onError]);\n\n /* ---- Load the PDF document ----------------------------------- */\n // Ref tracking the currently-loaded document so the cleanup path sees\n // the latest proxy (state closed over in the effect would be stale).\n const loadedRef = useRef<LoadedDocument | null>(null);\n useEffect(() => {\n loadedRef.current = loaded;\n }, [loaded]);\n useEffect(() => {\n let cancelled = false;\n setLoaded(null);\n setLoadError(null);\n\n // `getDocument` accepts a URL string, Uint8Array, or an object with a\n // `data` field. Narrow to what pdfjs expects at runtime. We always pass\n // an options object so that `disableJavaScript` and `isEvalSupported`\n // flow through — patient-uploaded PDFs must not execute embedded JS.\n // See security-hardening.mdx.\n const baseOptions = {\n disableJavaScript: true,\n isEvalSupported: false,\n } as const;\n const task = pdfjsLib.getDocument(\n typeof src === 'string'\n ? { url: src, ...baseOptions }\n : src instanceof Uint8Array\n ? { data: src, ...baseOptions }\n : { data: new Uint8Array(src), ...baseOptions },\n );\n\n task.promise.then(\n async (doc) => {\n if (cancelled) return;\n let title: string | undefined;\n try {\n const meta = await doc.getMetadata();\n const info = meta?.info as { Title?: string } | undefined;\n title = info?.Title;\n } catch {\n title = undefined;\n }\n if (cancelled) {\n // Unmounted while metadata was resolving — destroy the doc we\n // just acquired so the worker channel and font resources are\n // released.\n try {\n await doc.destroy();\n } catch {\n /* ignore */\n }\n return;\n }\n const next: LoadedDocument = { doc, numPages: doc.numPages, title };\n setLoaded(next);\n onLoadCompleteRef.current?.({ numPages: doc.numPages, title });\n },\n (err: unknown) => {\n if (cancelled) return;\n const error = err instanceof Error ? err : new Error(String(err));\n setLoadError(error);\n onErrorRef.current?.(error);\n },\n );\n\n return () => {\n cancelled = true;\n task.destroy();\n // Release the previously-loaded PDFDocumentProxy when src changes\n // or the component unmounts. PDFDocumentProxy holds fonts, embedded\n // resources, and the worker channel — without this call, switching\n // PDFs progressively leaks memory in a long-running SPA.\n const prev = loadedRef.current;\n if (prev) {\n try {\n void prev.doc.destroy();\n } catch {\n /* ignore */\n }\n loadedRef.current = null;\n }\n };\n }, [src]);\n\n /* ---- Current-page announcement ------------------------------- */\n useEffect(() => {\n if (!loaded) return;\n setAnnouncement(\n t('pdf.pageOf', { current: currentPage, total: loaded.numPages }),\n );\n onPageChangeRef.current?.(currentPage);\n }, [currentPage, loaded, t]);\n\n /* ---- Imperative handle --------------------------------------- */\n const pagesContainerRef = useRef<HTMLDivElement>(null);\n const pageArticleRefs = useRef<Array<HTMLElement | null>>([]);\n\n const goToPage = useCallback(\n (page: number) => {\n if (!loaded) return;\n const clamped = Math.max(1, Math.min(page, loaded.numPages));\n setCurrentPage(clamped);\n const article = pageArticleRefs.current[clamped - 1];\n if (article) {\n article.scrollIntoView({\n behavior: reducedMotion ? 'auto' : 'auto',\n block: 'start',\n });\n }\n },\n [loaded, reducedMotion],\n );\n\n const setZoom = useCallback((next: PDFZoomPreset) => {\n setZoomState(next);\n }, []);\n\n const internalPrint = useCallback(() => {\n // TODO: wire PDF.js printService for accurate, chrome-free output.\n if (typeof window !== 'undefined') window.print();\n }, []);\n\n const search = useCallback((query: string) => {\n setSearchQuery(query);\n setSearchOpen(query.length > 0);\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n goToPage,\n setZoom,\n search,\n print: internalPrint,\n }),\n [goToPage, setZoom, search, internalPrint],\n );\n\n /* ---- Keyboard shortcuts on the viewer ------------------------ */\n const handleViewerKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>): void => {\n if (!loaded) return;\n const mod = event.metaKey || event.ctrlKey;\n\n if (event.key === 'PageDown') {\n event.preventDefault();\n goToPage(currentPage + 1);\n return;\n }\n if (event.key === 'PageUp') {\n event.preventDefault();\n goToPage(currentPage - 1);\n return;\n }\n if (event.key === 'Home') {\n event.preventDefault();\n goToPage(1);\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n goToPage(loaded.numPages);\n return;\n }\n\n if (mod && event.key.toLowerCase() === 'f') {\n event.preventDefault();\n setSearchOpen(true);\n return;\n }\n if (mod && (event.key === '+' || event.key === '=')) {\n event.preventDefault();\n setZoomState((z) => (isNumberZoom(z) ? Math.min(z * 1.25, 4) : 1.25));\n return;\n }\n if (mod && event.key === '-') {\n event.preventDefault();\n setZoomState((z) => (isNumberZoom(z) ? Math.max(z / 1.25, 0.25) : 0.75));\n return;\n }\n if (mod && event.key === '0') {\n event.preventDefault();\n setZoomState('fit-width');\n return;\n }\n if (mod && event.key.toLowerCase() === 'p') {\n event.preventDefault();\n internalPrint();\n }\n },\n [currentPage, goToPage, internalPrint, loaded],\n );\n\n /* ---- Intersection observer — visible page tracking ----------- */\n // `currentPage` is referenced only for a fallback inside the observer\n // callback. Including it in the effect deps would destroy and re-create\n // the observer every time the callback updates currentPage — on a\n // 100-page PDF that's O(n) observe() calls on every scroll tick.\n const currentPageRef = useRef<number>(currentPage);\n useEffect(() => {\n currentPageRef.current = currentPage;\n }, [currentPage]);\n useEffect(() => {\n if (!loaded) return undefined;\n const container = pagesContainerRef.current;\n if (!container) return undefined;\n\n const visibility = new Map<number, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const pageAttr = (entry.target as HTMLElement).dataset.pageNumber;\n if (!pageAttr) continue;\n const n = Number(pageAttr);\n visibility.set(n, entry.intersectionRatio);\n }\n // Compute new \"most visible\" page + visible range\n let best = currentPageRef.current;\n let bestRatio = 0;\n let minVisible = Infinity;\n let maxVisible = -Infinity;\n for (const [page, ratio] of visibility.entries()) {\n if (ratio > bestRatio) {\n best = page;\n bestRatio = ratio;\n }\n if (ratio > 0) {\n minVisible = Math.min(minVisible, page);\n maxVisible = Math.max(maxVisible, page);\n }\n }\n if (bestRatio > 0 && best !== currentPageRef.current) {\n setCurrentPage(best);\n }\n if (minVisible !== Infinity) {\n setVisibleRange({\n start: Math.max(1, minVisible - 1),\n end: Math.min(loaded.numPages, maxVisible + 1),\n });\n }\n },\n { root: container, threshold: [0, 0.25, 0.5, 0.75, 1] },\n );\n\n pageArticleRefs.current.forEach((el) => {\n if (el) observer.observe(el);\n });\n return () => observer.disconnect();\n }, [loaded]);\n\n /* ---- Resize observer — recompute scale on fit presets -------- */\n const [containerSizeTick, setContainerSizeTick] = useState(0);\n useEffect(() => {\n const container = pagesContainerRef.current;\n if (!container || typeof ResizeObserver === 'undefined') return undefined;\n const ro = new ResizeObserver(() => {\n if (zoom === 'fit-width' || zoom === 'fit-page') {\n setContainerSizeTick((v) => v + 1);\n }\n });\n ro.observe(container);\n return () => ro.disconnect();\n }, [zoom]);\n\n /* ---- Toolbar roving tabindex --------------------------------- */\n const toolbarButtonsRef = useRef<Array<HTMLElement | null>>([]);\n const [toolbarFocusIndex, setToolbarFocusIndex] = useState(0);\n const registerToolbarButton = useCallback(\n (index: number) => (el: HTMLElement | null) => {\n toolbarButtonsRef.current[index] = el;\n },\n [],\n );\n const focusToolbarButton = useCallback((index: number) => {\n const btn = toolbarButtonsRef.current[index];\n if (btn) btn.focus();\n }, []);\n const toolbarCount = 8; // see render list below\n const handleToolbarKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLElement>) => {\n const forward = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = isRtl ? 'ArrowRight' : 'ArrowLeft';\n let next: number | null = null;\n if (event.key === forward)\n next = (toolbarFocusIndex + 1) % toolbarCount;\n else if (event.key === backward)\n next = (toolbarFocusIndex - 1 + toolbarCount) % toolbarCount;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = toolbarCount - 1;\n if (next !== null) {\n event.preventDefault();\n setToolbarFocusIndex(next);\n focusToolbarButton(next);\n }\n },\n [focusToolbarButton, isRtl, toolbarFocusIndex],\n );\n\n /* ---- Render ---------------------------------------------------*/\n if (loadError) {\n return (\n <div\n className={[wrapperVariants(), className].filter(Boolean).join(' ')}\n aria-label={ariaLabel ?? t('pdf.error')}\n >\n <div className=\"ds:p-[var(--spacing-lg)]\">\n <Alert variant=\"error\" live=\"polite\">\n <Alert.Description>\n {t('pdf.error')}: {loadError.message}\n </Alert.Description>\n </Alert>\n </div>\n </div>\n );\n }\n\n return (\n <div\n id={viewerId}\n role=\"region\"\n aria-label={ariaLabel ?? t('pdf.toolbarLabel')}\n className={[wrapperVariants(), className].filter(Boolean).join(' ')}\n dir={isRtl ? 'rtl' : undefined}\n onKeyDown={handleViewerKeyDown}\n tabIndex={-1}\n data-component=\"pdf-viewer\"\n // Exposed for CI assertion (story `WorkerSameOrigin`) — the\n // worker URL must be same-origin so a strict CSP can block\n // cross-origin worker loads. Read by the play function via\n // `getAttribute('data-pdfjs-worker-src')`.\n data-pdfjs-worker-src={pdfjsWorkerUrl}\n >\n {toolbar ? (\n <PDFToolbar\n currentPage={currentPage}\n numPages={loaded?.numPages ?? 0}\n zoom={zoom}\n onPrev={() => goToPage(currentPage - 1)}\n onNext={() => goToPage(currentPage + 1)}\n onJump={(p) => goToPage(p)}\n onZoomIn={() => {\n setZoomState((z) =>\n isNumberZoom(z) ? Math.min(z * 1.25, 4) : 1.25,\n );\n }}\n onZoomOut={() => {\n setZoomState((z) =>\n isNumberZoom(z) ? Math.max(z / 1.25, 0.25) : 0.75,\n );\n }}\n onZoomPreset={(v) => setZoomState(v)}\n onOpenSearch={() => setSearchOpen(true)}\n onPrint={internalPrint}\n searchOpen={searchOpen}\n onSearchOpenChange={setSearchOpen}\n searchQuery={searchQuery}\n onSearchQueryChange={(v) => {\n setSearchQuery(v);\n }}\n searchMatches={searchMatches}\n register={registerToolbarButton}\n focusIndex={toolbarFocusIndex}\n setFocusIndex={setToolbarFocusIndex}\n onToolbarKeyDown={handleToolbarKeyDown}\n isRtl={isRtl}\n />\n ) : null}\n\n {/* aria-live announcements for page / zoom changes */}\n <div\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {announcement}\n </div>\n\n <div\n ref={pagesContainerRef}\n className={pagesContainerVariants()}\n data-testid=\"pdf-pages-container\"\n >\n {loaded\n ? Array.from({ length: loaded.numPages }, (_, i) => i + 1).map(\n (pageNumber) => (\n <PDFPage\n key={pageNumber}\n pageNumber={pageNumber}\n totalPages={loaded.numPages}\n doc={loaded.doc}\n zoom={zoom}\n container={pagesContainerRef.current}\n resizeTick={containerSizeTick}\n shouldRender={\n pageNumber >= visibleRange.start &&\n pageNumber <= visibleRange.end\n }\n registerRef={(el) => {\n pageArticleRefs.current[pageNumber - 1] = el;\n }}\n searchQuery={searchQuery}\n onMatchCount={(count) => {\n // Aggregate simplistically: sum across visible pages.\n setSearchMatches((prev) => {\n if (count === 0 && prev.total === 0) return prev;\n return {\n current: Math.min(prev.current || 1, count || 1),\n total: Math.max(prev.total, count),\n };\n });\n }}\n />\n ),\n )\n : (\n <div\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)] ds:text-[var(--muted-foreground)] ds:p-[var(--spacing-lg)]\"\n >\n <Spinner size=\"sm\" label={t('pdf.loading')} />\n <span>{t('pdf.loading')}</span>\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nPDFViewer.displayName = 'PDFViewer';\n\n/* ------------------------------------------------------------------ */\n/* PDFToolbar */\n/* ------------------------------------------------------------------ */\n\ninterface PDFToolbarProps {\n currentPage: number;\n numPages: number;\n zoom: PDFZoomPreset;\n onPrev: () => void;\n onNext: () => void;\n onJump: (page: number) => void;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onZoomPreset: (v: PDFZoomPreset) => void;\n onOpenSearch: () => void;\n onPrint: () => void;\n searchOpen: boolean;\n onSearchOpenChange: (v: boolean) => void;\n searchQuery: string;\n onSearchQueryChange: (v: string) => void;\n searchMatches: { current: number; total: number };\n register: (index: number) => (el: HTMLElement | null) => void;\n focusIndex: number;\n setFocusIndex: (n: number) => void;\n onToolbarKeyDown: (event: ReactKeyboardEvent<HTMLElement>) => void;\n isRtl: boolean;\n}\n\nfunction PDFToolbar(props: PDFToolbarProps): ReactNode {\n const { t } = useTranslation();\n const {\n currentPage,\n numPages,\n zoom,\n onPrev,\n onNext,\n onJump,\n onZoomIn,\n onZoomOut,\n onZoomPreset,\n onOpenSearch,\n onPrint,\n searchOpen,\n onSearchOpenChange,\n searchQuery,\n onSearchQueryChange,\n searchMatches,\n register,\n focusIndex,\n setFocusIndex,\n onToolbarKeyDown,\n } = props;\n\n const [pageInput, setPageInput] = useState(String(currentPage));\n useEffect(() => {\n setPageInput(String(currentPage));\n }, [currentPage]);\n\n const prevDisabled = currentPage <= 1;\n const nextDisabled = currentPage >= numPages;\n\n function commitPageInput(): void {\n const parsed = Number(pageInput);\n if (Number.isFinite(parsed) && parsed >= 1) {\n onJump(Math.min(parsed, numPages));\n } else {\n setPageInput(String(currentPage));\n }\n }\n\n function renderButton(opts: {\n index: number;\n label: string;\n disabled?: boolean;\n onActivate: () => void;\n icon: ReactNode;\n }): ReactNode {\n return (\n <button\n type=\"button\"\n ref={register(opts.index)}\n tabIndex={opts.index === focusIndex ? 0 : -1}\n onFocus={() => setFocusIndex(opts.index)}\n onKeyDown={onToolbarKeyDown}\n aria-label={opts.label}\n aria-disabled={opts.disabled || undefined}\n title={opts.label}\n onClick={(event) => {\n if (opts.disabled) {\n event.preventDefault();\n return;\n }\n opts.onActivate();\n }}\n className={toolbarButtonVariants()}\n >\n {opts.icon}\n </button>\n );\n }\n\n return (\n <div\n role=\"toolbar\"\n aria-label={t('pdf.toolbarLabel')}\n className={toolbarVariants()}\n >\n {renderButton({\n index: 0,\n label: t('pdf.previousPage'),\n disabled: prevDisabled,\n onActivate: onPrev,\n icon: (\n <ChevronLeft\n aria-hidden=\"true\"\n className=\"ds:block-size-4 ds:inline-size-4 ds:rtl:rotate-180\"\n />\n ),\n })}\n\n {renderButton({\n index: 1,\n label: t('pdf.nextPage'),\n disabled: nextDisabled,\n onActivate: onNext,\n icon: (\n <ChevronRight\n aria-hidden=\"true\"\n className=\"ds:block-size-4 ds:inline-size-4 ds:rtl:rotate-180\"\n />\n ),\n })}\n\n <input\n type=\"number\"\n min={1}\n max={Math.max(numPages, 1)}\n value={pageInput}\n onChange={(e) => setPageInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n commitPageInput();\n }\n }}\n onBlur={commitPageInput}\n onFocus={() => setFocusIndex(2)}\n ref={register(2) as (el: HTMLInputElement | null) => void}\n tabIndex={focusIndex === 2 ? 0 : -1}\n aria-label={t('pdf.currentPageInput')}\n className={pageInputVariants()}\n />\n\n <span\n aria-hidden=\"true\"\n className=\"type-body-sm ds:text-[var(--muted-foreground)]\"\n >\n {t('pdf.pageOf', { current: currentPage, total: numPages || 0 })}\n </span>\n\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-block ds:block-size-6 ds:inline-size-px ds:bg-[var(--border)] ds:ms-[var(--spacing-xs)] ds:me-[var(--spacing-xs)]\"\n />\n\n {renderButton({\n index: 3,\n label: t('pdf.zoom.out'),\n onActivate: onZoomOut,\n icon: <ZoomOut aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n })}\n\n {renderButton({\n index: 4,\n label: t('pdf.zoom.in'),\n onActivate: onZoomIn,\n icon: <ZoomIn aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n })}\n\n <select\n aria-label={t('pdf.zoom.preset')}\n value={typeof zoom === 'number' ? String(zoom) : zoom}\n onChange={(e) => {\n const v = e.target.value;\n if (v === 'fit-width' || v === 'fit-page' || v === 'actual-size') {\n onZoomPreset(v);\n } else {\n const parsed = Number(v);\n if (Number.isFinite(parsed)) onZoomPreset(parsed);\n }\n }}\n ref={register(5) as (el: HTMLSelectElement | null) => void}\n tabIndex={focusIndex === 5 ? 0 : -1}\n onFocus={() => setFocusIndex(5)}\n onKeyDown={onToolbarKeyDown}\n className={zoomSelectVariants()}\n >\n <option value=\"fit-width\">{t('pdf.zoom.fitWidth')}</option>\n <option value=\"fit-page\">{t('pdf.zoom.fitPage')}</option>\n <option value=\"actual-size\">{t('pdf.zoom.actualSize')}</option>\n {ZOOM_PRESETS.filter(isNumberZoom).map((n) => (\n <option key={n} value={String(n)}>\n {`${Math.round(n * 100)}%`}\n </option>\n ))}\n </select>\n\n <RadixPopover.Root open={searchOpen} onOpenChange={onSearchOpenChange}>\n <RadixPopover.Trigger asChild>\n {renderButton({\n index: 6,\n label: t('pdf.search.open'),\n onActivate: onOpenSearch,\n icon: <Search aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n })}\n </RadixPopover.Trigger>\n <RadixPopover.Portal>\n <RadixPopover.Content\n sideOffset={8}\n className={[\n 'ds:z-[var(--z-popover)]',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-sm)]',\n 'ds:flex ds:items-center ds:gap-[var(--spacing-xs)]',\n ].join(' ')}\n >\n <input\n type=\"search\"\n autoFocus\n value={searchQuery}\n onChange={(e) => onSearchQueryChange(e.target.value)}\n placeholder={t('pdf.search.placeholder')}\n aria-label={t('pdf.search.placeholder')}\n className={pageInputVariants({ className: 'ds:inline-size-[16rem] ds:text-start' })}\n />\n <span\n aria-live=\"polite\"\n className=\"type-meta ds:text-[var(--muted-foreground)]\"\n >\n {searchMatches.total > 0\n ? t('pdf.search.countOfTotal', {\n current: searchMatches.current,\n total: searchMatches.total,\n })\n : searchQuery\n ? t('pdf.search.noResults')\n : ''}\n </span>\n <RadixPopover.Close asChild>\n <button\n type=\"button\"\n aria-label={t('pdf.search.close')}\n className={toolbarButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />\n </button>\n </RadixPopover.Close>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n\n {renderButton({\n index: 7,\n label: t('pdf.print'),\n onActivate: onPrint,\n icon: <Printer aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n })}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* PDFPage — renders one canvas + text layer */\n/* ------------------------------------------------------------------ */\n\ninterface PDFPageProps {\n pageNumber: number;\n totalPages: number;\n doc: PDFDocumentProxy;\n zoom: PDFZoomPreset;\n container: HTMLElement | null;\n resizeTick: number;\n shouldRender: boolean;\n registerRef: (el: HTMLElement | null) => void;\n searchQuery: string;\n onMatchCount: (count: number) => void;\n}\n\nfunction PDFPage(props: PDFPageProps): ReactNode {\n const {\n pageNumber,\n totalPages,\n doc,\n zoom,\n container,\n resizeTick,\n shouldRender,\n registerRef,\n searchQuery,\n onMatchCount,\n } = props;\n const { t } = useTranslation();\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const textLayerRef = useRef<HTMLDivElement>(null);\n const [dims, setDims] = useState<{ width: number; height: number }>({\n width: 612,\n height: 792,\n });\n const [pageProxy, setPageProxy] = useState<PDFPageProxy | null>(null);\n\n /* Get the page proxy once */\n useEffect(() => {\n let cancelled = false;\n doc.getPage(pageNumber).then((p) => {\n if (!cancelled) setPageProxy(p);\n });\n return () => {\n cancelled = true;\n };\n }, [doc, pageNumber]);\n\n /* Compute dimensions from viewport + zoom */\n useEffect(() => {\n if (!pageProxy) return;\n const baseViewport = pageProxy.getViewport({ scale: 1 });\n const scale = resolveScale(zoom, baseViewport, container);\n const scaled = pageProxy.getViewport({ scale });\n setDims({ width: Math.floor(scaled.width), height: Math.floor(scaled.height) });\n }, [pageProxy, zoom, container, resizeTick]);\n\n /* Render the canvas + text layer when shouldRender flips on */\n useEffect(() => {\n if (!pageProxy || !shouldRender) {\n // Release GPU memory if we've been culled.\n const canvas = canvasRef.current;\n if (canvas && !shouldRender) {\n canvas.width = 0;\n }\n return undefined;\n }\n\n const canvas = canvasRef.current;\n const textLayerEl = textLayerRef.current;\n if (!canvas) return undefined;\n const ctx = canvas.getContext('2d');\n if (!ctx) return undefined;\n\n const baseViewport = pageProxy.getViewport({ scale: 1 });\n const scale = resolveScale(zoom, baseViewport, container);\n const viewport = pageProxy.getViewport({ scale });\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n\n canvas.width = Math.floor(viewport.width * dpr);\n canvas.height = Math.floor(viewport.height * dpr);\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n\n const renderTask = pageProxy.render({\n canvas,\n canvasContext: ctx,\n viewport,\n });\n\n let cancelled = false;\n let textLayer: pdfjsLib.TextLayer | null = null;\n\n renderTask.promise\n .then(async () => {\n if (cancelled || !textLayerEl) return;\n // Clear prior runs before layering.\n textLayerEl.textContent = '';\n const textContent = await pageProxy.getTextContent();\n if (cancelled) return;\n textLayer = new pdfjsLib.TextLayer({\n textContentSource: textContent,\n container: textLayerEl,\n viewport,\n });\n await textLayer.render();\n // Highlight matches if a search query is active.\n highlightMatches(textLayerEl, searchQuery, onMatchCount);\n })\n .catch(() => {\n // Render cancelled mid-flight — nothing actionable.\n });\n\n return () => {\n cancelled = true;\n try {\n renderTask.cancel();\n } catch {\n /* ignore */\n }\n if (textLayer) {\n try {\n textLayer.cancel();\n } catch {\n /* ignore */\n }\n }\n };\n }, [pageProxy, shouldRender, zoom, container, resizeTick, searchQuery, onMatchCount]);\n\n /* Re-run highlight when search query changes without re-rendering */\n useEffect(() => {\n if (!shouldRender) return;\n const textLayerEl = textLayerRef.current;\n if (!textLayerEl) return;\n highlightMatches(textLayerEl, searchQuery, onMatchCount);\n }, [searchQuery, shouldRender, onMatchCount]);\n\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (PDF.js page viewport × devicePixelRatio). Wrapper height\n // mirrors the canvas so scroll position stays stable even when the\n // page is culled.\n const canvasStyle: CSSProperties = {\n width: dims.width,\n height: dims.height,\n };\n const articleStyle: CSSProperties = {\n width: dims.width,\n height: dims.height,\n };\n\n return (\n <article\n ref={(el) => {\n registerRef(el);\n }}\n data-page-number={pageNumber}\n aria-label={t('pdf.pageOf', { current: pageNumber, total: totalPages })}\n className={pageArticleVariants()}\n style={articleStyle}\n >\n <canvas ref={canvasRef} style={canvasStyle} />\n <div\n ref={textLayerRef}\n aria-hidden=\"false\"\n className={[\n 'ds:absolute ds:inset-0',\n 'ds:overflow-hidden',\n 'ds:select-text',\n 'ds:opacity-100',\n 'ds:[&>span]:absolute ds:[&>span]:whitespace-pre',\n 'ds:[&>span]:text-transparent ds:[&>span]:origin-[0_0]',\n 'ds:[&_[data-match=true]]:bg-[color-mix(in_srgb,var(--warning)_35%,transparent)]',\n 'ds:[&_[data-match=current]]:bg-[color-mix(in_srgb,var(--warning)_60%,transparent)]',\n ].join(' ')}\n />\n </article>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Search-highlight helper */\n/* ------------------------------------------------------------------ */\n\nfunction highlightMatches(\n container: HTMLElement,\n query: string,\n onCount: (count: number) => void,\n): void {\n // Wipe prior highlights.\n const prior = container.querySelectorAll('[data-match]');\n prior.forEach((el) => {\n (el as HTMLElement).removeAttribute('data-match');\n });\n if (!query) {\n onCount(0);\n return;\n }\n const lower = query.toLowerCase();\n let matchCount = 0;\n const spans = container.querySelectorAll<HTMLSpanElement>('span');\n spans.forEach((span) => {\n const text = span.textContent ?? '';\n if (text.toLowerCase().includes(lower)) {\n span.setAttribute('data-match', 'true');\n matchCount += 1;\n }\n });\n onCount(matchCount);\n}\n\nexport { toolbarButtonVariants, toolbarVariants, wrapperVariants };\n","import type { AgentAdapter } from '../../agent/types';\nimport type { PDFViewerHandle } from './pdf-viewer';\n\nexport const pdfViewerAgent: AgentAdapter<PDFViewerHandle> = {\n id: 'pdf-viewer',\n capabilities: ['paginate', 'view_change', 'filter'],\n state: {},\n actions: {\n go_to_page: {\n safety: 'read',\n argsType: '{ page: number }',\n description: 'Navigate to a specific 1-indexed page.',\n invoke: (handle, args: { page: number }) => {\n handle.goToPage(args.page);\n },\n },\n set_zoom: {\n safety: 'read',\n argsType: '{ zoom: PDFZoomPreset }',\n description: 'Apply a zoom preset.',\n invoke: (handle, args: { zoom: Parameters<PDFViewerHandle['setZoom']>[0] }) => {\n handle.setZoom(args.zoom);\n },\n },\n search: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Search the document for the given query and highlight matches.',\n invoke: (handle, args: { query: string }) => {\n handle.search(args.query);\n },\n },\n print: {\n safety: 'read',\n description: 'Open the browser print dialog for the document.',\n invoke: (handle) => {\n handle.print();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'pdf-viewer' },\n },\n};\n"],"names":["__iconNode","ZoomIn","createLucideIcon","ZoomOut","pdfjsLib","pdfjsWorkerUrl","wrapperVariants","cva","toolbarVariants","toolbarButtonVariants","pageInputVariants","zoomSelectVariants","pagesContainerVariants","pageArticleVariants","ZOOM_PRESETS","isNumberZoom","z","resolveScale","zoom","viewport","container","style","padX","padY","availW","availH","baseW","baseH","PDFViewer","forwardRef","src","initialPage","initialZoom","onPageChange","onLoadComplete","onError","toolbar","ariaLabel","className","ref","t","useTranslation","rawId","useId","viewerId","useMemo","isRtl","setIsRtl","useState","reducedMotion","setReducedMotion","useEffect","mql","sync","loaded","setLoaded","loadError","setLoadError","currentPage","setCurrentPage","setZoomState","visibleRange","setVisibleRange","announcement","setAnnouncement","searchOpen","setSearchOpen","searchQuery","setSearchQuery","searchMatches","setSearchMatches","onPageChangeRef","useRef","onLoadCompleteRef","onErrorRef","loadedRef","cancelled","baseOptions","task","doc","title","meta","info","next","_a","err","error","prev","pagesContainerRef","pageArticleRefs","goToPage","useCallback","page","clamped","article","setZoom","internalPrint","search","query","useImperativeHandle","handleViewerKeyDown","event","mod","currentPageRef","visibility","observer","entries","entry","pageAttr","n","best","bestRatio","minVisible","maxVisible","ratio","el","containerSizeTick","setContainerSizeTick","ro","v","toolbarButtonsRef","toolbarFocusIndex","setToolbarFocusIndex","registerToolbarButton","index","focusToolbarButton","btn","toolbarCount","handleToolbarKeyDown","forward","backward","jsx","Alert","jsxs","PDFToolbar","p","_","i","pageNumber","PDFPage","count","Spinner","props","numPages","onPrev","onNext","onJump","onZoomIn","onZoomOut","onZoomPreset","onOpenSearch","onPrint","onSearchOpenChange","onSearchQueryChange","register","focusIndex","setFocusIndex","onToolbarKeyDown","pageInput","setPageInput","prevDisabled","nextDisabled","commitPageInput","parsed","renderButton","opts","ChevronLeft","ChevronRight","e","RadixPopover","Search","X","Printer","totalPages","resizeTick","shouldRender","registerRef","onMatchCount","canvasRef","textLayerRef","dims","setDims","pageProxy","setPageProxy","baseViewport","scale","scaled","canvas","textLayerEl","ctx","dpr","renderTask","textLayer","textContent","highlightMatches","canvasStyle","articleStyle","onCount","lower","matchCount","span","pdfViewerAgent","handle","args"],"mappings":"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","x_google_ignoreList":[0,1]}