@alfadocs/ui-kit 0.1.7 → 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.
- package/README.md +18 -0
- package/dist/_chunks/{accordion-B6fyINUk.js → accordion-BEnrZmAn.js} +34 -32
- package/dist/_chunks/accordion.agent-BTjeO1Sx.js +52 -0
- package/dist/_chunks/{agenda-card-DIWDvWum.js → agenda-card-DwLIxgi7.js} +2 -1
- package/dist/_chunks/agenda-card.agent-B_R47-c9.js +22 -0
- package/dist/_chunks/agenda-tray-DUvengGQ.js +178 -0
- package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js +476 -0
- package/dist/_chunks/{aspect-ratio-CxsdG8vk.js → aspect-ratio-DeSNzASA.js} +12 -12
- package/dist/_chunks/audio-recorder.agent--VKeykUp.js +458 -0
- package/dist/_chunks/autocomplete.agent-Dh7KioS6.js +432 -0
- package/dist/_chunks/{balance-cell-renderer-BWm3knY9.js → balance-cell-renderer-5CA7zpAi.js} +3 -3
- package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js +371 -0
- package/dist/_chunks/{chart.agent-BdS-_8MO.js → chart.agent-_pRYS17d.js} +112 -105
- package/dist/_chunks/{chat-container-Cm3SlR2p.js → chat-container-Dl0Kfy5a.js} +33 -32
- package/dist/_chunks/{chat-container.agent-Dhw9xCJt.js → chat-container.agent-CM4WModE.js} +9 -4
- package/dist/_chunks/{chat-input-DreOPP8A.js → chat-input-C_tMQv92.js} +108 -82
- package/dist/_chunks/chat-input.agent-Bsz3ckGa.js +69 -0
- package/dist/_chunks/checkbox-CtPM6Rup.js +196 -0
- package/dist/_chunks/checkbox-group-BTdEB6Yo.js +208 -0
- package/dist/_chunks/collapsible.agent-DkS1jVyn.js +149 -0
- package/dist/_chunks/{color-picker-e9PmpaGH.js → color-picker-94qcBZqZ.js} +234 -184
- package/dist/_chunks/combobox.agent-CAvUkkIe.js +410 -0
- package/dist/_chunks/{command-palette.agent-js2rxgeR.js → command-palette.agent-HatEt_EM.js} +161 -121
- package/dist/_chunks/date-picker-BqPTn7bO.js +1813 -0
- package/dist/_chunks/date-range-picker-B2hGsffw.js +274 -0
- package/dist/_chunks/date-time-picker-Bzt0S8yO.js +293 -0
- package/dist/_chunks/dialog.agent-Daf1TTko.js +179 -0
- package/dist/_chunks/{dropdown-menu-Cw3EyPZv.js → dropdown-menu-C7AZipNz.js} +75 -71
- package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js +43 -0
- package/dist/_chunks/{file-upload.agent-B9AN82LA.js → file-upload.agent-DJaH2dHg.js} +275 -243
- package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js +260 -0
- package/dist/_chunks/{leo-sidebar-nbHib2D-.js → leo-sidebar-BwINPdix.js} +6 -6
- package/dist/_chunks/link-QheANk74.js +121 -0
- package/dist/_chunks/list.agent-D0iWt4VI.js +420 -0
- package/dist/_chunks/{message-card-qAp2-WQK.js → message-card-qhoGv947.js} +2 -1
- package/dist/_chunks/message-card.agent-4IeIgrnJ.js +22 -0
- package/dist/_chunks/message-tray-xHUCra-Y.js +419 -0
- package/dist/_chunks/{multi-select.agent-CNsyW3n9.js → multi-select.agent-Do6CeQUT.js} +239 -179
- package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js +266 -0
- package/dist/_chunks/{notification-card-BF2_veHy.js → notification-card-CsVEYJE-.js} +13 -12
- package/dist/_chunks/notification-card.agent-Rqt3ofk9.js +22 -0
- package/dist/_chunks/notification-tray-DTXMq42J.js +444 -0
- package/dist/_chunks/number-input-fvGmnRy9.js +333 -0
- package/dist/_chunks/otp-input-EglXOUue.js +257 -0
- package/dist/_chunks/pagination.agent-BkZQl45y.js +422 -0
- package/dist/_chunks/password-input-D6kuYXmr.js +304 -0
- package/dist/_chunks/{patient-shell-7cXqIMFg.js → patient-shell-BRmrrUUW.js} +3 -3
- package/dist/_chunks/{payment-form-hcl-gGrp.js → payment-form-BWaXas8z.js} +120 -118
- package/dist/_chunks/{payment-form.agent-BkEnRerR.js → payment-form.agent-kuIfodCj.js} +7 -2
- package/dist/_chunks/{pdf-viewer.agent-CfIHhcHx.js → pdf-viewer.agent-BaGEDheA.js} +358 -351
- package/dist/_chunks/phone-input-C8Op4sEc.js +513 -0
- package/dist/_chunks/popover-kFN8s84V.js +229 -0
- package/dist/_chunks/popover.agent-K_d1cfbj.js +39 -0
- package/dist/_chunks/privacy-lock.agent-C1i1-T58.js +185 -0
- package/dist/_chunks/progress-wNsqkw8I.js +253 -0
- package/dist/_chunks/progress.agent-C68rDOXL.js +27 -0
- package/dist/_chunks/{radio-cs8N1wJi.js → radio-DvF59ThA.js} +14 -13
- package/dist/_chunks/radio-group-Cz1a4QCA.js +152 -0
- package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js +183 -0
- package/dist/_chunks/resizable.agent-CMwZzvsi.js +456 -0
- package/dist/_chunks/{rich-text-editor.agent-COSb5_2D.js → rich-text-editor.agent-DnE125Tz.js} +221 -214
- package/dist/_chunks/search-bar.agent-DxFAxctc.js +562 -0
- package/dist/_chunks/search-input-Xw3cdWXW.js +227 -0
- package/dist/_chunks/search-input.agent-CfZvViOd.js +69 -0
- package/dist/_chunks/select-DY1Cb2Tg.js +410 -0
- package/dist/_chunks/{sheet-BhNpLHc9.js → sheet-B9kH9pcI.js} +55 -54
- package/dist/_chunks/sheet.agent-QAyTOxgk.js +46 -0
- package/dist/_chunks/{sidebar-OVzwN3jE.js → sidebar-CHF5xr_P.js} +188 -185
- package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js +49 -0
- package/dist/_chunks/{signature-capture.agent-C38VPXxg.js → signature-capture.agent-BpeDwFht.js} +127 -120
- package/dist/_chunks/slider-CcsQTZTA.js +322 -0
- package/dist/_chunks/sparkline.agent-56Sj7nOP.js +245 -0
- package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js +322 -0
- package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js +646 -0
- package/dist/_chunks/stepper-progress-Bmen-YXB.js +149 -0
- package/dist/_chunks/stepper-progress.agent-q9InWca4.js +61 -0
- package/dist/_chunks/suggestion-chip-DhFrkRPj.js +169 -0
- package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js +46 -0
- package/dist/_chunks/switch-BYEH8I53.js +196 -0
- package/dist/_chunks/{tabs.agent-BpbVA-Zh.js → tabs.agent-h7NvsTR1.js} +146 -123
- package/dist/_chunks/{task-card-yW7tKlG4.js → task-card-CY5ztNkU.js} +2 -1
- package/dist/_chunks/task-card.agent-CUPKYd7w.js +22 -0
- package/dist/_chunks/task-tray-CCoUdorl.js +194 -0
- package/dist/_chunks/text-area-C_M8wliK.js +239 -0
- package/dist/_chunks/text-input-BX39e6T6.js +272 -0
- package/dist/_chunks/theme-toggle.agent-btmXTWdW.js +394 -0
- package/dist/_chunks/time-picker-B8AMIrX7.js +410 -0
- package/dist/_chunks/timeline.agent-CRPza9wc.js +279 -0
- package/dist/_chunks/{toast-lOhJDKOH.js → toast.agent-BjEGuq1Z.js} +403 -342
- package/dist/_chunks/{tooth-scheme.agent-BlDyu-Gx.js → tooth-scheme.agent-CWrQBjJM.js} +218 -211
- package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js +337 -0
- package/dist/_chunks/{workflow-map-XeqHDFvp.js → workflow-map-D2A7rTEG.js} +465 -368
- package/dist/agent-catalog.json +2929 -268
- package/dist/components/accordion/accordion.agent.d.ts +2 -1
- package/dist/components/accordion/accordion.d.ts +6 -0
- package/dist/components/accordion/index.js +2 -2
- package/dist/components/agenda-card/agenda-card.agent.d.ts +3 -0
- package/dist/components/agenda-card/index.d.ts +1 -0
- package/dist/components/agenda-card/index.js +3 -1
- package/dist/components/agenda-tray/agenda-tray.agent.d.ts +4 -0
- package/dist/components/agenda-tray/agenda-tray.d.ts +19 -2
- package/dist/components/agenda-tray/index.d.ts +2 -1
- package/dist/components/agenda-tray/index.js +3 -2
- package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts +4 -0
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +18 -1
- package/dist/components/ai-prompt-input/index.d.ts +2 -1
- package/dist/components/ai-prompt-input/index.js +3 -2
- package/dist/components/aspect-ratio/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.agent.d.ts +4 -0
- package/dist/components/audio-recorder/audio-recorder.d.ts +10 -1
- package/dist/components/audio-recorder/index.d.ts +2 -1
- package/dist/components/audio-recorder/index.js +3 -2
- package/dist/components/autocomplete/autocomplete.agent.d.ts +2 -1
- package/dist/components/autocomplete/autocomplete.d.ts +10 -0
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.agent.d.ts +8 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +21 -2
- package/dist/components/breadcrumb/index.d.ts +2 -1
- package/dist/components/breadcrumb/index.js +5 -4
- package/dist/components/button/button.d.ts +1 -1
- package/dist/components/chart/chart.d.ts +2 -0
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/chat-container.d.ts +3 -1
- package/dist/components/chat-container/index.js +2 -2
- package/dist/components/chat-input/chat-input.agent.d.ts +4 -0
- package/dist/components/chat-input/chat-input.d.ts +10 -1
- package/dist/components/chat-input/index.d.ts +2 -1
- package/dist/components/chat-input/index.js +4 -2
- package/dist/components/checkbox/checkbox.agent.d.ts +4 -0
- package/dist/components/checkbox/checkbox.d.ts +6 -0
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.agent.d.ts +4 -0
- package/dist/components/checkbox-group/checkbox-group.d.ts +8 -0
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/collapsible.agent.d.ts +4 -0
- package/dist/components/collapsible/collapsible.d.ts +8 -1
- package/dist/components/collapsible/index.d.ts +2 -1
- package/dist/components/collapsible/index.js +4 -3
- package/dist/components/color-picker/color-picker.agent.d.ts +4 -0
- package/dist/components/color-picker/color-picker.d.ts +5 -0
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.agent.d.ts +2 -1
- package/dist/components/combobox/combobox.d.ts +10 -0
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.agent.d.ts +2 -1
- package/dist/components/command-palette/command-palette.d.ts +7 -0
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-picker/date-picker.agent.d.ts +4 -0
- package/dist/components/date-picker/date-picker.d.ts +16 -1
- package/dist/components/date-picker/index.d.ts +2 -1
- package/dist/components/date-picker/index.js +3 -2
- package/dist/components/date-range-picker/date-range-picker.agent.d.ts +4 -0
- package/dist/components/date-range-picker/date-range-picker.d.ts +16 -1
- package/dist/components/date-range-picker/index.d.ts +2 -1
- package/dist/components/date-range-picker/index.js +3 -2
- package/dist/components/date-time-picker/date-time-picker.agent.d.ts +4 -0
- package/dist/components/date-time-picker/date-time-picker.d.ts +16 -1
- package/dist/components/date-time-picker/index.d.ts +2 -1
- package/dist/components/date-time-picker/index.js +3 -2
- package/dist/components/dialog/dialog.agent.d.ts +5 -6
- package/dist/components/dialog/dialog.d.ts +11 -2
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts +2 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +10 -2
- package/dist/components/dropdown-menu/index.js +2 -2
- package/dist/components/file-upload/file-upload.agent.d.ts +2 -1
- package/dist/components/file-upload/file-upload.d.ts +12 -0
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts +4 -0
- package/dist/components/freemium-paywall/freemium-paywall.d.ts +8 -1
- package/dist/components/freemium-paywall/index.d.ts +2 -1
- package/dist/components/freemium-paywall/index.js +3 -2
- package/dist/components/index.d.ts +2 -0
- package/dist/components/link/index.d.ts +2 -0
- package/dist/components/link/index.js +5 -0
- package/dist/components/link/link.d.ts +39 -0
- package/dist/components/list/index.d.ts +2 -1
- package/dist/components/list/index.js +3 -2
- package/dist/components/list/list.agent.d.ts +4 -0
- package/dist/components/list/list.d.ts +8 -2
- package/dist/components/message-card/index.d.ts +1 -0
- package/dist/components/message-card/index.js +5 -3
- package/dist/components/message-card/message-card.agent.d.ts +3 -0
- package/dist/components/message-tray/index.d.ts +2 -1
- package/dist/components/message-tray/index.js +3 -2
- package/dist/components/message-tray/message-tray.agent.d.ts +4 -0
- package/dist/components/message-tray/message-tray.d.ts +27 -2
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.agent.d.ts +2 -1
- package/dist/components/multi-select/multi-select.d.ts +10 -0
- package/dist/components/navigation-menu/index.d.ts +2 -1
- package/dist/components/navigation-menu/index.js +7 -6
- package/dist/components/navigation-menu/navigation-menu.agent.d.ts +4 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +28 -2
- package/dist/components/notification-card/index.d.ts +1 -0
- package/dist/components/notification-card/index.js +5 -3
- package/dist/components/notification-card/notification-card.agent.d.ts +3 -0
- package/dist/components/notification-tray/index.d.ts +2 -1
- package/dist/components/notification-tray/index.js +3 -2
- package/dist/components/notification-tray/notification-tray.agent.d.ts +4 -0
- package/dist/components/notification-tray/notification-tray.d.ts +27 -2
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.agent.d.ts +4 -0
- package/dist/components/number-input/number-input.d.ts +7 -0
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.agent.d.ts +4 -0
- package/dist/components/otp-input/otp-input.d.ts +10 -0
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.agent.d.ts +2 -1
- package/dist/components/pagination/pagination.d.ts +7 -0
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/password-input/password-input.agent.d.ts +4 -0
- package/dist/components/password-input/password-input.d.ts +9 -0
- package/dist/components/payment-form/index.js +2 -2
- package/dist/components/payment-form/payment-form.d.ts +2 -0
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts +2 -0
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.agent.d.ts +4 -0
- package/dist/components/phone-input/phone-input.d.ts +7 -0
- package/dist/components/popover/index.js +2 -2
- package/dist/components/popover/popover.agent.d.ts +2 -1
- package/dist/components/popover/popover.d.ts +8 -1
- package/dist/components/privacy-lock/index.d.ts +2 -1
- package/dist/components/privacy-lock/index.js +3 -2
- package/dist/components/privacy-lock/privacy-lock.agent.d.ts +4 -0
- package/dist/components/privacy-lock/privacy-lock.d.ts +7 -1
- package/dist/components/progress/index.js +2 -2
- package/dist/components/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/radio-group/radio-group.agent.d.ts +4 -0
- package/dist/components/radio-group/radio-group.d.ts +5 -0
- package/dist/components/recaptcha-widget/index.d.ts +3 -0
- package/dist/components/recaptcha-widget/index.js +6 -0
- package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts +4 -0
- package/dist/components/recaptcha-widget/recaptcha-widget.d.ts +56 -0
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/resizable/resizable.agent.d.ts +2 -1
- package/dist/components/resizable/resizable.d.ts +6 -0
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts +2 -0
- package/dist/components/search-bar/index.d.ts +2 -1
- package/dist/components/search-bar/index.js +3 -2
- package/dist/components/search-bar/search-bar.agent.d.ts +4 -0
- package/dist/components/search-bar/search-bar.d.ts +27 -1
- package/dist/components/search-input/index.d.ts +2 -1
- package/dist/components/search-input/index.js +4 -2
- package/dist/components/search-input/search-input.agent.d.ts +4 -0
- package/dist/components/search-input/search-input.d.ts +27 -0
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.agent.d.ts +4 -0
- package/dist/components/select/select.d.ts +9 -0
- package/dist/components/sheet/index.js +2 -2
- package/dist/components/sheet/sheet.agent.d.ts +2 -1
- package/dist/components/sheet/sheet.d.ts +11 -2
- package/dist/components/sidebar/index.js +2 -2
- package/dist/components/sidebar/sidebar.agent.d.ts +2 -1
- package/dist/components/sidebar/sidebar.d.ts +6 -0
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/signature-capture/signature-capture.d.ts +2 -0
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/slider.agent.d.ts +4 -0
- package/dist/components/slider/slider.d.ts +5 -0
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/stepper-accordion/index.d.ts +2 -1
- package/dist/components/stepper-accordion/index.js +3 -2
- package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts +4 -0
- package/dist/components/stepper-accordion/stepper-accordion.d.ts +19 -1
- package/dist/components/stepper-calendar/index.d.ts +2 -1
- package/dist/components/stepper-calendar/index.js +3 -2
- package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts +4 -0
- package/dist/components/stepper-calendar/stepper-calendar.d.ts +19 -1
- package/dist/components/stepper-progress/index.d.ts +2 -1
- package/dist/components/stepper-progress/index.js +4 -2
- package/dist/components/stepper-progress/stepper-progress.agent.d.ts +4 -0
- package/dist/components/stepper-progress/stepper-progress.d.ts +26 -1
- package/dist/components/suggestion-chip/index.d.ts +2 -1
- package/dist/components/suggestion-chip/index.js +5 -3
- package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts +4 -0
- package/dist/components/suggestion-chip/suggestion-chip.d.ts +7 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/switch/switch.agent.d.ts +4 -0
- package/dist/components/switch/switch.d.ts +6 -0
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.agent.d.ts +2 -1
- package/dist/components/tabs/tabs.d.ts +4 -0
- package/dist/components/task-card/index.d.ts +1 -0
- package/dist/components/task-card/index.js +5 -3
- package/dist/components/task-card/task-card.agent.d.ts +3 -0
- package/dist/components/task-tray/index.d.ts +2 -1
- package/dist/components/task-tray/index.js +3 -2
- package/dist/components/task-tray/task-tray.agent.d.ts +4 -0
- package/dist/components/task-tray/task-tray.d.ts +25 -2
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-area/text-area.agent.d.ts +4 -0
- package/dist/components/text-area/text-area.d.ts +7 -0
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/text-input/text-input.agent.d.ts +4 -0
- package/dist/components/text-input/text-input.d.ts +10 -0
- package/dist/components/theme-toggle/index.d.ts +2 -1
- package/dist/components/theme-toggle/index.js +3 -2
- package/dist/components/theme-toggle/theme-toggle.agent.d.ts +4 -0
- package/dist/components/theme-toggle/theme-toggle.d.ts +9 -2
- package/dist/components/time-picker/index.d.ts +2 -1
- package/dist/components/time-picker/index.js +3 -2
- package/dist/components/time-picker/time-picker.agent.d.ts +4 -0
- package/dist/components/time-picker/time-picker.d.ts +16 -1
- package/dist/components/timeline/index.d.ts +2 -1
- package/dist/components/timeline/index.js +3 -2
- package/dist/components/timeline/timeline.agent.d.ts +4 -0
- package/dist/components/timeline/timeline.d.ts +8 -1
- package/dist/components/toast/index.d.ts +3 -2
- package/dist/components/toast/index.js +7 -5
- package/dist/components/toast/toast.agent.d.ts +4 -0
- package/dist/components/toast/toast.d.ts +8 -0
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/tooth-scheme/tooth-scheme.d.ts +2 -0
- package/dist/components/transcript-panel/index.d.ts +2 -1
- package/dist/components/transcript-panel/index.js +3 -2
- package/dist/components/transcript-panel/transcript-panel.agent.d.ts +4 -0
- package/dist/components/transcript-panel/transcript-panel.d.ts +10 -1
- package/dist/components/workflow/index.d.ts +2 -1
- package/dist/components/workflow/index.js +10 -7
- package/dist/components/workflow/workflow-editor.d.ts +7 -1
- package/dist/components/workflow/workflow-map.d.ts +2 -0
- package/dist/components/workflow/workflow.agent.d.ts +6 -0
- package/dist/i18n/config.js +24 -11
- package/dist/i18n/resources.d.ts +7 -0
- package/dist/index.js +471 -423
- package/dist/locales/en.json +7 -0
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +18 -2
- package/dist/_chunks/accordion-B6fyINUk.js.map +0 -1
- package/dist/_chunks/accordion.agent-Cz-yglRa.js +0 -17
- package/dist/_chunks/accordion.agent-Cz-yglRa.js.map +0 -1
- package/dist/_chunks/agenda-card-DIWDvWum.js.map +0 -1
- package/dist/_chunks/agenda-tray-BqQZwiHc.js +0 -120
- package/dist/_chunks/agenda-tray-BqQZwiHc.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-CI27KmZ1.js +0 -380
- package/dist/_chunks/ai-prompt-input-CI27KmZ1.js.map +0 -1
- package/dist/_chunks/alert-BlOUMkXj.js.map +0 -1
- package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +0 -1
- package/dist/_chunks/app-frame-6d7Lu4ea.js.map +0 -1
- package/dist/_chunks/aspect-ratio-CxsdG8vk.js.map +0 -1
- package/dist/_chunks/audio-recorder-B-8SKgKn.js +0 -376
- package/dist/_chunks/audio-recorder-B-8SKgKn.js.map +0 -1
- package/dist/_chunks/audio-visualiser-CeMPCZkd.js.map +0 -1
- package/dist/_chunks/autocomplete.agent-DqOy0_1P.js +0 -372
- package/dist/_chunks/autocomplete.agent-DqOy0_1P.js.map +0 -1
- package/dist/_chunks/avatar-Dcr6XuDQ.js.map +0 -1
- package/dist/_chunks/badge-mrstWxve.js.map +0 -1
- package/dist/_chunks/balance-cell-renderer-BWm3knY9.js.map +0 -1
- package/dist/_chunks/breadcrumb-D6xpsP7n.js +0 -293
- package/dist/_chunks/breadcrumb-D6xpsP7n.js.map +0 -1
- package/dist/_chunks/button-7mLWcMp_.js.map +0 -1
- package/dist/_chunks/button-group-CONver7M.js.map +0 -1
- package/dist/_chunks/button.agent-BuGZBktn.js.map +0 -1
- package/dist/_chunks/calendar-nGEgelJs.js.map +0 -1
- package/dist/_chunks/card-BEy58ZKp.js.map +0 -1
- package/dist/_chunks/chart.agent-BdS-_8MO.js.map +0 -1
- package/dist/_chunks/chat-container-Cm3SlR2p.js.map +0 -1
- package/dist/_chunks/chat-container.agent-Dhw9xCJt.js.map +0 -1
- package/dist/_chunks/chat-input-DreOPP8A.js.map +0 -1
- package/dist/_chunks/chat-message-ByouZpPP.js.map +0 -1
- package/dist/_chunks/check-DPdL_Sm7.js.map +0 -1
- package/dist/_chunks/checkbox-DNK4qS2_.js +0 -116
- package/dist/_chunks/checkbox-DNK4qS2_.js.map +0 -1
- package/dist/_chunks/checkbox-group-CWpGZEF6.js +0 -146
- package/dist/_chunks/checkbox-group-CWpGZEF6.js.map +0 -1
- package/dist/_chunks/chevron-down-BX_NP2Yh.js.map +0 -1
- package/dist/_chunks/chevron-left-CX1jqD2M.js.map +0 -1
- package/dist/_chunks/chevron-right-BrpYejk0.js.map +0 -1
- package/dist/_chunks/chevron-up-zOEDrmBB.js.map +0 -1
- package/dist/_chunks/chevrons-right-d9MwesPG.js.map +0 -1
- package/dist/_chunks/circle-BkqTgYmt.js.map +0 -1
- package/dist/_chunks/circle-alert-ChA9opNA.js.map +0 -1
- package/dist/_chunks/circle-check-9AeSgJD_.js.map +0 -1
- package/dist/_chunks/circle-x-Du2CmjaU.js.map +0 -1
- package/dist/_chunks/clock-21AGPWJ5.js.map +0 -1
- package/dist/_chunks/collapsible-D4LOdLxp.js +0 -67
- package/dist/_chunks/collapsible-D4LOdLxp.js.map +0 -1
- package/dist/_chunks/color-picker-e9PmpaGH.js.map +0 -1
- package/dist/_chunks/combobox.agent-ByobCLJ_.js +0 -350
- package/dist/_chunks/combobox.agent-ByobCLJ_.js.map +0 -1
- package/dist/_chunks/command-palette.agent-js2rxgeR.js.map +0 -1
- package/dist/_chunks/compose-refs-C0k0tdqF.js.map +0 -1
- package/dist/_chunks/copy-B00HK7tj.js.map +0 -1
- package/dist/_chunks/createLucideIcon-CrFbzy84.js.map +0 -1
- package/dist/_chunks/date-picker-DYXNsWmM.js +0 -1726
- package/dist/_chunks/date-picker-DYXNsWmM.js.map +0 -1
- package/dist/_chunks/date-range-picker-BcNDJI7m.js +0 -183
- package/dist/_chunks/date-range-picker-BcNDJI7m.js.map +0 -1
- package/dist/_chunks/date-time-picker-CmGiTU__.js +0 -202
- package/dist/_chunks/date-time-picker-CmGiTU__.js.map +0 -1
- package/dist/_chunks/description-list-DvJbp6Yg.js.map +0 -1
- package/dist/_chunks/dialog.agent-DEG_fVzG.js +0 -147
- package/dist/_chunks/dialog.agent-DEG_fVzG.js.map +0 -1
- package/dist/_chunks/dropdown-menu-Cw3EyPZv.js.map +0 -1
- package/dist/_chunks/dropdown-menu.agent-Cry4Nmes.js +0 -17
- package/dist/_chunks/dropdown-menu.agent-Cry4Nmes.js.map +0 -1
- package/dist/_chunks/ellipsis-rgGdiK_9.js.map +0 -1
- package/dist/_chunks/empty-state-DQPtRp2b.js.map +0 -1
- package/dist/_chunks/eye-off-xEXDAh5z.js.map +0 -1
- package/dist/_chunks/file-text-DSNuv2B8.js.map +0 -1
- package/dist/_chunks/file-upload.agent-B9AN82LA.js.map +0 -1
- package/dist/_chunks/flag-DZ6V7-hU.js.map +0 -1
- package/dist/_chunks/floating-action-button-Cnw-f6AG.js.map +0 -1
- package/dist/_chunks/form-field-BfsPLTSc.js.map +0 -1
- package/dist/_chunks/form-field-context-94LwgYTQ.js.map +0 -1
- package/dist/_chunks/freemium-paywall-CkefGLM_.js +0 -198
- package/dist/_chunks/freemium-paywall-CkefGLM_.js.map +0 -1
- package/dist/_chunks/globe-BkEFMNSg.js.map +0 -1
- package/dist/_chunks/group-options-BvKhQ3xb.js.map +0 -1
- package/dist/_chunks/header-BGn1mRp8.js.map +0 -1
- package/dist/_chunks/icon-button-Wnnde5lc.js.map +0 -1
- package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +0 -1
- package/dist/_chunks/index-4xgbg-sn.js.map +0 -1
- package/dist/_chunks/index-CJE9uQmb.js.map +0 -1
- package/dist/_chunks/index-CeY1nNvd.js.map +0 -1
- package/dist/_chunks/index-D2ZczOXr.js.map +0 -1
- package/dist/_chunks/info-B9XNKn05.js.map +0 -1
- package/dist/_chunks/input-surface-u4QB0lxe.js.map +0 -1
- package/dist/_chunks/isSameDay-ecuM8PBB.js.map +0 -1
- package/dist/_chunks/isSameMonth-5wNF2f4I.js.map +0 -1
- package/dist/_chunks/kbd-8baVw3KU.js.map +0 -1
- package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +0 -1
- package/dist/_chunks/leo-sidebar-nbHib2D-.js.map +0 -1
- package/dist/_chunks/list-B1ozIjQe.js +0 -359
- package/dist/_chunks/list-B1ozIjQe.js.map +0 -1
- package/dist/_chunks/live-region-C41SO3cA.js.map +0 -1
- package/dist/_chunks/log-out-616hnn2-.js.map +0 -1
- package/dist/_chunks/logo-BpFoCL-s.js.map +0 -1
- package/dist/_chunks/mail-C8irm52s.js.map +0 -1
- package/dist/_chunks/matrix-rain-BEkvux64.js.map +0 -1
- package/dist/_chunks/message-card-qAp2-WQK.js.map +0 -1
- package/dist/_chunks/message-tray-VaLpQU5t.js +0 -303
- package/dist/_chunks/message-tray-VaLpQU5t.js.map +0 -1
- package/dist/_chunks/multi-select.agent-CNsyW3n9.js.map +0 -1
- package/dist/_chunks/navigation-menu-EVFau1O2.js +0 -180
- package/dist/_chunks/navigation-menu-EVFau1O2.js.map +0 -1
- package/dist/_chunks/normalize-diacritics-BNGbFNlJ.js.map +0 -1
- package/dist/_chunks/notification-card-BF2_veHy.js.map +0 -1
- package/dist/_chunks/notification-tray-B7U5YZYg.js +0 -328
- package/dist/_chunks/notification-tray-B7U5YZYg.js.map +0 -1
- package/dist/_chunks/number-input-DjpT_RXJ.js +0 -249
- package/dist/_chunks/number-input-DjpT_RXJ.js.map +0 -1
- package/dist/_chunks/otp-input-De5_Ih7B.js +0 -189
- package/dist/_chunks/otp-input-De5_Ih7B.js.map +0 -1
- package/dist/_chunks/pagination.agent-oEaqmtx5.js +0 -380
- package/dist/_chunks/pagination.agent-oEaqmtx5.js.map +0 -1
- package/dist/_chunks/password-input-DJDVznWH.js +0 -193
- package/dist/_chunks/password-input-DJDVznWH.js.map +0 -1
- package/dist/_chunks/patient-shell-7cXqIMFg.js.map +0 -1
- package/dist/_chunks/payment-form-hcl-gGrp.js.map +0 -1
- package/dist/_chunks/payment-form.agent-BkEnRerR.js.map +0 -1
- package/dist/_chunks/pdf-viewer.agent-CfIHhcHx.js.map +0 -1
- package/dist/_chunks/phone-input-DE_39q65.js +0 -428
- package/dist/_chunks/phone-input-DE_39q65.js.map +0 -1
- package/dist/_chunks/plus-CYKNmfuA.js.map +0 -1
- package/dist/_chunks/popover-C3CTUsqh.js +0 -227
- package/dist/_chunks/popover-C3CTUsqh.js.map +0 -1
- package/dist/_chunks/popover.agent-C0qOx9WT.js +0 -13
- package/dist/_chunks/popover.agent-C0qOx9WT.js.map +0 -1
- package/dist/_chunks/printer-CeVEWfQq.js.map +0 -1
- package/dist/_chunks/privacy-lock-CQpgkLec.js +0 -132
- package/dist/_chunks/privacy-lock-CQpgkLec.js.map +0 -1
- package/dist/_chunks/progress-B4Of_pzz.js +0 -252
- package/dist/_chunks/progress-B4Of_pzz.js.map +0 -1
- package/dist/_chunks/progress.agent-CXkHURjX.js +0 -22
- package/dist/_chunks/progress.agent-CXkHURjX.js.map +0 -1
- package/dist/_chunks/purify.es-DpIUMBYC.js.map +0 -1
- package/dist/_chunks/radio-cs8N1wJi.js.map +0 -1
- package/dist/_chunks/radio-group-BIUbpWml.js +0 -89
- package/dist/_chunks/radio-group-BIUbpWml.js.map +0 -1
- package/dist/_chunks/react-day-picker-C04L_28V.js.map +0 -1
- package/dist/_chunks/registry-C9nwlNyL.js.map +0 -1
- package/dist/_chunks/resizable.agent-DBpPGNdy.js +0 -435
- package/dist/_chunks/resizable.agent-DBpPGNdy.js.map +0 -1
- package/dist/_chunks/rich-text-editor.agent-COSb5_2D.js.map +0 -1
- package/dist/_chunks/safe-image-src-DstKgCo7.js.map +0 -1
- package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +0 -1
- package/dist/_chunks/search-BonnQsHv.js.map +0 -1
- package/dist/_chunks/search-bar-fcGqDFW3.js +0 -397
- package/dist/_chunks/search-bar-fcGqDFW3.js.map +0 -1
- package/dist/_chunks/search-input-BVMCONyN.js +0 -197
- package/dist/_chunks/search-input-BVMCONyN.js.map +0 -1
- package/dist/_chunks/select-IY_JQa-F.js +0 -321
- package/dist/_chunks/select-IY_JQa-F.js.map +0 -1
- package/dist/_chunks/send-CySZIRPJ.js.map +0 -1
- package/dist/_chunks/separator-B4wXDLNC.js.map +0 -1
- package/dist/_chunks/sheet-BhNpLHc9.js.map +0 -1
- package/dist/_chunks/sheet.agent-DwQlBqK9.js +0 -13
- package/dist/_chunks/sheet.agent-DwQlBqK9.js.map +0 -1
- package/dist/_chunks/sidebar-OVzwN3jE.js.map +0 -1
- package/dist/_chunks/sidebar.agent-B0fnH9CC.js +0 -17
- package/dist/_chunks/sidebar.agent-B0fnH9CC.js.map +0 -1
- package/dist/_chunks/sign-in-with-alfadocs-button-BN_FPGHT.js.map +0 -1
- package/dist/_chunks/signature-capture.agent-C38VPXxg.js.map +0 -1
- package/dist/_chunks/skeleton-dtqyF09N.js.map +0 -1
- package/dist/_chunks/skip-link-DmZ3c6cb.js.map +0 -1
- package/dist/_chunks/slider-DjyRt3Mp.js +0 -274
- package/dist/_chunks/slider-DjyRt3Mp.js.map +0 -1
- package/dist/_chunks/slot-grid-D_l5VsHG.js.map +0 -1
- package/dist/_chunks/sparkline.agent-C_xp3NRB.js +0 -238
- package/dist/_chunks/sparkline.agent-C_xp3NRB.js.map +0 -1
- package/dist/_chunks/spinner-GCcv67vh.js.map +0 -1
- package/dist/_chunks/square-CZoGU14v.js.map +0 -1
- package/dist/_chunks/square-check-big-Jr-0202D.js.map +0 -1
- package/dist/_chunks/stat-DUB6g90R.js.map +0 -1
- package/dist/_chunks/stepper-C-sIpRRU.js.map +0 -1
- package/dist/_chunks/stepper-accordion-CGog0JSF.js +0 -233
- package/dist/_chunks/stepper-accordion-CGog0JSF.js.map +0 -1
- package/dist/_chunks/stepper-calendar-_fLOAjus.js +0 -570
- package/dist/_chunks/stepper-calendar-_fLOAjus.js.map +0 -1
- package/dist/_chunks/stepper-progress-rE7tn7WY.js +0 -129
- package/dist/_chunks/stepper-progress-rE7tn7WY.js.map +0 -1
- package/dist/_chunks/streaming-text-BgjCTVOw.js.map +0 -1
- package/dist/_chunks/suggestion-chip-BNJ2M8Os.js +0 -158
- package/dist/_chunks/suggestion-chip-BNJ2M8Os.js.map +0 -1
- package/dist/_chunks/switch-aN2EYxHh.js +0 -138
- package/dist/_chunks/switch-aN2EYxHh.js.map +0 -1
- package/dist/_chunks/tabs.agent-BpbVA-Zh.js.map +0 -1
- package/dist/_chunks/tag-BqidXKo3.js.map +0 -1
- package/dist/_chunks/task-card-yW7tKlG4.js.map +0 -1
- package/dist/_chunks/task-tray-BzahI5FQ.js +0 -100
- package/dist/_chunks/task-tray-BzahI5FQ.js.map +0 -1
- package/dist/_chunks/text-area-DmKSd2DG.js +0 -152
- package/dist/_chunks/text-area-DmKSd2DG.js.map +0 -1
- package/dist/_chunks/text-input-CRHvl5zk.js +0 -188
- package/dist/_chunks/text-input-CRHvl5zk.js.map +0 -1
- package/dist/_chunks/theme-root-DDb0TJjd.js.map +0 -1
- package/dist/_chunks/theme-toggle-BHiMMEQN.js +0 -329
- package/dist/_chunks/theme-toggle-BHiMMEQN.js.map +0 -1
- package/dist/_chunks/time-picker-D-EueWUG.js +0 -322
- package/dist/_chunks/time-picker-D-EueWUG.js.map +0 -1
- package/dist/_chunks/timeline-RgAIzpMd.js +0 -220
- package/dist/_chunks/timeline-RgAIzpMd.js.map +0 -1
- package/dist/_chunks/timestamp-BV2lC-wV.js.map +0 -1
- package/dist/_chunks/toast-lOhJDKOH.js.map +0 -1
- package/dist/_chunks/tooltip-DHik5yRI.js.map +0 -1
- package/dist/_chunks/tooth-scheme.agent-BlDyu-Gx.js.map +0 -1
- package/dist/_chunks/transcript-panel-CNbVGG9L.js +0 -266
- package/dist/_chunks/transcript-panel-CNbVGG9L.js.map +0 -1
- package/dist/_chunks/triangle-alert-CBPUIzQo.js.map +0 -1
- package/dist/_chunks/typing-indicator-CbUBf-Dx.js.map +0 -1
- package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +0 -1
- package/dist/_chunks/use-direction-D6rvvG9G.js.map +0 -1
- package/dist/_chunks/use-locale-BuXR_Zl9.js.map +0 -1
- package/dist/_chunks/use-prefers-reduced-motion-BMwIQRjB.js.map +0 -1
- package/dist/_chunks/use-theme-BMUhembX.js.map +0 -1
- package/dist/_chunks/user-CPxpqFjJ.js.map +0 -1
- package/dist/_chunks/visually-hidden-Bw7vBHLm.js.map +0 -1
- package/dist/_chunks/warning-stack-8Pa3pekh.js.map +0 -1
- package/dist/_chunks/workflow-map-XeqHDFvp.js.map +0 -1
- package/dist/_chunks/x-CCcI3eJp.js.map +0 -1
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/registry.d.ts.map +0 -1
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_BW.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Main.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Mark.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Neg.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Purple.d.ts.map +0 -1
- package/dist/brand/logo-asset/index.d.ts.map +0 -1
- package/dist/components/_shared/calendar-chevron.d.ts.map +0 -1
- package/dist/components/_shared/compose-refs.d.ts.map +0 -1
- package/dist/components/_shared/date-locale.d.ts.map +0 -1
- package/dist/components/_shared/date-picker-variants.d.ts.map +0 -1
- package/dist/components/_shared/date-utils.d.ts.map +0 -1
- package/dist/components/_shared/group-options.d.ts.map +0 -1
- package/dist/components/_shared/index.d.ts.map +0 -1
- package/dist/components/_shared/input-surface.d.ts.map +0 -1
- package/dist/components/_shared/normalize-diacritics.d.ts.map +0 -1
- package/dist/components/_shared/option.d.ts.map +0 -1
- package/dist/components/_shared/safe-html.d.ts.map +0 -1
- package/dist/components/_shared/safe-image-src.d.ts.map +0 -1
- package/dist/components/_shared/stepper.d.ts.map +0 -1
- package/dist/components/_shared/time.d.ts.map +0 -1
- package/dist/components/_shared/use-debounced-callback.d.ts.map +0 -1
- package/dist/components/_shared/use-direction.d.ts.map +0 -1
- package/dist/components/_shared/use-focus-trap.d.ts.map +0 -1
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +0 -1
- package/dist/components/accordion/accordion.agent.d.ts.map +0 -1
- package/dist/components/accordion/accordion.d.ts.map +0 -1
- package/dist/components/accordion/index.d.ts.map +0 -1
- package/dist/components/accordion/index.js.map +0 -1
- package/dist/components/agenda-card/agenda-card.d.ts.map +0 -1
- package/dist/components/agenda-card/index.d.ts.map +0 -1
- package/dist/components/agenda-card/index.js.map +0 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts.map +0 -1
- package/dist/components/agenda-tray/index.d.ts.map +0 -1
- package/dist/components/agenda-tray/index.js.map +0 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +0 -1
- package/dist/components/ai-prompt-input/index.d.ts.map +0 -1
- package/dist/components/ai-prompt-input/index.js.map +0 -1
- package/dist/components/alert/alert.d.ts.map +0 -1
- package/dist/components/alert/index.d.ts.map +0 -1
- package/dist/components/alert/index.js.map +0 -1
- package/dist/components/app-frame/app-frame.d.ts.map +0 -1
- package/dist/components/app-frame/index.d.ts.map +0 -1
- package/dist/components/app-frame/index.js.map +0 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +0 -1
- package/dist/components/aspect-ratio/index.d.ts.map +0 -1
- package/dist/components/aspect-ratio/index.js.map +0 -1
- package/dist/components/audio-recorder/audio-recorder.d.ts.map +0 -1
- package/dist/components/audio-recorder/index.d.ts.map +0 -1
- package/dist/components/audio-recorder/index.js.map +0 -1
- package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +0 -1
- package/dist/components/audio-visualiser/index.d.ts.map +0 -1
- package/dist/components/audio-visualiser/index.js.map +0 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +0 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +0 -1
- package/dist/components/autocomplete/index.d.ts.map +0 -1
- package/dist/components/autocomplete/index.js.map +0 -1
- package/dist/components/avatar/avatar.d.ts.map +0 -1
- package/dist/components/avatar/index.d.ts.map +0 -1
- package/dist/components/avatar/index.js.map +0 -1
- package/dist/components/badge/badge.d.ts.map +0 -1
- package/dist/components/badge/index.d.ts.map +0 -1
- package/dist/components/badge/index.js.map +0 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +0 -1
- package/dist/components/breadcrumb/index.d.ts.map +0 -1
- package/dist/components/breadcrumb/index.js.map +0 -1
- package/dist/components/button/button.agent.d.ts.map +0 -1
- package/dist/components/button/button.d.ts.map +0 -1
- package/dist/components/button/icon-button.d.ts.map +0 -1
- package/dist/components/button/index.d.ts.map +0 -1
- package/dist/components/button/index.js.map +0 -1
- package/dist/components/button-group/button-group.d.ts.map +0 -1
- package/dist/components/button-group/index.d.ts.map +0 -1
- package/dist/components/button-group/index.js.map +0 -1
- package/dist/components/calendar/calendar.agent.d.ts.map +0 -1
- package/dist/components/calendar/calendar.d.ts.map +0 -1
- package/dist/components/calendar/contrast-warning.d.ts.map +0 -1
- package/dist/components/calendar/index.d.ts.map +0 -1
- package/dist/components/calendar/index.js.map +0 -1
- package/dist/components/card/card.d.ts.map +0 -1
- package/dist/components/card/index.d.ts.map +0 -1
- package/dist/components/card/index.js.map +0 -1
- package/dist/components/chart/chart.agent.d.ts.map +0 -1
- package/dist/components/chart/chart.d.ts.map +0 -1
- package/dist/components/chart/index.d.ts.map +0 -1
- package/dist/components/chart/index.js.map +0 -1
- package/dist/components/chat-container/chat-container.agent.d.ts.map +0 -1
- package/dist/components/chat-container/chat-container.d.ts.map +0 -1
- package/dist/components/chat-container/index.d.ts.map +0 -1
- package/dist/components/chat-container/index.js.map +0 -1
- package/dist/components/chat-input/chat-input.d.ts.map +0 -1
- package/dist/components/chat-input/index.d.ts.map +0 -1
- package/dist/components/chat-input/index.js.map +0 -1
- package/dist/components/chat-message/chat-message.d.ts.map +0 -1
- package/dist/components/chat-message/index.d.ts.map +0 -1
- package/dist/components/chat-message/index.js.map +0 -1
- package/dist/components/checkbox/checkbox-group-context.d.ts.map +0 -1
- package/dist/components/checkbox/checkbox.d.ts.map +0 -1
- package/dist/components/checkbox/index.d.ts.map +0 -1
- package/dist/components/checkbox/index.js.map +0 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +0 -1
- package/dist/components/checkbox-group/index.d.ts.map +0 -1
- package/dist/components/checkbox-group/index.js.map +0 -1
- package/dist/components/collapsible/collapsible.d.ts.map +0 -1
- package/dist/components/collapsible/index.d.ts.map +0 -1
- package/dist/components/collapsible/index.js.map +0 -1
- package/dist/components/color-picker/color-picker.d.ts.map +0 -1
- package/dist/components/color-picker/color-utils.d.ts.map +0 -1
- package/dist/components/color-picker/index.d.ts.map +0 -1
- package/dist/components/color-picker/index.js.map +0 -1
- package/dist/components/color-picker/palettes.d.ts.map +0 -1
- package/dist/components/combobox/combobox.agent.d.ts.map +0 -1
- package/dist/components/combobox/combobox.d.ts.map +0 -1
- package/dist/components/combobox/index.d.ts.map +0 -1
- package/dist/components/combobox/index.js.map +0 -1
- package/dist/components/command-palette/command-palette.agent.d.ts.map +0 -1
- package/dist/components/command-palette/command-palette.d.ts.map +0 -1
- package/dist/components/command-palette/index.d.ts.map +0 -1
- package/dist/components/command-palette/index.js.map +0 -1
- package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/balance-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/currency-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/date-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/link-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/status-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/tag-list-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/toggle-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/user-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/data-table.agent.d.ts.map +0 -1
- package/dist/components/data-table/data-table.d.ts.map +0 -1
- package/dist/components/data-table/hooks/use-total-row.d.ts.map +0 -1
- package/dist/components/data-table/index.d.ts.map +0 -1
- package/dist/components/data-table/index.js.map +0 -1
- package/dist/components/data-table/toolbar.d.ts.map +0 -1
- package/dist/components/date-picker/date-picker.d.ts.map +0 -1
- package/dist/components/date-picker/index.d.ts.map +0 -1
- package/dist/components/date-picker/index.js.map +0 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +0 -1
- package/dist/components/date-range-picker/index.d.ts.map +0 -1
- package/dist/components/date-range-picker/index.js.map +0 -1
- package/dist/components/date-time-picker/date-time-picker.d.ts.map +0 -1
- package/dist/components/date-time-picker/index.d.ts.map +0 -1
- package/dist/components/date-time-picker/index.js.map +0 -1
- package/dist/components/description-list/description-list.d.ts.map +0 -1
- package/dist/components/description-list/index.d.ts.map +0 -1
- package/dist/components/description-list/index.js.map +0 -1
- package/dist/components/dialog/dialog.agent.d.ts.map +0 -1
- package/dist/components/dialog/dialog.d.ts.map +0 -1
- package/dist/components/dialog/index.d.ts.map +0 -1
- package/dist/components/dialog/index.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
- package/dist/components/dropdown-menu/index.d.ts.map +0 -1
- package/dist/components/dropdown-menu/index.js.map +0 -1
- package/dist/components/empty-state/empty-state.d.ts.map +0 -1
- package/dist/components/empty-state/index.d.ts.map +0 -1
- package/dist/components/empty-state/index.js.map +0 -1
- package/dist/components/file-upload/file-upload.agent.d.ts.map +0 -1
- package/dist/components/file-upload/file-upload.d.ts.map +0 -1
- package/dist/components/file-upload/index.d.ts.map +0 -1
- package/dist/components/file-upload/index.js.map +0 -1
- package/dist/components/flag/flag.d.ts.map +0 -1
- package/dist/components/flag/index.d.ts.map +0 -1
- package/dist/components/flag/index.js.map +0 -1
- package/dist/components/floating-action-button/floating-action-button.d.ts.map +0 -1
- package/dist/components/floating-action-button/index.d.ts.map +0 -1
- package/dist/components/floating-action-button/index.js.map +0 -1
- package/dist/components/form-field/form-field-context.d.ts.map +0 -1
- package/dist/components/form-field/form-field.d.ts.map +0 -1
- package/dist/components/form-field/index.d.ts.map +0 -1
- package/dist/components/form-field/index.js.map +0 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +0 -1
- package/dist/components/freemium-paywall/index.d.ts.map +0 -1
- package/dist/components/freemium-paywall/index.js.map +0 -1
- package/dist/components/header/header.d.ts.map +0 -1
- package/dist/components/header/index.d.ts.map +0 -1
- package/dist/components/header/index.js.map +0 -1
- package/dist/components/icon-button/index.d.ts.map +0 -1
- package/dist/components/icon-button/index.js.map +0 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts.map +0 -1
- package/dist/components/icon-button-group/index.d.ts.map +0 -1
- package/dist/components/icon-button-group/index.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/kbd/index.d.ts.map +0 -1
- package/dist/components/kbd/index.js.map +0 -1
- package/dist/components/kbd/kbd.d.ts.map +0 -1
- package/dist/components/key-value-pair/index.d.ts.map +0 -1
- package/dist/components/key-value-pair/index.js.map +0 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +0 -1
- package/dist/components/list/index.d.ts.map +0 -1
- package/dist/components/list/index.js.map +0 -1
- package/dist/components/list/list.d.ts.map +0 -1
- package/dist/components/live-region/index.d.ts.map +0 -1
- package/dist/components/live-region/index.js.map +0 -1
- package/dist/components/live-region/live-region.d.ts.map +0 -1
- package/dist/components/logo/index.d.ts.map +0 -1
- package/dist/components/logo/index.js.map +0 -1
- package/dist/components/logo/logo.d.ts.map +0 -1
- package/dist/components/matrix-rain/index.d.ts.map +0 -1
- package/dist/components/matrix-rain/index.js.map +0 -1
- package/dist/components/matrix-rain/matrix-rain.d.ts.map +0 -1
- package/dist/components/message-card/index.d.ts.map +0 -1
- package/dist/components/message-card/index.js.map +0 -1
- package/dist/components/message-card/message-card.d.ts.map +0 -1
- package/dist/components/message-tray/index.d.ts.map +0 -1
- package/dist/components/message-tray/index.js.map +0 -1
- package/dist/components/message-tray/message-tray.d.ts.map +0 -1
- package/dist/components/multi-select/index.d.ts.map +0 -1
- package/dist/components/multi-select/index.js.map +0 -1
- package/dist/components/multi-select/multi-select.agent.d.ts.map +0 -1
- package/dist/components/multi-select/multi-select.d.ts.map +0 -1
- package/dist/components/navigation-menu/index.d.ts.map +0 -1
- package/dist/components/navigation-menu/index.js.map +0 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +0 -1
- package/dist/components/notification-card/index.d.ts.map +0 -1
- package/dist/components/notification-card/index.js.map +0 -1
- package/dist/components/notification-card/notification-card.d.ts.map +0 -1
- package/dist/components/notification-tray/index.d.ts.map +0 -1
- package/dist/components/notification-tray/index.js.map +0 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +0 -1
- package/dist/components/number-input/index.d.ts.map +0 -1
- package/dist/components/number-input/index.js.map +0 -1
- package/dist/components/number-input/number-input.d.ts.map +0 -1
- package/dist/components/number-input/use-locale-number.d.ts.map +0 -1
- package/dist/components/otp-input/index.d.ts.map +0 -1
- package/dist/components/otp-input/index.js.map +0 -1
- package/dist/components/otp-input/otp-input.d.ts.map +0 -1
- package/dist/components/pagination/index.d.ts.map +0 -1
- package/dist/components/pagination/index.js.map +0 -1
- package/dist/components/pagination/pagination.agent.d.ts.map +0 -1
- package/dist/components/pagination/pagination.d.ts.map +0 -1
- package/dist/components/password-input/index.d.ts.map +0 -1
- package/dist/components/password-input/index.js.map +0 -1
- package/dist/components/password-input/password-input.d.ts.map +0 -1
- package/dist/components/payment-form/index.d.ts.map +0 -1
- package/dist/components/payment-form/index.js.map +0 -1
- package/dist/components/payment-form/payment-form.agent.d.ts.map +0 -1
- package/dist/components/payment-form/payment-form.d.ts.map +0 -1
- package/dist/components/pdf-viewer/index.d.ts.map +0 -1
- package/dist/components/pdf-viewer/index.js.map +0 -1
- package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +0 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +0 -1
- package/dist/components/phone-input/index.d.ts.map +0 -1
- package/dist/components/phone-input/index.js.map +0 -1
- package/dist/components/phone-input/phone-input.d.ts.map +0 -1
- package/dist/components/popover/index.d.ts.map +0 -1
- package/dist/components/popover/index.js.map +0 -1
- package/dist/components/popover/popover.agent.d.ts.map +0 -1
- package/dist/components/popover/popover.d.ts.map +0 -1
- package/dist/components/privacy-lock/index.d.ts.map +0 -1
- package/dist/components/privacy-lock/index.js.map +0 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts.map +0 -1
- package/dist/components/progress/index.d.ts.map +0 -1
- package/dist/components/progress/index.js.map +0 -1
- package/dist/components/progress/progress.agent.d.ts.map +0 -1
- package/dist/components/progress/progress.d.ts.map +0 -1
- package/dist/components/radio/index.d.ts.map +0 -1
- package/dist/components/radio/index.js.map +0 -1
- package/dist/components/radio-group/index.d.ts.map +0 -1
- package/dist/components/radio-group/index.js.map +0 -1
- package/dist/components/radio-group/radio-group-context.d.ts.map +0 -1
- package/dist/components/radio-group/radio-group.d.ts.map +0 -1
- package/dist/components/radio-group/radio.d.ts.map +0 -1
- package/dist/components/resizable/index.d.ts.map +0 -1
- package/dist/components/resizable/index.js.map +0 -1
- package/dist/components/resizable/resizable-context.d.ts.map +0 -1
- package/dist/components/resizable/resizable.agent.d.ts.map +0 -1
- package/dist/components/resizable/resizable.d.ts.map +0 -1
- package/dist/components/rich-text-editor/index.d.ts.map +0 -1
- package/dist/components/rich-text-editor/index.js.map +0 -1
- package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +0 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +0 -1
- package/dist/components/scroll-area/index.d.ts.map +0 -1
- package/dist/components/scroll-area/index.js.map +0 -1
- package/dist/components/scroll-area/scroll-area.d.ts.map +0 -1
- package/dist/components/search-bar/index.d.ts.map +0 -1
- package/dist/components/search-bar/index.js.map +0 -1
- package/dist/components/search-bar/search-bar.d.ts.map +0 -1
- package/dist/components/search-input/index.d.ts.map +0 -1
- package/dist/components/search-input/index.js.map +0 -1
- package/dist/components/search-input/search-input.d.ts.map +0 -1
- package/dist/components/select/index.d.ts.map +0 -1
- package/dist/components/select/index.js.map +0 -1
- package/dist/components/select/select.d.ts.map +0 -1
- package/dist/components/separator/index.d.ts.map +0 -1
- package/dist/components/separator/index.js.map +0 -1
- package/dist/components/separator/separator.d.ts.map +0 -1
- package/dist/components/sheet/index.d.ts.map +0 -1
- package/dist/components/sheet/index.js.map +0 -1
- package/dist/components/sheet/sheet.agent.d.ts.map +0 -1
- package/dist/components/sheet/sheet.d.ts.map +0 -1
- package/dist/components/sidebar/index.d.ts.map +0 -1
- package/dist/components/sidebar/index.js.map +0 -1
- package/dist/components/sidebar/sidebar.agent.d.ts.map +0 -1
- package/dist/components/sidebar/sidebar.d.ts.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/index.d.ts.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +0 -1
- package/dist/components/signature-capture/index.d.ts.map +0 -1
- package/dist/components/signature-capture/index.js.map +0 -1
- package/dist/components/signature-capture/signature-capture.agent.d.ts.map +0 -1
- package/dist/components/signature-capture/signature-capture.d.ts.map +0 -1
- package/dist/components/skeleton/index.d.ts.map +0 -1
- package/dist/components/skeleton/index.js.map +0 -1
- package/dist/components/skeleton/skeleton.d.ts.map +0 -1
- package/dist/components/skip-link/index.d.ts.map +0 -1
- package/dist/components/skip-link/index.js.map +0 -1
- package/dist/components/skip-link/skip-link.d.ts.map +0 -1
- package/dist/components/slider/index.d.ts.map +0 -1
- package/dist/components/slider/index.js.map +0 -1
- package/dist/components/slider/slider.d.ts.map +0 -1
- package/dist/components/slot-grid/index.d.ts.map +0 -1
- package/dist/components/slot-grid/index.js.map +0 -1
- package/dist/components/slot-grid/slot-grid.d.ts.map +0 -1
- package/dist/components/sparkline/index.d.ts.map +0 -1
- package/dist/components/sparkline/index.js.map +0 -1
- package/dist/components/sparkline/sparkline.agent.d.ts.map +0 -1
- package/dist/components/sparkline/sparkline.d.ts.map +0 -1
- package/dist/components/sparkline/use-linear-trend.d.ts.map +0 -1
- package/dist/components/spinner/index.d.ts.map +0 -1
- package/dist/components/spinner/index.js.map +0 -1
- package/dist/components/spinner/spinner.d.ts.map +0 -1
- package/dist/components/stat/index.d.ts.map +0 -1
- package/dist/components/stat/index.js.map +0 -1
- package/dist/components/stat/stat.d.ts.map +0 -1
- package/dist/components/stepper-accordion/index.d.ts.map +0 -1
- package/dist/components/stepper-accordion/index.js.map +0 -1
- package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +0 -1
- package/dist/components/stepper-calendar/index.d.ts.map +0 -1
- package/dist/components/stepper-calendar/index.js.map +0 -1
- package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +0 -1
- package/dist/components/stepper-progress/index.d.ts.map +0 -1
- package/dist/components/stepper-progress/index.js.map +0 -1
- package/dist/components/stepper-progress/stepper-progress.d.ts.map +0 -1
- package/dist/components/streaming-text/index.d.ts.map +0 -1
- package/dist/components/streaming-text/index.js.map +0 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +0 -1
- package/dist/components/suggestion-chip/index.d.ts.map +0 -1
- package/dist/components/suggestion-chip/index.js.map +0 -1
- package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +0 -1
- package/dist/components/switch/index.d.ts.map +0 -1
- package/dist/components/switch/index.js.map +0 -1
- package/dist/components/switch/switch.d.ts.map +0 -1
- package/dist/components/tabs/index.d.ts.map +0 -1
- package/dist/components/tabs/index.js.map +0 -1
- package/dist/components/tabs/tabs.agent.d.ts.map +0 -1
- package/dist/components/tabs/tabs.d.ts.map +0 -1
- package/dist/components/tag/index.d.ts.map +0 -1
- package/dist/components/tag/index.js.map +0 -1
- package/dist/components/tag/tag.d.ts.map +0 -1
- package/dist/components/task-card/index.d.ts.map +0 -1
- package/dist/components/task-card/index.js.map +0 -1
- package/dist/components/task-card/task-card.d.ts.map +0 -1
- package/dist/components/task-tray/index.d.ts.map +0 -1
- package/dist/components/task-tray/index.js.map +0 -1
- package/dist/components/task-tray/task-tray.d.ts.map +0 -1
- package/dist/components/text-area/index.d.ts.map +0 -1
- package/dist/components/text-area/index.js.map +0 -1
- package/dist/components/text-area/text-area.d.ts.map +0 -1
- package/dist/components/text-input/index.d.ts.map +0 -1
- package/dist/components/text-input/index.js.map +0 -1
- package/dist/components/text-input/text-input.d.ts.map +0 -1
- package/dist/components/theme-root/index.d.ts.map +0 -1
- package/dist/components/theme-root/index.js.map +0 -1
- package/dist/components/theme-root/theme-root.d.ts.map +0 -1
- package/dist/components/theme-toggle/index.d.ts.map +0 -1
- package/dist/components/theme-toggle/index.js.map +0 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +0 -1
- package/dist/components/time-picker/index.d.ts.map +0 -1
- package/dist/components/time-picker/index.js.map +0 -1
- package/dist/components/time-picker/time-picker.d.ts.map +0 -1
- package/dist/components/timeline/index.d.ts.map +0 -1
- package/dist/components/timeline/index.js.map +0 -1
- package/dist/components/timeline/timeline.d.ts.map +0 -1
- package/dist/components/timestamp/index.d.ts.map +0 -1
- package/dist/components/timestamp/index.js.map +0 -1
- package/dist/components/timestamp/timestamp.d.ts.map +0 -1
- package/dist/components/toast/index.d.ts.map +0 -1
- package/dist/components/toast/index.js.map +0 -1
- package/dist/components/toast/toast.d.ts.map +0 -1
- package/dist/components/tooltip/index.d.ts.map +0 -1
- package/dist/components/tooltip/index.js.map +0 -1
- package/dist/components/tooltip/tooltip.d.ts.map +0 -1
- package/dist/components/tooth-scheme/index.d.ts.map +0 -1
- package/dist/components/tooth-scheme/index.js.map +0 -1
- package/dist/components/tooth-scheme/tooth-data.d.ts.map +0 -1
- package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +0 -1
- package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +0 -1
- package/dist/components/transcript-panel/index.d.ts.map +0 -1
- package/dist/components/transcript-panel/index.js.map +0 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts.map +0 -1
- package/dist/components/typing-indicator/index.d.ts.map +0 -1
- package/dist/components/typing-indicator/index.js.map +0 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts.map +0 -1
- package/dist/components/visually-hidden/index.d.ts.map +0 -1
- package/dist/components/visually-hidden/index.js.map +0 -1
- package/dist/components/visually-hidden/visually-hidden.d.ts.map +0 -1
- package/dist/components/warning-stack/index.d.ts.map +0 -1
- package/dist/components/warning-stack/index.js.map +0 -1
- package/dist/components/warning-stack/warning-stack.d.ts.map +0 -1
- package/dist/components/workflow/index.d.ts.map +0 -1
- package/dist/components/workflow/index.js.map +0 -1
- package/dist/components/workflow/workflow-card.d.ts.map +0 -1
- package/dist/components/workflow/workflow-editor.d.ts.map +0 -1
- package/dist/components/workflow/workflow-map.d.ts.map +0 -1
- package/dist/components/workflow/workflow-types.d.ts.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/use-locale.d.ts.map +0 -1
- package/dist/hooks/use-media-query.d.ts.map +0 -1
- package/dist/hooks/use-prefers-reduced-motion.d.ts.map +0 -1
- package/dist/hooks/use-theme.d.ts.map +0 -1
- package/dist/i18n/config.d.ts.map +0 -1
- package/dist/i18n/config.js.map +0 -1
- package/dist/i18n/resources.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/option/index.js.map +0 -1
- package/dist/patterns/leo-assistant/index.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/index.js.map +0 -1
- package/dist/patterns/leo-assistant/leo-chat-surface.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-embedded.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-popout.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-sidebar.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-types.d.ts.map +0 -1
- package/dist/patterns/patient-shell/index.d.ts.map +0 -1
- package/dist/patterns/patient-shell/index.js.map +0 -1
- package/dist/patterns/patient-shell/patient-shell.d.ts.map +0 -1
- package/dist/safe-html/index.js.map +0 -1
- package/dist/tokens/apexcharts-theme.d.ts.map +0 -1
- package/dist/tokens/themes/bridges/stripe-appearance.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timestamp-BV2lC-wV.js","sources":["../../src/components/timestamp/timestamp.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useMemo,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ------------------------------------------------------------------ */\n/* CVA — chip shape (mirrors the Tag sm/md/lg compact scale so the */\n/* visual vocabulary stays consistent across the chip family). */\n/* ------------------------------------------------------------------ */\n\nconst chipVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:self-start',\n 'ds:rounded-[var(--radius-full)]',\n 'type-eyebrow',\n 'ds:whitespace-nowrap',\n 'ds:bg-muted/20 ds:text-[color:var(--muted-foreground)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-[calc(var(--spacing)*4)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n md: 'ds:h-[calc(var(--spacing)*5)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:[--type-eyebrow-size:var(--font-size-2xs)]',\n lg: 'ds:h-[calc(var(--spacing)*6)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:[--type-eyebrow-size:var(--font-size-xs)]',\n },\n },\n defaultVariants: { size: 'sm' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Relative-time formatter */\n/* */\n/* `Intl.RelativeTimeFormat` is part of the locale-data bundle every */\n/* modern browser ships, no date-fns dependency. Unit selection */\n/* follows the largest-sensible-unit heuristic (< 1 minute → seconds, */\n/* < 1 hour → minutes, …, ≥ 1 year → years). */\n/* ------------------------------------------------------------------ */\n\nconst SECOND_MS = 1000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\nconst WEEK_MS = 7 * DAY_MS;\nconst MONTH_MS = 30 * DAY_MS;\nconst YEAR_MS = 365 * DAY_MS;\n\nfunction pickUnit(\n deltaMs: number,\n): [value: number, unit: Intl.RelativeTimeFormatUnit] {\n const abs = Math.abs(deltaMs);\n if (abs < MINUTE_MS) return [Math.round(deltaMs / SECOND_MS), 'second'];\n if (abs < HOUR_MS) return [Math.round(deltaMs / MINUTE_MS), 'minute'];\n if (abs < DAY_MS) return [Math.round(deltaMs / HOUR_MS), 'hour'];\n if (abs < WEEK_MS) return [Math.round(deltaMs / DAY_MS), 'day'];\n if (abs < MONTH_MS) return [Math.round(deltaMs / WEEK_MS), 'week'];\n if (abs < YEAR_MS) return [Math.round(deltaMs / MONTH_MS), 'month'];\n return [Math.round(deltaMs / YEAR_MS), 'year'];\n}\n\nfunction formatRelative(date: Date, locale: string): string {\n const delta = date.getTime() - Date.now();\n const [n, unit] = pickUnit(delta);\n return new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto',\n style: 'long',\n }).format(n, unit);\n}\n\nfunction formatAbsolute(\n date: Date,\n locale: string,\n options?: Intl.DateTimeFormatOptions,\n): string {\n const opts: Intl.DateTimeFormatOptions = options ?? {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n };\n return new Intl.DateTimeFormat(locale, opts).format(date);\n}\n\n/* ------------------------------------------------------------------ */\n/* Hydration-safe display-label hook */\n/* */\n/* Initial render returns the absolute label (SSR-stable) so the */\n/* server HTML matches the client's first paint. Post-mount, relative */\n/* mode flips to the relative phrase and re-evaluates every minute so */\n/* \"just now\" → \"1 minute ago\" without a parent re-render. */\n/* */\n/* `relativeWindow` supports the common \"recent phrase, otherwise full */\n/* date\" pattern: when the input date is older than the window, */\n/* display the absolute label even though format='relative'. The */\n/* minute tick re-evaluates the window so a date that starts inside */\n/* the window automatically flips to absolute once it drifts past. */\n/* ------------------------------------------------------------------ */\n\nfunction useDisplayLabel(\n time: number,\n locale: string,\n enabled: boolean,\n relativeWindow: number | undefined,\n absolute: string,\n): { label: string; isRelative: boolean } {\n const [state, setState] = useState<{ label: string; isRelative: boolean }>({\n label: absolute,\n isRelative: false,\n });\n\n useEffect(() => {\n if (!enabled) {\n setState((prev) =>\n prev.isRelative || prev.label !== absolute\n ? { label: absolute, isRelative: false }\n : prev,\n );\n return;\n }\n const compute = () => {\n const date = new Date(time);\n const inside =\n relativeWindow == null ||\n Math.abs(time - Date.now()) < relativeWindow;\n const next = inside\n ? { label: formatRelative(date, locale), isRelative: true }\n : { label: absolute, isRelative: false };\n setState((prev) =>\n prev.label === next.label && prev.isRelative === next.isRelative\n ? prev\n : next,\n );\n };\n compute();\n const intervalId = window.setInterval(compute, MINUTE_MS);\n return () => window.clearInterval(intervalId);\n }, [time, locale, enabled, relativeWindow, absolute]);\n\n return state;\n}\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\ntype ChipVariantProps = VariantProps<typeof chipVariants>;\n\nexport interface TimestampProps\n extends Omit<HTMLAttributes<HTMLTimeElement>, 'children' | 'title'>,\n ChipVariantProps {\n /** ISO-8601 string, ms-since-epoch number, or a `Date` instance. */\n value: string | number | Date;\n /**\n * `relative` shows \"6 hours ago\" with the absolute label in the `title`\n * tooltip; `absolute` shows the full locale-formatted date and omits the\n * tooltip. Default `relative`.\n */\n format?: 'relative' | 'absolute';\n /**\n * `inline` renders a plain `<time>` with the `.type-meta` role,\n * `chip` wraps the `<time>` in the Tag-family pill shape, and `bare`\n * emits the `<time>` element with no built-in typography class so the\n * consumer's surrounding context (e.g. AG Grid cell font size)\n * dictates how it reads. Default `inline`.\n */\n shape?: 'inline' | 'chip' | 'bare';\n /**\n * Override the locale. Falls back to the active `i18n.language`.\n */\n locale?: string;\n /**\n * Override the `Intl.DateTimeFormat` options used for the absolute\n * label (and the tooltip when `format='relative'`).\n */\n absoluteFormat?: Intl.DateTimeFormatOptions;\n /**\n * When `format='relative'`, dates older than this window (in ms) show\n * the absolute label instead. Supports the common \"recent relative\n * phrase, otherwise full date\" UX pattern (e.g. \"5 minutes ago\" →\n * \"20 Apr 2026, 10:30\" once beyond 12 h). Omit for no cutoff.\n */\n relativeWindow?: number;\n /**\n * Override the tooltip. Default is the absolute label when the visible\n * label is relative, and no tooltip when the visible label is already\n * absolute. Pass an empty string to suppress the tooltip entirely.\n */\n title?: string;\n /** Additional classes applied to the `<time>` element. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Timestamp */\n/* ------------------------------------------------------------------ */\n\nexport const Timestamp = forwardRef<HTMLTimeElement, TimestampProps>(\n (\n {\n value,\n format = 'relative',\n shape = 'inline',\n size = 'sm',\n locale: localeProp,\n absoluteFormat,\n relativeWindow,\n title: titleProp,\n className,\n ...rest\n },\n ref,\n ) => {\n const { i18n } = useTranslation();\n const locale = localeProp ?? i18n.language ?? 'en';\n const time = useMemo(() => {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number') return value;\n return new Date(value).getTime();\n }, [value]);\n const valid = !Number.isNaN(time);\n const iso = valid ? new Date(time).toISOString() : undefined;\n\n const absolute = useMemo(\n () => (valid ? formatAbsolute(new Date(time), locale, absoluteFormat) : ''),\n [time, locale, absoluteFormat, valid],\n );\n const { label: visibleLabel, isRelative } = useDisplayLabel(\n time,\n locale,\n valid && format === 'relative',\n relativeWindow,\n absolute,\n );\n const tooltip = titleProp ?? (isRelative ? absolute : undefined);\n\n const chipClass = shape === 'chip' ? chipVariants({ size }) : null;\n const inlineClass = shape === 'inline' ? 'type-meta' : null;\n // shape='bare' → no built-in class; consumer's parent context owns typography.\n const composedClass = [chipClass, inlineClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <time\n ref={ref}\n dateTime={iso}\n title={tooltip === '' ? undefined : tooltip}\n data-component=\"timestamp\"\n className={composedClass || undefined}\n {...rest}\n >\n {visibleLabel}\n </time>\n );\n },\n);\n\nTimestamp.displayName = 'Timestamp';\n"],"names":["chipVariants","cva","SECOND_MS","MINUTE_MS","HOUR_MS","DAY_MS","WEEK_MS","MONTH_MS","YEAR_MS","pickUnit","deltaMs","abs","formatRelative","date","locale","delta","n","unit","formatAbsolute","options","opts","useDisplayLabel","time","enabled","relativeWindow","absolute","state","setState","useState","useEffect","prev","compute","next","intervalId","Timestamp","forwardRef","value","format","shape","size","localeProp","absoluteFormat","titleProp","className","rest","ref","i18n","useTranslation","useMemo","valid","iso","visibleLabel","isRelative","tooltip","composedClass","jsx"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toast-lOhJDKOH.js","sources":["../../node_modules/sonner/dist/index.mjs","../../src/components/toast/toast.tsx"],"sourcesContent":["'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const filteredToasts = React.useMemo(()=>{\n if (id) {\n return toasts.filter((toast)=>toast.toasterId === id);\n }\n return toasts.filter((toast)=>!toast.toasterId);\n }, [\n toasts,\n id\n ]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","import { type ReactNode, useEffect, useState } from 'react';\nimport { Toaster as SonnerToaster, toast } from 'sonner';\nimport { useTranslation } from 'react-i18next';\nimport { Info, CircleCheck, AlertTriangle, CircleX, X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\n\nconst iconMap = {\n info: <Info aria-hidden=\"true\" size={20} className=\"ds:shrink-0 ds:text-[var(--info)]\" />,\n success: <CircleCheck aria-hidden=\"true\" size={20} className=\"ds:shrink-0 ds:text-[var(--success)]\" />,\n warning: <AlertTriangle aria-hidden=\"true\" size={20} className=\"ds:shrink-0 ds:text-[var(--warning)]\" />,\n error: <CircleX aria-hidden=\"true\" size={20} className=\"ds:shrink-0 ds:text-[var(--destructive)]\" />,\n} as const;\n\n// Populated by Toaster on render; Toaster must mount before any toast fires.\nlet _closeLabel = 'Close';\n// Ensures only one SonnerToaster is active at a time (guards against multiple\n// mounts on Storybook docs pages where each story gets its own React root).\nlet _toasterActive = false;\n\ntype LogicalPosition =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end';\n\ntype PhysicalPosition =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-center'\n | 'bottom-center';\n\nfunction resolvePosition(logical: LogicalPosition): PhysicalPosition {\n const isRtl =\n typeof document !== 'undefined' &&\n document.documentElement.dir === 'rtl';\n\n const map: Record<LogicalPosition, PhysicalPosition> = {\n 'top-start': isRtl ? 'top-right' : 'top-left',\n 'top-center': 'top-center',\n 'top-end': isRtl ? 'top-left' : 'top-right',\n 'bottom-start': isRtl ? 'bottom-right' : 'bottom-left',\n 'bottom-center': 'bottom-center',\n 'bottom-end': isRtl ? 'bottom-left' : 'bottom-right',\n };\n\n return map[logical];\n}\n\nexport interface ToasterProps {\n position?: LogicalPosition;\n offset?: string;\n gap?: number;\n visibleToasts?: number;\n className?: string;\n}\n\nexport function Toaster({\n position = 'bottom-end',\n offset = 'var(--spacing-lg)',\n gap = 8,\n visibleToasts = 3,\n className,\n}: ToasterProps) {\n const { t } = useTranslation();\n _closeLabel = t('ui.common.close', 'Close');\n\n const [isActive] = useState(() => {\n if (_toasterActive) return false;\n _toasterActive = true;\n return true;\n });\n\n const [docDir, setDocDir] = useState<'ltr' | 'rtl'>(() =>\n typeof document !== 'undefined'\n ? ((document.documentElement.dir as 'ltr' | 'rtl') || 'ltr')\n : 'ltr',\n );\n\n useEffect(() => {\n return () => {\n if (isActive) _toasterActive = false;\n };\n }, [isActive]);\n\n useEffect(() => {\n if (!isActive) return;\n const obs = new MutationObserver(() => {\n setDocDir((document.documentElement.dir as 'ltr' | 'rtl') || 'ltr');\n });\n obs.observe(document.documentElement, { attributes: true, attributeFilter: ['dir'] });\n return () => obs.disconnect();\n }, [isActive]);\n\n if (!isActive) return null;\n\n return (\n <SonnerToaster\n dir={docDir}\n position={resolvePosition(position)}\n richColors={false}\n visibleToasts={visibleToasts}\n gap={gap}\n offset={offset}\n className={className}\n toastOptions={{\n unstyled: true,\n classNames: {\n toast: [\n 'ds:flex ds:items-center',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-sm)]',\n '[max-inline-size:360px] max-sm:[max-inline-size:88dvw]',\n 'break-words',\n 'ds:z-[var(--z-toast)]',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n icon: 'hidden',\n content: 'ds:flex ds:flex-col ds:min-w-0 ds:flex-1',\n title: 'ds:w-full ds:min-w-0',\n },\n }}\n />\n );\n}\nToaster.displayName = 'Toaster';\n\nexport interface ToastOptions {\n description?: string;\n duration?: number;\n action?: {\n label: string;\n onClick: () => void;\n };\n cancel?: {\n label: string;\n onClick: () => void;\n };\n onDismiss?: () => void;\n onAutoClose?: () => void;\n}\n\ntype ToastVariant = 'info' | 'success' | 'warning' | 'error';\n\nfunction buildMessageNode(\n variant: ToastVariant,\n message: string,\n toastId: string,\n description?: string,\n): ReactNode {\n return (\n <div className=\"ds:flex ds:w-full ds:items-center ds:gap-[var(--spacing-sm)]\">\n {iconMap[variant]}\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span dir=\"auto\" className=\"type-label ds:leading-snug ds:break-words\">{message}</span>\n {description && (\n <span dir=\"auto\" className=\"type-body-sm ds:text-[var(--muted-foreground)] ds:break-words\">\n {description}\n </span>\n )}\n </div>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={_closeLabel}\n onClick={() => toast.dismiss(toastId)}\n className=\"ds:shrink-0\"\n />\n </div>\n );\n}\n\nfunction fireToast(\n variant: ToastVariant,\n message: string,\n options?: ToastOptions,\n): string | number {\n const defaultDuration = variant === 'error' ? Infinity : 4000;\n const id = `${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n\n const content = buildMessageNode(variant, message, id, options?.description);\n\n const toastData = {\n id,\n icon: null,\n duration: options?.duration ?? defaultDuration,\n action: options?.action\n ? { label: options.action.label, onClick: options.action.onClick }\n : undefined,\n cancel: options?.cancel\n ? { label: options.cancel.label, onClick: options.cancel.onClick }\n : undefined,\n onDismiss: options?.onDismiss,\n onAutoClose: options?.onAutoClose,\n };\n\n /* Use sonner's typed methods so the correct aria-live region is used:\n toast.error() → role=\"alert\" aria-live=\"assertive\"\n toast.info/success/warning() → role=\"status\" aria-live=\"polite\" */\n switch (variant) {\n case 'error':\n return toast.error(content, toastData);\n case 'success':\n return toast.success(content, toastData);\n case 'warning':\n return toast.warning(content, toastData);\n case 'info':\n return toast.info(content, toastData);\n default:\n return toast(content, toastData);\n }\n}\n\nexport function toastInfo(message: string, options?: ToastOptions): string | number {\n return fireToast('info', message, options);\n}\n\nexport function toastSuccess(message: string, options?: ToastOptions): string | number {\n return fireToast('success', message, options);\n}\n\nexport function toastWarning(message: string, options?: ToastOptions): string | number {\n return fireToast('warning', message, options);\n}\n\nexport function toastError(message: string, options?: ToastOptions): string | number {\n return fireToast('error', message, options);\n}\n"],"names":["__insertCSS","code","head","style","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","React","_","i","CloseIcon","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","toastsCounter","Observer","subscriber","index","data","_data_id","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","result","originalPromise","response","isHttpResponse","promiseData","description","toastSettings","error","unwrap","resolve","reject","jsx","ToastState","toastFunction","basicToast","getHistory","getToasts","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","MOBILE_VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","cn","classes","getDefaultSwipeDirections","position","y","x","directions","Toast","props","_toast_classNames","_toast_classNames1","_toast_classNames2","_toast_classNames3","_toast_classNames4","_toast_classNames5","_toast_classNames6","_toast_classNames7","_toast_classNames8","ToasterInvert","unstyled","interacting","setHeights","visibleToasts","heights","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","cancelButtonStyle","actionButtonStyle","descriptionClassName","durationFromToaster","gap","expandByDefault","classNames","icons","closeButtonAriaLabel","swipeDirection","setSwipeDirection","swipeOutDirection","setSwipeOutDirection","mounted","setMounted","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","isSwiped","setIsSwiped","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","_toast_closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","icon","_toast_richColors","_icons_close","event","_toastRef_current","_toastRef_current1","_dragStartTime_current","swipeAmountX","swipeAmountY","timeTaken","swipeAmount","velocity","_toastRef_current2","_toastRef_current3","_window_getSelection","yDelta","xDelta","_props_swipeDirections","swipeDirections","getDampening","delta","dampenedDelta","getDocumentDirection","dirAttribute","assignOffset","defaultOffset","mobileOffset","styles","isMobile","prefix","defaultValue","assignAll","key","Toaster","ref","hotkey","expand","theme","richColors","toastOptions","dir","containerAriaLabel","setToasts","filteredToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","_toasts_find","t","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","e","handleKeyDown","_listRef_current","_listRef_current1","_heights_","_toastOptions_duration","_toastOptions_closeButton","iconMap","Info","CircleCheck","AlertTriangle","CircleX","_closeLabel","_toasterActive","resolvePosition","logical","isRtl","useTranslation","isActive","useState","docDir","setDocDir","useEffect","obs","SonnerToaster","buildMessageNode","variant","toastId","jsxs","IconButton","X","fireToast","options","defaultDuration","content","toastData","toastInfo","toastSuccess","toastWarning","toastError"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip-DHik5yRI.js","sources":["../../src/components/tooltip/tooltip.tsx"],"sourcesContent":["import { type ReactElement, useRef, useEffect, useState } from 'react';\nimport * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { cva } from 'class-variance-authority';\n\n/* ------------------------------------------------------------------ */\n/* useDirection — reads the closest [dir] ancestor at render time */\n/* ------------------------------------------------------------------ */\n\nfunction useDirection(ref: React.RefObject<HTMLElement | null>): 'ltr' | 'rtl' {\n const [dir, setDir] = useState<'ltr' | 'rtl'>(() => {\n if (typeof document === 'undefined') return 'ltr';\n return (document.documentElement.dir as 'ltr' | 'rtl') || 'ltr';\n });\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const closest = el.closest('[dir]');\n const resolved =\n closest?.getAttribute('dir') ?? document.documentElement.dir ?? 'ltr';\n setDir(resolved === 'rtl' ? 'rtl' : 'ltr');\n }, [ref]);\n\n return dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA — tooltip content */\n/* ------------------------------------------------------------------ */\n\nconst tooltipContentVariants = cva(\n [\n 'ds:z-[var(--z-tooltip)]',\n 'ds:max-w-[240px]',\n 'ds:overflow-hidden ds:rounded-[var(--radius-sm)]',\n 'ds:bg-foreground ds:text-background',\n 'ds:ps-3 ds:pe-3 ds:py-1.5 type-meta',\n 'ds:break-normal ds:[overflow-wrap:anywhere]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=left]:slide-in-from-right-2',\n 'ds:data-[side=right]:slide-in-from-left-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Logical → physical side mapping */\n/* ------------------------------------------------------------------ */\n\ntype LogicalSide = 'top' | 'end' | 'bottom' | 'start';\ntype PhysicalSide = 'top' | 'right' | 'bottom' | 'left';\n\nfunction resolvePhysicalSide(\n logical: LogicalSide,\n dir: 'ltr' | 'rtl',\n): PhysicalSide {\n switch (logical) {\n case 'top':\n return 'top';\n case 'bottom':\n return 'bottom';\n case 'start':\n return dir === 'rtl' ? 'right' : 'left';\n case 'end':\n return dir === 'rtl' ? 'left' : 'right';\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* TooltipProvider */\n/* ------------------------------------------------------------------ */\n\nexport interface TooltipProviderProps {\n children: React.ReactNode;\n /** Open delay in ms. Default 700. */\n delayDuration?: number;\n /** Skip delay when moving between triggers. Default 300. */\n skipDelayDuration?: number;\n}\n\nexport const TooltipProvider: React.FC<TooltipProviderProps> = ({\n children,\n delayDuration = 700,\n skipDelayDuration = 300,\n}) => (\n <RadixTooltip.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n >\n {children}\n </RadixTooltip.Provider>\n);\n\nTooltipProvider.displayName = 'TooltipProvider';\n\n/* ------------------------------------------------------------------ */\n/* Tooltip */\n/* ------------------------------------------------------------------ */\n\nexport interface TooltipProps {\n /** The tooltip text — required. */\n label: string;\n /** The trigger element. */\n children: ReactElement;\n /** Logical side. Default 'top'. Mapped to Radix physical side based on dir. */\n side?: LogicalSide;\n /** Alignment along the side axis. Default 'center'. */\n align?: 'start' | 'center' | 'end';\n /** Gap between trigger and tooltip. Default 4. */\n sideOffset?: number;\n /** Open delay override for this instance. */\n delayDuration?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n label,\n children,\n side = 'top',\n align = 'center',\n sideOffset = 4,\n delayDuration,\n open,\n onOpenChange,\n}) => {\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const dir = useDirection(triggerRef as React.RefObject<HTMLElement | null>);\n const physicalSide = resolvePhysicalSide(side, dir);\n\n return (\n <RadixTooltip.Root\n delayDuration={delayDuration}\n open={open}\n onOpenChange={onOpenChange}\n >\n <RadixTooltip.Trigger asChild ref={triggerRef}>\n {children}\n </RadixTooltip.Trigger>\n <RadixTooltip.Portal>\n <RadixTooltip.Content\n className={tooltipContentVariants()}\n side={physicalSide}\n align={align}\n sideOffset={sideOffset}\n data-component=\"tooltip\"\n >\n {label}\n <RadixTooltip.Arrow className=\"ds:fill-foreground\" />\n </RadixTooltip.Content>\n </RadixTooltip.Portal>\n </RadixTooltip.Root>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n"],"names":["useDirection","ref","dir","setDir","useState","useEffect","el","closest","resolved","tooltipContentVariants","cva","resolvePhysicalSide","logical","TooltipProvider","children","delayDuration","skipDelayDuration","jsx","RadixTooltip","Tooltip","label","side","align","sideOffset","open","onOpenChange","triggerRef","useRef","physicalSide","jsxs"],"mappings":";;;;AAQA,SAASA,EAAaC,GAAyD;AAC7E,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAwB,MACxC,OAAO,WAAa,MAAoB,QACpC,SAAS,gBAAgB,OAAyB,KAC3D;AAED,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAKL,EAAI;AACf,QAAI,CAACK,EAAI;AACT,UAAMC,IAAUD,EAAG,QAAQ,OAAO,GAC5BE,KACJD,KAAA,gBAAAA,EAAS,aAAa,WAAU,SAAS,gBAAgB,OAAO;AAClE,IAAAJ,EAAOK,MAAa,QAAQ,QAAQ,KAAK;AAAA,EAC3C,GAAG,CAACP,CAAG,CAAC,GAEDC;AACT;AAMA,MAAMO,IAAyBC;AAAA,EAC7B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AACZ;AASA,SAASC,EACPC,GACAV,GACc;AACd,UAAQU,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAOV,MAAQ,QAAQ,UAAU;AAAA,IACnC,KAAK;AACH,aAAOA,MAAQ,QAAQ,SAAS;AAAA,EAAA;AAEtC;AAcO,MAAMW,IAAkD,CAAC;AAAA,EAC9D,UAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,mBAAAC,IAAoB;AACtB,MACE,gBAAAC;AAAA,EAACC,EAAa;AAAA,EAAb;AAAA,IACC,eAAAH;AAAA,IACA,mBAAAC;AAAA,IAEC,UAAAF;AAAA,EAAA;AACH;AAGFD,EAAgB,cAAc;AAyBvB,MAAMM,IAAkC,CAAC;AAAA,EAC9C,OAAAC;AAAA,EACA,UAAAN;AAAA,EACA,MAAAO,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,YAAAC,IAAa;AAAA,EACb,eAAAR;AAAA,EACA,MAAAS;AAAA,EACA,cAAAC;AACF,MAAM;AACJ,QAAMC,IAAaC,EAAiC,IAAI,GAClDzB,IAAMF,EAAa0B,CAAiD,GACpEE,IAAejB,EAAoBU,GAAMnB,CAAG;AAElD,SACE,gBAAA2B;AAAA,IAACX,EAAa;AAAA,IAAb;AAAA,MACC,eAAAH;AAAA,MACA,MAAAS;AAAA,MACA,cAAAC;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAR,EAACC,EAAa,SAAb,EAAqB,SAAO,IAAC,KAAKQ,GAChC,UAAAZ,GACH;AAAA,QACA,gBAAAG,EAACC,EAAa,QAAb,EACC,UAAA,gBAAAW;AAAA,UAACX,EAAa;AAAA,UAAb;AAAA,YACC,WAAWT,EAAA;AAAA,YACX,MAAMmB;AAAA,YACN,OAAAN;AAAA,YACA,YAAAC;AAAA,YACA,kBAAe;AAAA,YAEd,UAAA;AAAA,cAAAH;AAAA,cACD,gBAAAH,EAACC,EAAa,OAAb,EAAmB,WAAU,qBAAA,CAAqB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,EACrD,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAC,EAAQ,cAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tooth-scheme.agent-BlDyu-Gx.js","sources":["../../src/components/tooth-scheme/tooth-data.ts","../../src/components/tooth-scheme/tooth-scheme.tsx","../../src/components/tooth-scheme/tooth-scheme.agent.ts"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* ToothScheme — data model + lookup tables. */\n/* */\n/* FDI ISO 3950 is the canonical internal id. This module exposes */\n/* conversion tables to Universal (ADA) and a simplified Palmer-style */\n/* quadrant+position string so consuming UIs can toggle numbering. */\n/* */\n/* Why simplified Palmer? True Palmer notation uses quadrant bracket */\n/* glyphs (\"⌐\", \"¬\", \"L\", \"J\") that do not render reliably in every */\n/* browser/font combination. We emit a readable `UR3` / `LL6` form */\n/* instead and document the deviation in the component MDX. */\n/* ------------------------------------------------------------------ */\n\n/* ------------------------------------------------------------------ */\n/* Core types */\n/* ------------------------------------------------------------------ */\n\nexport type FdiId = string; // '11'–'48' permanent, '51'–'85' primary\n\nexport type Dentition = 'permanent' | 'primary' | 'mixed';\nexport type Numbering = 'fdi' | 'universal' | 'palmer';\nexport type ToothMode = 'interactive' | 'display';\nexport type Surface = 'mesial' | 'distal' | 'occlusal' | 'buccal' | 'lingual';\nexport type ToothCondition =\n | 'caries'\n | 'filled'\n | 'crowned'\n | 'missing'\n | 'implant'\n | 'rootCanal';\n\nexport interface ToothState {\n conditions: ToothCondition[];\n surfaces: Surface[];\n notes?: string;\n}\n\nexport type ToothChart = Record<FdiId, ToothState>;\n\nexport type Anatomy = 'incisor' | 'canine' | 'premolar' | 'molar';\nexport type Arch = 'upper' | 'lower';\nexport type Side = 'right' | 'left'; // patient's side (NOT viewer's)\nexport type Quadrant = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface ToothMeta {\n fdi: FdiId;\n /** '1'–'32' for permanent, 'A'–'T' for primary. */\n universal: string;\n /** Simplified Palmer quadrant-and-position string, e.g. 'UR3', 'LL6'. */\n palmer: string;\n quadrant: Quadrant;\n /** 1–8 (permanent) or 1–5 (primary), counted from the midline outward. */\n positionInQuadrant: number;\n anatomy: Anatomy;\n arch: Arch;\n side: Side;\n dentition: 'permanent' | 'primary';\n}\n\n/* ------------------------------------------------------------------ */\n/* Layout orders */\n/* */\n/* Layout reads from the viewer's perspective, top-left to bottom- */\n/* right. The chart is FIXED in clinical convention: the patient's */\n/* right side sits on the viewer's left, regardless of document `dir`. */\n/* ------------------------------------------------------------------ */\n\n/**\n * 32 permanent teeth in visual layout order:\n * upper row: 18..11 (patient upper-right, outermost → midline), then 21..28 (upper-left, midline → outermost)\n * lower row: 48..41 (patient lower-right, outermost → midline), then 31..38 (lower-left, midline → outermost)\n */\nexport const PERMANENT_TEETH: FdiId[] = [\n // upper\n '18', '17', '16', '15', '14', '13', '12', '11',\n '21', '22', '23', '24', '25', '26', '27', '28',\n // lower\n '48', '47', '46', '45', '44', '43', '42', '41',\n '31', '32', '33', '34', '35', '36', '37', '38',\n];\n\n/**\n * 20 primary teeth in visual layout order:\n * upper row: 55..51 (upper-right outermost → midline), then 61..65\n * lower row: 85..81, then 71..75\n */\nexport const PRIMARY_TEETH: FdiId[] = [\n // upper\n '55', '54', '53', '52', '51',\n '61', '62', '63', '64', '65',\n // lower\n '85', '84', '83', '82', '81',\n '71', '72', '73', '74', '75',\n];\n\n/* ------------------------------------------------------------------ */\n/* Anatomy by position */\n/* ------------------------------------------------------------------ */\n\nfunction permanentAnatomy(positionInQuadrant: number): Anatomy {\n if (positionInQuadrant <= 2) return 'incisor';\n if (positionInQuadrant === 3) return 'canine';\n if (positionInQuadrant <= 5) return 'premolar';\n return 'molar';\n}\n\nfunction primaryAnatomy(positionInQuadrant: number): Anatomy {\n if (positionInQuadrant <= 2) return 'incisor';\n if (positionInQuadrant === 3) return 'canine';\n // Primary dentition has no premolars — positions 4 & 5 are molars.\n return 'molar';\n}\n\n/* ------------------------------------------------------------------ */\n/* Palmer helper */\n/* ------------------------------------------------------------------ */\n\nfunction palmerCode(quadrant: Quadrant, position: number): string {\n // Permanent: 1=UR, 2=UL, 3=LL, 4=LR. Primary: 5=UR, 6=UL, 7=LL, 8=LR.\n // Mapping is identical within each dentition ring; the number is what\n // changes, so we fold 5→1, 6→2, 7→3, 8→4 to derive the quadrant code.\n const normalised = ((quadrant - 1) % 4) + 1;\n const code =\n normalised === 1 ? 'UR'\n : normalised === 2 ? 'UL'\n : normalised === 3 ? 'LL'\n : 'LR';\n return `${code}${position}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Universal (ADA) conversion */\n/* */\n/* Permanent — Universal numbers 1..32 run clockwise from the */\n/* patient's upper-right 3rd molar (FDI 18 = Universal 1), across */\n/* the upper arch (18→11 = 1→8, 21→28 = 9→16), then down the left */\n/* lower arch (38→31 = 17→24) and across the right lower (41→48 = */\n/* 25→32). */\n/* */\n/* Primary — Universal letters A..T walk the same path: */\n/* 55→51 = A→E, 61→65 = F→J, 75→71 = K→O, 81→85 = P→T. */\n/* ------------------------------------------------------------------ */\n\nfunction permanentUniversal(quadrant: Quadrant, position: number): string {\n switch (quadrant) {\n case 1:\n // 18→1, 17→2, …, 11→8\n return String(1 + (8 - position));\n case 2:\n // 21→9, 22→10, …, 28→16\n return String(8 + position);\n case 3:\n // 38→17, 37→18, …, 31→24\n return String(17 + (8 - position));\n case 4:\n // 41→25, 42→26, …, 48→32\n return String(24 + position);\n default:\n return '';\n }\n}\n\nfunction primaryUniversal(quadrant: Quadrant, position: number): string {\n const letters = 'ABCDEFGHIJKLMNOPQRST';\n let index = -1;\n switch (quadrant) {\n case 5:\n // 55→A, 54→B, 53→C, 52→D, 51→E\n index = 0 + (5 - position);\n break;\n case 6:\n // 61→F, 62→G, 63→H, 64→I, 65→J\n index = 5 + (position - 1);\n break;\n case 7:\n // 75→K, 74→L, 73→M, 72→N, 71→O\n index = 10 + (5 - position);\n break;\n case 8:\n // 81→P, 82→Q, 83→R, 84→S, 85→T\n index = 15 + (position - 1);\n break;\n default:\n index = -1;\n }\n return index >= 0 ? letters[index] : '';\n}\n\n/* ------------------------------------------------------------------ */\n/* Meta builder */\n/* ------------------------------------------------------------------ */\n\nfunction buildMeta(fdi: FdiId): ToothMeta {\n const quadrant = Number(fdi[0]) as Quadrant;\n const position = Number(fdi[1]);\n const isPrimary = quadrant >= 5;\n const anatomy = isPrimary ? primaryAnatomy(position) : permanentAnatomy(position);\n const arch: Arch = quadrant === 1 || quadrant === 2 || quadrant === 5 || quadrant === 6 ? 'upper' : 'lower';\n const side: Side = quadrant === 1 || quadrant === 4 || quadrant === 5 || quadrant === 8 ? 'right' : 'left';\n const universal = isPrimary ? primaryUniversal(quadrant, position) : permanentUniversal(quadrant, position);\n const palmer = palmerCode(quadrant, position);\n return {\n fdi,\n universal,\n palmer,\n quadrant,\n positionInQuadrant: position,\n anatomy,\n arch,\n side,\n dentition: isPrimary ? 'primary' : 'permanent',\n };\n}\n\nexport const FDI_TO_META: Record<FdiId, ToothMeta> = [\n ...PERMANENT_TEETH,\n ...PRIMARY_TEETH,\n].reduce<Record<FdiId, ToothMeta>>((acc, fdi) => {\n acc[fdi] = buildMeta(fdi);\n return acc;\n}, {});\n\nexport const FDI_TO_UNIVERSAL: Record<FdiId, string> = Object.fromEntries(\n Object.entries(FDI_TO_META).map(([fdi, meta]) => [fdi, meta.universal]),\n);\n\nexport const FDI_TO_PALMER: Record<FdiId, string> = Object.fromEntries(\n Object.entries(FDI_TO_META).map(([fdi, meta]) => [fdi, meta.palmer]),\n);\n\n/* ------------------------------------------------------------------ */\n/* Condition → token + pattern */\n/* */\n/* Every condition carries BOTH a colour AND a fill pattern so */\n/* colour-blind clinicians can distinguish states in the SVG (and in */\n/* black-and-white prints) — colour is never the sole channel. */\n/* ------------------------------------------------------------------ */\n\n/** CSS variable name (without the leading `var(...)`) that drives a condition's colour. */\nexport const CONDITION_TOKENS: Record<ToothCondition, string> = {\n caries: '--destructive',\n filled: '--info',\n crowned: '--warning',\n missing: '--muted-foreground',\n implant: '--accent',\n rootCanal: '--primary',\n};\n\n/**\n * Convenience: the `fill=\"var(--destructive)\"` string ready to paste onto\n * an SVG attribute. Kept in sync with `CONDITION_TOKENS`.\n */\nexport const CONDITION_COLORS: Record<ToothCondition, string> = {\n caries: 'var(--destructive)',\n filled: 'var(--info)',\n crowned: 'var(--warning)',\n missing: 'var(--muted-foreground)',\n implant: 'var(--accent)',\n rootCanal: 'var(--primary)',\n};\n\n/** SVG `<pattern>` ids declared in `<defs>`. `missing` renders an X glyph instead of a pattern. */\nexport const CONDITION_PATTERNS: Record<ToothCondition, string> = {\n caries: 'tooth-scheme-pattern-diagonal',\n filled: 'tooth-scheme-pattern-dots',\n crowned: 'tooth-scheme-pattern-crosshatch',\n missing: 'tooth-scheme-pattern-blank',\n implant: 'tooth-scheme-pattern-vertical',\n rootCanal: 'tooth-scheme-pattern-horizontal',\n};\n\n/* ------------------------------------------------------------------ */\n/* SVG shape paths — one per anatomy class */\n/* */\n/* Artistry is deliberately minimal for this first pass: each tooth is */\n/* a rounded rectangle with a small anatomy cue (cusp notch for */\n/* molars, pointed tip for canines, narrower body for incisors). The */\n/* shapes accept a `translate(x, y)` on the enclosing `<g>` and draw */\n/* within a 30×50 bounding box (22×50 for incisors). */\n/* ------------------------------------------------------------------ */\n\nexport interface ToothShape {\n /** Visual width inside the enclosing `<g>`. */\n width: number;\n /** Visual height inside the enclosing `<g>`. */\n height: number;\n /** SVG `d` attribute for the crown outline. */\n path: string;\n /** Optional inner decorative path (occlusal surface on molars, etc.). */\n innerPath?: string;\n}\n\nexport const TOOTH_SHAPES: Record<Anatomy, ToothShape> = {\n incisor: {\n width: 22,\n height: 50,\n // Narrow rounded rectangle — slightly wider at the occlusal/biting edge.\n path: 'M4 4 C4 2 6 0 8 0 L14 0 C16 0 18 2 18 4 L20 44 C20 47 18 50 14 50 L8 50 C4 50 2 47 2 44 Z',\n },\n canine: {\n width: 26,\n height: 50,\n // Pointed cusp at the bottom — canines present a single prominent cusp.\n path: 'M4 4 C4 2 6 0 8 0 L18 0 C20 0 22 2 22 4 L24 40 L13 50 L2 40 Z',\n },\n premolar: {\n width: 28,\n height: 50,\n // Wider rounded rectangle with a subtle horizontal notch hinting at two cusps.\n path: 'M4 4 C4 2 6 0 8 0 L20 0 C22 0 24 2 24 4 L26 44 C26 47 24 50 20 50 L8 50 C4 50 2 47 2 44 Z',\n innerPath: 'M6 34 L22 34',\n },\n molar: {\n width: 32,\n height: 50,\n // Widest rounded rectangle with a cross-notch hinting at the occlusal fissure pattern.\n path: 'M4 4 C4 2 6 0 8 0 L24 0 C26 0 28 2 28 4 L30 44 C30 47 28 50 24 50 L8 50 C4 50 2 47 2 44 Z',\n innerPath: 'M6 32 L26 32 M16 22 L16 42',\n },\n};\n\n/* ------------------------------------------------------------------ */\n/* Viewport layout helpers */\n/* ------------------------------------------------------------------ */\n\nexport const TOOTH_GAP = 4;\nexport const TOOTH_ROW_GAP = 24;\nexport const TOOTH_HIT_PAD = 4;\n\nexport interface PositionedTooth {\n fdi: FdiId;\n meta: ToothMeta;\n shape: ToothShape;\n x: number;\n y: number;\n}\n\n/**\n * Produce the positioned list of teeth for a given dentition. The layout\n * is a two-row grid reading viewer-left-to-right across the upper arch,\n * then viewer-left-to-right across the lower arch. Clinical convention\n * is preserved: the patient's right sits on the viewer's left in both\n * arches, regardless of document direction.\n */\nexport function layoutTeeth(dentition: Dentition): {\n teeth: PositionedTooth[];\n width: number;\n height: number;\n} {\n const ids: FdiId[] =\n dentition === 'primary'\n ? PRIMARY_TEETH\n : dentition === 'mixed'\n ? [...PERMANENT_TEETH, ...PRIMARY_TEETH]\n : PERMANENT_TEETH;\n\n // Upper / lower partition is inferred from meta.arch.\n const upper: FdiId[] = [];\n const lower: FdiId[] = [];\n for (const id of ids) {\n const meta = FDI_TO_META[id];\n if (meta.arch === 'upper') upper.push(id);\n else lower.push(id);\n }\n\n const rowHeight = 50;\n const maxPerRow = Math.max(upper.length, lower.length);\n\n // Centre each row on the widest one.\n function positionRow(row: FdiId[], yOffset: number): PositionedTooth[] {\n const rowWidth = row.reduce((acc, id) => {\n const shape = TOOTH_SHAPES[FDI_TO_META[id].anatomy];\n return acc + shape.width + TOOTH_GAP;\n }, 0);\n const fullRowWidth = row.length > 0 ? rowWidth - TOOTH_GAP : 0;\n\n const maxRowWidth = (function computeMax(): number {\n const bigger = upper.length >= lower.length ? upper : lower;\n const biggerWidth = bigger.reduce((acc, id) => {\n const shape = TOOTH_SHAPES[FDI_TO_META[id].anatomy];\n return acc + shape.width + TOOTH_GAP;\n }, 0);\n return biggerWidth - TOOTH_GAP;\n })();\n\n const startX = (maxRowWidth - fullRowWidth) / 2;\n let cursor = startX;\n return row.map((id) => {\n const meta = FDI_TO_META[id];\n const shape = TOOTH_SHAPES[meta.anatomy];\n const tooth: PositionedTooth = {\n fdi: id,\n meta,\n shape,\n x: cursor,\n y: yOffset,\n };\n cursor += shape.width + TOOTH_GAP;\n return tooth;\n });\n }\n\n const upperRow = positionRow(upper, 0);\n const lowerRow = positionRow(lower, rowHeight + TOOTH_ROW_GAP);\n\n // Compute the true content width / height for the viewBox.\n const maxRowWidth = Math.max(\n upperRow.reduce((acc, t) => Math.max(acc, t.x + t.shape.width), 0),\n lowerRow.reduce((acc, t) => Math.max(acc, t.x + t.shape.width), 0),\n );\n\n // Fall back to a reasonable default if a row is empty.\n const width = maxRowWidth > 0 ? maxRowWidth : maxPerRow * 30;\n const height = rowHeight * 2 + TOOTH_ROW_GAP;\n\n return { teeth: [...upperRow, ...lowerRow], width, height };\n}\n\n/* ------------------------------------------------------------------ */\n/* Labels by numbering */\n/* ------------------------------------------------------------------ */\n\nexport function labelFor(id: FdiId, numbering: Numbering): string {\n switch (numbering) {\n case 'universal':\n return FDI_TO_UNIVERSAL[id] ?? id;\n case 'palmer':\n return FDI_TO_PALMER[id] ?? id;\n case 'fdi':\n default:\n return id;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Chart helpers */\n/* ------------------------------------------------------------------ */\n\nexport function emptyChart(): ToothChart {\n return {};\n}\n\nexport function chartFromConditions(\n conditions: Partial<Record<FdiId, ToothCondition[]>>,\n): ToothChart {\n const chart: ToothChart = {};\n for (const [id, list] of Object.entries(conditions)) {\n if (!list || list.length === 0) continue;\n chart[id] = { conditions: list, surfaces: [] };\n }\n return chart;\n}\n","/* ------------------------------------------------------------------ */\n/* ToothScheme — in-house SVG dental chart. */\n/* */\n/* - The ONLY Domain-Specific component without a third-party engine. */\n/* No DentalChart.js, no toothchart, no canvas — `src/docs/08-third- */\n/* party.mdx §Dental chart` flags every candidate as rejected (jQuery */\n/* dependency, abandoned, poor a11y), so we draw SVG ourselves. */\n/* */\n/* - Colour-not-alone: each `ToothCondition` has a translated label, a */\n/* token colour AND a `<pattern>` fill. Pattern ids live in */\n/* `CONDITION_PATTERNS`; the six `<pattern>` nodes live once per */\n/* mounted chart inside a single `<defs>` block. */\n/* */\n/* - Chart orientation is FIXED to clinical convention: the patient's */\n/* right side sits on the viewer's left in both upper and lower */\n/* arches, regardless of document `dir`. RTL mirrors the surrounding */\n/* chrome (labels, controls) but NEVER the anatomy — a mirrored */\n/* chart would invert every diagnosis recorded against it. */\n/* */\n/* TODO: */\n/* - SVG artistry is deliberately minimal (rounded-rect crowns with */\n/* anatomy cues). A future pass should replace each `<path>` with */\n/* a clinically-correct crown outline from the dental design team. */\n/* - Surface selection sub-control (mesial / distal / occlusal / …) */\n/* is stubbed via the data model only; the interactive surface */\n/* picker will land in a follow-up. */\n/* - Condition editing is a single-step cycle on Space/Enter — good */\n/* enough for demos and stories; a richer picker belongs in a */\n/* popover and will reuse Radix Popover when it's wired in. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n} from 'react';\nimport * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n CONDITION_COLORS,\n CONDITION_PATTERNS,\n CONDITION_TOKENS,\n FDI_TO_META,\n PERMANENT_TEETH,\n PRIMARY_TEETH,\n TOOTH_HIT_PAD,\n chartFromConditions,\n labelFor,\n layoutTeeth,\n type Dentition,\n type FdiId,\n type Numbering,\n type ToothChart,\n type ToothCondition,\n type ToothMode,\n type ToothState,\n} from './tooth-data';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface ToothSchemeProps {\n /** Which teeth to render. Default `'permanent'`. */\n dentition?: Dentition;\n /** Numbering system shown on each tooth label. Default `'fdi'`. */\n numbering?: Numbering;\n /** `'interactive'` enables selection + keyboard nav; `'display'` is read-only. Default `'interactive'`. */\n mode?: ToothMode;\n /** Controlled chart state — the full `Record<FdiId, ToothState>`. */\n value?: ToothChart;\n /** Uncontrolled initial chart state. */\n defaultValue?: ToothChart;\n /** Fired whenever the chart changes — always emits FDI ids. */\n onChange?: (next: ToothChart) => void;\n /** Fired when a tooth is focused or clicked. */\n onSelect?: (toothId: FdiId) => void;\n /** Shortcut for pre-populating conditions: `{ '16': ['caries'], '36': ['filled'] }`. */\n conditions?: Partial<Record<FdiId, ToothCondition[]>>;\n /** Accessible label override for the chart region. */\n ariaLabel?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface ToothSchemeHandle {\n /** Programmatically focus a tooth by FDI id. */\n focusTooth: (id: FdiId) => void;\n /** Read the current chart state. */\n getChart: () => ToothChart;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:tooth-scheme-alfadocs',\n 'ds:inline-flex ds:flex-col',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\nconst svgVariants = cva(\n [\n 'ds:block ds:max-w-full ds:h-auto',\n 'ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\n// `group` here is load-bearing — the focus-ring <rect> below uses\n// `group-focus-visible:opacity-100` to appear when the parent <g> takes\n// focus. Without this class the selector never fires and keyboard users\n// see no focus indicator (a11y-critical-fixes.mdx).\nconst toothGroupVariants = cva(\n [\n 'ds:group ds:cursor-pointer',\n 'ds:focus:outline-none',\n 'ds:transition-[fill,stroke,opacity] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\nconst legendVariants = cva(\n [\n 'ds:flex ds:flex-wrap ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'type-meta ds:text-[var(--muted-foreground)]',\n ].join(' '),\n);\n\nconst legendItemVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:gap-[var(--spacing-xs)]',\n ].join(' '),\n);\n\nconst legendSwatchVariants = cva(\n [\n 'ds:inline-block',\n 'ds:inline-size-[0.75rem] ds:block-size-[0.75rem]',\n 'ds:rounded-[var(--radius-xs)]',\n 'ds:border ds:border-[color:var(--border)]',\n ].join(' '),\n);\n\nconst liveRegionVariants = cva(\n [\n 'ds:sr-only',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction isControlled(props: Pick<ToothSchemeProps, 'value'>): boolean {\n return props.value !== undefined;\n}\n\nfunction emptyState(): ToothState {\n return { conditions: [], surfaces: [] };\n}\n\nfunction cycleCondition(current: ToothCondition[] | undefined): ToothCondition[] {\n if (!current || current.length === 0) return ['caries'];\n return [];\n}\n\nfunction sanitiseIdSuffix(raw: string): string {\n return raw.replace(/[^a-zA-Z0-9-_]/g, '');\n}\n\n/* ------------------------------------------------------------------ */\n/* Patterns <defs> */\n/* ------------------------------------------------------------------ */\n\ninterface PatternDefsProps {\n idPrefix: string;\n}\n\nfunction PatternDefs({ idPrefix }: PatternDefsProps): JSX.Element {\n // We namespace pattern ids per-instance so multiple ToothScheme charts\n // on a page don't collide. References inside the component use\n // `${idPrefix}-${CONDITION_PATTERNS[condition]}`.\n const pid = (id: string): string => `${idPrefix}-${id}`;\n return (\n <defs>\n <pattern\n id={pid(CONDITION_PATTERNS.caries)}\n patternUnits=\"userSpaceOnUse\"\n width=\"6\"\n height=\"6\"\n patternTransform=\"rotate(45)\"\n >\n <line\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"6\"\n stroke={CONDITION_COLORS.caries}\n strokeWidth=\"2\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.filled)}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n >\n <circle cx=\"2.5\" cy=\"2.5\" r=\"1\" fill={CONDITION_COLORS.filled} />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.crowned)}\n patternUnits=\"userSpaceOnUse\"\n width=\"6\"\n height=\"6\"\n >\n <path\n d=\"M0 0 L6 6 M6 0 L0 6\"\n stroke={CONDITION_COLORS.crowned}\n strokeWidth=\"1\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.implant)}\n patternUnits=\"userSpaceOnUse\"\n width=\"4\"\n height=\"4\"\n >\n <line\n x1=\"1\"\n y1=\"0\"\n x2=\"1\"\n y2=\"4\"\n stroke={CONDITION_COLORS.implant}\n strokeWidth=\"1\"\n />\n </pattern>\n <pattern\n id={pid(CONDITION_PATTERNS.rootCanal)}\n patternUnits=\"userSpaceOnUse\"\n width=\"4\"\n height=\"4\"\n >\n <line\n x1=\"0\"\n y1=\"1\"\n x2=\"4\"\n y2=\"1\"\n stroke={CONDITION_COLORS.rootCanal}\n strokeWidth=\"1\"\n />\n </pattern>\n {/* `missing` does not need a pattern — the renderer draws an X glyph. */}\n </defs>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Legend */\n/* ------------------------------------------------------------------ */\n\nconst ALL_CONDITIONS: ToothCondition[] = [\n 'caries',\n 'filled',\n 'crowned',\n 'missing',\n 'implant',\n 'rootCanal',\n];\n\ninterface LegendProps {\n idPrefix: string;\n}\n\nfunction Legend({ idPrefix: _idPrefix }: LegendProps): JSX.Element {\n const { t } = useTranslation();\n return (\n <ul\n className={legendVariants()}\n data-testid=\"tooth-scheme-legend\"\n aria-label={t('toothScheme.legendLabel')}\n >\n {ALL_CONDITIONS.map((condition) => (\n <li key={condition} className={legendItemVariants()}>\n <span\n className={legendSwatchVariants()}\n aria-hidden=\"true\"\n data-condition={condition}\n data-token={CONDITION_TOKENS[condition]}\n data-testid={`tooth-scheme-legend-swatch-${condition}`}\n />\n <span>{t(`toothScheme.condition.${condition}`)}</span>\n </li>\n ))}\n </ul>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const ToothScheme = forwardRef<ToothSchemeHandle, ToothSchemeProps>(\n (\n {\n dentition = 'permanent',\n numbering = 'fdi',\n mode = 'interactive',\n value,\n defaultValue,\n onChange,\n onSelect,\n conditions,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n\n const rawId = useId();\n const idPrefix = useMemo(\n () => `ts-${sanitiseIdSuffix(rawId)}`,\n [rawId],\n );\n\n // Chart state — controlled / uncontrolled.\n const [internalChart, setInternalChart] = useState<ToothChart>(() => {\n if (value !== undefined) return value;\n if (defaultValue !== undefined) return defaultValue;\n if (conditions) return chartFromConditions(conditions);\n return {};\n });\n\n const chart: ToothChart = isControlled({ value }) ? (value as ToothChart) : internalChart;\n\n // Keep uncontrolled chart in sync when `conditions` shortcut updates.\n useEffect(() => {\n if (isControlled({ value })) return;\n if (conditions === undefined) return;\n setInternalChart(chartFromConditions(conditions));\n // Intentionally depend on a stable key — swapping the entire prop\n // snapshot is the consumer's signal to reset.\n }, [conditions, value]);\n\n // Layout.\n const layout = useMemo(() => layoutTeeth(dentition), [dentition]);\n const visibleIds = useMemo(\n () => layout.teeth.map((t) => t.fdi),\n [layout],\n );\n\n // Roving tabindex: which tooth owns `tabindex=\"0\"`.\n const firstId: FdiId | undefined = visibleIds[0];\n const [focusedId, setFocusedId] = useState<FdiId | undefined>(firstId);\n useEffect(() => {\n if (!focusedId || !visibleIds.includes(focusedId)) {\n setFocusedId(firstId);\n }\n }, [firstId, focusedId, visibleIds]);\n\n // Live-region announcement text.\n const [announcement, setAnnouncement] = useState<string>('');\n\n const svgRef = useRef<SVGSVGElement>(null);\n\n const commitChart = useCallback(\n (next: ToothChart) => {\n if (!isControlled({ value })) {\n setInternalChart(next);\n }\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const focusToothById = useCallback((id: FdiId) => {\n const svg = svgRef.current;\n if (!svg) return;\n const node = svg.querySelector<SVGGElement>(`g[data-fdi=\"${id}\"]`);\n if (node) {\n node.focus();\n setFocusedId(id);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n (): ToothSchemeHandle => ({\n focusTooth: (id: FdiId) => {\n focusToothById(id);\n },\n getChart: () => chart,\n }),\n [chart, focusToothById],\n );\n\n /* ------------------------------------------------------------- */\n /* Keyboard navigation */\n /* ------------------------------------------------------------- */\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<SVGGElement>, id: FdiId) => {\n if (mode !== 'interactive') return;\n const meta = FDI_TO_META[id];\n if (!meta) return;\n\n // Resolve the ordered list of visible ids for Left/Right.\n const order = visibleIds;\n const currentIndex = order.indexOf(id);\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const nextIndex = Math.min(order.length - 1, currentIndex + 1);\n focusToothById(order[nextIndex]);\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const nextIndex = Math.max(0, currentIndex - 1);\n focusToothById(order[nextIndex]);\n return;\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n event.preventDefault();\n // Map to the opposing arch, same FDI position where possible.\n // Permanent: 1 ↔ 4, 2 ↔ 3. Primary: 5 ↔ 8, 6 ↔ 7.\n const quadrantMap: Record<number, number> = {\n 1: 4,\n 4: 1,\n 2: 3,\n 3: 2,\n 5: 8,\n 8: 5,\n 6: 7,\n 7: 6,\n };\n const targetQuadrant = quadrantMap[meta.quadrant];\n if (!targetQuadrant) return;\n const candidate = `${targetQuadrant}${meta.positionInQuadrant}`;\n if (order.includes(candidate)) {\n focusToothById(candidate);\n }\n return;\n }\n case 'Home': {\n event.preventDefault();\n // First tooth in the same quadrant (visible).\n const inQuadrant = order.filter(\n (other) => FDI_TO_META[other].quadrant === meta.quadrant,\n );\n if (inQuadrant.length > 0) {\n focusToothById(inQuadrant[0]);\n }\n return;\n }\n case 'End': {\n event.preventDefault();\n const inQuadrant = order.filter(\n (other) => FDI_TO_META[other].quadrant === meta.quadrant,\n );\n if (inQuadrant.length > 0) {\n focusToothById(inQuadrant[inQuadrant.length - 1]);\n }\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n const prev = chart[id]?.conditions;\n const nextConditions = cycleCondition(prev);\n const next: ToothChart = { ...chart };\n if (nextConditions.length === 0) {\n delete next[id];\n setAnnouncement(t('toothScheme.deselected', { id }));\n } else {\n next[id] = {\n ...(chart[id] ?? emptyState()),\n conditions: nextConditions,\n };\n setAnnouncement(\n t('toothScheme.selected', {\n id,\n conditions: nextConditions\n .map((c) => t(`toothScheme.condition.${c}`))\n .join(', '),\n }),\n );\n }\n commitChart(next);\n onSelect?.(id);\n return;\n }\n default:\n return;\n }\n },\n [chart, commitChart, focusToothById, mode, onSelect, t, visibleIds],\n );\n\n const handleClick = useCallback(\n (id: FdiId) => {\n if (mode !== 'interactive') return;\n setFocusedId(id);\n const prev = chart[id]?.conditions;\n const nextConditions = cycleCondition(prev);\n const next: ToothChart = { ...chart };\n if (nextConditions.length === 0) {\n delete next[id];\n setAnnouncement(t('toothScheme.deselected', { id }));\n } else {\n next[id] = {\n ...(chart[id] ?? emptyState()),\n conditions: nextConditions,\n };\n setAnnouncement(\n t('toothScheme.selected', {\n id,\n conditions: nextConditions\n .map((c) => t(`toothScheme.condition.${c}`))\n .join(', '),\n }),\n );\n }\n commitChart(next);\n onSelect?.(id);\n },\n [chart, commitChart, mode, onSelect, t],\n );\n\n /* ------------------------------------------------------------- */\n /* Rendering */\n /* ------------------------------------------------------------- */\n\n const viewBoxWidth = layout.width + 4; // small padding for stroke\n const viewBoxHeight = layout.height + 4;\n\n const regionLabel = ariaLabel ?? t('toothScheme.ariaLabel');\n\n return (\n <RadixTooltip.Provider delayDuration={200}>\n <div\n role=\"region\"\n aria-label={regionLabel}\n className={[rootVariants(), className].filter(Boolean).join(' ')}\n data-component=\"tooth-scheme\"\n data-testid=\"tooth-scheme-root\"\n data-dentition={dentition}\n data-numbering={numbering}\n data-mode={mode}\n >\n <svg\n ref={svgRef}\n viewBox={`0 0 ${viewBoxWidth} ${viewBoxHeight}`}\n className={svgVariants()}\n role=\"group\"\n aria-label={regionLabel}\n data-testid=\"tooth-scheme-svg\"\n focusable=\"false\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <PatternDefs idPrefix={idPrefix} />\n\n {layout.teeth.map((tooth) => {\n const state = chart[tooth.fdi];\n const primaryCondition: ToothCondition | undefined =\n state?.conditions?.[0];\n\n const anatomyLabel = t(\n `toothScheme.anatomy.${tooth.meta.anatomy}`,\n );\n const conditionSuffix = primaryCondition\n ? `, ${t(`toothScheme.condition.${primaryCondition}`)}`\n : '';\n const label = t('toothScheme.toothLabel', {\n id: labelFor(tooth.fdi, numbering),\n anatomy: anatomyLabel,\n conditionSuffix,\n });\n\n const tabIndex =\n mode === 'interactive'\n ? tooth.fdi === focusedId\n ? 0\n : -1\n : undefined;\n\n const fillColour: string =\n primaryCondition && primaryCondition !== 'missing'\n ? `url(#${idPrefix}-${CONDITION_PATTERNS[primaryCondition]})`\n : 'var(--muted)';\n\n const strokeColour: string =\n primaryCondition && primaryCondition !== 'missing'\n ? CONDITION_COLORS[primaryCondition]\n : 'var(--border)';\n\n const tooltipContent = primaryCondition\n ? `${anatomyLabel} · ${t(`toothScheme.condition.${primaryCondition}`)}`\n : anatomyLabel;\n\n const labelText = labelFor(tooth.fdi, numbering);\n\n return (\n <RadixTooltip.Root key={tooth.fdi}>\n <RadixTooltip.Trigger asChild>\n <g\n data-fdi={tooth.fdi}\n data-anatomy={tooth.meta.anatomy}\n data-arch={tooth.meta.arch}\n data-side={tooth.meta.side}\n data-quadrant={tooth.meta.quadrant}\n data-condition={primaryCondition ?? 'none'}\n data-testid={`tooth-${tooth.fdi}`}\n transform={`translate(${tooth.x}, ${tooth.y})`}\n tabIndex={tabIndex}\n role={mode === 'interactive' ? 'button' : undefined}\n aria-label={label}\n aria-pressed={\n mode === 'interactive'\n ? (primaryCondition !== undefined)\n : undefined\n }\n className={toothGroupVariants()}\n onClick={\n mode === 'interactive'\n ? () => handleClick(tooth.fdi)\n : undefined\n }\n onFocus={() => setFocusedId(tooth.fdi)}\n onKeyDown={(event) => handleKeyDown(event, tooth.fdi)}\n >\n {/* Invisible ≥44px hit target (WCAG 2.5.5). */}\n <rect\n x={-TOOTH_HIT_PAD}\n y={-TOOTH_HIT_PAD}\n width={tooth.shape.width + TOOTH_HIT_PAD * 2}\n height={tooth.shape.height + TOOTH_HIT_PAD * 2}\n fill=\"transparent\"\n />\n {/* Crown outline. */}\n <path\n d={tooth.shape.path}\n fill={fillColour}\n stroke={strokeColour}\n strokeWidth=\"1.5\"\n vectorEffect=\"non-scaling-stroke\"\n />\n {tooth.shape.innerPath ? (\n <path\n d={tooth.shape.innerPath}\n fill=\"none\"\n stroke=\"var(--muted-foreground)\"\n strokeWidth=\"0.75\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ) : null}\n {/* Focus ring — drawn as a rect so it tracks the hit\n area. `group` on the parent <g> makes this\n group-focus-visible selector fire when a keyboard\n user focuses the tooth. In forced-colors mode the\n ring falls back to `CanvasText` so it stays visible\n when `var(--ring)` is remapped. */}\n <rect\n x={-TOOTH_HIT_PAD}\n y={-TOOTH_HIT_PAD}\n width={tooth.shape.width + TOOTH_HIT_PAD * 2}\n height={tooth.shape.height + TOOTH_HIT_PAD * 2}\n fill=\"none\"\n stroke=\"var(--ring)\"\n strokeWidth=\"var(--focus-ring-width)\"\n className={[\n 'ds:opacity-0',\n 'ds:group-focus-visible:opacity-100',\n 'ds:forced-colors:stroke-[CanvasText]',\n ].join(' ')}\n data-testid={`tooth-${tooth.fdi}-focus-ring`}\n pointerEvents=\"none\"\n rx=\"4\"\n />\n {/* Missing-tooth X glyph. */}\n {primaryCondition === 'missing' ? (\n <path\n d={`M2 2 L${tooth.shape.width - 2} ${tooth.shape.height - 2} M${tooth.shape.width - 2} 2 L2 ${tooth.shape.height - 2}`}\n stroke={CONDITION_COLORS.missing}\n strokeWidth=\"2\"\n fill=\"none\"\n />\n ) : null}\n {/* Tooth number label — sits below (upper arch) or above (lower) the crown. */}\n <text\n x={tooth.shape.width / 2}\n y={\n tooth.meta.arch === 'upper'\n ? tooth.shape.height + 12\n : -4\n }\n textAnchor=\"middle\"\n fontSize=\"10\"\n fill=\"var(--muted-foreground)\"\n className=\"ds:select-none\"\n aria-hidden=\"true\"\n >\n {labelText}\n </text>\n </g>\n </RadixTooltip.Trigger>\n <RadixTooltip.Portal>\n <RadixTooltip.Content\n side=\"top\"\n sideOffset={6}\n className=\"ds:z-[var(--z-tooltip)] ds:rounded-[var(--radius-sm)] ds:bg-[var(--foreground)] ds:text-[var(--background)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[calc(var(--spacing-xs)/2)] ds:pb-[calc(var(--spacing-xs)/2)] ds:text-[length:var(--font-size-xs)]\"\n >\n {tooltipContent}\n <RadixTooltip.Arrow className=\"ds:fill-[var(--foreground)]\" />\n </RadixTooltip.Content>\n </RadixTooltip.Portal>\n </RadixTooltip.Root>\n );\n })}\n </svg>\n\n <Legend idPrefix={idPrefix} />\n\n <div\n className={liveRegionVariants()}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-testid=\"tooth-scheme-live\"\n >\n {announcement}\n </div>\n </div>\n </RadixTooltip.Provider>\n );\n },\n);\n\nToothScheme.displayName = 'ToothScheme';\n\n/* ------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------ */\n\nexport {\n rootVariants as toothSchemeVariants,\n PERMANENT_TEETH,\n PRIMARY_TEETH,\n};\nexport type {\n Dentition,\n FdiId,\n Numbering,\n ToothChart,\n ToothCondition,\n ToothMode,\n ToothState,\n} from './tooth-data';\n","import type { AgentAdapter } from '../../agent/types';\nimport type { ToothSchemeHandle } from './tooth-scheme';\n\nexport const toothSchemeAgent: AgentAdapter<ToothSchemeHandle> = {\n id: 'tooth-scheme',\n capabilities: ['pick'],\n state: {\n chart: {\n type: 'object',\n description: 'Current dental chart state — tooth conditions keyed by FDI id.',\n read: (handle) => handle.getChart(),\n },\n },\n actions: {\n focus_tooth: {\n safety: 'read',\n argsType: '{ id: FdiId }',\n description: 'Move focus to a specific tooth by FDI id.',\n invoke: (handle, args: { id: Parameters<ToothSchemeHandle['focusTooth']>[0] }) => {\n handle.focusTooth(args.id);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'tooth-scheme' },\n item: {\n attr: 'data-fdi',\n description: 'Each rendered tooth `<g>` carries its FDI id as `data-fdi`. Tests still use `data-testid=\"tooth-<fdi>\"` separately.',\n },\n },\n};\n"],"names":["PERMANENT_TEETH","PRIMARY_TEETH","permanentAnatomy","positionInQuadrant","primaryAnatomy","palmerCode","quadrant","position","normalised","permanentUniversal","primaryUniversal","letters","index","buildMeta","fdi","isPrimary","anatomy","arch","side","universal","palmer","FDI_TO_META","acc","FDI_TO_UNIVERSAL","meta","FDI_TO_PALMER","CONDITION_TOKENS","CONDITION_COLORS","CONDITION_PATTERNS","TOOTH_SHAPES","TOOTH_GAP","TOOTH_ROW_GAP","TOOTH_HIT_PAD","layoutTeeth","dentition","ids","upper","lower","id","rowHeight","maxPerRow","positionRow","row","yOffset","rowWidth","shape","fullRowWidth","cursor","tooth","upperRow","lowerRow","maxRowWidth","t","width","height","labelFor","numbering","emptyChart","chartFromConditions","conditions","chart","list","rootVariants","cva","svgVariants","toothGroupVariants","legendVariants","legendItemVariants","legendSwatchVariants","liveRegionVariants","isControlled","props","emptyState","cycleCondition","current","sanitiseIdSuffix","raw","PatternDefs","idPrefix","pid","jsx","ALL_CONDITIONS","Legend","_idPrefix","useTranslation","condition","ToothScheme","forwardRef","mode","value","defaultValue","onChange","onSelect","ariaLabel","className","ref","rawId","useId","useMemo","internalChart","setInternalChart","useState","useEffect","layout","visibleIds","firstId","focusedId","setFocusedId","announcement","setAnnouncement","svgRef","useRef","commitChart","useCallback","next","focusToothById","svg","node","useImperativeHandle","handleKeyDown","event","order","currentIndex","nextIndex","targetQuadrant","candidate","inQuadrant","other","prev","_a","nextConditions","c","handleClick","viewBoxWidth","viewBoxHeight","regionLabel","RadixTooltip","jsxs","state","primaryCondition","anatomyLabel","conditionSuffix","label","tabIndex","fillColour","strokeColour","tooltipContent","labelText","toothSchemeAgent","handle","args"],"mappings":"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"}
|