@alfadocs/ui-kit 0.0.20 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/accordion-BJD1aM67.js +117 -0
- package/dist/_chunks/accordion-BJD1aM67.js.map +1 -0
- package/dist/_chunks/agenda-card-Bld47Eul.js +130 -0
- package/dist/_chunks/agenda-card-Bld47Eul.js.map +1 -0
- package/dist/_chunks/agenda-tray-D86cNIJ0.js +119 -0
- package/dist/_chunks/agenda-tray-D86cNIJ0.js.map +1 -0
- package/dist/_chunks/ai-prompt-input-CdYwt2VP.js +379 -0
- package/dist/_chunks/ai-prompt-input-CdYwt2VP.js.map +1 -0
- package/dist/_chunks/{alert-C5ud6CfE.js → alert-ETrF7Q8J.js} +51 -51
- package/dist/_chunks/alert-ETrF7Q8J.js.map +1 -0
- package/dist/_chunks/apexcharts-theme-BkSShpEy.js +48 -0
- package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +1 -0
- package/dist/_chunks/{app-frame-CmIUp9BD.js → app-frame-uq2Gy0vs.js} +37 -37
- package/dist/_chunks/app-frame-uq2Gy0vs.js.map +1 -0
- package/dist/_chunks/aspect-ratio-BqU4itGW.js +56 -0
- package/dist/_chunks/aspect-ratio-BqU4itGW.js.map +1 -0
- package/dist/_chunks/{audio-recorder-GkGNtW2X.js → audio-recorder-D2UEBF9B.js} +98 -98
- package/dist/_chunks/audio-recorder-D2UEBF9B.js.map +1 -0
- package/dist/_chunks/{audio-visualiser-CIO3yy23.js → audio-visualiser-B4u4goV5.js} +46 -46
- package/dist/_chunks/audio-visualiser-B4u4goV5.js.map +1 -0
- package/dist/_chunks/{autocomplete.agent-kb0nmr6F.js → autocomplete.agent-Bi6CiRKa.js} +111 -111
- package/dist/_chunks/autocomplete.agent-Bi6CiRKa.js.map +1 -0
- package/dist/_chunks/{avatar-BsV7vRA6.js → avatar-BAhxbDEu.js} +38 -38
- package/dist/_chunks/avatar-BAhxbDEu.js.map +1 -0
- package/dist/_chunks/badge-zDghajh8.js +104 -0
- package/dist/_chunks/badge-zDghajh8.js.map +1 -0
- package/dist/_chunks/{balance-cell-renderer-BQwN51rT.js → balance-cell-renderer-BGyvZWjB.js} +123 -124
- package/dist/_chunks/balance-cell-renderer-BGyvZWjB.js.map +1 -0
- package/dist/_chunks/{breadcrumb-DnO6eHSS.js → breadcrumb-pdUacgm1.js} +40 -40
- package/dist/_chunks/breadcrumb-pdUacgm1.js.map +1 -0
- package/dist/_chunks/button-DmiGFnNA.js +119 -0
- package/dist/_chunks/button-DmiGFnNA.js.map +1 -0
- package/dist/_chunks/{button-group-CI7LFxt3.js → button-group-BtTHSyU0.js} +24 -24
- package/dist/_chunks/button-group-BtTHSyU0.js.map +1 -0
- package/dist/_chunks/{calendar-BIXVzhkL.js → calendar-BkDeDTaX.js} +333 -290
- package/dist/_chunks/calendar-BkDeDTaX.js.map +1 -0
- package/dist/_chunks/card-DeItIBcV.js +158 -0
- package/dist/_chunks/card-DeItIBcV.js.map +1 -0
- package/dist/_chunks/{chart.agent-DkmVXNsI.js → chart.agent-BdS-_8MO.js} +66 -64
- package/dist/_chunks/chart.agent-BdS-_8MO.js.map +1 -0
- package/dist/_chunks/chat-container-Co8HpB64.js +174 -0
- package/dist/_chunks/chat-container-Co8HpB64.js.map +1 -0
- package/dist/_chunks/{chat-input-aphxDjZL.js → chat-input-3rstZhHR.js} +57 -57
- package/dist/_chunks/chat-input-3rstZhHR.js.map +1 -0
- package/dist/_chunks/{chat-message-CdJSD18D.js → chat-message-dDMVSYBs.js} +66 -66
- package/dist/_chunks/chat-message-dDMVSYBs.js.map +1 -0
- package/dist/_chunks/checkbox-DMzgtnqw.js +116 -0
- package/dist/_chunks/checkbox-DMzgtnqw.js.map +1 -0
- package/dist/_chunks/{checkbox-group-D1aqVI0-.js → checkbox-group-DBnIBRT_.js} +34 -34
- package/dist/_chunks/checkbox-group-DBnIBRT_.js.map +1 -0
- package/dist/_chunks/{collapsible-jBFm7Ah8.js → collapsible-DPGQnHZh.js} +16 -16
- package/dist/_chunks/collapsible-DPGQnHZh.js.map +1 -0
- package/dist/_chunks/{color-picker-CiotzQJF.js → color-picker-OKKF3Dww.js} +158 -158
- package/dist/_chunks/color-picker-OKKF3Dww.js.map +1 -0
- package/dist/_chunks/{combobox.agent-B6RwDSct.js → combobox.agent-CfeB-IZ1.js} +107 -107
- package/dist/_chunks/combobox.agent-CfeB-IZ1.js.map +1 -0
- package/dist/_chunks/{command-palette.agent-B87_OkmC.js → command-palette.agent-XLfSGHCL.js} +27 -27
- package/dist/_chunks/command-palette.agent-XLfSGHCL.js.map +1 -0
- package/dist/_chunks/{date-picker-CdPuI3dK.js → date-picker-DXx8oSJb.js} +5 -5
- package/dist/_chunks/{date-picker-CdPuI3dK.js.map → date-picker-DXx8oSJb.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-DfK4cjln.js → date-range-picker-C3CbY__H.js} +29 -29
- package/dist/_chunks/{date-range-picker-DfK4cjln.js.map → date-range-picker-C3CbY__H.js.map} +1 -1
- package/dist/_chunks/{date-time-picker-CX_FMsLG.js → date-time-picker-Bn3FPeAc.js} +58 -58
- package/dist/_chunks/date-time-picker-Bn3FPeAc.js.map +1 -0
- package/dist/_chunks/description-list-B1CL3RTG.js +187 -0
- package/dist/_chunks/description-list-B1CL3RTG.js.map +1 -0
- package/dist/_chunks/{dialog.agent-B276rAQF.js → dialog.agent-D9WeIWi2.js} +39 -39
- package/dist/_chunks/dialog.agent-D9WeIWi2.js.map +1 -0
- package/dist/_chunks/dropdown-menu-BnVUeVG3.js +210 -0
- package/dist/_chunks/dropdown-menu-BnVUeVG3.js.map +1 -0
- package/dist/_chunks/{empty-state-DiG7vYBM.js → empty-state-DV96gCnp.js} +37 -37
- package/dist/_chunks/empty-state-DV96gCnp.js.map +1 -0
- package/dist/_chunks/{file-upload.agent-BMow5yDY.js → file-upload.agent-DYFnqdxw.js} +185 -185
- package/dist/_chunks/file-upload.agent-DYFnqdxw.js.map +1 -0
- package/dist/_chunks/{flag-ChP784EM.js → flag-C3BUEwHH.js} +14 -14
- package/dist/_chunks/{flag-ChP784EM.js.map → flag-C3BUEwHH.js.map} +1 -1
- package/dist/_chunks/floating-action-button-RigP2E7o.js +95 -0
- package/dist/_chunks/floating-action-button-RigP2E7o.js.map +1 -0
- package/dist/_chunks/form-field-DI5LY5aG.js +121 -0
- package/dist/_chunks/form-field-DI5LY5aG.js.map +1 -0
- package/dist/_chunks/freemium-paywall-D0GiUFOe.js +197 -0
- package/dist/_chunks/freemium-paywall-D0GiUFOe.js.map +1 -0
- package/dist/_chunks/{header-BpKaSL_v.js → header-CW2oRd5H.js} +111 -111
- package/dist/_chunks/header-CW2oRd5H.js.map +1 -0
- package/dist/_chunks/icon-button-C482ii4y.js +45 -0
- package/dist/_chunks/icon-button-C482ii4y.js.map +1 -0
- package/dist/_chunks/{icon-button-group-tERESY-n.js → icon-button-group-BnhkUWUg.js} +56 -56
- package/dist/_chunks/icon-button-group-BnhkUWUg.js.map +1 -0
- package/dist/_chunks/{kbd-0iPlQjgC.js → kbd-DTcIjYA7.js} +52 -52
- package/dist/_chunks/kbd-DTcIjYA7.js.map +1 -0
- package/dist/_chunks/{key-value-pair--Je59tAF.js → key-value-pair-DDhSYdDL.js} +26 -26
- package/dist/_chunks/key-value-pair-DDhSYdDL.js.map +1 -0
- package/dist/_chunks/leo-sidebar-gXXcGPKk.js +755 -0
- package/dist/_chunks/leo-sidebar-gXXcGPKk.js.map +1 -0
- package/dist/_chunks/{list-n8vI8Yvn.js → list-Cwe8mcmh.js} +96 -96
- package/dist/_chunks/list-Cwe8mcmh.js.map +1 -0
- package/dist/_chunks/live-region-COggO6x6.js +57 -0
- package/dist/_chunks/live-region-COggO6x6.js.map +1 -0
- package/dist/_chunks/{logo-UNWYb9p7.js → logo-3wrZGpwg.js} +29 -29
- package/dist/_chunks/logo-3wrZGpwg.js.map +1 -0
- package/dist/_chunks/{matrix-rain-Q7xTEpKu.js → matrix-rain-gsHqSvW7.js} +75 -75
- package/dist/_chunks/matrix-rain-gsHqSvW7.js.map +1 -0
- package/dist/_chunks/message-card-DID3cXUW.js +275 -0
- package/dist/_chunks/message-card-DID3cXUW.js.map +1 -0
- package/dist/_chunks/message-tray-CVMLBnVp.js +302 -0
- package/dist/_chunks/message-tray-CVMLBnVp.js.map +1 -0
- package/dist/_chunks/{multi-select.agent-Cf4pU636.js → multi-select.agent-BUKYZJfp.js} +126 -126
- package/dist/_chunks/multi-select.agent-BUKYZJfp.js.map +1 -0
- package/dist/_chunks/{navigation-menu-DBDsAmXc.js → navigation-menu-NjwxyshT.js} +68 -97
- package/dist/_chunks/navigation-menu-NjwxyshT.js.map +1 -0
- package/dist/_chunks/notification-card-BZ33fq8H.js +255 -0
- package/dist/_chunks/notification-card-BZ33fq8H.js.map +1 -0
- package/dist/_chunks/{notification-tray-CNWPuPZp.js → notification-tray-CnEd7B2q.js} +96 -96
- package/dist/_chunks/notification-tray-CnEd7B2q.js.map +1 -0
- package/dist/_chunks/{number-input-B1Th0DdC.js → number-input-D7rSa_ef.js} +73 -73
- package/dist/_chunks/number-input-D7rSa_ef.js.map +1 -0
- package/dist/_chunks/{otp-input-CmoBuZ4K.js → otp-input-C9R9sC74.js} +42 -42
- package/dist/_chunks/otp-input-C9R9sC74.js.map +1 -0
- package/dist/_chunks/{pagination.agent-B5KLDCMN.js → pagination.agent-D75FB6XP.js} +106 -106
- package/dist/_chunks/pagination.agent-D75FB6XP.js.map +1 -0
- package/dist/_chunks/{password-input-DnjNh-hQ.js → password-input-C6PvKyQV.js} +59 -59
- package/dist/_chunks/password-input-C6PvKyQV.js.map +1 -0
- package/dist/_chunks/{patient-shell-D0RaWDMR.js → patient-shell-CGsmI5LJ.js} +9 -9
- package/dist/_chunks/{patient-shell-D0RaWDMR.js.map → patient-shell-CGsmI5LJ.js.map} +1 -1
- package/dist/_chunks/{payment-form-Cf7U6r5L.js → payment-form-l3j-gA-t.js} +108 -108
- package/dist/_chunks/payment-form-l3j-gA-t.js.map +1 -0
- package/dist/_chunks/{pdf-viewer.agent-DXjgDItg.js → pdf-viewer.agent-DuGfSoep.js} +234 -233
- package/dist/_chunks/pdf-viewer.agent-DuGfSoep.js.map +1 -0
- package/dist/_chunks/{phone-input-C2dtIuxW.js → phone-input-ZWa_FU4R.js} +112 -112
- package/dist/_chunks/phone-input-ZWa_FU4R.js.map +1 -0
- package/dist/_chunks/{popover-D1woU9mP.js → popover-CMr1pTPO.js} +58 -58
- package/dist/_chunks/popover-CMr1pTPO.js.map +1 -0
- package/dist/_chunks/{privacy-lock-C1X42Sit.js → privacy-lock-DdpkKNM2.js} +37 -36
- package/dist/_chunks/privacy-lock-DdpkKNM2.js.map +1 -0
- package/dist/_chunks/{progress-DL3-izuO.js → progress-D4ELgHG3.js} +43 -43
- package/dist/_chunks/progress-D4ELgHG3.js.map +1 -0
- package/dist/_chunks/radio-B_gvGU29.js +106 -0
- package/dist/_chunks/radio-B_gvGU29.js.map +1 -0
- package/dist/_chunks/radio-group-Bn8Wt0yc.js +88 -0
- package/dist/_chunks/radio-group-Bn8Wt0yc.js.map +1 -0
- package/dist/_chunks/{react-day-picker-DQKDiJ37.js → react-day-picker-d0MHsyCj.js} +174 -174
- package/dist/_chunks/{react-day-picker-DQKDiJ37.js.map → react-day-picker-d0MHsyCj.js.map} +1 -1
- package/dist/_chunks/{resizable.agent-DVk_jJur.js → resizable.agent-DBpPGNdy.js} +122 -122
- package/dist/_chunks/resizable.agent-DBpPGNdy.js.map +1 -0
- package/dist/_chunks/{rich-text-editor.agent-BOjF4Xao.js → rich-text-editor.agent-C1_E7_7t.js} +225 -225
- package/dist/_chunks/rich-text-editor.agent-C1_E7_7t.js.map +1 -0
- package/dist/_chunks/scroll-area-Ba99pJ_R.js +144 -0
- package/dist/_chunks/scroll-area-Ba99pJ_R.js.map +1 -0
- package/dist/_chunks/{search-bar-DgSOAajC.js → search-bar-VoTqJhRp.js} +131 -131
- package/dist/_chunks/search-bar-VoTqJhRp.js.map +1 -0
- package/dist/_chunks/search-input-D6rarD0_.js +197 -0
- package/dist/_chunks/search-input-D6rarD0_.js.map +1 -0
- package/dist/_chunks/select-DbxWF3O_.js +320 -0
- package/dist/_chunks/select-DbxWF3O_.js.map +1 -0
- package/dist/_chunks/{separator-DExI4amU.js → separator-BRQHi8s0.js} +17 -17
- package/dist/_chunks/separator-BRQHi8s0.js.map +1 -0
- package/dist/_chunks/sheet-DyWqluiS.js +188 -0
- package/dist/_chunks/sheet-DyWqluiS.js.map +1 -0
- package/dist/_chunks/sidebar-B52iGGNV.js +1076 -0
- package/dist/_chunks/sidebar-B52iGGNV.js.map +1 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-BBL11-Rt.js → sign-in-with-alfadocs-button-BU7MP5Hg.js} +4 -4
- package/dist/_chunks/{sign-in-with-alfadocs-button-BBL11-Rt.js.map → sign-in-with-alfadocs-button-BU7MP5Hg.js.map} +1 -1
- package/dist/_chunks/{signature-capture.agent-L_1_-zVR.js → signature-capture.agent-4htVctJ2.js} +163 -163
- package/dist/_chunks/signature-capture.agent-4htVctJ2.js.map +1 -0
- package/dist/_chunks/skeleton-ClO1v5GE.js +95 -0
- package/dist/_chunks/skeleton-ClO1v5GE.js.map +1 -0
- package/dist/_chunks/skip-link-CASJkBOe.js +68 -0
- package/dist/_chunks/skip-link-CASJkBOe.js.map +1 -0
- package/dist/_chunks/slider-n8JWpJvT.js +273 -0
- package/dist/_chunks/slider-n8JWpJvT.js.map +1 -0
- package/dist/_chunks/slot-grid-BRAkqChA.js +491 -0
- package/dist/_chunks/slot-grid-BRAkqChA.js.map +1 -0
- package/dist/_chunks/{sparkline.agent-BDTXzTy9.js → sparkline.agent-BLY1IMyW.js} +45 -45
- package/dist/_chunks/sparkline.agent-BLY1IMyW.js.map +1 -0
- package/dist/_chunks/{spinner-77xUGpuX.js → spinner-CoAOGcDa.js} +40 -40
- package/dist/_chunks/spinner-CoAOGcDa.js.map +1 -0
- package/dist/_chunks/stat-D76MNHzK.js +208 -0
- package/dist/_chunks/stat-D76MNHzK.js.map +1 -0
- package/dist/_chunks/{stepper-accordion-BkvqQWPI.js → stepper-accordion-DHQ80A4v.js} +33 -33
- package/dist/_chunks/stepper-accordion-DHQ80A4v.js.map +1 -0
- package/dist/_chunks/{stepper-calendar-BQMjrwzo.js → stepper-calendar-vtWwa2bY.js} +159 -159
- package/dist/_chunks/stepper-calendar-vtWwa2bY.js.map +1 -0
- package/dist/_chunks/stepper-progress-DMZ5w5VR.js +128 -0
- package/dist/_chunks/stepper-progress-DMZ5w5VR.js.map +1 -0
- package/dist/_chunks/streaming-text-D0cW8pwq.js +104 -0
- package/dist/_chunks/streaming-text-D0cW8pwq.js.map +1 -0
- package/dist/_chunks/suggestion-chip-BgNFpPEE.js +157 -0
- package/dist/_chunks/suggestion-chip-BgNFpPEE.js.map +1 -0
- package/dist/_chunks/switch-DtLPKO0p.js +137 -0
- package/dist/_chunks/switch-DtLPKO0p.js.map +1 -0
- package/dist/_chunks/{tabs.agent-FsGU3sZL.js → tabs.agent-BDUlyPbJ.js} +101 -101
- package/dist/_chunks/tabs.agent-BDUlyPbJ.js.map +1 -0
- package/dist/_chunks/tag-CfSZZN2f.js +194 -0
- package/dist/_chunks/tag-CfSZZN2f.js.map +1 -0
- package/dist/_chunks/task-card-B5xfiFg5.js +112 -0
- package/dist/_chunks/task-card-B5xfiFg5.js.map +1 -0
- package/dist/_chunks/task-tray-BnpiodZ4.js +99 -0
- package/dist/_chunks/task-tray-BnpiodZ4.js.map +1 -0
- package/dist/_chunks/text-area-BqbruBWx.js +152 -0
- package/dist/_chunks/text-area-BqbruBWx.js.map +1 -0
- package/dist/_chunks/text-input-lh6kRXZS.js +187 -0
- package/dist/_chunks/text-input-lh6kRXZS.js.map +1 -0
- package/dist/_chunks/theme-toggle-BHKMiORD.js +326 -0
- package/dist/_chunks/theme-toggle-BHKMiORD.js.map +1 -0
- package/dist/_chunks/{time-picker-BapZq0OY.js → time-picker-DbpAmPux.js} +102 -102
- package/dist/_chunks/time-picker-DbpAmPux.js.map +1 -0
- package/dist/_chunks/timeline-vjsUeuq1.js +219 -0
- package/dist/_chunks/timeline-vjsUeuq1.js.map +1 -0
- package/dist/_chunks/{timestamp-BLM-jjdw.js → timestamp-DmSt92P1.js} +30 -30
- package/dist/_chunks/timestamp-DmSt92P1.js.map +1 -0
- package/dist/_chunks/{toast-DSCqnDRl.js → toast-DllSITLf.js} +151 -151
- package/dist/_chunks/{toast-DSCqnDRl.js.map → toast-DllSITLf.js.map} +1 -1
- package/dist/_chunks/{tooltip-DF6WjD1r.js → tooltip-Dp3u8jGz.js} +30 -30
- package/dist/_chunks/tooltip-Dp3u8jGz.js.map +1 -0
- package/dist/_chunks/{tooth-scheme.agent-CFKl3iQr.js → tooth-scheme.agent-BRqxWa1D.js} +75 -75
- package/dist/_chunks/tooth-scheme.agent-BRqxWa1D.js.map +1 -0
- package/dist/_chunks/transcript-panel-Bg1BTMSr.js +265 -0
- package/dist/_chunks/transcript-panel-Bg1BTMSr.js.map +1 -0
- package/dist/_chunks/typing-indicator-BRg22Rqr.js +81 -0
- package/dist/_chunks/typing-indicator-BRg22Rqr.js.map +1 -0
- package/dist/_chunks/use-locale-BuXR_Zl9.js +32 -0
- package/dist/_chunks/use-locale-BuXR_Zl9.js.map +1 -0
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js +21 -0
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js.map +1 -0
- package/dist/_chunks/{warning-stack-Cyf_81SL.js → warning-stack-B9N9yWet.js} +38 -38
- package/dist/_chunks/warning-stack-B9N9yWet.js.map +1 -0
- package/dist/_chunks/{workflow-map-Uf-hHAO3.js → workflow-map-gBhL_Wrs.js} +385 -385
- package/dist/_chunks/workflow-map-gBhL_Wrs.js.map +1 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/_shared/index.d.ts +2 -0
- package/dist/components/_shared/index.d.ts.map +1 -1
- package/dist/components/_shared/use-focus-trap.d.ts +32 -0
- package/dist/components/_shared/use-focus-trap.d.ts.map +1 -0
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts +3 -0
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +1 -0
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/aspect-ratio/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/card/index.js +1 -1
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/data-table/toolbar.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/flag/index.js +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/icon-button/index.d.ts +3 -0
- package/dist/components/icon-button/index.d.ts.map +1 -0
- package/dist/components/icon-button/index.js +5 -0
- package/dist/components/icon-button/index.js.map +1 -0
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/index.d.ts +8 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/live-region/index.d.ts +3 -0
- package/dist/components/live-region/index.d.ts.map +1 -0
- package/dist/components/live-region/index.js +5 -0
- package/dist/components/live-region/index.js.map +1 -0
- package/dist/components/live-region/live-region.d.ts +49 -0
- package/dist/components/live-region/live-region.d.ts.map +1 -0
- package/dist/components/logo/index.js +1 -1
- package/dist/components/matrix-rain/index.js +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/navigation-menu/index.d.ts +4 -2
- package/dist/components/navigation-menu/index.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +3 -2
- package/dist/components/navigation-menu/index.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +2 -6
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts.map +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +5 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio-group/index.js +4 -3
- package/dist/components/radio-group/index.js.map +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-input/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/separator/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/skip-link/index.d.ts +2 -0
- package/dist/components/skip-link/index.d.ts.map +1 -0
- package/dist/components/skip-link/index.js +5 -0
- package/dist/components/skip-link/index.js.map +1 -0
- package/dist/components/skip-link/skip-link.d.ts +34 -0
- package/dist/components/skip-link/skip-link.d.ts.map +1 -0
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/sparkline/sparkline.d.ts.map +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-calendar/index.js +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tag/index.js +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/theme-toggle/index.d.ts +3 -0
- package/dist/components/theme-toggle/index.d.ts.map +1 -0
- package/dist/components/theme-toggle/index.js +5 -0
- package/dist/components/theme-toggle/index.js.map +1 -0
- package/dist/components/theme-toggle/theme-toggle.d.ts +34 -0
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -0
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timestamp/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/typing-indicator/index.js +1 -1
- package/dist/components/visually-hidden/index.d.ts +2 -0
- package/dist/components/visually-hidden/index.d.ts.map +1 -0
- package/dist/components/visually-hidden/index.js +5 -0
- package/dist/components/visually-hidden/index.js.map +1 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts +11 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts.map +1 -0
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +10 -7
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-locale.d.ts +27 -0
- package/dist/hooks/use-locale.d.ts.map +1 -0
- package/dist/hooks/use-media-query.d.ts +17 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/i18n/config.js +59 -2
- package/dist/i18n/config.js.map +1 -1
- package/dist/i18n/resources.d.ts +57 -0
- package/dist/i18n/resources.d.ts.map +1 -1
- package/dist/index.js +442 -431
- package/dist/index.js.map +1 -1
- package/dist/locales/de.json +19 -0
- package/dist/locales/en.json +19 -0
- package/dist/locales/it.json +19 -0
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +2 -2
- package/package.json +4 -2
- package/dist/_chunks/accordion-Dgcd38U_.js +0 -117
- package/dist/_chunks/accordion-Dgcd38U_.js.map +0 -1
- package/dist/_chunks/agenda-card-B2gq-gTq.js +0 -130
- package/dist/_chunks/agenda-card-B2gq-gTq.js.map +0 -1
- package/dist/_chunks/agenda-tray-twa8g_87.js +0 -119
- package/dist/_chunks/agenda-tray-twa8g_87.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-C6IY_Eds.js +0 -379
- package/dist/_chunks/ai-prompt-input-C6IY_Eds.js.map +0 -1
- package/dist/_chunks/alert-C5ud6CfE.js.map +0 -1
- package/dist/_chunks/apexcharts-theme-cpBYmCcr.js +0 -17
- package/dist/_chunks/apexcharts-theme-cpBYmCcr.js.map +0 -1
- package/dist/_chunks/app-frame-CmIUp9BD.js.map +0 -1
- package/dist/_chunks/aspect-ratio-Bo3cZXmR.js +0 -56
- package/dist/_chunks/aspect-ratio-Bo3cZXmR.js.map +0 -1
- package/dist/_chunks/audio-recorder-GkGNtW2X.js.map +0 -1
- package/dist/_chunks/audio-visualiser-CIO3yy23.js.map +0 -1
- package/dist/_chunks/autocomplete.agent-kb0nmr6F.js.map +0 -1
- package/dist/_chunks/avatar-BsV7vRA6.js.map +0 -1
- package/dist/_chunks/badge--CmSr7ok.js +0 -104
- package/dist/_chunks/badge--CmSr7ok.js.map +0 -1
- package/dist/_chunks/balance-cell-renderer-BQwN51rT.js.map +0 -1
- package/dist/_chunks/breadcrumb-DnO6eHSS.js.map +0 -1
- package/dist/_chunks/button-CXL8bA8G.js +0 -119
- package/dist/_chunks/button-CXL8bA8G.js.map +0 -1
- package/dist/_chunks/button-group-CI7LFxt3.js.map +0 -1
- package/dist/_chunks/calendar-BIXVzhkL.js.map +0 -1
- package/dist/_chunks/card-n97MNPP2.js +0 -158
- package/dist/_chunks/card-n97MNPP2.js.map +0 -1
- package/dist/_chunks/chart.agent-DkmVXNsI.js.map +0 -1
- package/dist/_chunks/chat-container-SR3UWxbL.js +0 -174
- package/dist/_chunks/chat-container-SR3UWxbL.js.map +0 -1
- package/dist/_chunks/chat-input-aphxDjZL.js.map +0 -1
- package/dist/_chunks/chat-message-CdJSD18D.js.map +0 -1
- package/dist/_chunks/checkbox-CfiZ0FZc.js +0 -116
- package/dist/_chunks/checkbox-CfiZ0FZc.js.map +0 -1
- package/dist/_chunks/checkbox-group-D1aqVI0-.js.map +0 -1
- package/dist/_chunks/collapsible-jBFm7Ah8.js.map +0 -1
- package/dist/_chunks/color-picker-CiotzQJF.js.map +0 -1
- package/dist/_chunks/combobox.agent-B6RwDSct.js.map +0 -1
- package/dist/_chunks/command-palette.agent-B87_OkmC.js.map +0 -1
- package/dist/_chunks/date-time-picker-CX_FMsLG.js.map +0 -1
- package/dist/_chunks/description-list-C5UPZgX6.js +0 -187
- package/dist/_chunks/description-list-C5UPZgX6.js.map +0 -1
- package/dist/_chunks/dialog.agent-B276rAQF.js.map +0 -1
- package/dist/_chunks/dropdown-menu-CJKvK7VG.js +0 -210
- package/dist/_chunks/dropdown-menu-CJKvK7VG.js.map +0 -1
- package/dist/_chunks/empty-state-DiG7vYBM.js.map +0 -1
- package/dist/_chunks/file-upload.agent-BMow5yDY.js.map +0 -1
- package/dist/_chunks/floating-action-button-BM9ib-Wf.js +0 -95
- package/dist/_chunks/floating-action-button-BM9ib-Wf.js.map +0 -1
- package/dist/_chunks/form-field-B4bwrccN.js +0 -121
- package/dist/_chunks/form-field-B4bwrccN.js.map +0 -1
- package/dist/_chunks/freemium-paywall-DVyNsQHS.js +0 -197
- package/dist/_chunks/freemium-paywall-DVyNsQHS.js.map +0 -1
- package/dist/_chunks/header-BpKaSL_v.js.map +0 -1
- package/dist/_chunks/icon-button-C1vpylg3.js +0 -45
- package/dist/_chunks/icon-button-C1vpylg3.js.map +0 -1
- package/dist/_chunks/icon-button-group-tERESY-n.js.map +0 -1
- package/dist/_chunks/kbd-0iPlQjgC.js.map +0 -1
- package/dist/_chunks/key-value-pair--Je59tAF.js.map +0 -1
- package/dist/_chunks/leo-sidebar-9A9AWBxX.js +0 -755
- package/dist/_chunks/leo-sidebar-9A9AWBxX.js.map +0 -1
- package/dist/_chunks/list-n8vI8Yvn.js.map +0 -1
- package/dist/_chunks/logo-UNWYb9p7.js.map +0 -1
- package/dist/_chunks/matrix-rain-Q7xTEpKu.js.map +0 -1
- package/dist/_chunks/message-card-g5VS5Q80.js +0 -275
- package/dist/_chunks/message-card-g5VS5Q80.js.map +0 -1
- package/dist/_chunks/message-tray-CAk-iibU.js +0 -302
- package/dist/_chunks/message-tray-CAk-iibU.js.map +0 -1
- package/dist/_chunks/multi-select.agent-Cf4pU636.js.map +0 -1
- package/dist/_chunks/navigation-menu-DBDsAmXc.js.map +0 -1
- package/dist/_chunks/notification-card-CQxJporb.js +0 -255
- package/dist/_chunks/notification-card-CQxJporb.js.map +0 -1
- package/dist/_chunks/notification-tray-CNWPuPZp.js.map +0 -1
- package/dist/_chunks/number-input-B1Th0DdC.js.map +0 -1
- package/dist/_chunks/otp-input-CmoBuZ4K.js.map +0 -1
- package/dist/_chunks/pagination.agent-B5KLDCMN.js.map +0 -1
- package/dist/_chunks/password-input-DnjNh-hQ.js.map +0 -1
- package/dist/_chunks/payment-form-Cf7U6r5L.js.map +0 -1
- package/dist/_chunks/pdf-viewer.agent-DXjgDItg.js.map +0 -1
- package/dist/_chunks/phone-input-C2dtIuxW.js.map +0 -1
- package/dist/_chunks/popover-D1woU9mP.js.map +0 -1
- package/dist/_chunks/privacy-lock-C1X42Sit.js.map +0 -1
- package/dist/_chunks/progress-DL3-izuO.js.map +0 -1
- package/dist/_chunks/radio-group-CXN9qNPe.js +0 -185
- package/dist/_chunks/radio-group-CXN9qNPe.js.map +0 -1
- package/dist/_chunks/resizable.agent-DVk_jJur.js.map +0 -1
- package/dist/_chunks/rich-text-editor.agent-BOjF4Xao.js.map +0 -1
- package/dist/_chunks/scroll-area-DXn-YWHY.js +0 -144
- package/dist/_chunks/scroll-area-DXn-YWHY.js.map +0 -1
- package/dist/_chunks/search-bar-DgSOAajC.js.map +0 -1
- package/dist/_chunks/search-input-D4tC_Prn.js +0 -197
- package/dist/_chunks/search-input-D4tC_Prn.js.map +0 -1
- package/dist/_chunks/select-B4m4upMg.js +0 -320
- package/dist/_chunks/select-B4m4upMg.js.map +0 -1
- package/dist/_chunks/separator-DExI4amU.js.map +0 -1
- package/dist/_chunks/sheet-D6XOx0fK.js +0 -188
- package/dist/_chunks/sheet-D6XOx0fK.js.map +0 -1
- package/dist/_chunks/sidebar-r645O-k9.js +0 -1076
- package/dist/_chunks/sidebar-r645O-k9.js.map +0 -1
- package/dist/_chunks/signature-capture.agent-L_1_-zVR.js.map +0 -1
- package/dist/_chunks/skeleton-vbTWUntB.js +0 -95
- package/dist/_chunks/skeleton-vbTWUntB.js.map +0 -1
- package/dist/_chunks/slider-B3DBwmcm.js +0 -273
- package/dist/_chunks/slider-B3DBwmcm.js.map +0 -1
- package/dist/_chunks/slot-grid-DL_Tuj0p.js +0 -491
- package/dist/_chunks/slot-grid-DL_Tuj0p.js.map +0 -1
- package/dist/_chunks/sparkline.agent-BDTXzTy9.js.map +0 -1
- package/dist/_chunks/spinner-77xUGpuX.js.map +0 -1
- package/dist/_chunks/stat-CrumvZWf.js +0 -208
- package/dist/_chunks/stat-CrumvZWf.js.map +0 -1
- package/dist/_chunks/stepper-accordion-BkvqQWPI.js.map +0 -1
- package/dist/_chunks/stepper-calendar-BQMjrwzo.js.map +0 -1
- package/dist/_chunks/stepper-progress-Bwfl-0rV.js +0 -128
- package/dist/_chunks/stepper-progress-Bwfl-0rV.js.map +0 -1
- package/dist/_chunks/streaming-text-Cu9YQe_1.js +0 -104
- package/dist/_chunks/streaming-text-Cu9YQe_1.js.map +0 -1
- package/dist/_chunks/suggestion-chip-XkxDJiPW.js +0 -157
- package/dist/_chunks/suggestion-chip-XkxDJiPW.js.map +0 -1
- package/dist/_chunks/switch-DyC0ThNT.js +0 -137
- package/dist/_chunks/switch-DyC0ThNT.js.map +0 -1
- package/dist/_chunks/tabs.agent-FsGU3sZL.js.map +0 -1
- package/dist/_chunks/tag-BucAvfTX.js +0 -194
- package/dist/_chunks/tag-BucAvfTX.js.map +0 -1
- package/dist/_chunks/task-card-uxjApfcg.js +0 -112
- package/dist/_chunks/task-card-uxjApfcg.js.map +0 -1
- package/dist/_chunks/task-tray-BdfM3p8N.js +0 -99
- package/dist/_chunks/task-tray-BdfM3p8N.js.map +0 -1
- package/dist/_chunks/text-area-CKxZ7cS3.js +0 -152
- package/dist/_chunks/text-area-CKxZ7cS3.js.map +0 -1
- package/dist/_chunks/text-input-D16CcMlL.js +0 -187
- package/dist/_chunks/text-input-D16CcMlL.js.map +0 -1
- package/dist/_chunks/time-picker-BapZq0OY.js.map +0 -1
- package/dist/_chunks/timeline-D3VOf4RT.js +0 -219
- package/dist/_chunks/timeline-D3VOf4RT.js.map +0 -1
- package/dist/_chunks/timestamp-BLM-jjdw.js.map +0 -1
- package/dist/_chunks/tooltip-DF6WjD1r.js.map +0 -1
- package/dist/_chunks/tooth-scheme.agent-CFKl3iQr.js.map +0 -1
- package/dist/_chunks/transcript-panel-aI14fHYA.js +0 -265
- package/dist/_chunks/transcript-panel-aI14fHYA.js.map +0 -1
- package/dist/_chunks/typing-indicator-BTVDEpnd.js +0 -81
- package/dist/_chunks/typing-indicator-BTVDEpnd.js.map +0 -1
- package/dist/_chunks/warning-stack-Cyf_81SL.js.map +0 -1
- package/dist/_chunks/workflow-map-Uf-hHAO3.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature-capture.agent-4htVctJ2.js","sources":["../../src/components/signature-capture/signature-capture.tsx","../../src/components/signature-capture/signature-capture.agent.ts"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* SignatureCapture — thin React wrapper over signature_pad. */\n/* */\n/* - Library: `signature_pad` (08-third-party §Signature Pad). We */\n/* instantiate one pad per mounted canvas and expose imperative */\n/* clear / undo / isEmpty / confirm verbs to the consumer. */\n/* - Colors: `penColor` / `backgroundColor` default to */\n/* `--foreground` / `--background` via `getComputedStyle()`. Theme */\n/* switches are observed via a MutationObserver on `<html class>` */\n/* so the ink recolours when the theme flips. */\n/* - DPR scaling: canvas attribute `width/height = cssSize * DPR`; the */\n/* 2D context is scaled by the same factor. A `ResizeObserver` */\n/* replays strokes via `fromData()` on re-scale so nothing is lost. */\n/* - Typed fallback: keyboard-only path renders a text input styled in */\n/* italic `var(--font-sans)` (per 23-constraints §10 — serif is */\n/* marketing only). On confirm we render the string to an offscreen */\n/* canvas for the PNG/SVG export. */\n/* - Confirm payload: `{ png, svg, widthMm, heightMm, capturedAt, */\n/* sha256, strokes? }`. `sha256` is the SubtleCrypto digest of the */\n/* PNG bytes — tamper-evident for audit trails. */\n/* - Security: no `fetch` / `XMLHttpRequest` / `localStorage` / */\n/* `sessionStorage` in this file — the consumer owns persistence. */\n/* */\n/* TODO: */\n/* - 3× DPI re-render for print: currently `toDataURL('image/png')` */\n/* exports the live canvas (already at DPR). A proper 300-DPI */\n/* pipeline would create an offscreen canvas at `cssSize × 3` and */\n/* replay strokes via `fromData()` — deferred pending the print */\n/* bridge landing. */\n/* - Typed-fallback canvas font can't read CSS variables directly */\n/* (Canvas2D resolves fonts at paint time and won't expand */\n/* `var(--font-size-2xl)`); we use a fixed `32px italic` + the */\n/* user's font stack, which is visually close but not */\n/* theme-reactive. Will migrate once the typography tokens expose */\n/* a resolved `font` shorthand. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport SignaturePad from 'signature_pad';\nimport type { PointGroup } from 'signature_pad';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SignatureConfirmPayload {\n /** Data URL of the captured signature rendered as PNG. */\n png: string;\n /** SVG string trimmed to the stroke bounding box. */\n svg: string;\n /** Physical width in millimetres, derived from CSS px. */\n widthMm: number;\n /** Physical height in millimetres, derived from CSS px. */\n heightMm: number;\n /** ISO-8601 UTC timestamp for when `confirm()` resolved. */\n capturedAt: string;\n /** Hex-encoded SHA-256 digest of the PNG bytes. */\n sha256: string;\n /** Raw stroke data from `signature_pad.toData()` — optional for replays. */\n strokes?: PointGroup[];\n}\n\nexport interface SignatureCaptureProps {\n /** Called with the export payload when the user confirms the signature. */\n onConfirm?: (payload: SignatureConfirmPayload) => void;\n /** Called after the pad is cleared (explicit user action). */\n onClear?: () => void;\n /** Called when the user starts drawing a new stroke. */\n onStart?: () => void;\n /** CSS width of the pad. Default 400. */\n width?: number | string;\n /** CSS height of the pad. Default 200. */\n height?: number | string;\n /** Pen colour override — defaults to `var(--foreground)`. */\n penColor?: string;\n /** Background override — defaults to `var(--background)`. */\n backgroundColor?: string;\n /** Show the typed-name fallback toggle. Default `true`. */\n allowTypedFallback?: boolean;\n /** Disable the entire component. */\n disabled?: boolean;\n /** Accessible label for the pad region. */\n ariaLabel?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface SignatureCaptureHandle {\n clear: () => void;\n undo: () => void;\n isEmpty: () => boolean;\n confirm: () => Promise<SignatureConfirmPayload | null>;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva(\n [\n 'ds:signature-capture-alfadocs ds:flex ds:flex-col',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:p-[var(--spacing-sm)]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst padFrameVariants = cva(\n [\n 'ds:relative ds:block',\n 'ds:inline-size-[var(--signature-width)]',\n 'ds:block-size-[var(--signature-height)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:overflow-hidden',\n 'ds:touch-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst canvasVariants = cva(\n [\n 'ds:block',\n 'ds:inline-size-full',\n 'ds:block-size-full',\n 'ds:touch-none',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst toolbarVariants = cva(\n ['ds:flex ds:items-center ds:flex-wrap ds:gap-[var(--spacing-xs)]'].join(' '),\n);\n\nconst actionButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-transparent ds:text-[var(--foreground)]',\n 'ds:text-[var(--font-size-sm)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst confirmButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:text-[var(--font-size-sm)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--primary-hover)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst typedInputVariants = cva(\n [\n 'ds:block ds:inline-size-full',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:font-[family-name:var(--font-sans)]',\n 'ds:italic',\n 'ds:tracking-[0.1em]',\n 'ds:text-[var(--font-size-lg)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst typedPreviewVariants = cva(\n [\n 'ds:flex ds:items-center ds:justify-center',\n 'ds:inline-size-[var(--signature-width)]',\n 'ds:block-size-[var(--signature-height)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:font-[family-name:var(--font-sans)]',\n 'ds:italic',\n 'ds:tracking-[0.1em]',\n 'ds:text-[var(--font-size-2xl)]',\n 'ds:p-[var(--spacing-md)]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\ntype SignatureState = 'empty' | 'drawing' | 'captured' | 'cleared';\n\n/**\n * Resolve a CSS custom property against `document.documentElement`. We\n * can't pass `var(--foreground)` to signature_pad directly — the lib\n * stamps the string straight into `ctx.strokeStyle`, which only accepts\n * concrete colour values. Looking the variable up at runtime keeps the\n * component in tokens-only compliance.\n */\nfunction resolveCssVar(name: string): string {\n if (typeof document === 'undefined') return '';\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n return value;\n}\n\nfunction toCssSize(v: number | string | undefined, fallback: string): string {\n if (typeof v === 'number') return `${v}px`;\n if (typeof v === 'string' && v.length > 0) return v;\n return fallback;\n}\n\nfunction parsePxValue(v: string, fallback: number): number {\n const n = parseFloat(v);\n if (!Number.isFinite(n)) return fallback;\n return n;\n}\n\n/** Hex-encode a Uint8Array. */\nfunction toHex(bytes: Uint8Array): string {\n let out = '';\n for (let i = 0; i < bytes.length; i += 1) {\n const b = bytes[i];\n out += b.toString(16).padStart(2, '0');\n }\n return out;\n}\n\n/** Decode a base64 string into bytes without `atob` polyfills. */\nfunction base64ToBytes(b64: string): Uint8Array {\n if (typeof atob === 'function') {\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i += 1) bytes[i] = bin.charCodeAt(i);\n return bytes;\n }\n // Fallback — node-style Buffer, gated behind a runtime check.\n const g = globalThis as { Buffer?: { from: (s: string, enc: string) => Uint8Array } };\n if (g.Buffer) return g.Buffer.from(b64, 'base64');\n return new Uint8Array();\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const g = globalThis as { crypto?: Crypto };\n if (g.crypto?.subtle) {\n // Copy the bytes into a fresh ArrayBuffer so the slice is always an\n // ArrayBuffer (never a SharedArrayBuffer) — SubtleCrypto's BufferSource\n // narrowing doesn't accept the latter.\n const copy = new Uint8Array(bytes.byteLength);\n copy.set(bytes);\n const digest = await g.crypto.subtle.digest('SHA-256', copy.buffer);\n return toHex(new Uint8Array(digest));\n }\n // No subtle crypto — return empty so callers can still use the rest\n // of the payload. Test env is expected to stub crypto.subtle.\n return '';\n}\n\n/**\n * Render the typed fallback string onto an offscreen canvas and return\n * it. Used by the confirm path when the user has typed their name\n * instead of drawing. Size is fixed at `32px italic` because Canvas2D\n * resolves fonts eagerly and can't expand `var(--font-size-*)`.\n */\nfunction renderTypedSignatureToCanvas(\n text: string,\n cssWidth: number,\n cssHeight: number,\n penColor: string,\n backgroundColor: string,\n): HTMLCanvasElement {\n const dpr = Math.max(1, typeof window !== 'undefined' ? window.devicePixelRatio : 1);\n const canvas = document.createElement('canvas');\n canvas.width = Math.floor(cssWidth * dpr);\n canvas.height = Math.floor(cssHeight * dpr);\n const ctx = canvas.getContext('2d');\n if (!ctx) return canvas;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n // Fill background with the token-resolved colour.\n ctx.fillStyle = backgroundColor || 'transparent';\n ctx.fillRect(0, 0, cssWidth, cssHeight);\n // Draw the typed signature centred.\n ctx.fillStyle = penColor || 'currentColor';\n ctx.font = '32px italic sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, cssWidth / 2, cssHeight / 2, cssWidth - 16);\n return canvas;\n}\n\n/* ------------------------------------------------------------------ */\n/* SignatureCapture */\n/* ------------------------------------------------------------------ */\n\nexport const SignatureCapture = forwardRef<\n SignatureCaptureHandle,\n SignatureCaptureProps\n>(\n (\n {\n onConfirm,\n onClear,\n onStart,\n width = 400,\n height = 200,\n penColor,\n backgroundColor,\n allowTypedFallback = true,\n disabled = false,\n ariaLabel,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const rawId = useId();\n const idSafe = useMemo(\n () => `sig-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const liveRegionId = `${idSafe}-live`;\n\n const padFrameRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const signaturePadRef = useRef<SignaturePad | null>(null);\n\n const [mode, setMode] = useState<'draw' | 'typed'>('draw');\n const [typedValue, setTypedValue] = useState('');\n // Retained state — consumers may subscribe to the pad's lifecycle via\n // `onConfirm`/`onClear`/`onStart`; we still track the machine internally\n // so the live region + confirm button stay coherent.\n const signatureStateRef = useRef<SignatureState>('empty');\n const [announcement, setAnnouncement] = useState<string>('');\n const [resolvedPen, setResolvedPen] = useState<string>('');\n const [resolvedBg, setResolvedBg] = useState<string>('');\n\n // Stable callback refs so we can wire signature_pad once without\n // re-instantiating on every render.\n const onStartRef = useRef<SignatureCaptureProps['onStart']>(onStart);\n const onClearRef = useRef<SignatureCaptureProps['onClear']>(onClear);\n const onConfirmRef = useRef<SignatureCaptureProps['onConfirm']>(onConfirm);\n useEffect(() => {\n onStartRef.current = onStart;\n onClearRef.current = onClear;\n onConfirmRef.current = onConfirm;\n }, [onStart, onClear, onConfirm]);\n\n /* ---- Announce helper ---------------------------------------- */\n const announce = useCallback(\n (next: SignatureState) => {\n signatureStateRef.current = next;\n setAnnouncement(t(`signature.state.${next}`));\n },\n [t],\n );\n\n /* ---- Resolve tokens ----------------------------------------- */\n useEffect(() => {\n if (typeof document === 'undefined') return undefined;\n function resolveAll(): void {\n const pen = penColor ?? resolveCssVar('--foreground');\n const bg = backgroundColor ?? resolveCssVar('--background');\n // Fall back to `currentColor` / `transparent` — keyword literals\n // are token-neutral and honour the surrounding theme even when\n // the CSS variable is briefly unavailable (SSR, initial paint).\n setResolvedPen(pen || 'currentColor');\n setResolvedBg(bg || 'transparent');\n }\n resolveAll();\n // Watch for theme-class changes on <html>.\n const mo = new MutationObserver(() => {\n resolveAll();\n });\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n return () => mo.disconnect();\n }, [penColor, backgroundColor]);\n\n /* ---- Apply colour changes to an existing pad ---------------- */\n useEffect(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n if (resolvedPen) pad.penColor = resolvedPen;\n if (resolvedBg) pad.backgroundColor = resolvedBg;\n }, [resolvedPen, resolvedBg]);\n\n /* ---- Instantiate signature_pad ------------------------------ */\n useEffect(() => {\n if (mode !== 'draw') return undefined;\n const canvas = canvasRef.current;\n if (!canvas) return undefined;\n\n const pad = new SignaturePad(canvas, {\n penColor: resolvedPen || 'currentColor',\n backgroundColor: resolvedBg || 'transparent',\n minWidth: 0.5,\n maxWidth: 2.5,\n velocityFilterWeight: 0.7,\n });\n signaturePadRef.current = pad;\n\n const handleBegin = (): void => {\n announce('drawing');\n onStartRef.current?.();\n };\n const handleEnd = (): void => {\n // Keep state as 'drawing' — transition to 'captured' on confirm.\n };\n pad.addEventListener('beginStroke', handleBegin);\n pad.addEventListener('endStroke', handleEnd);\n\n // Initial DPR scale + announcement.\n scaleCanvas(canvas);\n announce('empty');\n\n return () => {\n pad.removeEventListener('beginStroke', handleBegin);\n pad.removeEventListener('endStroke', handleEnd);\n // Clear strokes from memory; 08-third-party §Signature Pad.\n pad.clear();\n pad.off();\n signaturePadRef.current = null;\n };\n // We intentionally re-create the pad only when switching between\n // typed and draw modes. Color updates flow through the effect above.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode]);\n\n /* ---- Disabled state ----------------------------------------- */\n useEffect(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n if (disabled) pad.off();\n else pad.on();\n }, [disabled, mode]);\n\n /* ---- DPR + ResizeObserver ----------------------------------- */\n // Hard-cap backing-store dimensions to bound memory. 4096 px × 4096 px at\n // 4 bytes per pixel is ~67 MB — generous for any realistic signature, but\n // well under the multi-GB allocation a careless or malicious prop could\n // request on a high-DPR display. See security-hardening.mdx.\n const MAX_CANVAS_PX = 4096;\n const scaleCanvas = useCallback((canvas: HTMLCanvasElement) => {\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(\n 1,\n typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n );\n const rawWidth = Math.max(1, Math.floor(rect.width * dpr));\n const rawHeight = Math.max(1, Math.floor(rect.height * dpr));\n const targetWidth = Math.min(rawWidth, MAX_CANVAS_PX);\n const targetHeight = Math.min(rawHeight, MAX_CANVAS_PX);\n if (\n import.meta.env.DEV &&\n (rawWidth !== targetWidth || rawHeight !== targetHeight)\n ) {\n // Silent in production; a consumer shipping 10k × 10k probably wants\n // the nudge.\n console.warn(\n `[SignatureCapture] clamped canvas backing store from ${rawWidth}x${rawHeight} to ${targetWidth}x${targetHeight} (cap = ${MAX_CANVAS_PX}px).`,\n );\n }\n if (canvas.width === targetWidth && canvas.height === targetHeight) return;\n\n const pad = signaturePadRef.current;\n const prior = pad ? pad.toData() : null;\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const ctx = canvas.getContext('2d');\n if (ctx) ctx.scale(dpr, dpr);\n if (pad) {\n if (resolvedBg) pad.backgroundColor = resolvedBg;\n if (resolvedPen) pad.penColor = resolvedPen;\n pad.clear();\n if (prior && prior.length > 0) {\n pad.fromData(prior);\n }\n }\n }, [resolvedBg, resolvedPen]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return undefined;\n if (typeof ResizeObserver === 'undefined') {\n scaleCanvas(canvas);\n return undefined;\n }\n const ro = new ResizeObserver(() => {\n scaleCanvas(canvas);\n });\n ro.observe(canvas);\n return () => ro.disconnect();\n }, [scaleCanvas]);\n\n /* ---- Imperative handle -------------------------------------- */\n const clear = useCallback(() => {\n const pad = signaturePadRef.current;\n if (pad) pad.clear();\n setTypedValue('');\n announce('cleared');\n onClearRef.current?.();\n }, [announce]);\n\n const undo = useCallback(() => {\n const pad = signaturePadRef.current;\n if (!pad) return;\n const data = pad.toData();\n if (!data || data.length === 0) return;\n data.pop();\n pad.fromData(data);\n if (data.length === 0) announce('empty');\n }, [announce]);\n\n const isEmpty = useCallback((): boolean => {\n if (mode === 'typed') return typedValue.trim().length === 0;\n const pad = signaturePadRef.current;\n return pad ? pad.isEmpty() : true;\n }, [mode, typedValue]);\n\n const confirm = useCallback(async (): Promise<SignatureConfirmPayload | null> => {\n const cssWidth = parsePxValue(\n typeof width === 'number' ? `${width}` : String(width),\n 400,\n );\n const cssHeight = parsePxValue(\n typeof height === 'number' ? `${height}` : String(height),\n 200,\n );\n\n let pngDataUrl = '';\n let svgString = '';\n let strokes: PointGroup[] | undefined;\n\n if (mode === 'draw') {\n const pad = signaturePadRef.current;\n if (!pad || pad.isEmpty()) return null;\n pngDataUrl = pad.toDataURL('image/png');\n svgString = pad.toSVG();\n strokes = pad.toData();\n } else {\n const value = typedValue.trim();\n if (value.length === 0) return null;\n const offscreen = renderTypedSignatureToCanvas(\n value,\n cssWidth,\n cssHeight,\n resolvedPen || 'currentColor',\n resolvedBg || 'transparent',\n );\n pngDataUrl = offscreen.toDataURL('image/png');\n // Inline SVG — we can't call toSVG() because signature_pad isn't\n // driving the canvas. Build a minimal SVG with the rendered text.\n const safeText = value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n svgString =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${cssWidth} ${cssHeight}\" width=\"${cssWidth}\" height=\"${cssHeight}\">` +\n `<text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"sans-serif\" font-style=\"italic\" font-size=\"32\" fill=\"${resolvedPen || 'currentColor'}\" letter-spacing=\"3\">${safeText}</text>` +\n `</svg>`;\n }\n\n // 96 CSS px = 25.4 mm (per W3C CSS absolute length definition).\n const widthMm = (cssWidth * 25.4) / 96;\n const heightMm = (cssHeight * 25.4) / 96;\n const capturedAt = new Date().toISOString();\n\n // Compute SHA-256 of the PNG bytes.\n let sha256 = '';\n if (pngDataUrl) {\n const commaIx = pngDataUrl.indexOf(',');\n const b64 = commaIx >= 0 ? pngDataUrl.slice(commaIx + 1) : '';\n const bytes = base64ToBytes(b64);\n sha256 = await sha256Hex(bytes);\n }\n\n const payload: SignatureConfirmPayload = {\n png: pngDataUrl,\n svg: svgString,\n widthMm,\n heightMm,\n capturedAt,\n sha256,\n strokes,\n };\n\n announce('captured');\n onConfirmRef.current?.(payload);\n return payload;\n }, [\n mode,\n typedValue,\n width,\n height,\n resolvedPen,\n resolvedBg,\n announce,\n ]);\n\n useImperativeHandle(\n ref,\n () => ({\n clear,\n undo,\n isEmpty,\n confirm,\n }),\n [clear, undo, isEmpty, confirm],\n );\n\n /* ---- Derived UI state --------------------------------------- */\n const confirmDisabled = disabled || isEmpty();\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter for dynamic width/height\n // from consumer props; the width rule lives in Tailwind arbitrary\n // values that read --signature-width / --signature-height).\n const sizeStyle: CSSProperties = {\n ['--signature-width' as unknown as keyof CSSProperties]: toCssSize(width, 'var(--signature-default-width)'),\n ['--signature-height' as unknown as keyof CSSProperties]: toCssSize(height, 'var(--signature-default-height)'),\n } as CSSProperties;\n\n /* ---- Render -------------------------------------------------- */\n return (\n <div\n role=\"region\"\n aria-label={ariaLabel ?? t('signature.padLabel')}\n aria-disabled={disabled || undefined}\n className={[wrapperVariants(), className].filter(Boolean).join(' ')}\n style={sizeStyle}\n data-component=\"signature-capture\"\n >\n {mode === 'draw' ? (\n <div\n ref={padFrameRef}\n className={padFrameVariants()}\n >\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={t('signature.padLabel')}\n className={canvasVariants()}\n data-testid=\"signature-canvas\"\n />\n </div>\n ) : (\n <label className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-body-sm ds:text-[var(--muted-foreground)]\">\n {t('signature.typedFallback.label')}\n </span>\n <input\n type=\"text\"\n value={typedValue}\n onChange={(e) => {\n setTypedValue(e.target.value);\n if (e.target.value.length > 0) announce('drawing');\n else announce('empty');\n }}\n placeholder={t('signature.typedFallback.placeholder')}\n aria-label={t('signature.typedFallback.label')}\n disabled={disabled}\n className={typedInputVariants()}\n data-testid=\"signature-typed-input\"\n />\n {typedValue ? (\n <div\n className={typedPreviewVariants()}\n aria-hidden=\"true\"\n >\n {typedValue}\n </div>\n ) : null}\n </label>\n )}\n\n {/* Live region — state transitions (empty, drawing, captured, cleared) */}\n <div\n id={liveRegionId}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n data-testid=\"signature-live\"\n >\n {announcement}\n </div>\n\n <div className={toolbarVariants()} role=\"group\" aria-label={t('signature.padLabel')}>\n <button\n type=\"button\"\n onClick={() => {\n if (disabled) return;\n clear();\n }}\n aria-disabled={disabled || undefined}\n className={actionButtonVariants()}\n >\n {t('signature.clear')}\n </button>\n {mode === 'draw' ? (\n <button\n type=\"button\"\n onClick={() => {\n if (disabled) return;\n undo();\n }}\n aria-disabled={disabled || undefined}\n className={actionButtonVariants()}\n >\n {t('signature.undo')}\n </button>\n ) : null}\n {allowTypedFallback ? (\n <button\n type=\"button\"\n onClick={() => {\n if (disabled) return;\n setTypedValue('');\n setMode((m) => (m === 'draw' ? 'typed' : 'draw'));\n announce('cleared');\n }}\n aria-disabled={disabled || undefined}\n className={actionButtonVariants()}\n aria-pressed={mode === 'typed'}\n >\n {mode === 'draw'\n ? t('signature.typedFallback.toggle')\n : t('signature.typedFallback.toggleDraw')}\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={() => {\n if (confirmDisabled) return;\n void confirm();\n }}\n aria-disabled={confirmDisabled || undefined}\n aria-describedby={liveRegionId}\n className={confirmButtonVariants()}\n data-testid=\"signature-confirm\"\n >\n {t('signature.confirm')}\n </button>\n </div>\n </div>\n );\n },\n);\n\nSignatureCapture.displayName = 'SignatureCapture';\n\nexport {\n wrapperVariants as signatureWrapperVariants,\n actionButtonVariants as signatureActionButtonVariants,\n confirmButtonVariants as signatureConfirmButtonVariants,\n};\n","import type { AgentAdapter } from '../../agent/types';\nimport type { SignatureCaptureHandle } from './signature-capture';\n\nexport const signatureCaptureAgent: AgentAdapter<SignatureCaptureHandle> = {\n id: 'signature-capture',\n capabilities: ['edit_inline', 'submit'],\n state: {\n isEmpty: {\n type: 'boolean',\n description: 'True when no signature has been drawn or typed.',\n read: (handle) => handle.isEmpty(),\n },\n },\n actions: {\n clear: {\n safety: 'destructive',\n description: 'Erase the current signature. Loses unsaved input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n undo: {\n safety: 'write',\n description: 'Undo the last stroke.',\n invoke: (handle) => {\n handle.undo();\n },\n },\n confirm: {\n safety: 'write',\n description: 'Commit the signature and return its serialised payload.',\n invoke: (handle) => handle.confirm(),\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'signature-capture' },\n },\n};\n"],"names":["wrapperVariants","cva","padFrameVariants","canvasVariants","toolbarVariants","actionButtonVariants","confirmButtonVariants","typedInputVariants","typedPreviewVariants","resolveCssVar","name","toCssSize","v","fallback","parsePxValue","n","toHex","bytes","out","i","b","base64ToBytes","b64","bin","g","sha256Hex","_a","copy","digest","renderTypedSignatureToCanvas","text","cssWidth","cssHeight","penColor","backgroundColor","dpr","canvas","ctx","SignatureCapture","forwardRef","onConfirm","onClear","onStart","width","height","allowTypedFallback","disabled","ariaLabel","className","ref","t","useTranslation","rawId","useId","liveRegionId","useMemo","padFrameRef","useRef","canvasRef","signaturePadRef","mode","setMode","useState","typedValue","setTypedValue","signatureStateRef","announcement","setAnnouncement","resolvedPen","setResolvedPen","resolvedBg","setResolvedBg","onStartRef","onClearRef","onConfirmRef","useEffect","announce","useCallback","next","resolveAll","pen","bg","mo","pad","SignaturePad","handleBegin","handleEnd","scaleCanvas","MAX_CANVAS_PX","rect","rawWidth","rawHeight","targetWidth","targetHeight","prior","ro","clear","undo","data","isEmpty","confirm","pngDataUrl","svgString","strokes","value","safeText","widthMm","heightMm","capturedAt","sha256","commaIx","payload","useImperativeHandle","confirmDisabled","sizeStyle","jsxs","jsx","m","signatureCaptureAgent","handle"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as v } from "react";
|
|
3
|
+
import { c as f } from "./index-D2ZczOXr.js";
|
|
4
|
+
const z = f(
|
|
5
|
+
[
|
|
6
|
+
"ds:bg-[var(--muted)]",
|
|
7
|
+
"ds:motion-reduce:animate-none",
|
|
8
|
+
"ds:forced-colors:bg-[GrayText]",
|
|
9
|
+
"ds:forced-colors:outline",
|
|
10
|
+
"ds:forced-colors:outline-1",
|
|
11
|
+
"ds:forced-colors:outline-[CanvasText]",
|
|
12
|
+
"ds:forced-colors:animate-none"
|
|
13
|
+
].join(" "),
|
|
14
|
+
{
|
|
15
|
+
variants: {
|
|
16
|
+
variant: {
|
|
17
|
+
text: "ds:rounded-[var(--radius-sm)] ds:w-full",
|
|
18
|
+
circular: "ds:rounded-[var(--radius-full)] ds:aspect-square ds:shrink-0",
|
|
19
|
+
rectangular: "ds:rounded-none",
|
|
20
|
+
rounded: "ds:rounded-[var(--radius-md)]"
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
sm: "",
|
|
24
|
+
md: "",
|
|
25
|
+
lg: ""
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
compoundVariants: [
|
|
29
|
+
{ variant: "text", size: "sm", class: "ds:h-3" },
|
|
30
|
+
{ variant: "text", size: "md", class: "ds:h-4" },
|
|
31
|
+
{ variant: "text", size: "lg", class: "ds:h-5" },
|
|
32
|
+
{ variant: "circular", size: "sm", class: "ds:h-8 ds:w-8" },
|
|
33
|
+
{ variant: "circular", size: "md", class: "ds:h-10 ds:w-10" },
|
|
34
|
+
{ variant: "circular", size: "lg", class: "ds:h-12 ds:w-12" },
|
|
35
|
+
{ variant: "rectangular", size: "sm", class: "ds:h-16" },
|
|
36
|
+
{ variant: "rectangular", size: "md", class: "ds:h-24" },
|
|
37
|
+
{ variant: "rectangular", size: "lg", class: "ds:h-40" },
|
|
38
|
+
{ variant: "rounded", size: "sm", class: "ds:h-16" },
|
|
39
|
+
{ variant: "rounded", size: "md", class: "ds:h-24" },
|
|
40
|
+
{ variant: "rounded", size: "lg", class: "ds:h-40" }
|
|
41
|
+
],
|
|
42
|
+
defaultVariants: {
|
|
43
|
+
variant: "text",
|
|
44
|
+
size: "md"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
), x = "animate-[skeleton-pulse_calc(var(--animation-duration)*8)_ease-in-out_infinite]", g = v(
|
|
48
|
+
({
|
|
49
|
+
variant: c = "text",
|
|
50
|
+
size: u = "md",
|
|
51
|
+
lines: s,
|
|
52
|
+
width: a,
|
|
53
|
+
height: e,
|
|
54
|
+
animate: m = !0,
|
|
55
|
+
className: d,
|
|
56
|
+
...i
|
|
57
|
+
}, n) => {
|
|
58
|
+
const o = a !== void 0 || e !== void 0 ? { ...a !== void 0 && { width: a }, ...e !== void 0 && { height: e } } : void 0, t = [
|
|
59
|
+
z({ variant: c, size: u }),
|
|
60
|
+
m && x
|
|
61
|
+
].filter(Boolean).join(" ");
|
|
62
|
+
return s !== void 0 && s > 1 ? /* @__PURE__ */ r(
|
|
63
|
+
"div",
|
|
64
|
+
{
|
|
65
|
+
ref: n,
|
|
66
|
+
"aria-hidden": "true",
|
|
67
|
+
className: ["ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", d].filter(Boolean).join(" "),
|
|
68
|
+
style: o,
|
|
69
|
+
...i,
|
|
70
|
+
children: Array.from({ length: s }, (h, l) => /* @__PURE__ */ r(
|
|
71
|
+
"div",
|
|
72
|
+
{
|
|
73
|
+
"aria-hidden": "true",
|
|
74
|
+
className: [t, l === s - 1 && "ds:w-3/5"].filter(Boolean).join(" ")
|
|
75
|
+
},
|
|
76
|
+
`skeleton-line-${l}`
|
|
77
|
+
))
|
|
78
|
+
}
|
|
79
|
+
) : /* @__PURE__ */ r(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
ref: n,
|
|
83
|
+
"aria-hidden": "true",
|
|
84
|
+
className: [t, d].filter(Boolean).join(" "),
|
|
85
|
+
style: o,
|
|
86
|
+
...i
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
g.displayName = "Skeleton";
|
|
92
|
+
export {
|
|
93
|
+
g as S
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=skeleton-ClO1v5GE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-ClO1v5GE.js","sources":["../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst skeletonVariants = cva(\n [\n 'ds:bg-[var(--muted)]',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:bg-[GrayText]',\n 'ds:forced-colors:outline',\n 'ds:forced-colors:outline-1',\n 'ds:forced-colors:outline-[CanvasText]',\n 'ds:forced-colors:animate-none',\n ].join(' '),\n {\n variants: {\n variant: {\n text: 'ds:rounded-[var(--radius-sm)] ds:w-full',\n circular: 'ds:rounded-[var(--radius-full)] ds:aspect-square ds:shrink-0',\n rectangular: 'ds:rounded-none',\n rounded: 'ds:rounded-[var(--radius-md)]',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n { variant: 'text', size: 'sm', class: 'ds:h-3' },\n { variant: 'text', size: 'md', class: 'ds:h-4' },\n { variant: 'text', size: 'lg', class: 'ds:h-5' },\n { variant: 'circular', size: 'sm', class: 'ds:h-8 ds:w-8' },\n { variant: 'circular', size: 'md', class: 'ds:h-10 ds:w-10' },\n { variant: 'circular', size: 'lg', class: 'ds:h-12 ds:w-12' },\n { variant: 'rectangular', size: 'sm', class: 'ds:h-16' },\n { variant: 'rectangular', size: 'md', class: 'ds:h-24' },\n { variant: 'rectangular', size: 'lg', class: 'ds:h-40' },\n { variant: 'rounded', size: 'sm', class: 'ds:h-16' },\n { variant: 'rounded', size: 'md', class: 'ds:h-24' },\n { variant: 'rounded', size: 'lg', class: 'ds:h-40' },\n ],\n defaultVariants: {\n variant: 'text',\n size: 'md',\n },\n },\n);\n\nconst ANIMATION_CLASS =\n 'animate-[skeleton-pulse_calc(var(--animation-duration)*8)_ease-in-out_infinite]';\n\nexport interface SkeletonProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'aria-hidden' | 'style'>,\n VariantProps<typeof skeletonVariants> {\n variant?: 'text' | 'circular' | 'rectangular' | 'rounded';\n size?: 'sm' | 'md' | 'lg';\n /** Number of stacked text lines — only applies when variant='text' */\n lines?: number;\n /**\n * Width override — accepts any CSS value.\n * Exception to constraint §4: skeleton dimensions are consumer-specified\n * and cannot be expressed as static Tailwind classes.\n */\n width?: string;\n /**\n * Height override — accepts any CSS value.\n * Exception to constraint §4: skeleton dimensions are consumer-specified\n * and cannot be expressed as static Tailwind classes.\n */\n height?: string;\n /** Whether to animate the pulse */\n animate?: boolean;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = 'text',\n size = 'md',\n lines,\n width,\n height,\n animate = true,\n className,\n ...props\n },\n ref,\n ) => {\n // Exception to constraint §4: width/height are consumer-specified dimensions\n // that cannot be expressed as static Tailwind classes.\n const inlineStyle: CSSProperties | undefined =\n width !== undefined || height !== undefined\n ? { ...(width !== undefined && { width }), ...(height !== undefined && { height }) }\n : undefined;\n\n const atomClass = [\n skeletonVariants({ variant, size }),\n animate && ANIMATION_CLASS,\n ]\n .filter(Boolean)\n .join(' ');\n\n if (lines !== undefined && lines > 1) {\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={['ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]', className]\n .filter(Boolean)\n .join(' ')}\n style={inlineStyle}\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={`skeleton-line-${i}`}\n aria-hidden=\"true\"\n className={[atomClass, i === lines - 1 && 'ds:w-3/5']\n .filter(Boolean)\n .join(' ')}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={[atomClass, className].filter(Boolean).join(' ')}\n style={inlineStyle}\n {...props}\n />\n );\n },\n);\n\nSkeleton.displayName = 'Skeleton';\n"],"names":["skeletonVariants","cva","ANIMATION_CLASS","Skeleton","forwardRef","variant","size","lines","width","height","animate","className","props","ref","inlineStyle","atomClass","jsx","_","i"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as c } from "react";
|
|
3
|
+
import { c as t } from "./index-D2ZczOXr.js";
|
|
4
|
+
import { useTranslation as f } from "react-i18next";
|
|
5
|
+
const u = t(
|
|
6
|
+
[
|
|
7
|
+
// Hidden by default via Tailwind's vetted `sr-only` recipe (the same
|
|
8
|
+
// utility VisuallyHidden uses) — keeps the element focusable so it
|
|
9
|
+
// can still be the first tab stop, then `focus:not-sr-only` lifts
|
|
10
|
+
// it back into the layout when the user tabs into it.
|
|
11
|
+
"ds:sr-only",
|
|
12
|
+
// On focus, take it out of sr-only and pin to the top-start corner
|
|
13
|
+
// of the viewport. `focus-visible` covers the keyboard-only case.
|
|
14
|
+
"ds:focus:not-sr-only ds:focus-visible:not-sr-only",
|
|
15
|
+
"ds:focus:fixed ds:focus-visible:fixed",
|
|
16
|
+
// Position — logical properties so RTL flips automatically.
|
|
17
|
+
"ds:focus:top-[var(--spacing-sm)] ds:focus-visible:top-[var(--spacing-sm)]",
|
|
18
|
+
"ds:focus:start-[var(--spacing-sm)] ds:focus-visible:start-[var(--spacing-sm)]",
|
|
19
|
+
"ds:focus:z-[var(--z-toast,9999)] ds:focus-visible:z-[var(--z-toast,9999)]",
|
|
20
|
+
// Visual styling on focus — token-driven pill.
|
|
21
|
+
"ds:focus:inline-flex ds:focus-visible:inline-flex",
|
|
22
|
+
"ds:focus:items-center ds:focus-visible:items-center",
|
|
23
|
+
"ds:focus:ps-[var(--spacing-md)] ds:focus-visible:ps-[var(--spacing-md)]",
|
|
24
|
+
"ds:focus:pe-[var(--spacing-md)] ds:focus-visible:pe-[var(--spacing-md)]",
|
|
25
|
+
"ds:focus:py-[var(--spacing-sm)] ds:focus-visible:py-[var(--spacing-sm)]",
|
|
26
|
+
"ds:focus:rounded-[var(--radius-md)] ds:focus-visible:rounded-[var(--radius-md)]",
|
|
27
|
+
"ds:focus:bg-[var(--primary)] ds:focus-visible:bg-[var(--primary)]",
|
|
28
|
+
"ds:focus:text-[color:var(--primary-foreground)] ds:focus-visible:text-[color:var(--primary-foreground)]",
|
|
29
|
+
"ds:focus:text-[length:var(--font-size-sm)] ds:focus-visible:text-[length:var(--font-size-sm)]",
|
|
30
|
+
"ds:focus:no-underline ds:focus-visible:no-underline",
|
|
31
|
+
"ds:focus:shadow-[var(--shadow-md)] ds:focus-visible:shadow-[var(--shadow-md)]",
|
|
32
|
+
// Focus ring on top of the pill itself.
|
|
33
|
+
"ds:focus-visible:outline-[length:var(--focus-ring-width)]",
|
|
34
|
+
"ds:focus-visible:outline-solid",
|
|
35
|
+
"ds:focus-visible:outline-[color:var(--ring)]",
|
|
36
|
+
"ds:focus-visible:outline-offset-[var(--focus-ring-offset)]"
|
|
37
|
+
// Reduced-motion friendly — no transitions on reveal.
|
|
38
|
+
].join(" "),
|
|
39
|
+
{
|
|
40
|
+
variants: {
|
|
41
|
+
// Single intent today; CVA stub left in place so future tonal
|
|
42
|
+
// variants (e.g. `subtle`, `inverse`) can plug in without churn.
|
|
43
|
+
intent: {
|
|
44
|
+
primary: ""
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
defaultVariants: { intent: "primary" }
|
|
48
|
+
}
|
|
49
|
+
), v = c(
|
|
50
|
+
({ href: s = "#main", intent: i, className: o, children: r, ...a }, e) => {
|
|
51
|
+
const { t: n } = f();
|
|
52
|
+
return /* @__PURE__ */ d(
|
|
53
|
+
"a",
|
|
54
|
+
{
|
|
55
|
+
ref: e,
|
|
56
|
+
href: s,
|
|
57
|
+
className: [u({ intent: i }), o].filter(Boolean).join(" "),
|
|
58
|
+
...a,
|
|
59
|
+
children: r ?? n("ui.navigation.skipLink.toContent")
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
v.displayName = "SkipLink";
|
|
65
|
+
export {
|
|
66
|
+
v as S
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=skip-link-CASJkBOe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skip-link-CASJkBOe.js","sources":["../../src/components/skip-link/skip-link.tsx"],"sourcesContent":["import { forwardRef, type AnchorHTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\n/**\n * SkipLink is visually hidden until it receives keyboard focus, at\n * which point it reveals as a high-contrast pill anchored to the\n * top-start corner of the viewport. Implementation note: we cannot use\n * the typical `sr-only` utility because that also hides it from focus\n * styles in some browsers — instead we collapse it to a 1px clip and\n * un-clip on `:focus` / `:focus-visible`.\n */\nconst skipLinkVariants = cva(\n [\n // Hidden by default via Tailwind's vetted `sr-only` recipe (the same\n // utility VisuallyHidden uses) — keeps the element focusable so it\n // can still be the first tab stop, then `focus:not-sr-only` lifts\n // it back into the layout when the user tabs into it.\n 'ds:sr-only',\n // On focus, take it out of sr-only and pin to the top-start corner\n // of the viewport. `focus-visible` covers the keyboard-only case.\n 'ds:focus:not-sr-only ds:focus-visible:not-sr-only',\n 'ds:focus:fixed ds:focus-visible:fixed',\n // Position — logical properties so RTL flips automatically.\n 'ds:focus:top-[var(--spacing-sm)] ds:focus-visible:top-[var(--spacing-sm)]',\n 'ds:focus:start-[var(--spacing-sm)] ds:focus-visible:start-[var(--spacing-sm)]',\n 'ds:focus:z-[var(--z-toast,9999)] ds:focus-visible:z-[var(--z-toast,9999)]',\n // Visual styling on focus — token-driven pill.\n 'ds:focus:inline-flex ds:focus-visible:inline-flex',\n 'ds:focus:items-center ds:focus-visible:items-center',\n 'ds:focus:ps-[var(--spacing-md)] ds:focus-visible:ps-[var(--spacing-md)]',\n 'ds:focus:pe-[var(--spacing-md)] ds:focus-visible:pe-[var(--spacing-md)]',\n 'ds:focus:py-[var(--spacing-sm)] ds:focus-visible:py-[var(--spacing-sm)]',\n 'ds:focus:rounded-[var(--radius-md)] ds:focus-visible:rounded-[var(--radius-md)]',\n 'ds:focus:bg-[var(--primary)] ds:focus-visible:bg-[var(--primary)]',\n 'ds:focus:text-[color:var(--primary-foreground)] ds:focus-visible:text-[color:var(--primary-foreground)]',\n 'ds:focus:text-[length:var(--font-size-sm)] ds:focus-visible:text-[length:var(--font-size-sm)]',\n 'ds:focus:no-underline ds:focus-visible:no-underline',\n 'ds:focus:shadow-[var(--shadow-md)] ds:focus-visible:shadow-[var(--shadow-md)]',\n // Focus ring on top of the pill itself.\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[var(--focus-ring-offset)]',\n // Reduced-motion friendly — no transitions on reveal.\n ].join(' '),\n {\n variants: {\n // Single intent today; CVA stub left in place so future tonal\n // variants (e.g. `subtle`, `inverse`) can plug in without churn.\n intent: {\n primary: '',\n },\n },\n defaultVariants: { intent: 'primary' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SkipLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>,\n VariantProps<typeof skipLinkVariants> {\n /**\n * Anchor target — must be a same-page fragment, e.g. `'#main-content'`.\n * The matching element must have a corresponding `id` attribute and\n * ideally be focusable (`tabIndex={-1}` is acceptable for `<main>` /\n * `<section>` wrappers). @default '#main'\n */\n href?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Accessibility primitive — the very first focusable element inside\n * `<body>`. Lets keyboard and screen-reader users bypass the global\n * navigation chrome and land directly on the page's main content.\n *\n * Visible label is supplied by the consumer (typically via\n * `useTranslation('ui')` against `ui.navigation.skipLink.toContent`),\n * so the component itself stays i18n-free at the prop level.\n */\nexport const SkipLink = forwardRef<HTMLAnchorElement, SkipLinkProps>(\n ({ href = '#main', intent, className, children, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <a\n ref={ref}\n href={href}\n className={[skipLinkVariants({ intent }), className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('ui.navigation.skipLink.toContent')}\n </a>\n );\n },\n);\n\nSkipLink.displayName = 'SkipLink';\n"],"names":["skipLinkVariants","cva","SkipLink","forwardRef","href","intent","className","children","rest","ref","t","useTranslation","jsx"],"mappings":";;;;AAgBA,MAAMA,IAAmBC;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAAA,EAEA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA;AAAA;AAAA,MAGR,QAAQ;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB,EAAE,QAAQ,UAAA;AAAA,EAAU;AAEzC,GA+BaC,IAAWC;AAAA,EACtB,CAAC,EAAE,MAAAC,IAAO,SAAS,QAAAC,GAAQ,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAAQC,MAAQ;AACjE,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA;AACd,WACE,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,MAAAL;AAAA,QACA,WAAW,CAACJ,EAAiB,EAAE,QAAAK,GAAQ,GAAGC,CAAS,EAChD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACV,GAAGE;AAAA,QAEH,UAAAD,KAAYG,EAAE,kCAAkC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGvD;AACF;AAEAR,EAAS,cAAc;"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { jsxs as u, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as na, useState as ia, useCallback as oa, useRef as da } from "react";
|
|
3
|
+
import * as m from "@radix-ui/react-slider";
|
|
4
|
+
import { c as t } from "./index-D2ZczOXr.js";
|
|
5
|
+
import { useTranslation as la } from "react-i18next";
|
|
6
|
+
import { u as ca } from "./form-field-context-94LwgYTQ.js";
|
|
7
|
+
import { u as ua } from "./use-direction-D6rvvG9G.js";
|
|
8
|
+
import { c as ma } from "./compose-refs-C0k0tdqF.js";
|
|
9
|
+
const fa = t(
|
|
10
|
+
[
|
|
11
|
+
"ds:relative ds:flex ds:touch-none ds:select-none ds:items-center",
|
|
12
|
+
"ds:data-[orientation=horizontal]:w-full",
|
|
13
|
+
"ds:data-[orientation=vertical]:flex-col ds:data-[orientation=vertical]:h-full",
|
|
14
|
+
"ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50"
|
|
15
|
+
].join(" "),
|
|
16
|
+
{
|
|
17
|
+
variants: {
|
|
18
|
+
size: {
|
|
19
|
+
sm: "ds:data-[orientation=horizontal]:h-1 ds:data-[orientation=vertical]:w-1",
|
|
20
|
+
md: "ds:data-[orientation=horizontal]:h-2 ds:data-[orientation=vertical]:w-2",
|
|
21
|
+
lg: "ds:data-[orientation=horizontal]:h-3 ds:data-[orientation=vertical]:w-3"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: { size: "md" }
|
|
25
|
+
}
|
|
26
|
+
), ha = t(
|
|
27
|
+
[
|
|
28
|
+
"ds:relative ds:grow ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted",
|
|
29
|
+
"ds:data-[orientation=horizontal]:h-full",
|
|
30
|
+
"ds:data-[orientation=vertical]:w-full"
|
|
31
|
+
].join(" ")
|
|
32
|
+
), pa = t(
|
|
33
|
+
[
|
|
34
|
+
"ds:absolute ds:bg-primary ds:rounded-[var(--radius-full)]",
|
|
35
|
+
"ds:data-[orientation=horizontal]:h-full",
|
|
36
|
+
"ds:data-[orientation=vertical]:w-full"
|
|
37
|
+
].join(" ")
|
|
38
|
+
), va = t(
|
|
39
|
+
[
|
|
40
|
+
"ds:group/thumb",
|
|
41
|
+
"ds:relative ds:block ds:rounded-full",
|
|
42
|
+
"ds:bg-background ds:border-2 ds:border-primary ds:shadow-[var(--shadow-sm)]",
|
|
43
|
+
"ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none",
|
|
44
|
+
"ds:outline-none",
|
|
45
|
+
"ds:focus-visible:shadow-[var(--shadow-focus),var(--shadow-sm)]",
|
|
46
|
+
"ds:active:shadow-[var(--shadow-sm)]",
|
|
47
|
+
"ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50"
|
|
48
|
+
].join(" "),
|
|
49
|
+
{
|
|
50
|
+
variants: {
|
|
51
|
+
size: {
|
|
52
|
+
sm: "ds:size-4",
|
|
53
|
+
md: "ds:size-5",
|
|
54
|
+
lg: "ds:size-6"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
defaultVariants: { size: "md" }
|
|
58
|
+
}
|
|
59
|
+
), ba = t("ds:absolute ds:rounded-full", {
|
|
60
|
+
variants: {
|
|
61
|
+
size: {
|
|
62
|
+
sm: "ds:-inset-[calc((var(--min-target-size)-1rem)/2)]",
|
|
63
|
+
md: "ds:-inset-[calc((var(--min-target-size)-1.25rem)/2)]",
|
|
64
|
+
lg: "ds:-inset-[calc((var(--min-target-size)-1.5rem)/2)]"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
defaultVariants: { size: "md" }
|
|
68
|
+
}), ga = t(
|
|
69
|
+
"ds:absolute ds:flex ds:pointer-events-none ds:items-center ds:justify-center",
|
|
70
|
+
{
|
|
71
|
+
variants: {
|
|
72
|
+
orientation: {
|
|
73
|
+
horizontal: "ds:start-0 ds:end-0 ds:bottom-full",
|
|
74
|
+
vertical: "ds:top-0 ds:bottom-0 ds:start-full"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
defaultVariants: { orientation: "horizontal" }
|
|
78
|
+
}
|
|
79
|
+
), xa = t(
|
|
80
|
+
[
|
|
81
|
+
"ds:whitespace-nowrap ds:bg-foreground ds:text-background",
|
|
82
|
+
"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]",
|
|
83
|
+
"ds:rounded-[var(--radius-sm)] ds:text-[var(--font-size-xs)] ds:tabular-nums",
|
|
84
|
+
"ds:shadow-[var(--shadow-sm)]",
|
|
85
|
+
"ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none"
|
|
86
|
+
].join(" "),
|
|
87
|
+
{
|
|
88
|
+
variants: {
|
|
89
|
+
orientation: {
|
|
90
|
+
horizontal: "ds:mb-[var(--spacing-xs)]",
|
|
91
|
+
vertical: "ds:ms-[var(--spacing-xs)]"
|
|
92
|
+
},
|
|
93
|
+
alwaysShow: {
|
|
94
|
+
true: "ds:opacity-100",
|
|
95
|
+
false: "ds:opacity-0 ds:group-hover/thumb:opacity-100 ds:group-focus-visible/thumb:opacity-100"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
defaultVariants: { orientation: "horizontal", alwaysShow: !1 }
|
|
99
|
+
}
|
|
100
|
+
), wa = t("ds:absolute ds:pointer-events-none", {
|
|
101
|
+
variants: {
|
|
102
|
+
orientation: {
|
|
103
|
+
horizontal: "ds:start-0 ds:end-0 ds:top-full",
|
|
104
|
+
vertical: "ds:top-0 ds:bottom-0 ds:start-full"
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
defaultVariants: { orientation: "horizontal" }
|
|
108
|
+
}), za = t("ds:absolute ds:flex ds:items-center", {
|
|
109
|
+
variants: {
|
|
110
|
+
orientation: {
|
|
111
|
+
horizontal: "ds:flex-col ds:-translate-x-1/2 ds:rtl:translate-x-1/2",
|
|
112
|
+
vertical: "ds:flex-row ds:-translate-y-1/2 ds:ps-[var(--spacing-xs)]"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
defaultVariants: { orientation: "horizontal" }
|
|
116
|
+
}), ya = t("ds:bg-border", {
|
|
117
|
+
variants: {
|
|
118
|
+
orientation: {
|
|
119
|
+
horizontal: "ds:w-px ds:h-1",
|
|
120
|
+
vertical: "ds:h-px ds:w-1"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
defaultVariants: { orientation: "horizontal" }
|
|
124
|
+
}), Va = t(
|
|
125
|
+
"ds:text-muted-foreground type-meta ds:mt-[var(--spacing-xs)]"
|
|
126
|
+
), Na = t(
|
|
127
|
+
"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]",
|
|
128
|
+
{
|
|
129
|
+
variants: {
|
|
130
|
+
orientation: {
|
|
131
|
+
horizontal: "ds:w-full ds:flex-row",
|
|
132
|
+
vertical: "ds:h-full ds:flex-col-reverse"
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
defaultVariants: { orientation: "horizontal" }
|
|
136
|
+
}
|
|
137
|
+
), F = t(
|
|
138
|
+
"ds:text-muted-foreground type-meta ds:tabular-nums ds:shrink-0"
|
|
139
|
+
), ka = na((B, I) => {
|
|
140
|
+
const {
|
|
141
|
+
value: o,
|
|
142
|
+
defaultValue: y,
|
|
143
|
+
marks: f,
|
|
144
|
+
minLabel: h,
|
|
145
|
+
maxLabel: p,
|
|
146
|
+
formatValue: P,
|
|
147
|
+
alwaysShowValue: $ = !1,
|
|
148
|
+
step: q = 1,
|
|
149
|
+
largeStep: V = 10,
|
|
150
|
+
thumbLabels: d,
|
|
151
|
+
size: v = "md",
|
|
152
|
+
orientation: e = "horizontal",
|
|
153
|
+
min: n = 0,
|
|
154
|
+
max: b = 100,
|
|
155
|
+
disabled: A,
|
|
156
|
+
dir: C,
|
|
157
|
+
id: E,
|
|
158
|
+
className: U,
|
|
159
|
+
onValueChange: g,
|
|
160
|
+
onValueCommit: l,
|
|
161
|
+
onKeyDown: x,
|
|
162
|
+
...W
|
|
163
|
+
} = B, { t: N, i18n: k } = la(), i = ca(), c = o !== void 0, [K, O] = ia(
|
|
164
|
+
o ?? y ?? [n]
|
|
165
|
+
), w = c ? o : K, S = (a) => {
|
|
166
|
+
c || O(a), g == null || g(a);
|
|
167
|
+
}, j = !!(i.disabled || A), G = i.describedBy || void 0, H = E ?? i.id, J = oa(
|
|
168
|
+
(a) => new Intl.NumberFormat(k.language).format(a),
|
|
169
|
+
[k.language]
|
|
170
|
+
), R = P ?? J, Q = N("ui.inputs.slider.minLabel", "Minimum"), X = N("ui.inputs.slider.maxLabel", "Maximum"), Y = (a) => {
|
|
171
|
+
if (d != null && d[a]) return d[a];
|
|
172
|
+
if (w.length === 2)
|
|
173
|
+
return a === 0 ? Q : X;
|
|
174
|
+
}, Z = (a) => {
|
|
175
|
+
if (x == null || x(a), a.defaultPrevented || j || a.key !== "PageUp" && a.key !== "PageDown") return;
|
|
176
|
+
a.preventDefault();
|
|
177
|
+
const r = Array.from(
|
|
178
|
+
a.currentTarget.querySelectorAll('[role="slider"]')
|
|
179
|
+
), z = Math.max(
|
|
180
|
+
0,
|
|
181
|
+
r.indexOf(document.activeElement)
|
|
182
|
+
), ea = a.key === "PageUp" ? V : -V, T = w.map(
|
|
183
|
+
(D, ra) => ra === z ? Math.max(n, Math.min(b, D + ea)) : D
|
|
184
|
+
);
|
|
185
|
+
S(T), l == null || l(T);
|
|
186
|
+
}, _ = b - n || 1, aa = (a) => (a - n) / _ * 100, L = da(null), ta = ma(I, L), sa = ua(L), M = /* @__PURE__ */ u(
|
|
187
|
+
m.Root,
|
|
188
|
+
{
|
|
189
|
+
ref: ta,
|
|
190
|
+
id: H,
|
|
191
|
+
dir: C ?? sa,
|
|
192
|
+
orientation: e,
|
|
193
|
+
min: n,
|
|
194
|
+
max: b,
|
|
195
|
+
step: q,
|
|
196
|
+
disabled: j,
|
|
197
|
+
value: c ? o : void 0,
|
|
198
|
+
defaultValue: c ? void 0 : y ?? [n],
|
|
199
|
+
onValueChange: S,
|
|
200
|
+
onValueCommit: l,
|
|
201
|
+
onKeyDown: Z,
|
|
202
|
+
"aria-describedby": G,
|
|
203
|
+
"aria-invalid": i.invalid || void 0,
|
|
204
|
+
"aria-required": i.required || void 0,
|
|
205
|
+
className: fa({ size: v, className: U }),
|
|
206
|
+
...W,
|
|
207
|
+
children: [
|
|
208
|
+
/* @__PURE__ */ s(m.Track, { className: ha(), children: /* @__PURE__ */ s(m.Range, { className: pa() }) }),
|
|
209
|
+
f && f.length > 0 ? /* @__PURE__ */ s(
|
|
210
|
+
"span",
|
|
211
|
+
{
|
|
212
|
+
"aria-hidden": "true",
|
|
213
|
+
className: wa({ orientation: e }),
|
|
214
|
+
children: f.map((a) => {
|
|
215
|
+
const r = aa(a.value), z = e === "vertical" ? { insetBlockEnd: `${r}%` } : { insetInlineStart: `${r}%` };
|
|
216
|
+
return /* @__PURE__ */ u(
|
|
217
|
+
"span",
|
|
218
|
+
{
|
|
219
|
+
className: za({ orientation: e }),
|
|
220
|
+
style: z,
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ s("span", { className: ya({ orientation: e }) }),
|
|
223
|
+
a.label ? /* @__PURE__ */ s("span", { className: Va(), children: a.label }) : null
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
`${a.value}-${a.label ?? ""}`
|
|
227
|
+
);
|
|
228
|
+
})
|
|
229
|
+
}
|
|
230
|
+
) : null,
|
|
231
|
+
w.map((a, r) => /* @__PURE__ */ u(
|
|
232
|
+
m.Thumb,
|
|
233
|
+
{
|
|
234
|
+
"aria-label": Y(r),
|
|
235
|
+
"aria-valuetext": R(a),
|
|
236
|
+
className: va({ size: v }),
|
|
237
|
+
children: [
|
|
238
|
+
/* @__PURE__ */ s("span", { "aria-hidden": "true", className: ba({ size: v }) }),
|
|
239
|
+
/* @__PURE__ */ s(
|
|
240
|
+
"span",
|
|
241
|
+
{
|
|
242
|
+
"aria-hidden": "true",
|
|
243
|
+
className: ga({ orientation: e }),
|
|
244
|
+
children: /* @__PURE__ */ s(
|
|
245
|
+
"span",
|
|
246
|
+
{
|
|
247
|
+
className: xa({
|
|
248
|
+
orientation: e,
|
|
249
|
+
alwaysShow: $
|
|
250
|
+
}),
|
|
251
|
+
children: R(a)
|
|
252
|
+
}
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
)
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
r
|
|
259
|
+
))
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
);
|
|
263
|
+
return h !== void 0 || p !== void 0 ? /* @__PURE__ */ u("div", { className: Na({ orientation: e }), children: [
|
|
264
|
+
h !== void 0 ? /* @__PURE__ */ s("span", { className: F(), children: h }) : null,
|
|
265
|
+
M,
|
|
266
|
+
p !== void 0 ? /* @__PURE__ */ s("span", { className: F(), children: p }) : null
|
|
267
|
+
] }) : M;
|
|
268
|
+
});
|
|
269
|
+
ka.displayName = "Slider";
|
|
270
|
+
export {
|
|
271
|
+
ka as S
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=slider-n8JWpJvT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider-n8JWpJvT.js","sources":["../../src/components/slider/slider.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type KeyboardEvent,\n} from 'react';\nimport * as RadixSlider from '@radix-ui/react-slider';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\n\nexport interface SliderMark {\n value: number;\n label?: string;\n}\n\nconst sliderVariants = cva(\n [\n 'ds:relative ds:flex ds:touch-none ds:select-none ds:items-center',\n 'ds:data-[orientation=horizontal]:w-full',\n 'ds:data-[orientation=vertical]:flex-col ds:data-[orientation=vertical]:h-full',\n 'ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:data-[orientation=horizontal]:h-1 ds:data-[orientation=vertical]:w-1',\n md: 'ds:data-[orientation=horizontal]:h-2 ds:data-[orientation=vertical]:w-2',\n lg: 'ds:data-[orientation=horizontal]:h-3 ds:data-[orientation=vertical]:w-3',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst trackVariants = cva(\n [\n 'ds:relative ds:grow ds:overflow-hidden ds:rounded-[var(--radius-full)] ds:bg-muted',\n 'ds:data-[orientation=horizontal]:h-full',\n 'ds:data-[orientation=vertical]:w-full',\n ].join(' '),\n);\n\nconst rangeVariants = cva(\n [\n 'ds:absolute ds:bg-primary ds:rounded-[var(--radius-full)]',\n 'ds:data-[orientation=horizontal]:h-full',\n 'ds:data-[orientation=vertical]:w-full',\n ].join(' '),\n);\n\nconst thumbVariants = cva(\n [\n 'ds:group/thumb',\n 'ds:relative ds:block ds:rounded-full',\n 'ds:bg-background ds:border-2 ds:border-primary ds:shadow-[var(--shadow-sm)]',\n 'ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:outline-none',\n 'ds:focus-visible:shadow-[var(--shadow-focus),var(--shadow-sm)]',\n 'ds:active:shadow-[var(--shadow-sm)]',\n 'ds:data-[disabled]:cursor-not-allowed ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:size-4',\n md: 'ds:size-5',\n lg: 'ds:size-6',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst hitAreaVariants = cva('ds:absolute ds:rounded-full', {\n variants: {\n size: {\n sm: 'ds:-inset-[calc((var(--min-target-size)-1rem)/2)]',\n md: 'ds:-inset-[calc((var(--min-target-size)-1.25rem)/2)]',\n lg: 'ds:-inset-[calc((var(--min-target-size)-1.5rem)/2)]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst tooltipWrapperVariants = cva(\n 'ds:absolute ds:flex ds:pointer-events-none ds:items-center ds:justify-center',\n {\n variants: {\n orientation: {\n horizontal: 'ds:start-0 ds:end-0 ds:bottom-full',\n vertical: 'ds:top-0 ds:bottom-0 ds:start-full',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n },\n);\n\nconst tooltipBubbleVariants = cva(\n [\n 'ds:whitespace-nowrap ds:bg-foreground ds:text-background',\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:text-[var(--font-size-xs)] ds:tabular-nums',\n 'ds:shadow-[var(--shadow-sm)]',\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n orientation: {\n horizontal: 'ds:mb-[var(--spacing-xs)]',\n vertical: 'ds:ms-[var(--spacing-xs)]',\n },\n alwaysShow: {\n true: 'ds:opacity-100',\n false:\n 'ds:opacity-0 ds:group-hover/thumb:opacity-100 ds:group-focus-visible/thumb:opacity-100',\n },\n },\n defaultVariants: { orientation: 'horizontal', alwaysShow: false },\n },\n);\n\nconst marksContainerVariants = cva('ds:absolute ds:pointer-events-none', {\n variants: {\n orientation: {\n horizontal: 'ds:start-0 ds:end-0 ds:top-full',\n vertical: 'ds:top-0 ds:bottom-0 ds:start-full',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst markVariants = cva('ds:absolute ds:flex ds:items-center', {\n variants: {\n orientation: {\n horizontal: 'ds:flex-col ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n vertical: 'ds:flex-row ds:-translate-y-1/2 ds:ps-[var(--spacing-xs)]',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst tickVariants = cva('ds:bg-border', {\n variants: {\n orientation: {\n horizontal: 'ds:w-px ds:h-1',\n vertical: 'ds:h-px ds:w-1',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n});\n\nconst markLabelVariants = cva(\n 'ds:text-muted-foreground type-meta ds:mt-[var(--spacing-xs)]',\n);\n\nconst endpointWrapperVariants = cva(\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n orientation: {\n horizontal: 'ds:w-full ds:flex-row',\n vertical: 'ds:h-full ds:flex-col-reverse',\n },\n },\n defaultVariants: { orientation: 'horizontal' },\n },\n);\n\nconst endpointLabelVariants = cva(\n 'ds:text-muted-foreground type-meta ds:tabular-nums ds:shrink-0',\n);\n\ntype RadixSliderRootProps = ComponentPropsWithoutRef<typeof RadixSlider.Root>;\n\nexport interface SliderProps\n extends Omit<RadixSliderRootProps, 'children'>,\n VariantProps<typeof sliderVariants> {\n value?: number[];\n defaultValue?: number[];\n marks?: SliderMark[];\n minLabel?: string;\n maxLabel?: string;\n formatValue?: (value: number) => string;\n alwaysShowValue?: boolean;\n step?: number;\n largeStep?: number;\n thumbLabels?: string[];\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n onValueChange?: (value: number[]) => void;\n onValueCommit?: (value: number[]) => void;\n className?: string;\n}\n\nexport const Slider = forwardRef<\n ElementRef<typeof RadixSlider.Root>,\n SliderProps\n>((props, ref) => {\n const {\n value,\n defaultValue,\n marks,\n minLabel,\n maxLabel,\n formatValue,\n alwaysShowValue = false,\n step = 1,\n largeStep = 10,\n thumbLabels,\n size = 'md',\n orientation = 'horizontal',\n min = 0,\n max = 100,\n disabled,\n dir,\n id,\n className,\n onValueChange,\n onValueCommit,\n onKeyDown,\n ...rest\n } = props;\n\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<number[]>(\n value ?? defaultValue ?? [min],\n );\n const currentValue: number[] = isControlled\n ? (value as number[])\n : internalValue;\n\n const handleValueChange = (next: number[]) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n const describedBy = ctx.describedBy || undefined;\n const sliderId = id ?? ctx.id;\n\n const defaultFormat = useCallback(\n (n: number) => new Intl.NumberFormat(i18n.language).format(n),\n [i18n.language],\n );\n const format = formatValue ?? defaultFormat;\n\n const defaultMinThumbLabel = t('ui.inputs.slider.minLabel', 'Minimum');\n const defaultMaxThumbLabel = t('ui.inputs.slider.maxLabel', 'Maximum');\n const labelForThumb = (i: number): string | undefined => {\n if (thumbLabels?.[i]) return thumbLabels[i];\n if (currentValue.length === 2) {\n return i === 0 ? defaultMinThumbLabel : defaultMaxThumbLabel;\n }\n return undefined;\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (effectiveDisabled) return;\n if (event.key !== 'PageUp' && event.key !== 'PageDown') return;\n\n event.preventDefault();\n const thumbs = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>('[role=\"slider\"]'),\n );\n const activeIndex = Math.max(\n 0,\n thumbs.indexOf(document.activeElement as HTMLElement),\n );\n const delta = event.key === 'PageUp' ? largeStep : -largeStep;\n const next = currentValue.map((v, i) =>\n i === activeIndex ? Math.max(min, Math.min(max, v + delta)) : v,\n );\n handleValueChange(next);\n onValueCommit?.(next);\n };\n\n const denom = max - min || 1;\n const percentFor = (n: number) => ((n - min) / denom) * 100;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const autoDir = useDirection(rootRef);\n\n const root = (\n <RadixSlider.Root\n ref={composedRef}\n id={sliderId}\n dir={dir ?? autoDir}\n orientation={orientation}\n min={min}\n max={max}\n step={step}\n disabled={effectiveDisabled}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? [min]) : undefined}\n onValueChange={handleValueChange}\n onValueCommit={onValueCommit}\n onKeyDown={handleKeyDown}\n aria-describedby={describedBy}\n aria-invalid={ctx.invalid || undefined}\n aria-required={ctx.required || undefined}\n className={sliderVariants({ size, className })}\n {...rest}\n >\n <RadixSlider.Track className={trackVariants()}>\n <RadixSlider.Range className={rangeVariants()} />\n </RadixSlider.Track>\n {marks && marks.length > 0 ? (\n <span\n aria-hidden=\"true\"\n className={marksContainerVariants({ orientation })}\n >\n {marks.map((m) => {\n const p = percentFor(m.value);\n const positionStyle: CSSProperties =\n orientation === 'vertical'\n ? { insetBlockEnd: `${p}%` }\n : { insetInlineStart: `${p}%` };\n return (\n <span\n key={`${m.value}-${m.label ?? ''}`}\n className={markVariants({ orientation })}\n style={positionStyle}\n >\n <span className={tickVariants({ orientation })} />\n {m.label ? (\n <span className={markLabelVariants()}>{m.label}</span>\n ) : null}\n </span>\n );\n })}\n </span>\n ) : null}\n {currentValue.map((v, i) => (\n <RadixSlider.Thumb\n key={i}\n aria-label={labelForThumb(i)}\n aria-valuetext={format(v)}\n className={thumbVariants({ size })}\n >\n <span aria-hidden=\"true\" className={hitAreaVariants({ size })} />\n <span\n aria-hidden=\"true\"\n className={tooltipWrapperVariants({ orientation })}\n >\n <span\n className={tooltipBubbleVariants({\n orientation,\n alwaysShow: alwaysShowValue,\n })}\n >\n {format(v)}\n </span>\n </span>\n </RadixSlider.Thumb>\n ))}\n </RadixSlider.Root>\n );\n\n if (minLabel !== undefined || maxLabel !== undefined) {\n return (\n <div className={endpointWrapperVariants({ orientation })}>\n {minLabel !== undefined ? (\n <span className={endpointLabelVariants()}>{minLabel}</span>\n ) : null}\n {root}\n {maxLabel !== undefined ? (\n <span className={endpointLabelVariants()}>{maxLabel}</span>\n ) : null}\n </div>\n );\n }\n\n return root;\n});\n\nSlider.displayName = 'Slider';\n"],"names":["sliderVariants","cva","trackVariants","rangeVariants","thumbVariants","hitAreaVariants","tooltipWrapperVariants","tooltipBubbleVariants","marksContainerVariants","markVariants","tickVariants","markLabelVariants","endpointWrapperVariants","endpointLabelVariants","Slider","forwardRef","props","ref","value","defaultValue","marks","minLabel","maxLabel","formatValue","alwaysShowValue","step","largeStep","thumbLabels","size","orientation","min","max","disabled","dir","id","className","onValueChange","onValueCommit","onKeyDown","rest","t","i18n","useTranslation","ctx","useFormField","isControlled","internalValue","setInternalValue","useState","currentValue","handleValueChange","next","effectiveDisabled","describedBy","sliderId","defaultFormat","useCallback","n","format","defaultMinThumbLabel","defaultMaxThumbLabel","labelForThumb","i","handleKeyDown","event","thumbs","activeIndex","delta","v","denom","percentFor","rootRef","useRef","composedRef","composeRefs","autoDir","useDirection","root","jsxs","RadixSlider","jsx","m","p","positionStyle"],"mappings":"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"}
|