@alfadocs/ui-kit 0.0.20 → 0.1.0
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-Br5k7Rul.js} +36 -36
- package/dist/_chunks/privacy-lock-Br5k7Rul.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/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/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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phone-input-C2dtIuxW.js","sources":["../../src/components/phone-input/phone-input.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command, defaultFilter } from 'cmdk';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport {\n AsYouType,\n getCountries,\n getCountryCallingCode,\n parsePhoneNumberFromString,\n type CountryCode,\n} from 'libphonenumber-js/min';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { normalizeDiacritics } from '../_shared/normalize-diacritics';\nimport { Flag } from '../flag';\n\nexport interface PhoneInputChangeMeta {\n country: CountryCode;\n isValid: boolean;\n isPossible: boolean;\n type?: string;\n}\n\nexport interface PhoneInputProps {\n value?: string;\n defaultValue?: string;\n /**\n * Country pre-selected when no value is supplied. Defaults to `IT`\n * (AlfaDocs's dominant user base is Italian). Pass a different\n * `CountryCode` to override, or enable `detectBrowserCountry` to\n * derive it from the browser locale.\n */\n defaultCountry?: CountryCode;\n /**\n * When true, infer the default country from `navigator.language` /\n * `Intl.Locale` before falling back to `defaultCountry` (or `IT`).\n * Off by default — most AlfaDocs flows should stay on IT regardless\n * of the visitor's browser locale.\n */\n detectBrowserCountry?: boolean;\n onChange?: (e164: string, meta: PhoneInputChangeMeta) => void;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n popularCountries?: CountryCode[];\n className?: string;\n id?: string;\n name?: string;\n required?: boolean;\n 'aria-label'?: string;\n}\n\nconst phoneInputWrapperVariants = cva(\n [\n 'group relative inline-flex items-stretch w-full',\n 'rounded-[var(--radius-sm)] border border-border bg-background',\n 'text-foreground',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n 'focus-within:outline-[length:var(--focus-ring-width)] focus-within:outline-solid',\n 'focus-within:outline-ring focus-within:outline-offset-[length:var(--focus-ring-offset)]',\n 'forced-colors:focus-within:outline-[CanvasText]',\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'h-8 text-[var(--font-size-sm)]',\n md: 'h-[var(--min-target-size)] text-[var(--font-size-base)]',\n lg: 'h-12 text-[var(--font-size-lg)]',\n },\n tone: {\n default: '',\n error: 'border-destructive focus-within:outline-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst countryTriggerVariants = cva(\n [\n 'inline-flex items-center gap-[var(--spacing-xs)]',\n 'bg-transparent text-foreground',\n 'border-0 border-e border-e-border',\n 'rounded-s-[var(--radius-sm)]',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n 'hover:bg-muted',\n 'focus:outline-none',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-ring focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'forced-colors:focus-visible:outline-[CanvasText]',\n 'disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ps-3 pe-2',\n md: 'ps-3 pe-2',\n lg: 'ps-4 pe-3',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst phoneNumberInputVariants = cva(\n [\n 'flex-1 min-w-0 bg-transparent text-foreground placeholder:text-muted-foreground',\n 'border-0 outline-none',\n 'disabled:cursor-not-allowed',\n 'read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ps-2 pe-3 text-[var(--font-size-sm)]',\n md: 'ps-2 pe-3 text-[var(--font-size-base)]',\n lg: 'ps-3 pe-4 text-[var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst pickerContentClasses = [\n 'z-[var(--z-popover)] overflow-hidden w-72',\n 'rounded-[var(--radius-md)] border border-border bg-background text-foreground',\n 'shadow-[var(--shadow-lg)]',\n 'animate-in fade-in zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out',\n 'data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n 'motion-reduce:animate-none',\n].join(' ');\n\nconst pickerSearchClasses = [\n 'w-full bg-transparent text-foreground placeholder:text-muted-foreground',\n 'border-0 border-b border-b-border outline-none',\n 'ps-3 pe-3 py-2 text-[var(--font-size-sm)]',\n 'focus:outline-none',\n].join(' ');\n\nconst pickerListClasses = 'max-h-72 overflow-y-auto p-[var(--spacing-xs)]';\n\nconst pickerItemClasses = [\n 'relative flex cursor-pointer items-center gap-[var(--spacing-sm)]',\n 'rounded-[var(--radius-sm)] ps-3 pe-3 py-2 text-[var(--font-size-sm)]',\n 'text-foreground outline-none select-none',\n 'data-[highlighted]:bg-muted data-[highlighted]:text-foreground',\n 'data-[highlighted]:border-s-2 data-[highlighted]:border-s-primary',\n 'aria-selected:bg-muted',\n].join(' ');\n\nconst pickerGroupHeadingClasses = [\n 'ps-3 pe-3 py-1.5',\n 'type-eyebrow text-muted-foreground',\n].join(' ');\n\nconst pickerEmptyClasses = 'ps-3 pe-3 py-2 type-body-sm text-muted-foreground';\n\nconst chevronSizeBySize = {\n sm: 'size-3.5',\n md: 'size-4',\n lg: 'size-5',\n} as const;\n\nconst flagSizeBySize = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n} as const satisfies Record<'sm' | 'md' | 'lg', 'sm' | 'md' | 'lg'>;\n\nfunction countDigitsBefore(str: string, position: number): number {\n let digits = 0;\n for (let i = 0; i < position && i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') digits++;\n }\n return digits;\n}\n\nfunction positionAfterDigits(str: string, targetDigits: number): number {\n if (targetDigits === 0) return 0;\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') {\n count++;\n if (count === targetDigits) return i + 1;\n }\n }\n return str.length;\n}\n\nfunction resolveDefaultCountry(\n explicit: CountryCode | undefined,\n supported: Set<string>,\n detectBrowser: boolean,\n locale: string,\n): CountryCode {\n if (explicit && supported.has(explicit)) return explicit;\n\n if (detectBrowser) {\n const fromNavigator =\n typeof navigator !== 'undefined' ? navigator.language : undefined;\n if (fromNavigator) {\n const match = fromNavigator.match(/-([A-Za-z]{2})/);\n if (match) {\n const candidate = match[1].toUpperCase();\n if (supported.has(candidate)) return candidate as CountryCode;\n }\n }\n\n try {\n const region = new Intl.Locale(locale).region;\n if (region && supported.has(region.toUpperCase())) {\n return region.toUpperCase() as CountryCode;\n }\n } catch {\n // Intl.Locale may throw on malformed BCP-47 — fall through.\n }\n }\n\n return 'IT';\n}\n\ninterface CountryRow {\n code: CountryCode;\n name: string;\n dialCode: string;\n}\n\nfunction buildCountryRows(\n locale: string,\n countries: CountryCode[],\n): CountryRow[] {\n let displayNames: Intl.DisplayNames;\n try {\n displayNames = new Intl.DisplayNames([locale], { type: 'region' });\n } catch {\n displayNames = new Intl.DisplayNames(['en'], { type: 'region' });\n }\n const rows = countries.map<CountryRow>((code) => ({\n code,\n name: displayNames.of(code) ?? code,\n dialCode: getCountryCallingCode(code),\n }));\n const collator = new Intl.Collator(locale);\n return rows.sort((a, b) => collator.compare(a.name, b.name));\n}\n\nexport const PhoneInput = forwardRef<HTMLInputElement, PhoneInputProps>(\n function PhoneInput(\n {\n value,\n defaultValue,\n defaultCountry,\n detectBrowserCountry = false,\n onChange,\n size = 'md',\n tone = 'default',\n disabled,\n readOnly,\n placeholder,\n popularCountries,\n className,\n id,\n name,\n required,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const supportedCountries = useMemo(\n () => new Set(getCountries() as string[]),\n [],\n );\n\n const initialState = useMemo(() => {\n const resolvedCountry = resolveDefaultCountry(\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n i18n.language,\n );\n const raw = value ?? defaultValue;\n if (raw) {\n const parsed = parsePhoneNumberFromString(raw);\n if (parsed?.country) {\n return {\n country: parsed.country,\n display: parsed.formatNational(),\n };\n }\n return { country: resolvedCountry, display: raw };\n }\n return { country: resolvedCountry, display: '' };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [country, setCountry] = useState<CountryCode>(initialState.country);\n const [displayValue, setDisplayValue] = useState<string>(\n initialState.display,\n );\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pickerSearch, setPickerSearch] = useState('');\n\n const isControlled = value !== undefined;\n const lastEmittedRef = useRef<string>('');\n const pendingCaretRef = useRef<number | null>(null);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedInputRef = composeRefs(ref, inputRef);\n\n // Sync state back from a controlled `value` prop change that did not\n // originate from this component (e.g. parent reset). Skip the sync when\n // the incoming value matches what we just emitted.\n useEffect(() => {\n if (!isControlled) return;\n const current = value ?? '';\n if (current === lastEmittedRef.current) return;\n if (current === '') {\n setDisplayValue('');\n return;\n }\n const parsed = parsePhoneNumberFromString(current);\n if (parsed?.country) {\n setCountry(parsed.country);\n setDisplayValue(parsed.formatNational());\n } else {\n setDisplayValue(current);\n }\n }, [value, isControlled]);\n\n useLayoutEffect(() => {\n if (pendingCaretRef.current == null) return;\n const pos = pendingCaretRef.current;\n pendingCaretRef.current = null;\n const node = inputRef.current;\n if (node && document.activeElement === node) {\n node.setSelectionRange(pos, pos);\n }\n });\n\n const emit = useCallback(\n (nextDisplay: string, nextCountry: CountryCode) => {\n const parsed = parsePhoneNumberFromString(nextDisplay, nextCountry);\n const e164 = parsed?.number ?? '';\n lastEmittedRef.current = e164;\n onChange?.(e164, {\n country: nextCountry,\n isValid: parsed?.isValid() ?? false,\n isPossible: parsed?.isPossible() ?? false,\n type: parsed?.getType(),\n });\n },\n [onChange],\n );\n\n const inputId = id ?? (inFormField ? ctx.id : undefined);\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const resolvedPlaceholder =\n placeholder ?? t('ui.inputs.phone.placeholder', 'Phone number');\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (readOnly) return;\n const target = event.target;\n const raw = target.value;\n const caret = target.selectionStart ?? raw.length;\n const digitsBefore = countDigitsBefore(raw, caret);\n\n const formatter = new AsYouType(country);\n const formatted = formatter.input(raw);\n\n pendingCaretRef.current = positionAfterDigits(formatted, digitsBefore);\n setDisplayValue(formatted);\n emit(formatted, country);\n };\n\n const handleCountrySelect = (nextCountry: CountryCode) => {\n if (nextCountry === country) {\n setPickerOpen(false);\n return;\n }\n const digits = displayValue.replace(/\\D/g, '');\n const formatter = new AsYouType(nextCountry);\n const reformatted = digits ? formatter.input(digits) : '';\n setCountry(nextCountry);\n setDisplayValue(reformatted);\n setPickerOpen(false);\n setPickerSearch('');\n emit(reformatted, nextCountry);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n };\n\n const countryRows = useMemo(\n () =>\n buildCountryRows(\n i18n.language,\n Array.from(supportedCountries) as CountryCode[],\n ),\n [i18n.language, supportedCountries],\n );\n\n const popularRows = useMemo(() => {\n if (!popularCountries || popularCountries.length === 0) return [];\n const byCode = new Map(countryRows.map((row) => [row.code, row]));\n return popularCountries\n .filter((code): code is CountryCode =>\n supportedCountries.has(code),\n )\n .map((code) => byCode.get(code))\n .filter((row): row is CountryRow => Boolean(row));\n }, [popularCountries, countryRows, supportedCountries]);\n\n const popularCodes = useMemo(\n () => new Set(popularRows.map((row) => row.code)),\n [popularRows],\n );\n\n const remainingRows = useMemo(\n () =>\n popularCodes.size > 0\n ? countryRows.filter((row) => !popularCodes.has(row.code))\n : countryRows,\n [countryRows, popularCodes],\n );\n\n const selected = useMemo(\n () => countryRows.find((row) => row.code === country),\n [countryRows, country],\n );\n const selectedDialCode = selected ? selected.dialCode : '';\n const selectedName = selected ? selected.name : country;\n\n const triggerLabel = t(\n 'ui.inputs.phone.countryPickerLabel',\n 'Country',\n );\n const triggerAccessibleName = `${triggerLabel}: ${selectedName}, +${selectedDialCode}`;\n\n const filterFn = useCallback(\n (candidate: string, searchStr: string, keywords?: string[]) => {\n const normalizedCandidate = normalizeDiacritics(candidate);\n const normalizedSearch = normalizeDiacritics(searchStr);\n const normalizedKeywords = keywords?.map(normalizeDiacritics);\n return defaultFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords,\n );\n },\n [],\n );\n\n const renderRow = (row: CountryRow) => {\n const accessibleLabel = `${row.name}, +${row.dialCode}`;\n return (\n <Command.Item\n key={row.code}\n value={row.code}\n keywords={[row.name, row.dialCode, `+${row.dialCode}`]}\n onSelect={() => handleCountrySelect(row.code)}\n className={pickerItemClasses}\n aria-label={accessibleLabel}\n >\n <Flag country={row.code} size={flagSizeBySize[size]} />\n <span className=\"flex-1 truncate\">{row.name}</span>\n <bdi dir=\"ltr\" className=\"text-muted-foreground tabular-nums\">\n +{row.dialCode}\n </bdi>\n </Command.Item>\n );\n };\n\n return (\n <div\n data-slot=\"phone-input\"\n className={phoneInputWrapperVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n <Popover.Root open={pickerOpen} onOpenChange={setPickerOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={effectiveDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={pickerOpen}\n aria-label={triggerAccessibleName}\n className={countryTriggerVariants({ size })}\n >\n <Flag country={country} size={flagSizeBySize[size]} />\n <bdi dir=\"ltr\" className=\"tabular-nums\">\n +{selectedDialCode}\n </bdi>\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n chevronSizeBySize[size],\n 'shrink-0 text-muted-foreground',\n 'transition-transform duration-[var(--animation-duration)] motion-reduce:transition-none',\n pickerOpen ? 'rotate-180' : '',\n ].join(' ')}\n />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n sideOffset={6}\n align=\"start\"\n className={pickerContentClasses}\n >\n <Command filter={filterFn} shouldFilter loop label={triggerLabel}>\n <Command.Input\n asChild\n value={pickerSearch}\n onValueChange={setPickerSearch}\n >\n <input\n data-phone-country-search=\"true\"\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n placeholder={t(\n 'ui.inputs.phone.searchCountry',\n 'Search countries…',\n )}\n className={pickerSearchClasses}\n />\n </Command.Input>\n <Command.List className={pickerListClasses}>\n <Command.Empty className={pickerEmptyClasses}>\n {t('ui.inputs.phone.noCountryFound', 'No country found')}\n </Command.Empty>\n {popularRows.length > 0 ? (\n <Command.Group\n heading={\n <span className={pickerGroupHeadingClasses}>\n {t('ui.inputs.phone.popularCountries', 'Popular')}\n </span>\n }\n >\n {popularRows.map(renderRow)}\n </Command.Group>\n ) : null}\n <Command.Group\n heading={\n popularRows.length > 0 ? (\n <span className={pickerGroupHeadingClasses}>\n {t('ui.inputs.phone.allCountries', 'All countries')}\n </span>\n ) : undefined\n }\n >\n {remainingRows.map(renderRow)}\n </Command.Group>\n </Command.List>\n </Command>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n <input\n ref={composedInputRef}\n id={inputId}\n name={name}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n value={displayValue}\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n onChange={handleInputChange}\n className={phoneNumberInputVariants({ size })}\n />\n </div>\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\nexport {\n phoneInputWrapperVariants,\n countryTriggerVariants,\n phoneNumberInputVariants,\n};\n"],"names":["phoneInputWrapperVariants","cva","countryTriggerVariants","phoneNumberInputVariants","pickerContentClasses","pickerSearchClasses","pickerListClasses","pickerItemClasses","pickerGroupHeadingClasses","pickerEmptyClasses","chevronSizeBySize","flagSizeBySize","countDigitsBefore","str","position","digits","i","positionAfterDigits","targetDigits","count","resolveDefaultCountry","explicit","supported","detectBrowser","locale","fromNavigator","match","candidate","region","buildCountryRows","countries","displayNames","rows","code","getCountryCallingCode","collator","a","b","PhoneInput","forwardRef","value","defaultValue","defaultCountry","detectBrowserCountry","onChange","size","tone","disabled","readOnly","placeholder","popularCountries","className","id","name","required","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","supportedCountries","useMemo","getCountries","initialState","resolvedCountry","raw","parsed","parsePhoneNumberFromString","country","setCountry","useState","displayValue","setDisplayValue","pickerOpen","setPickerOpen","pickerSearch","setPickerSearch","isControlled","lastEmittedRef","useRef","pendingCaretRef","inputRef","composedInputRef","composeRefs","useEffect","current","useLayoutEffect","pos","node","emit","useCallback","nextDisplay","nextCountry","e164","inputId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","resolvedPlaceholder","handleInputChange","event","target","caret","digitsBefore","formatted","AsYouType","handleCountrySelect","formatter","reformatted","_a","countryRows","popularRows","byCode","row","popularCodes","remainingRows","selected","selectedDialCode","selectedName","triggerLabel","triggerAccessibleName","filterFn","searchStr","keywords","normalizedCandidate","normalizeDiacritics","normalizedSearch","normalizedKeywords","defaultFilter","renderRow","accessibleLabel","jsxs","Command","jsx","Flag","Popover","ChevronDown"],"mappings":";;;;;;;;;;;;AAqEA,MAAMA,KAA4BC;AAAA,EAChC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEMC,KAAyBD;AAAA,EAC7B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEME,KAA2BF;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEMG,KAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KAAoB,kDAEpBC,KAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KAA4B;AAAA,EAChC;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KAAqB,qDAErBC,KAAoB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAASC,GAAkBC,GAAaC,GAA0B;AAChE,MAAIC,IAAS;AACb,WAASC,IAAI,GAAGA,IAAIF,KAAYE,IAAIH,EAAI,QAAQG;AAC9C,IAAIH,EAAIG,CAAC,KAAK,OAAOH,EAAIG,CAAC,KAAK,OAAKD;AAEtC,SAAOA;AACT;AAEA,SAASE,GAAoBJ,GAAaK,GAA8B;AACtE,MAAIA,MAAiB,EAAG,QAAO;AAC/B,MAAIC,IAAQ;AACZ,WAASH,IAAI,GAAGA,IAAIH,EAAI,QAAQG;AAC9B,QAAIH,EAAIG,CAAC,KAAK,OAAOH,EAAIG,CAAC,KAAK,QAC7BG,KACIA,MAAUD;AAAc,aAAOF,IAAI;AAG3C,SAAOH,EAAI;AACb;AAEA,SAASO,GACPC,GACAC,GACAC,GACAC,GACa;AACb,MAAIH,KAAYC,EAAU,IAAID,CAAQ,EAAG,QAAOA;AAEhD,MAAIE,GAAe;AACjB,UAAME,IACJ,OAAO,YAAc,MAAc,UAAU,WAAW;AAC1D,QAAIA,GAAe;AACjB,YAAMC,IAAQD,EAAc,MAAM,gBAAgB;AAClD,UAAIC,GAAO;AACT,cAAMC,IAAYD,EAAM,CAAC,EAAE,YAAA;AAC3B,YAAIJ,EAAU,IAAIK,CAAS,EAAG,QAAOA;AAAA,MACvC;AAAA,IACF;AAEA,QAAI;AACF,YAAMC,IAAS,IAAI,KAAK,OAAOJ,CAAM,EAAE;AACvC,UAAII,KAAUN,EAAU,IAAIM,EAAO,YAAA,CAAa;AAC9C,eAAOA,EAAO,YAAA;AAAA,IAElB,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAASC,GACPL,GACAM,GACc;AACd,MAAIC;AACJ,MAAI;AACF,IAAAA,IAAe,IAAI,KAAK,aAAa,CAACP,CAAM,GAAG,EAAE,MAAM,UAAU;AAAA,EACnE,QAAQ;AACN,IAAAO,IAAe,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG,EAAE,MAAM,UAAU;AAAA,EACjE;AACA,QAAMC,IAAOF,EAAU,IAAgB,CAACG,OAAU;AAAA,IAChD,MAAAA;AAAA,IACA,MAAMF,EAAa,GAAGE,CAAI,KAAKA;AAAA,IAC/B,UAAUC,GAAsBD,CAAI;AAAA,EAAA,EACpC,GACIE,IAAW,IAAI,KAAK,SAASX,CAAM;AACzC,SAAOQ,EAAK,KAAK,CAACI,GAAGC,MAAMF,EAAS,QAAQC,EAAE,MAAMC,EAAE,IAAI,CAAC;AAC7D;AAEO,MAAMC,KAAaC;AAAA,EACxB,SACE;AAAA,IACE,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,sBAAAC,IAAuB;AAAA,IACvB,UAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,MAAAC,KAAO;AAAA,IACP,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAcC;AAAA,EAAA,GAEhBC,IACA;AACA,UAAM,EAAE,GAAAC,GAAG,MAAAC,EAAA,IAASC,GAAA,GACdC,IAAMC,GAAA,GACNC,IAAcC,GAAWC,EAAgB,MAAM,MAE/CC,IAAqBC;AAAA,MACzB,MAAM,IAAI,IAAIC,IAA0B;AAAA,MACxC,CAAA;AAAA,IAAC,GAGGC,IAAeF,EAAQ,MAAM;AACjC,YAAMG,IAAkBjD;AAAA,QACtBsB;AAAA,QACAuB;AAAA,QACAtB;AAAA,QACAe,EAAK;AAAA,MAAA,GAEDY,IAAM9B,KAASC;AACrB,UAAI6B,GAAK;AACP,cAAMC,IAASC,EAA2BF,CAAG;AAC7C,eAAIC,KAAA,QAAAA,EAAQ,UACH;AAAA,UACL,SAASA,EAAO;AAAA,UAChB,SAASA,EAAO,eAAA;AAAA,QAAe,IAG5B,EAAE,SAASF,GAAiB,SAASC,EAAA;AAAA,MAC9C;AACA,aAAO,EAAE,SAASD,GAAiB,SAAS,GAAA;AAAA,IAE9C,GAAG,CAAA,CAAE,GAEC,CAACI,GAASC,CAAU,IAAIC,EAAsBP,EAAa,OAAO,GAClE,CAACQ,GAAcC,CAAe,IAAIF;AAAA,MACtCP,EAAa;AAAA,IAAA,GAET,CAACU,GAAYC,CAAa,IAAIJ,EAAS,EAAK,GAC5C,CAACK,IAAcC,CAAe,IAAIN,EAAS,EAAE,GAE7CO,IAAe1C,MAAU,QACzB2C,IAAiBC,EAAe,EAAE,GAClCC,IAAkBD,EAAsB,IAAI,GAE5CE,IAAWF,EAAgC,IAAI,GAC/CG,KAAmBC,GAAYhC,IAAK8B,CAAQ;AAKlD,IAAAG,GAAU,MAAM;AACd,UAAI,CAACP,EAAc;AACnB,YAAMQ,IAAUlD,KAAS;AACzB,UAAIkD,MAAYP,EAAe,QAAS;AACxC,UAAIO,MAAY,IAAI;AAClB,QAAAb,EAAgB,EAAE;AAClB;AAAA,MACF;AACA,YAAMN,IAASC,EAA2BkB,CAAO;AACjD,MAAInB,KAAA,QAAAA,EAAQ,WACVG,EAAWH,EAAO,OAAO,GACzBM,EAAgBN,EAAO,gBAAgB,KAEvCM,EAAgBa,CAAO;AAAA,IAE3B,GAAG,CAAClD,GAAO0C,CAAY,CAAC,GAExBS,GAAgB,MAAM;AACpB,UAAIN,EAAgB,WAAW,KAAM;AACrC,YAAMO,IAAMP,EAAgB;AAC5B,MAAAA,EAAgB,UAAU;AAC1B,YAAMQ,IAAOP,EAAS;AACtB,MAAIO,KAAQ,SAAS,kBAAkBA,KACrCA,EAAK,kBAAkBD,GAAKA,CAAG;AAAA,IAEnC,CAAC;AAED,UAAME,IAAOC;AAAA,MACX,CAACC,GAAqBC,MAA6B;AACjD,cAAM1B,IAASC,EAA2BwB,GAAaC,CAAW,GAC5DC,KAAO3B,KAAA,gBAAAA,EAAQ,WAAU;AAC/B,QAAAY,EAAe,UAAUe,GACzBtD,KAAA,QAAAA,EAAWsD,GAAM;AAAA,UACf,SAASD;AAAA,UACT,UAAS1B,KAAA,gBAAAA,EAAQ,cAAa;AAAA,UAC9B,aAAYA,KAAA,gBAAAA,EAAQ,iBAAgB;AAAA,UACpC,MAAMA,KAAA,gBAAAA,EAAQ;AAAA,QAAQ;AAAA,MAE1B;AAAA,MACA,CAAC3B,CAAQ;AAAA,IAAA,GAGLuD,KAAU/C,OAAOU,IAAcF,EAAI,KAAK,SACxCwC,KACHtC,IAAcF,EAAI,WAAW,OAAU,EAAQb,IAC5CsD,MACHvC,IAAcF,EAAI,WAAW,OAAU,EAAQN,IAC5CgD,IAAmBxC,IAAcF,EAAI,UAAU,IAC/C2C,KAAgBD,IAAmB,UAAUxD,IAC7C0D,KACJ1C,KAAeF,EAAI,cAAcA,EAAI,cAAc,QAE/C6C,KACJxD,MAAeQ,EAAE,+BAA+B,cAAc,GAE1DiD,KAAoB,CAACC,MAAyC;AAClE,UAAI3D,EAAU;AACd,YAAM4D,IAASD,EAAM,QACfrC,IAAMsC,EAAO,OACbC,IAAQD,EAAO,kBAAkBtC,EAAI,QACrCwC,IAAelG,GAAkB0D,GAAKuC,CAAK,GAG3CE,IADY,IAAIC,GAAUvC,CAAO,EACX,MAAMH,CAAG;AAErC,MAAAe,EAAgB,UAAUpE,GAAoB8F,GAAWD,CAAY,GACrEjC,EAAgBkC,CAAS,GACzBjB,EAAKiB,GAAWtC,CAAO;AAAA,IACzB,GAEMwC,KAAsB,CAAChB,MAA6B;AACxD,UAAIA,MAAgBxB,GAAS;AAC3B,QAAAM,EAAc,EAAK;AACnB;AAAA,MACF;AACA,YAAMhE,IAAS6D,EAAa,QAAQ,OAAO,EAAE,GACvCsC,IAAY,IAAIF,GAAUf,CAAW,GACrCkB,IAAcpG,IAASmG,EAAU,MAAMnG,CAAM,IAAI;AACvD,MAAA2D,EAAWuB,CAAW,GACtBpB,EAAgBsC,CAAW,GAC3BpC,EAAc,EAAK,GACnBE,EAAgB,EAAE,GAClBa,EAAKqB,GAAalB,CAAW,GAC7B,sBAAsB,MAAM;;AAC1B,SAAAmB,IAAA9B,EAAS,YAAT,QAAA8B,EAAkB;AAAA,MACpB,CAAC;AAAA,IACH,GAEMC,IAAcnD;AAAA,MAClB,MACErC;AAAA,QACE6B,EAAK;AAAA,QACL,MAAM,KAAKO,CAAkB;AAAA,MAAA;AAAA,MAEjC,CAACP,EAAK,UAAUO,CAAkB;AAAA,IAAA,GAG9BqD,IAAcpD,EAAQ,MAAM;AAChC,UAAI,CAAChB,KAAoBA,EAAiB,WAAW,UAAU,CAAA;AAC/D,YAAMqE,IAAS,IAAI,IAAIF,EAAY,IAAI,CAACG,MAAQ,CAACA,EAAI,MAAMA,CAAG,CAAC,CAAC;AAChE,aAAOtE,EACJ;AAAA,QAAO,CAACjB,MACPgC,EAAmB,IAAIhC,CAAI;AAAA,MAAA,EAE5B,IAAI,CAACA,MAASsF,EAAO,IAAItF,CAAI,CAAC,EAC9B,OAAO,CAACuF,MAA2B,EAAQA,CAAI;AAAA,IACpD,GAAG,CAACtE,GAAkBmE,GAAapD,CAAkB,CAAC,GAEhDwD,IAAevD;AAAA,MACnB,MAAM,IAAI,IAAIoD,EAAY,IAAI,CAACE,MAAQA,EAAI,IAAI,CAAC;AAAA,MAChD,CAACF,CAAW;AAAA,IAAA,GAGRI,KAAgBxD;AAAA,MACpB,MACEuD,EAAa,OAAO,IAChBJ,EAAY,OAAO,CAACG,MAAQ,CAACC,EAAa,IAAID,EAAI,IAAI,CAAC,IACvDH;AAAA,MACN,CAACA,GAAaI,CAAY;AAAA,IAAA,GAGtBE,IAAWzD;AAAA,MACf,MAAMmD,EAAY,KAAK,CAACG,MAAQA,EAAI,SAAS/C,CAAO;AAAA,MACpD,CAAC4C,GAAa5C,CAAO;AAAA,IAAA,GAEjBmD,IAAmBD,IAAWA,EAAS,WAAW,IAClDE,KAAeF,IAAWA,EAAS,OAAOlD,GAE1CqD,IAAerE;AAAA,MACnB;AAAA,MACA;AAAA,IAAA,GAEIsE,KAAwB,GAAGD,CAAY,KAAKD,EAAY,MAAMD,CAAgB,IAE9EI,KAAWjC;AAAA,MACf,CAACpE,GAAmBsG,GAAmBC,MAAwB;AAC7D,cAAMC,IAAsBC,EAAoBzG,CAAS,GACnD0G,IAAmBD,EAAoBH,CAAS,GAChDK,IAAqBJ,KAAA,gBAAAA,EAAU,IAAIE;AACzC,eAAOG;AAAAA,UACLJ;AAAA,UACAE;AAAA,UACAC;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,CAAA;AAAA,IAAC,GAGGE,IAAY,CAAChB,MAAoB;AACrC,YAAMiB,IAAkB,GAAGjB,EAAI,IAAI,MAAMA,EAAI,QAAQ;AACrD,aACE,gBAAAkB;AAAA,QAACC,EAAQ;AAAA,QAAR;AAAA,UAEC,OAAOnB,EAAI;AAAA,UACX,UAAU,CAACA,EAAI,MAAMA,EAAI,UAAU,IAAIA,EAAI,QAAQ,EAAE;AAAA,UACrD,UAAU,MAAMP,GAAoBO,EAAI,IAAI;AAAA,UAC5C,WAAWjH;AAAA,UACX,cAAYkI;AAAA,UAEZ,UAAA;AAAA,YAAA,gBAAAG,EAACC,MAAK,SAASrB,EAAI,MAAM,MAAM7G,GAAekC,CAAI,GAAG;AAAA,YACrD,gBAAA+F,EAAC,QAAA,EAAK,WAAU,mBAAmB,YAAI,MAAK;AAAA,YAC5C,gBAAAF,EAAC,OAAA,EAAI,KAAI,OAAM,WAAU,sCAAqC,UAAA;AAAA,cAAA;AAAA,cAC1DlB,EAAI;AAAA,YAAA,EAAA,CACR;AAAA,UAAA;AAAA,QAAA;AAAA,QAXKA,EAAI;AAAA,MAAA;AAAA,IAcf;AAEA,WACE,gBAAAkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAW1I,GAA0B;AAAA,UACnC,MAAA6C;AAAA,UACA,MAAM0D;AAAA,UACN,WAAApD;AAAA,QAAA,CACD;AAAA,QAED,UAAA;AAAA,UAAA,gBAAAuF,EAACI,EAAQ,MAAR,EAAa,MAAMhE,GAAY,cAAcC,GAC5C,UAAA;AAAA,YAAA,gBAAA6D,EAACE,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAAJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAUtC;AAAA,gBACV,iBAAc;AAAA,gBACd,iBAAetB;AAAA,gBACf,cAAYiD;AAAA,gBACZ,WAAW7H,GAAuB,EAAE,MAAA2C,GAAM;AAAA,gBAE1C,UAAA;AAAA,kBAAA,gBAAA+F,EAACC,IAAA,EAAK,SAAApE,GAAkB,MAAM9D,GAAekC,CAAI,GAAG;AAAA,kBACpD,gBAAA6F,EAAC,OAAA,EAAI,KAAI,OAAM,WAAU,gBAAe,UAAA;AAAA,oBAAA;AAAA,oBACpCd;AAAA,kBAAA,GACJ;AAAA,kBACA,gBAAAgB;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,eAAY;AAAA,sBACZ,WAAW;AAAA,wBACTrI,GAAkBmC,CAAI;AAAA,wBACtB;AAAA,wBACA;AAAA,wBACAiC,IAAa,eAAe;AAAA,sBAAA,EAC5B,KAAK,GAAG;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,YAAA,GAEJ;AAAA,YACA,gBAAA8D,EAACE,EAAQ,QAAR,EACC,UAAA,gBAAAF;AAAA,cAACE,EAAQ;AAAA,cAAR;AAAA,gBACC,YAAY;AAAA,gBACZ,OAAM;AAAA,gBACN,WAAW1I;AAAA,gBAEX,UAAA,gBAAAsI,EAACC,KAAQ,QAAQX,IAAU,cAAY,IAAC,MAAI,IAAC,OAAOF,GAClD,UAAA;AAAA,kBAAA,gBAAAc;AAAA,oBAACD,EAAQ;AAAA,oBAAR;AAAA,sBACC,SAAO;AAAA,sBACP,OAAO3D;AAAA,sBACP,eAAeC;AAAA,sBAEf,UAAA,gBAAA2D;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,6BAA0B;AAAA,0BAC1B,MAAK;AAAA,0BACL,cAAa;AAAA,0BACb,aAAY;AAAA,0BACZ,YAAY;AAAA,0BACZ,aAAanF;AAAA,4BACX;AAAA,4BACA;AAAA,0BAAA;AAAA,0BAEF,WAAWpD;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACb;AAAA,kBAAA;AAAA,kBAEF,gBAAAqI,EAACC,EAAQ,MAAR,EAAa,WAAWrI,IACvB,UAAA;AAAA,oBAAA,gBAAAsI,EAACD,EAAQ,OAAR,EAAc,WAAWlI,IACvB,UAAAgD,EAAE,kCAAkC,kBAAkB,GACzD;AAAA,oBACC6D,EAAY,SAAS,IACpB,gBAAAsB;AAAA,sBAACD,EAAQ;AAAA,sBAAR;AAAA,wBACC,2BACG,QAAA,EAAK,WAAWnI,IACd,UAAAiD,EAAE,oCAAoC,SAAS,GAClD;AAAA,wBAGD,UAAA6D,EAAY,IAAIkB,CAAS;AAAA,sBAAA;AAAA,oBAAA,IAE1B;AAAA,oBACJ,gBAAAI;AAAA,sBAACD,EAAQ;AAAA,sBAAR;AAAA,wBACC,SACErB,EAAY,SAAS,IACnB,gBAAAsB,EAAC,QAAA,EAAK,WAAWpI,IACd,UAAAiD,EAAE,gCAAgC,eAAe,EAAA,CACpD,IACE;AAAA,wBAGL,UAAAiE,GAAc,IAAIc,CAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC9B,EAAA,CACF;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA,EACF,CACF;AAAA,UAAA,GACF;AAAA,UACA,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKrD;AAAA,cACL,IAAIY;AAAA,cACJ,MAAA9C;AAAA,cACA,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAa;AAAA,cACb,OAAOuB;AAAA,cACP,aAAa6B;AAAA,cACb,UAAUL;AAAA,cACV,UAAApD;AAAA,cACA,UAAUqD;AAAA,cACV,cAAY9C;AAAA,cACZ,oBAAkBiD;AAAA,cAClB,gBAAcF,KAAoB;AAAA,cAClC,UAAUI;AAAA,cACV,WAAWvG,GAAyB,EAAE,MAAA0C,EAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAP,GAAW,cAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popover-D1woU9mP.js","sources":["../../src/components/popover/popover.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\ninterface PopoverA11yContext {\n headingId: string | undefined;\n setHeadingId: (id: string | undefined) => void;\n descriptionId: string | undefined;\n setDescriptionId: (id: string | undefined) => void;\n}\n\nconst A11yContext = createContext<PopoverA11yContext>({\n headingId: undefined,\n setHeadingId: () => {},\n descriptionId: undefined,\n setDescriptionId: () => {},\n});\n\ninterface PopoverHoverContext {\n isHoverMode: boolean;\n clearHoverTimer: () => void;\n closeWithDelay: () => void;\n}\n\nconst HoverContext = createContext<PopoverHoverContext>({\n isHoverMode: false,\n clearHoverTimer: () => {},\n closeWithDelay: () => {},\n});\n\nfunction resolvePhysicalSide(\n logicalSide: 'start' | 'top' | 'end' | 'bottom',\n): 'left' | 'top' | 'right' | 'bottom' {\n if (logicalSide === 'top' || logicalSide === 'bottom') return logicalSide;\n const isRtl =\n typeof document !== 'undefined' && document.documentElement.dir === 'rtl';\n if (logicalSide === 'start') return isRtl ? 'right' : 'left';\n /* logicalSide === 'end' */\n return isRtl ? 'left' : 'right';\n}\n\nconst contentVariants = cva(\n [\n 'relative bg-[var(--popover)] border border-[color:var(--border)] rounded-[var(--radius-md)]',\n 'p-[var(--spacing-md)]',\n 'shadow-[var(--shadow-lg)]',\n 'z-[var(--z-popover)]',\n 'text-[var(--popover-foreground)] text-[var(--font-size-sm)]',\n 'break-words',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n 'motion-reduce:transition-none motion-reduce:animate-none',\n 'forced-colors:border-[CanvasText]',\n 'focus-visible:outline-none',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'max-w-[var(--popover-size-sm)]',\n md: 'max-w-[var(--popover-size-md)]',\n lg: 'max-w-[var(--popover-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nexport interface PopoverRootProps\n extends ComponentPropsWithoutRef<typeof RadixPopover.Root> {\n openOn?: 'click' | 'hover' | 'hover-or-click';\n children: ReactNode;\n}\n\nfunction PopoverRoot({\n openOn = 'click',\n children,\n open: controlledOpen,\n onOpenChange,\n defaultOpen,\n modal,\n}: PopoverRootProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isHoverMode = openOn === 'hover' || openOn === 'hover-or-click';\n\n const clearHoverTimer = useCallback(() => {\n if (hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n }\n }, []);\n\n const openWithDelay = useCallback(() => {\n clearHoverTimer();\n hoverTimerRef.current = setTimeout(() => {\n handleOpenChange(true);\n }, 300);\n }, [clearHoverTimer, handleOpenChange]);\n\n const closeWithDelay = useCallback(() => {\n clearHoverTimer();\n hoverTimerRef.current = setTimeout(() => {\n handleOpenChange(false);\n }, 300);\n }, [clearHoverTimer, handleOpenChange]);\n\n useEffect(() => {\n return () => clearHoverTimer();\n }, [clearHoverTimer]);\n\n /* a11y context state */\n const [headingId, setHeadingId] = useState<string | undefined>(undefined);\n const [descriptionId, setDescriptionId] = useState<string | undefined>(\n undefined,\n );\n\n const hoverHandlers = isHoverMode\n ? {\n onMouseEnter: openWithDelay,\n onMouseLeave: closeWithDelay,\n onFocus: () => {\n clearHoverTimer();\n handleOpenChange(true);\n },\n onBlur: closeWithDelay,\n }\n : {};\n\n return (\n <A11yContext.Provider\n value={{ headingId, setHeadingId, descriptionId, setDescriptionId }}\n >\n <HoverContext.Provider\n value={{ isHoverMode, clearHoverTimer, closeWithDelay }}\n >\n <RadixPopover.Root\n open={isOpen}\n onOpenChange={handleOpenChange}\n modal={modal}\n >\n {isHoverMode ? (\n <span className=\"inline-flex\" {...hoverHandlers}>\n {children}\n </span>\n ) : (\n children\n )}\n </RadixPopover.Root>\n </HoverContext.Provider>\n </A11yContext.Provider>\n );\n}\nPopoverRoot.displayName = 'Popover.Root';\n\nconst PopoverTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixPopover.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixPopover.Trigger ref={ref} {...props}>\n {children}\n </RadixPopover.Trigger>\n));\nPopoverTrigger.displayName = 'Popover.Trigger';\n\nexport interface PopoverContentProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadixPopover.Content>,\n 'side' | 'align'\n >,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'top' | 'end' | 'bottom';\n align?: 'start' | 'center' | 'end';\n size?: 'sm' | 'md' | 'lg';\n showArrow?: boolean;\n className?: string;\n children: ReactNode;\n}\n\nconst PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n side = 'bottom',\n align = 'center',\n size = 'md',\n showArrow = true,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { headingId, descriptionId } = useContext(A11yContext);\n const { isHoverMode: isHover, clearHoverTimer: cancelTimer, closeWithDelay: delayClose } =\n useContext(HoverContext);\n const physicalSide = resolvePhysicalSide(side);\n\n const contentHoverHandlers = isHover\n ? {\n onMouseEnter: cancelTimer,\n onMouseLeave: delayClose,\n onFocus: cancelTimer,\n onBlur: delayClose,\n }\n : {};\n\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n ref={ref}\n side={physicalSide}\n align={align}\n sideOffset={8}\n collisionPadding={8}\n aria-labelledby={headingId}\n aria-describedby={descriptionId}\n className={contentVariants({ size, className })}\n {...contentHoverHandlers}\n {...props}\n >\n {children}\n {showArrow && (\n <RadixPopover.Arrow\n width={12}\n height={6}\n className=\"fill-[var(--popover)]\"\n />\n )}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n },\n);\nPopoverContent.displayName = 'Popover.Content';\n\nconst PopoverClose = forwardRef<\n HTMLButtonElement,\n { className?: string }\n>(({ className }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div className={['absolute top-[var(--spacing-sm)] end-[var(--spacing-sm)]', className].filter(Boolean).join(' ')}>\n <RadixPopover.Close asChild>\n <IconButton\n ref={ref}\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('ui.common.close', 'Close')}\n />\n </RadixPopover.Close>\n </div>\n );\n});\nPopoverClose.displayName = 'Popover.Close';\n\ninterface PopoverHeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst PopoverHeading = forwardRef<HTMLHeadingElement, PopoverHeadingProps>(\n ({ as: Tag = 'h3', className, ...props }, ref) => {\n const generatedId = useId();\n const { setHeadingId } = useContext(A11yContext);\n\n useEffect(() => {\n setHeadingId(generatedId);\n return () => setHeadingId(undefined);\n }, [generatedId, setHeadingId]);\n\n return (\n <Tag\n ref={ref}\n id={generatedId}\n className={[\n 'type-title-item leading-snug break-words',\n 'pe-[var(--spacing-xl)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n },\n);\nPopoverHeading.displayName = 'Popover.Heading';\n\nconst PopoverDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const generatedId = useId();\n const { setDescriptionId } = useContext(A11yContext);\n\n useEffect(() => {\n setDescriptionId(generatedId);\n return () => setDescriptionId(undefined);\n }, [generatedId, setDescriptionId]);\n\n return (\n <p\n ref={ref}\n id={generatedId}\n className={[\n 'text-[var(--muted-foreground)] type-body-sm mt-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n});\nPopoverDescription.displayName = 'Popover.Description';\n\nexport const Popover = Object.assign(PopoverRoot, {\n Root: PopoverRoot,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Close: PopoverClose,\n Heading: PopoverHeading,\n Description: PopoverDescription,\n});\n\nexport type { PopoverRootProps as PopoverProps, PopoverHeadingProps };\n"],"names":["A11yContext","createContext","HoverContext","resolvePhysicalSide","logicalSide","isRtl","contentVariants","cva","PopoverRoot","openOn","children","controlledOpen","onOpenChange","defaultOpen","modal","internalOpen","setInternalOpen","useState","isControlled","isOpen","handleOpenChange","useCallback","nextOpen","hoverTimerRef","useRef","isHoverMode","clearHoverTimer","openWithDelay","closeWithDelay","useEffect","headingId","setHeadingId","descriptionId","setDescriptionId","hoverHandlers","jsx","RadixPopover","PopoverTrigger","forwardRef","props","ref","PopoverContent","side","align","size","showArrow","className","useContext","isHover","cancelTimer","delayClose","physicalSide","contentHoverHandlers","jsxs","PopoverClose","t","useTranslation","IconButton","X","PopoverHeading","Tag","generatedId","useId","PopoverDescription","Popover"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"privacy-lock-C1X42Sit.js","sources":["../../src/components/privacy-lock/privacy-lock.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* PrivacyLock — a one-click \"lock my screen\" dialog for operator */\n/* workstations on shared clinic hardware. Clicking the trigger paints */\n/* a full-viewport privacy overlay (blurred backdrop + centred card); */\n/* the only ways out are the three action buttons the consumer wires. */\n/* */\n/* Composed of one `IconButton` trigger and a Radix Dialog overlay. The */\n/* dialog is intentionally *not* dismissible via Escape or outside-click */\n/* — the whole point is to make the screen unreadable until the user */\n/* takes an explicit action. */\n/* */\n/* See `src/components/privacy-lock/privacy-lock.mdx` for usage. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useState,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { EyeOff, LogOut, User } from 'lucide-react';\nimport { Button } from '../button';\nimport { IconButton } from '../button/icon-button';\nimport { Logo } from '../logo';\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface PrivacyLockProps {\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n /** Uncontrolled initial state. Ignored when `open` is provided. */\n defaultOpen?: boolean;\n /** Fires whenever the dialog opens or closes — trigger click, action button, etc. */\n onOpenChange?: (open: boolean) => void;\n\n /** Fires when the \"Unlock screen\" button is activated. Dialog closes automatically. */\n onUnlock?: () => void;\n /** Fires when \"Account page\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onAccountPage?: () => void;\n /** Fires when \"Log out\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onSignOut?: () => void;\n\n /** Override the trigger icon. Default: `lucide-react` `<EyeOff />`. */\n triggerIcon?: ReactNode;\n /** Accessible name for the trigger. Default: t('privacyLock.triggerAriaLabel'). */\n triggerAriaLabel?: string;\n /** Tooltip for the trigger. Default: t('privacyLock.triggerTooltip'). */\n triggerTooltip?: string;\n\n /** Accessible title of the dialog (visually hidden). Default: t('privacyLock.title'). */\n title?: string;\n /** Visible supporting text under the action buttons. Default: t('privacyLock.description'). */\n description?: string;\n /** Label for the \"Unlock screen\" button. Default: t('privacyLock.unlock'). */\n unlockLabel?: string;\n /** Label for the \"Account page\" button. Default: t('privacyLock.accountPage'). */\n accountPageLabel?: string;\n /** Label for the \"Log out\" button. Default: t('privacyLock.signOut'). */\n signOutLabel?: string;\n\n /** Extra classes on the trigger `IconButton`. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PrivacyLock = forwardRef<HTMLButtonElement, PrivacyLockProps>(\n (\n {\n open,\n defaultOpen = false,\n onOpenChange,\n onUnlock,\n onAccountPage,\n onSignOut,\n triggerIcon,\n triggerAriaLabel,\n triggerTooltip,\n title,\n description,\n unlockLabel,\n accountPageLabel,\n signOutLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n // Every action closes the dialog after firing the consumer's\n // callback. Consumers that need to keep the dialog open (e.g.\n // confirmation step) should control `open` themselves and skip the\n // close on the relevant callback.\n const handleAction = useCallback(\n (callback?: () => void) => (event: MouseEvent<HTMLButtonElement>) => {\n callback?.();\n // Only close if the consumer didn't preventDefault — lets a\n // controlled consumer stop the auto-close for guarded actions.\n if (!event.defaultPrevented) setOpen(false);\n },\n [setOpen],\n );\n\n const resolvedTriggerAriaLabel =\n triggerAriaLabel ?? t('privacyLock.triggerAriaLabel', 'Lock screen for privacy');\n const resolvedTriggerTooltip =\n triggerTooltip ?? t('privacyLock.triggerTooltip', 'Lock screen');\n const resolvedTitle =\n title ?? t('privacyLock.title', 'Screen locked for privacy');\n const resolvedDescription =\n description ??\n t(\n 'privacyLock.description',\n 'Locking the screen helps protect the privacy of your data.',\n );\n const resolvedUnlockLabel =\n unlockLabel ?? t('privacyLock.unlock', 'Unlock screen');\n const resolvedAccountPageLabel =\n accountPageLabel ?? t('privacyLock.accountPage', 'Account page');\n const resolvedSignOutLabel =\n signOutLabel ?? t('privacyLock.signOut', 'Log out');\n\n return (\n <RadixDialog.Root open={isOpen} onOpenChange={setOpen}>\n <RadixDialog.Trigger asChild>\n <IconButton\n ref={ref}\n icon={triggerIcon ?? <EyeOff aria-hidden />}\n aria-label={resolvedTriggerAriaLabel}\n tooltip={resolvedTriggerTooltip}\n className={className}\n {...rest}\n />\n </RadixDialog.Trigger>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={[\n 'fixed inset-0 z-[var(--z-modal-backdrop)]',\n 'bg-[var(--background)]/40 backdrop-blur-xl',\n // Fade-in / fade-out via Radix data-state. Gated on\n // motion-reduce per accessibility requirements.\n 'data-[state=open]:animate-in data-[state=open]:fade-in',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out',\n 'motion-reduce:animate-none',\n ].join(' ')}\n />\n <RadixDialog.Content\n aria-label={resolvedTitle}\n // Make the overlay non-dismissible by ambient input. The only\n // way out is an explicit action button — preserving the\n // \"locked\" contract. Screen readers + assistive tech still\n // reach the buttons via Tab.\n onEscapeKeyDown={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n className={[\n 'fixed inset-0 z-[var(--z-modal)]',\n 'flex items-center justify-center',\n 'focus:outline-none',\n 'text-[color:var(--foreground)]',\n 'data-[state=open]:animate-in data-[state=open]:fade-in',\n 'motion-reduce:animate-none',\n ].join(' ')}\n >\n <div className=\"flex flex-col items-center gap-[var(--spacing-lg)] w-[min(22rem,calc(100vw-var(--spacing-xl)))] text-center\">\n <Logo size=\"xl\" decorative />\n <RadixDialog.Title className=\"sr-only\">\n {resolvedTitle}\n </RadixDialog.Title>\n <div className=\"flex flex-col gap-[var(--spacing-xs)] w-full\">\n <Button\n intent=\"primary\"\n startIcon={<EyeOff aria-hidden />}\n onClick={handleAction(onUnlock)}\n >\n {resolvedUnlockLabel}\n </Button>\n {onAccountPage ? (\n <Button\n intent=\"outline\"\n startIcon={<User aria-hidden />}\n onClick={handleAction(onAccountPage)}\n >\n {resolvedAccountPageLabel}\n </Button>\n ) : null}\n {onSignOut ? (\n <Button\n intent=\"outline\"\n startIcon={<LogOut aria-hidden />}\n onClick={handleAction(onSignOut)}\n >\n {resolvedSignOutLabel}\n </Button>\n ) : null}\n </div>\n <RadixDialog.Description className=\"type-body-sm opacity-90\">\n {resolvedDescription}\n </RadixDialog.Description>\n </div>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n },\n);\nPrivacyLock.displayName = 'PrivacyLock';\n"],"names":["PrivacyLock","forwardRef","open","defaultOpen","onOpenChange","onUnlock","onAccountPage","onSignOut","triggerIcon","triggerAriaLabel","triggerTooltip","title","description","unlockLabel","accountPageLabel","signOutLabel","className","rest","ref","t","useTranslation","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","setOpen","useCallback","next","handleAction","callback","event","resolvedTriggerAriaLabel","resolvedTriggerTooltip","resolvedTitle","resolvedDescription","resolvedUnlockLabel","resolvedAccountPageLabel","resolvedSignOutLabel","RadixDialog","jsx","IconButton","EyeOff","jsxs","Logo","Button","User","LogOut"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-DL3-izuO.js","sources":["../../src/components/progress/progress.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ── Public types ─────────────────────────────────────────────────────── */\n\nexport interface ProgressHandle {\n setValue: (value: number) => void;\n}\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n value?: number;\n max?: number;\n shape?: 'bar' | 'circular';\n size?: 'sm' | 'md' | 'lg';\n ariaLabel?: string;\n ariaValueText?: string;\n debouncePercent?: number;\n disabled?: boolean;\n children?: ReactNode;\n}\n\n/* ── Context ──────────────────────────────────────────────────────────── */\n\ntype ProgressContextValue = {\n labelId: string;\n isIndeterminate: boolean;\n value: number | undefined;\n max: number;\n};\n\nconst ProgressCtx = createContext<ProgressContextValue | null>(null);\n\nfunction useProgressCtx(): ProgressContextValue {\n const ctx = useContext(ProgressCtx);\n if (!ctx) throw new Error('Progress sub-components must be used within <Progress>');\n return ctx;\n}\n\n/* ── Circle geometry ──────────────────────────────────────────────────── */\n\nconst CIRCLE = {\n sm: { viewBox: '0 0 24 24', cx: 12, cy: 12, r: 10 },\n md: { viewBox: '0 0 40 40', cx: 20, cy: 20, r: 18 },\n lg: { viewBox: '0 0 56 56', cx: 28, cy: 28, r: 26 },\n} as const;\n\n/* ── CVA ──────────────────────────────────────────────────────────────── */\n\nconst barTrackVariants = cva(\n 'relative w-full overflow-hidden rounded-[var(--radius-full)] bg-[var(--progress-track)]',\n {\n variants: {\n size: { sm: 'h-1', md: 'h-2', lg: 'h-3' },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst circularVariants = cva('', {\n variants: {\n size: {\n sm: 'w-6 h-6',\n md: 'w-10 h-10',\n lg: 'w-14 h-14',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/* ── Progress.Label ───────────────────────────────────────────────────── */\n\nconst ProgressLabel = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ children, className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const defaultText = ctx.isIndeterminate\n ? t('ui.common.loading', 'Loading...')\n : t('ui.common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max),\n });\n\n return (\n <span\n ref={ref}\n id={ctx.labelId}\n className={[\n 'type-label text-foreground',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children ?? defaultText}\n </span>\n );\n});\nProgressLabel.displayName = 'Progress.Label';\n\n/* ── Progress.Value ───────────────────────────────────────────────────── */\n\nconst ProgressValue = forwardRef<\n HTMLSpanElement,\n HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = useProgressCtx();\n const { t, i18n } = useTranslation();\n\n const text = ctx.isIndeterminate\n ? t('ui.common.loading', 'Loading...')\n : new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((ctx.value ?? 0) / ctx.max);\n\n return (\n <span\n ref={ref}\n className={['type-body-sm tabular-nums text-muted-foreground', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {text}\n </span>\n );\n});\nProgressValue.displayName = 'Progress.Value';\n\n/* ── Progress root ────────────────────────────────────────────────────── */\n\nconst ProgressRoot = forwardRef<ProgressHandle, ProgressProps>(\n (\n {\n value,\n max = 100,\n shape = 'bar',\n size = 'md',\n ariaLabel,\n ariaValueText,\n debouncePercent = 1,\n disabled = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const labelId = useId();\n const { t, i18n } = useTranslation();\n const barTrackRef = useRef<HTMLDivElement>(null);\n const barFillRef = useRef<HTMLDivElement>(null);\n const circTrackRef = useRef<SVGSVGElement>(null);\n const circFillRef = useRef<SVGCircleElement>(null);\n /* Separate typed refs for each shape to avoid union-type casts */\n const lastAnnouncedPercentRef = useRef<number | null>(null);\n\n const isIndeterminate = value === undefined;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(max, Math.max(0, value));\n const targetPercent =\n clampedValue !== undefined ? (clampedValue / max) * 100 : undefined;\n\n /* ── Mount-in animation ──────────────────────────────────────────── */\n // Paint once at 0 before showing the target value, so the existing\n // transition on stroke-dashoffset / inline-size animates from empty\n // → target on mount. First render: hasMounted=false → percent=0,\n // useLayoutEffect writes 0 to the style, browser paints empty.\n // useEffect then flips hasMounted, triggering a re-render at the\n // target percent; the style write inside useLayoutEffect produces\n // the change the transition needs.\n const [hasMounted, setHasMounted] = useState(false);\n useEffect(() => {\n setHasMounted(true);\n }, []);\n const percent =\n hasMounted || isIndeterminate ? targetPercent : 0;\n\n /* ── CSS property updates (visual fill) ──────────────────────────── */\n useLayoutEffect(() => {\n if (isIndeterminate || percent === undefined) return;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(percent),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - percent / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n }, [isIndeterminate, percent, shape, size]);\n\n /* ── Debounced ARIA value updates ────────────────────────────────── */\n useLayoutEffect(() => {\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n if (!trackEl) return;\n\n if (isIndeterminate) {\n trackEl.removeAttribute('aria-valuenow');\n lastAnnouncedPercentRef.current = null;\n return;\n }\n if (clampedValue === undefined) return;\n\n const pct = (clampedValue / max) * 100;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent) {\n trackEl.setAttribute('aria-valuenow', String(clampedValue));\n lastAnnouncedPercentRef.current = pct;\n }\n }, [isIndeterminate, clampedValue, max, debouncePercent, shape]);\n\n /* ── Imperative handle for high-frequency updates ────────────────── */\n useImperativeHandle(\n ref,\n () => ({\n setValue: (v: number) => {\n const clamped = Math.min(max, Math.max(0, v));\n const pct = (clamped / max) * 100;\n\n if (shape === 'bar') {\n barFillRef.current?.style.setProperty(\n '--progress-value',\n String(pct),\n );\n } else {\n const { r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const offset = circumference * (1 - pct / 100);\n circFillRef.current?.style.setProperty(\n 'stroke-dashoffset',\n String(offset),\n );\n }\n\n const trackEl =\n shape === 'bar' ? barTrackRef.current : circTrackRef.current;\n const last = lastAnnouncedPercentRef.current;\n const delta = last === null ? Infinity : Math.abs(pct - last);\n if (delta >= debouncePercent && trackEl) {\n trackEl.setAttribute('aria-valuenow', String(clamped));\n lastAnnouncedPercentRef.current = pct;\n }\n },\n }),\n [max, shape, size, debouncePercent],\n );\n\n /* ── ARIA props shared by both shapes ────────────────────────────── */\n // Provide aria-label as fallback alongside aria-labelledby: per ARIA spec,\n // AT falls back to aria-label when aria-labelledby references a missing id.\n // This covers the case where neither ariaLabel nor Progress.Label is used.\n const fallbackAriaLabel = isIndeterminate\n ? t('ui.common.loading', 'Loading...')\n : t('ui.common.progress_label', {\n percent: new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format((clampedValue ?? 0) / max),\n });\n\n const labelProps = ariaLabel\n ? { 'aria-label': ariaLabel }\n : { 'aria-labelledby': labelId, 'aria-label': fallbackAriaLabel };\n\n const stateProps = isIndeterminate\n ? { 'aria-busy': true as const, 'aria-valuemin': 0, 'aria-valuemax': max }\n : {\n 'aria-valuemin': 0 as const,\n 'aria-valuemax': max,\n ...(ariaValueText ? { 'aria-valuetext': ariaValueText } : {}),\n };\n\n const disabledProp = disabled ? { 'aria-disabled': true as const } : {};\n\n const wrapperClass = [\n 'flex flex-col gap-[var(--spacing-xs)]',\n disabled && 'opacity-50',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const ctxValue: ProgressContextValue = {\n labelId,\n isIndeterminate,\n value: clampedValue,\n max,\n };\n\n /* ── Bar shape ──────────────────────────────────────────────────── */\n if (shape === 'bar') {\n const fillClass = isIndeterminate\n ? [\n 'absolute [inset-block:0] bg-primary rounded-[var(--radius-full)]',\n '[@media(prefers-reduced-motion:no-preference)]:animate-[progress-bar-indeterminate_1200ms_ease-in-out_infinite]',\n '[.theme-accessible_&]:animate-none',\n 'motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n 'absolute [inset-block:0] start-0',\n '[inline-size:calc(var(--progress-value,0)*1%)]',\n 'bg-primary rounded-[var(--radius-full)]',\n 'transition-[inline-size] duration-[var(--animation-duration)]',\n 'ease-[var(--ease-out)] motion-reduce:transition-none',\n ].join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div className={wrapperClass} data-component=\"progress\" {...rest}>\n {children}\n <div\n ref={barTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n className={barTrackVariants({ size })}\n >\n <div ref={barFillRef} className={fillClass} />\n </div>\n </div>\n </ProgressCtx.Provider>\n );\n }\n\n /* ── Circular shape ─────────────────────────────────────────────── */\n const { viewBox, cx, cy, r } = CIRCLE[size];\n const circumference = 2 * Math.PI * r;\n const indeterminateDashOffset = circumference * 0.25;\n // For determinate progress, paint an empty arc on first mount. The\n // effect above then sets stroke-dashoffset to the target, and the\n // CSS transition animates from empty → target.\n const initialDashOffset = isIndeterminate\n ? indeterminateDashOffset\n : circumference;\n\n const svgClass = isIndeterminate\n ? [\n circularVariants({ size }),\n '[transform:rotate(-90deg)]',\n '[@media(prefers-reduced-motion:no-preference)]:animate-[progress-circular-spin_1200ms_linear_infinite]',\n '[.theme-accessible_&]:animate-none',\n 'motion-reduce:animate-[progress-indeterminate-pulse_var(--animation-duration)_ease-in-out_infinite]',\n ].join(' ')\n : [\n circularVariants({ size }),\n '[transform:rotate(-90deg)]',\n 'rtl:[transform:rotate(-90deg)_scaleX(-1)]',\n ].join(' ');\n\n const fillStrokeClass = [\n 'stroke-primary [stroke-width:var(--spacing-xs)]',\n !isIndeterminate &&\n 'transition-[stroke-dashoffset] duration-[var(--animation-duration)] ease-[var(--ease-out)] motion-reduce:transition-none',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <ProgressCtx.Provider value={ctxValue}>\n <div className={wrapperClass} data-component=\"progress\" {...rest}>\n {children}\n <svg\n ref={circTrackRef}\n role=\"progressbar\"\n {...labelProps}\n {...stateProps}\n {...disabledProp}\n viewBox={viewBox}\n className={svgClass}\n >\n <circle\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeDasharray={circumference}\n className=\"[stroke:var(--progress-track)] [stroke-width:var(--spacing-xs)]\"\n />\n <circle\n ref={circFillRef}\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={initialDashOffset}\n className={fillStrokeClass}\n />\n </svg>\n </div>\n </ProgressCtx.Provider>\n );\n },\n);\n\nProgressRoot.displayName = 'Progress';\n\n/* ── Compound export ──────────────────────────────────────────────────── */\n\nexport const Progress = Object.assign(ProgressRoot, {\n Label: ProgressLabel,\n Value: ProgressValue,\n});\n"],"names":["ProgressCtx","createContext","useProgressCtx","ctx","useContext","CIRCLE","barTrackVariants","cva","circularVariants","ProgressLabel","forwardRef","children","className","props","ref","t","i18n","useTranslation","defaultText","jsx","ProgressValue","text","ProgressRoot","value","max","shape","size","ariaLabel","ariaValueText","debouncePercent","disabled","rest","labelId","useId","barTrackRef","useRef","barFillRef","circTrackRef","circFillRef","lastAnnouncedPercentRef","isIndeterminate","clampedValue","targetPercent","hasMounted","setHasMounted","useState","useEffect","percent","useLayoutEffect","_a","r","offset","_b","trackEl","pct","last","useImperativeHandle","v","clamped","fallbackAriaLabel","labelProps","stateProps","disabledProp","wrapperClass","ctxValue","fillClass","jsxs","viewBox","cx","cy","circumference","indeterminateDashOffset","initialDashOffset","svgClass","fillStrokeClass","Progress"],"mappings":"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"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
-
import { useContext as B, createContext as $, forwardRef as j, useId as I, useRef as w, useEffect as F, useMemo as P } from "react";
|
|
3
|
-
import * as N from "@radix-ui/react-radio-group";
|
|
4
|
-
import { c as k } from "./index-D2ZczOXr.js";
|
|
5
|
-
import { T as S } from "./tooltip-DF6WjD1r.js";
|
|
6
|
-
import { u as T } from "./use-direction-D6rvvG9G.js";
|
|
7
|
-
import { c as _ } from "./compose-refs-C0k0tdqF.js";
|
|
8
|
-
import { C as A } from "./circle-alert-ChA9opNA.js";
|
|
9
|
-
const z = $(null);
|
|
10
|
-
function D() {
|
|
11
|
-
return B(z);
|
|
12
|
-
}
|
|
13
|
-
const E = k(
|
|
14
|
-
[
|
|
15
|
-
"group inline-flex items-center justify-center shrink-0 rounded-full",
|
|
16
|
-
"border border-border bg-background",
|
|
17
|
-
"transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none",
|
|
18
|
-
"focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid",
|
|
19
|
-
"focus-visible:outline-ring focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
|
|
20
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
21
|
-
"data-[state=checked]:border-primary",
|
|
22
|
-
"data-[disabled]:border-muted",
|
|
23
|
-
'relative before:absolute before:inset-[calc((var(--min-target-size)-100%)/-2)] before:content-[""]'
|
|
24
|
-
].join(" "),
|
|
25
|
-
{
|
|
26
|
-
variants: {
|
|
27
|
-
size: {
|
|
28
|
-
sm: "size-3.5",
|
|
29
|
-
md: "size-4",
|
|
30
|
-
lg: "size-5"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
defaultVariants: {
|
|
34
|
-
size: "md"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
), M = {
|
|
38
|
-
sm: "size-1.5",
|
|
39
|
-
md: "size-2",
|
|
40
|
-
lg: "size-2.5"
|
|
41
|
-
}, H = j(
|
|
42
|
-
({
|
|
43
|
-
label: m,
|
|
44
|
-
size: a = "md",
|
|
45
|
-
disabled: r,
|
|
46
|
-
disabledReason: i,
|
|
47
|
-
description: o,
|
|
48
|
-
id: l,
|
|
49
|
-
className: g,
|
|
50
|
-
value: v,
|
|
51
|
-
...h
|
|
52
|
-
}, b) => {
|
|
53
|
-
const u = I(), n = l ?? u, s = D(), x = (s == null ? void 0 : s.variant) === "card";
|
|
54
|
-
w(!1), F(() => {
|
|
55
|
-
}, [s]);
|
|
56
|
-
const y = [
|
|
57
|
-
"rounded-full bg-primary",
|
|
58
|
-
M[a],
|
|
59
|
-
"group-data-[disabled]:bg-muted"
|
|
60
|
-
].join(" "), c = /* @__PURE__ */ e(
|
|
61
|
-
N.Item,
|
|
62
|
-
{
|
|
63
|
-
ref: b,
|
|
64
|
-
id: n,
|
|
65
|
-
disabled: r,
|
|
66
|
-
"aria-disabled": r || void 0,
|
|
67
|
-
value: v,
|
|
68
|
-
className: E({ size: a, className: g }),
|
|
69
|
-
...h,
|
|
70
|
-
children: /* @__PURE__ */ e(
|
|
71
|
-
N.Indicator,
|
|
72
|
-
{
|
|
73
|
-
asChild: !0,
|
|
74
|
-
className: "inline-flex items-center justify-center",
|
|
75
|
-
children: /* @__PURE__ */ e("span", { "aria-hidden": "true", className: y })
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
), p = [
|
|
80
|
-
"type-label text-foreground select-none",
|
|
81
|
-
r ? "cursor-not-allowed opacity-50" : "cursor-pointer"
|
|
82
|
-
].join(" "), f = [
|
|
83
|
-
"flex items-start gap-[var(--spacing-md)]",
|
|
84
|
-
"rounded-[var(--radius-md)] border border-border",
|
|
85
|
-
"ps-[var(--spacing-md)] pe-[var(--spacing-md)] py-[var(--spacing-md)]",
|
|
86
|
-
"min-h-[var(--min-target-size)]",
|
|
87
|
-
"has-[[data-state=checked]]:border-ring",
|
|
88
|
-
"has-[[data-state=checked]]:bg-[color-mix(in_srgb,var(--accent)_5%,transparent)]",
|
|
89
|
-
"transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none",
|
|
90
|
-
r ? "cursor-not-allowed opacity-50" : "cursor-pointer"
|
|
91
|
-
].join(" "), d = x ? /* @__PURE__ */ t("label", { htmlFor: n, className: f, children: [
|
|
92
|
-
c,
|
|
93
|
-
/* @__PURE__ */ t("span", { className: "flex flex-col gap-[var(--spacing-xs)] text-start", children: [
|
|
94
|
-
/* @__PURE__ */ e("span", { className: "type-label text-foreground", children: m }),
|
|
95
|
-
o ? /* @__PURE__ */ e("span", { className: "type-body-sm text-muted-foreground", children: o }) : null
|
|
96
|
-
] })
|
|
97
|
-
] }) : /* @__PURE__ */ t("div", { className: "inline-flex items-center gap-[var(--spacing-sm)] min-h-[var(--min-target-size)]", children: [
|
|
98
|
-
c,
|
|
99
|
-
/* @__PURE__ */ e("label", { htmlFor: n, className: p, children: m })
|
|
100
|
-
] });
|
|
101
|
-
return r && i ? /* @__PURE__ */ e(S, { label: i, children: d }) : d;
|
|
102
|
-
}
|
|
103
|
-
);
|
|
104
|
-
H.displayName = "Radio";
|
|
105
|
-
const J = k("flex", {
|
|
106
|
-
variants: {
|
|
107
|
-
variant: {
|
|
108
|
-
vertical: "flex-col gap-[var(--spacing-sm)]",
|
|
109
|
-
horizontal: "flex-row flex-wrap gap-[var(--spacing-md)]",
|
|
110
|
-
card: "flex-col gap-[var(--spacing-md)]"
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
defaultVariants: {
|
|
114
|
-
variant: "vertical"
|
|
115
|
-
}
|
|
116
|
-
}), K = j(
|
|
117
|
-
({
|
|
118
|
-
children: m,
|
|
119
|
-
variant: a = "vertical",
|
|
120
|
-
label: r,
|
|
121
|
-
description: i,
|
|
122
|
-
error: o,
|
|
123
|
-
required: l,
|
|
124
|
-
disabled: g,
|
|
125
|
-
className: v,
|
|
126
|
-
...h
|
|
127
|
-
}, b) => {
|
|
128
|
-
const u = I(), n = `${u}-description`, s = `${u}-error`, x = [i ? n : null, o ? s : null].filter(Boolean).join(" ") || void 0, y = a === "horizontal" ? "horizontal" : "vertical", c = P(
|
|
129
|
-
() => ({ variant: a }),
|
|
130
|
-
[a]
|
|
131
|
-
), p = i ? /* @__PURE__ */ e("p", { id: n, className: "type-body-sm text-muted-foreground", children: i }) : null, f = o ? /* @__PURE__ */ t(
|
|
132
|
-
"p",
|
|
133
|
-
{
|
|
134
|
-
id: s,
|
|
135
|
-
role: "alert",
|
|
136
|
-
className: "inline-flex items-center gap-[var(--spacing-xs)] type-body-sm text-destructive",
|
|
137
|
-
children: [
|
|
138
|
-
/* @__PURE__ */ e(A, { "aria-hidden": "true", className: "size-4 shrink-0" }),
|
|
139
|
-
/* @__PURE__ */ e("span", { children: o })
|
|
140
|
-
]
|
|
141
|
-
}
|
|
142
|
-
) : null, d = w(null), G = _(b, d), V = T(d), R = /* @__PURE__ */ e(
|
|
143
|
-
N.Root,
|
|
144
|
-
{
|
|
145
|
-
ref: G,
|
|
146
|
-
orientation: y,
|
|
147
|
-
dir: V,
|
|
148
|
-
disabled: g,
|
|
149
|
-
required: l,
|
|
150
|
-
"aria-describedby": x,
|
|
151
|
-
"aria-invalid": !!o || void 0,
|
|
152
|
-
"aria-required": l || void 0,
|
|
153
|
-
className: J({ variant: a, className: v }),
|
|
154
|
-
...h,
|
|
155
|
-
children: m
|
|
156
|
-
}
|
|
157
|
-
), C = "flex flex-col gap-[var(--spacing-xs)] min-w-0";
|
|
158
|
-
return r ? /* @__PURE__ */ e(z.Provider, { value: c, children: /* @__PURE__ */ t("fieldset", { className: `${C} border-0 p-0 m-0`, children: [
|
|
159
|
-
/* @__PURE__ */ t("legend", { className: "type-label text-foreground p-0", children: [
|
|
160
|
-
r,
|
|
161
|
-
l ? /* @__PURE__ */ e(
|
|
162
|
-
"span",
|
|
163
|
-
{
|
|
164
|
-
"aria-hidden": "true",
|
|
165
|
-
className: "text-destructive ms-[var(--spacing-xs)]",
|
|
166
|
-
children: "*"
|
|
167
|
-
}
|
|
168
|
-
) : null
|
|
169
|
-
] }),
|
|
170
|
-
p,
|
|
171
|
-
R,
|
|
172
|
-
f
|
|
173
|
-
] }) }) : /* @__PURE__ */ e(z.Provider, { value: c, children: /* @__PURE__ */ t("div", { className: C, children: [
|
|
174
|
-
p,
|
|
175
|
-
R,
|
|
176
|
-
f
|
|
177
|
-
] }) });
|
|
178
|
-
}
|
|
179
|
-
);
|
|
180
|
-
K.displayName = "RadioGroup";
|
|
181
|
-
export {
|
|
182
|
-
H as R,
|
|
183
|
-
K as a
|
|
184
|
-
};
|
|
185
|
-
//# sourceMappingURL=radio-group-CXN9qNPe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radio-group-CXN9qNPe.js","sources":["../../src/components/radio-group/radio-group-context.ts","../../src/components/radio-group/radio.tsx","../../src/components/radio-group/radio-group.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type RadioGroupVariant = 'vertical' | 'horizontal' | 'card';\n\nexport interface RadioGroupInternalContextShape {\n variant: RadioGroupVariant;\n}\n\nexport const RadioGroupInternalContext =\n createContext<RadioGroupInternalContextShape | null>(null);\n\nexport function useRadioGroupContext(): RadioGroupInternalContextShape | null {\n return useContext(RadioGroupInternalContext);\n}\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useRadioGroupContext } from './radio-group-context';\nimport { Tooltip } from '../tooltip';\n\nconst radioVariants = cva(\n [\n 'group inline-flex items-center justify-center shrink-0 rounded-full',\n 'border border-border bg-background',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-ring focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary',\n 'data-[disabled]:border-muted',\n 'relative before:absolute before:inset-[calc((var(--min-target-size)-100%)/-2)] before:content-[\"\"]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'size-3.5',\n md: 'size-4',\n lg: 'size-5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst discSizeBySize = {\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-2.5',\n} as const;\n\ntype RadixItemProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Item>;\n\nexport interface RadioProps\n extends Omit<RadixItemProps, 'children'>,\n VariantProps<typeof radioVariants> {\n label: string;\n size?: 'sm' | 'md' | 'lg';\n disabledReason?: string;\n description?: string;\n}\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(\n (\n {\n label,\n size = 'md',\n disabled,\n disabledReason,\n description,\n id,\n className,\n value,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id ?? generatedId;\n const ctx = useRadioGroupContext();\n const isCard = ctx?.variant === 'card';\n\n const warnedRef = useRef(false);\n useEffect(() => {\n if (import.meta.env.DEV && !ctx && !warnedRef.current) {\n warnedRef.current = true;\n console.warn(\n '<Radio> rendered without a <RadioGroup> ancestor. A lone radio is rarely meaningful — use <Checkbox> for a single on/off choice.',\n );\n }\n }, [ctx]);\n\n const discClasses = [\n 'rounded-full bg-primary',\n discSizeBySize[size],\n 'group-data-[disabled]:bg-muted',\n ].join(' ');\n\n const item = (\n <RadixRadioGroup.Item\n ref={ref}\n id={radioId}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n value={value as string}\n className={radioVariants({ size, className })}\n {...props}\n >\n <RadixRadioGroup.Indicator\n asChild\n className=\"inline-flex items-center justify-center\"\n >\n <span aria-hidden=\"true\" className={discClasses} />\n </RadixRadioGroup.Indicator>\n </RadixRadioGroup.Item>\n );\n\n const labelClasses = [\n 'type-label text-foreground select-none',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n ].join(' ');\n\n const cardClasses = [\n 'flex items-start gap-[var(--spacing-md)]',\n 'rounded-[var(--radius-md)] border border-border',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)] py-[var(--spacing-md)]',\n 'min-h-[var(--min-target-size)]',\n 'has-[[data-state=checked]]:border-ring',\n 'has-[[data-state=checked]]:bg-[color-mix(in_srgb,var(--accent)_5%,transparent)]',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n ].join(' ');\n\n const content = isCard ? (\n <label htmlFor={radioId} className={cardClasses}>\n {item}\n <span className=\"flex flex-col gap-[var(--spacing-xs)] text-start\">\n <span className=\"type-label text-foreground\">{label}</span>\n {description ? (\n <span className=\"type-body-sm text-muted-foreground\">{description}</span>\n ) : null}\n </span>\n </label>\n ) : (\n <div className=\"inline-flex items-center gap-[var(--spacing-sm)] min-h-[var(--min-target-size)]\">\n {item}\n <label htmlFor={radioId} className={labelClasses}>\n {label}\n </label>\n </div>\n );\n\n if (disabled && disabledReason) {\n return <Tooltip label={disabledReason}>{content}</Tooltip>;\n }\n\n return content;\n },\n);\n\nRadio.displayName = 'Radio';\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { AlertCircle } from 'lucide-react';\nimport {\n RadioGroupInternalContext,\n type RadioGroupInternalContextShape,\n type RadioGroupVariant,\n} from './radio-group-context';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\n\nconst radioGroupVariants = cva('flex', {\n variants: {\n variant: {\n vertical: 'flex-col gap-[var(--spacing-sm)]',\n horizontal: 'flex-row flex-wrap gap-[var(--spacing-md)]',\n card: 'flex-col gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: {\n variant: 'vertical',\n },\n});\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Root>;\n\nexport interface RadioGroupProps\n extends Omit<RadixRootProps, 'children' | 'orientation'>,\n VariantProps<typeof radioGroupVariants> {\n children: React.ReactNode;\n variant?: RadioGroupVariant;\n label?: string;\n description?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n children,\n variant = 'vertical',\n label,\n description,\n error,\n required,\n disabled,\n className,\n ...props\n },\n ref,\n ) => {\n const baseId = useId();\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const orientation: 'vertical' | 'horizontal' =\n variant === 'horizontal' ? 'horizontal' : 'vertical';\n\n const ctxValue: RadioGroupInternalContextShape = useMemo(\n () => ({ variant }),\n [variant],\n );\n\n const descriptionNode = description ? (\n <p id={descriptionId} className=\"type-body-sm text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n const errorNode = error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"inline-flex items-center gap-[var(--spacing-xs)] type-body-sm text-destructive\"\n >\n <AlertCircle aria-hidden=\"true\" className=\"size-4 shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n const root = (\n <RadixRadioGroup.Root\n ref={composedRef}\n orientation={orientation}\n dir={dir}\n disabled={disabled}\n required={required}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n aria-required={required || undefined}\n className={radioGroupVariants({ variant, className })}\n {...props}\n >\n {children}\n </RadixRadioGroup.Root>\n );\n\n const outerClasses = 'flex flex-col gap-[var(--spacing-xs)] min-w-0';\n\n if (label) {\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <fieldset className={`${outerClasses} border-0 p-0 m-0`}>\n <legend className=\"type-label text-foreground p-0\">\n {label}\n {required ? (\n <span\n aria-hidden=\"true\"\n className=\"text-destructive ms-[var(--spacing-xs)]\"\n >\n *\n </span>\n ) : null}\n </legend>\n {descriptionNode}\n {root}\n {errorNode}\n </fieldset>\n </RadioGroupInternalContext.Provider>\n );\n }\n\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <div className={outerClasses}>\n {descriptionNode}\n {root}\n {errorNode}\n </div>\n </RadioGroupInternalContext.Provider>\n );\n },\n);\n\nRadioGroup.displayName = 'RadioGroup';\n"],"names":["RadioGroupInternalContext","createContext","useRadioGroupContext","useContext","radioVariants","cva","discSizeBySize","Radio","forwardRef","label","size","disabled","disabledReason","description","id","className","value","props","ref","generatedId","useId","radioId","ctx","isCard","useRef","useEffect","discClasses","item","jsx","RadixRadioGroup","labelClasses","cardClasses","content","jsxs","Tooltip","radioGroupVariants","RadioGroup","children","variant","error","required","baseId","descriptionId","errorId","describedBy","orientation","ctxValue","useMemo","descriptionNode","errorNode","AlertCircle","rootRef","composedRef","composeRefs","dir","useDirection","root","outerClasses"],"mappings":";;;;;;;;AAQO,MAAMA,IACXC,EAAqD,IAAI;AAEpD,SAASC,IAA8D;AAC5E,SAAOC,EAAWH,CAAyB;AAC7C;ACDA,MAAMI,IAAgBC;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEMC,IAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAaaC,IAAQC;AAAA,EACnB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,IAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAcC,EAAA,GACdC,IAAUP,KAAMK,GAChBG,IAAMpB,EAAA,GACNqB,KAASD,KAAA,gBAAAA,EAAK,aAAY;AAEd,IAAAE,EAAO,EAAK,GAC9BC,EAAU,MAAM;AAAA,IAOhB,GAAG,CAACH,CAAG,CAAC;AAER,UAAMI,IAAc;AAAA,MAClB;AAAA,MACApB,EAAeI,CAAI;AAAA,MACnB;AAAA,IAAA,EACA,KAAK,GAAG,GAEJiB,IACJ,gBAAAC;AAAA,MAACC,EAAgB;AAAA,MAAhB;AAAA,QACC,KAAAX;AAAA,QACA,IAAIG;AAAA,QACJ,UAAAV;AAAA,QACA,iBAAeA,KAAY;AAAA,QAC3B,OAAAK;AAAA,QACA,WAAWZ,EAAc,EAAE,MAAAM,GAAM,WAAAK,GAAW;AAAA,QAC3C,GAAGE;AAAA,QAEJ,UAAA,gBAAAW;AAAA,UAACC,EAAgB;AAAA,UAAhB;AAAA,YACC,SAAO;AAAA,YACP,WAAU;AAAA,YAEV,4BAAC,QAAA,EAAK,eAAY,QAAO,WAAWH,GAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MACnD;AAAA,IAAA,GAIEI,IAAe;AAAA,MACnB;AAAA,MACAnB,IAAW,kCAAkC;AAAA,IAAA,EAC7C,KAAK,GAAG,GAEJoB,IAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACApB,IAAW,kCAAkC;AAAA,IAAA,EAC7C,KAAK,GAAG,GAEJqB,IAAUT,IACd,gBAAAU,EAAC,WAAM,SAASZ,GAAS,WAAWU,GACjC,UAAA;AAAA,MAAAJ;AAAA,MACD,gBAAAM,EAAC,QAAA,EAAK,WAAU,oDACd,UAAA;AAAA,0BAAC,QAAA,EAAK,WAAU,8BAA8B,UAAAxB,GAAM;AAAA,QACnDI,sBACE,QAAA,EAAK,WAAU,sCAAsC,aAAY,IAChE;AAAA,MAAA,GACN;AAAA,IAAA,EAAA,CACF,IAEA,gBAAAoB,EAAC,OAAA,EAAI,WAAU,mFACZ,UAAA;AAAA,MAAAN;AAAA,wBACA,SAAA,EAAM,SAASN,GAAS,WAAWS,GACjC,UAAArB,EAAA,CACH;AAAA,IAAA,GACF;AAGF,WAAIE,KAAYC,sBACNsB,GAAA,EAAQ,OAAOtB,GAAiB,UAAAoB,GAAQ,IAG3CA;AAAA,EACT;AACF;AAEAzB,EAAM,cAAc;ACvIpB,MAAM4B,IAAqB9B,EAAI,QAAQ;AAAA,EACrC,UAAU;AAAA,IACR,SAAS;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,iBAAiB;AAAA,IACf,SAAS;AAAA,EAAA;AAEb,CAAC,GAeY+B,IAAa5B;AAAA,EACxB,CACE;AAAA,IACE,UAAA6B;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,OAAA7B;AAAA,IACA,aAAAI;AAAA,IACA,OAAA0B;AAAA,IACA,UAAAC;AAAA,IACA,UAAA7B;AAAA,IACA,WAAAI;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAMuB,IAASrB,EAAA,GACTsB,IAAgB,GAAGD,CAAM,gBACzBE,IAAU,GAAGF,CAAM,UAEnBG,IACJ,CAAC/B,IAAc6B,IAAgB,MAAMH,IAAQI,IAAU,IAAI,EACxD,OAAO,OAAO,EACd,KAAK,GAAG,KAAK,QAEZE,IACJP,MAAY,eAAe,eAAe,YAEtCQ,IAA2CC;AAAA,MAC/C,OAAO,EAAE,SAAAT,EAAA;AAAA,MACT,CAACA,CAAO;AAAA,IAAA,GAGJU,IAAkBnC,IACtB,gBAAAe,EAAC,KAAA,EAAE,IAAIc,GAAe,WAAU,sCAC7B,UAAA7B,EAAA,CACH,IACE,MAEEoC,IAAYV,IAChB,gBAAAN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAIU;AAAA,QACJ,MAAK;AAAA,QACL,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAf,EAACsB,GAAA,EAAY,eAAY,QAAO,WAAU,mBAAkB;AAAA,UAC5D,gBAAAtB,EAAC,UAAM,UAAAW,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAEb,MAEEY,IAAU3B,EAAuB,IAAI,GACrC4B,IAAcC,EAAYnC,GAAKiC,CAAO,GACtCG,IAAMC,EAAaJ,CAAO,GAE1BK,IACJ,gBAAA5B;AAAA,MAACC,EAAgB;AAAA,MAAhB;AAAA,QACC,KAAKuB;AAAA,QACL,aAAAP;AAAA,QACA,KAAAS;AAAA,QACA,UAAA3C;AAAA,QACA,UAAA6B;AAAA,QACA,oBAAkBI;AAAA,QAClB,gBAAc,EAAQL,KAAU;AAAA,QAChC,iBAAeC,KAAY;AAAA,QAC3B,WAAWL,EAAmB,EAAE,SAAAG,GAAS,WAAAvB,GAAW;AAAA,QACnD,GAAGE;AAAA,QAEH,UAAAoB;AAAA,MAAA;AAAA,IAAA,GAICoB,IAAe;AAErB,WAAIhD,IAEA,gBAAAmB,EAAC5B,EAA0B,UAA1B,EAAmC,OAAO8C,GACzC,UAAA,gBAAAb,EAAC,YAAA,EAAS,WAAW,GAAGwB,CAAY,qBAClC,UAAA;AAAA,MAAA,gBAAAxB,EAAC,UAAA,EAAO,WAAU,kCACf,UAAA;AAAA,QAAAxB;AAAA,QACA+B,IACC,gBAAAZ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC;AAAA,MAAA,GACN;AAAA,MACCoB;AAAA,MACAQ;AAAA,MACAP;AAAA,IAAA,EAAA,CACH,EAAA,CACF,IAKF,gBAAArB,EAAC5B,EAA0B,UAA1B,EAAmC,OAAO8C,GACzC,UAAA,gBAAAb,EAAC,OAAA,EAAI,WAAWwB,GACb,UAAA;AAAA,MAAAT;AAAA,MACAQ;AAAA,MACAP;AAAA,IAAA,EAAA,CACH,EAAA,CACF;AAAA,EAEJ;AACF;AAEAb,EAAW,cAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resizable.agent-DVk_jJur.js","sources":["../../src/components/resizable/resizable-context.ts","../../src/components/resizable/resizable.tsx","../../src/components/resizable/resizable.agent.ts"],"sourcesContent":["import { createContext, useContext, type MutableRefObject, type RefObject } from 'react';\n\nexport interface PanelConfig {\n id: string;\n index: number;\n defaultSize: number;\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n collapsedSize: number;\n}\n\nexport interface ResizableContextShape {\n direction: 'horizontal' | 'vertical';\n sizes: number[];\n liveSizesRef: MutableRefObject<number[]>;\n panels: PanelConfig[];\n groupRef: RefObject<HTMLDivElement>;\n updateSizesImperative: (newSizes: number[]) => void;\n commitSizes: (newSizes: number[]) => void;\n registerPanelElement: (index: number, el: HTMLDivElement) => void;\n unregisterPanelElement: (index: number) => void;\n setAnnounceText: (text: string) => void;\n}\n\nexport const ResizableContext = createContext<ResizableContextShape | null>(null);\n\nexport function useResizable(): ResizableContextShape {\n const ctx = useContext(ResizableContext);\n if (!ctx) {\n throw new Error('useResizable must be used within a PanelGroup');\n }\n return ctx;\n}\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MutableRefObject,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n ResizableContext,\n useResizable,\n type PanelConfig,\n} from './resizable-context';\n\n// ─── storage ──────────────────────────────────────────────────────────────────\n\nconst STORAGE_PREFIX = 'ui-kit:resizable:';\n\nfunction loadFromStorage(groupId: string | undefined): number[] | null {\n if (!groupId) return null;\n try {\n const raw = localStorage.getItem(`${STORAGE_PREFIX}${groupId}`);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as { v: number; sizes: number[] };\n if (parsed.v !== 1 || !Array.isArray(parsed.sizes)) return null;\n return parsed.sizes;\n } catch {\n return null;\n }\n}\n\nfunction saveToStorage(groupId: string, sizes: number[]): void {\n try {\n localStorage.setItem(\n `${STORAGE_PREFIX}${groupId}`,\n JSON.stringify({ v: 1, sizes }),\n );\n } catch {\n // QuotaExceeded or private mode\n }\n}\n\n// ─── size helpers ─────────────────────────────────────────────────────────────\n\nfunction normalizeSizes(raw: number[]): number[] {\n const total = raw.reduce((a, b) => a + b, 0);\n if (total === 0) return raw.map(() => 100 / raw.length);\n return raw.map((s) => (s / total) * 100);\n}\n\nfunction computeNewSizes(\n currentSizes: number[],\n handleIndex: number,\n deltaPercent: number,\n panels: PanelConfig[],\n groupSizePx: number,\n): number[] {\n const sizes = [...currentSizes];\n const li = handleIndex;\n const ri = handleIndex + 1;\n if (li >= sizes.length || ri >= sizes.length) return sizes;\n\n const lc = panels[li];\n const rc = panels[ri];\n const total = sizes[li] + sizes[ri];\n const collapseThreshold = groupSizePx > 0 ? (20 / groupSizePx) * 100 : 2;\n\n let newLeft = sizes[li] + deltaPercent;\n let newRight = total - newLeft;\n\n if (lc.collapsible && newLeft < lc.minSize) {\n if (newLeft < lc.minSize - collapseThreshold) {\n sizes[li] = lc.collapsedSize;\n sizes[ri] = total - lc.collapsedSize;\n return sizes;\n }\n newLeft = lc.minSize;\n newRight = total - newLeft;\n }\n\n if (rc.collapsible && newRight < rc.minSize) {\n if (newRight < rc.minSize - collapseThreshold) {\n sizes[ri] = rc.collapsedSize;\n sizes[li] = total - rc.collapsedSize;\n return sizes;\n }\n newRight = rc.minSize;\n newLeft = total - newRight;\n }\n\n const lMin = lc.collapsible ? lc.collapsedSize : lc.minSize;\n const rMin = rc.collapsible ? rc.collapsedSize : rc.minSize;\n\n newLeft = Math.max(lMin, Math.min(lc.maxSize, newLeft));\n newRight = total - newLeft;\n newRight = Math.max(rMin, Math.min(rc.maxSize, newRight));\n newLeft = total - newRight;\n newLeft = Math.max(lMin, Math.min(lc.maxSize, newLeft));\n\n sizes[li] = Math.max(0, newLeft);\n sizes[ri] = Math.max(0, total - sizes[li]);\n return sizes;\n}\n\n// ─── Handle CVA ──────────────────────────────────────────────────────────────\n// calc with underscores for Tailwind arbitrary value spaces\n// Extends hit area to --min-target-size via ::before pseudo-element\n\nconst handleVariants = cva(\n [\n \"relative flex items-center justify-center shrink-0 select-none\",\n \"bg-[var(--border)]\",\n \"transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none\",\n \"focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid\",\n \"focus-visible:outline-[color:var(--ring)] focus-visible:outline-offset-[length:var(--focus-ring-offset)]\",\n \"hover:bg-[var(--accent)] data-[dragging]:bg-[var(--accent)]\",\n \"before:absolute before:content-['']\",\n ],\n {\n variants: {\n orientation: {\n horizontal: [\n \"[inline-size:var(--resizable-handle-size)] cursor-col-resize [block-size:100%]\",\n \"before:[block-size:100%]\",\n \"before:[inline-size:var(--min-target-size)]\",\n \"before:[inset-block:0]\",\n \"before:[inset-inline:calc(0px_-_(var(--min-target-size)_-_var(--resizable-handle-size))_/_2)]\",\n ],\n vertical: [\n \"[block-size:var(--resizable-handle-size)] cursor-row-resize [inline-size:100%]\",\n \"before:[inline-size:100%]\",\n \"before:[block-size:var(--min-target-size)]\",\n \"before:[inset-inline:0]\",\n \"before:[inset-block:calc(0px_-_(var(--min-target-size)_-_var(--resizable-handle-size))_/_2)]\",\n ],\n },\n },\n defaultVariants: { orientation: \"horizontal\" },\n },\n);\n\n// ─── PanelGroup CVA ──────────────────────────────────────────────────────────\n\nconst panelGroupVariants = cva('flex overflow-hidden', {\n variants: {\n direction: {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n },\n },\n defaultVariants: { direction: 'horizontal' },\n});\n\n// ─── Panel CVA ────────────────────────────────────────────────────────────────\n\nconst panelVariants = cva('[flex:0_0_var(--panel-self-size,50%)] overflow-auto', {\n variants: {\n direction: {\n horizontal: '[min-inline-size:0]',\n vertical: '[min-block-size:0]',\n },\n },\n defaultVariants: { direction: 'horizontal' },\n});\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface PanelGroupProps {\n direction: 'horizontal' | 'vertical';\n groupId?: string;\n onLayout?: (sizes: number[]) => void;\n className?: string;\n children: ReactNode;\n}\n\nexport interface PanelHandle {\n resize: (size: number) => void;\n}\n\nexport interface PanelProps {\n defaultSize: number;\n minSize?: number;\n maxSize?: number;\n collapsible?: boolean;\n collapsedSize?: number;\n className?: string;\n children?: ReactNode;\n}\n\nexport interface HandleProps {\n className?: string;\n}\n\n// Internal injection (not exported)\ntype PanelInternalProps = PanelProps & {\n _panelIndex?: number;\n _panelId?: string;\n};\n\ntype HandleInternalProps = HandleProps & {\n _handleIndex?: number;\n};\n\n// ─── PanelGroup ───────────────────────────────────────────────────────────────\n\nexport const PanelGroup = forwardRef<HTMLDivElement, PanelGroupProps>(\n ({ direction, groupId, onLayout, className, children }, outerRef) => {\n const baseId = useId();\n const groupRef = useRef<HTMLDivElement>(null!);\n const panelElementsRef = useRef<Map<number, HTMLDivElement>>(new Map());\n const storageTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [announceText, setAnnounceText] = useState('');\n\n // Walk children to extract panel configs and inject internal indices\n const { panelConfigs, processedChildren } = useMemo(() => {\n const configs: PanelConfig[] = [];\n let panelIdx = 0;\n let handleIdx = 0;\n\n const walk = (child: ReactNode): ReactNode => {\n if (!isValidElement(child)) return child;\n if (child.type === Panel) {\n const idx = panelIdx;\n const p = child.props as PanelProps;\n configs.push({\n id: `${baseId}-panel-${idx}`,\n index: idx,\n defaultSize: p.defaultSize,\n minSize: p.minSize ?? 10,\n maxSize: p.maxSize ?? 90,\n collapsible: p.collapsible ?? false,\n collapsedSize: p.collapsedSize ?? 0,\n });\n panelIdx++;\n return cloneElement(child as ReactElement<PanelInternalProps>, {\n _panelIndex: idx,\n _panelId: `${baseId}-panel-${idx}`,\n });\n }\n if (child.type === Handle) {\n const idx = handleIdx++;\n return cloneElement(\n child as ReactElement<HandleInternalProps>,\n { _handleIndex: idx },\n );\n }\n return child;\n };\n\n return {\n panelConfigs: configs,\n processedChildren: Children.map(children, walk),\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children, baseId]);\n\n // Initial sizes from storage or defaults\n const [committedSizes, setCommittedSizes] = useState<number[]>(() => {\n if (panelConfigs.length === 0) return [];\n const stored = loadFromStorage(groupId);\n if (stored && stored.length === panelConfigs.length) return stored;\n return normalizeSizes(panelConfigs.map((p) => p.defaultSize));\n });\n\n const liveSizesRef = useRef<number[]>(committedSizes);\n\n useEffect(() => {\n liveSizesRef.current = committedSizes;\n }, [committedSizes]);\n\n const updateSizesImperative = useCallback((newSizes: number[]) => {\n liveSizesRef.current = newSizes;\n panelElementsRef.current.forEach((el, idx) => {\n if (idx < newSizes.length) {\n el.style.setProperty('--panel-self-size', `${newSizes[idx]}%`);\n }\n });\n }, []);\n\n const commitSizes = useCallback(\n (newSizes: number[]) => {\n liveSizesRef.current = newSizes;\n setCommittedSizes(newSizes);\n onLayout?.(newSizes);\n if (groupId) {\n if (storageTimeoutRef.current) clearTimeout(storageTimeoutRef.current);\n storageTimeoutRef.current = setTimeout(\n () => saveToStorage(groupId, newSizes),\n 120,\n );\n }\n },\n [groupId, onLayout],\n );\n\n // Apply CSS vars to panel elements when committed sizes change\n useLayoutEffect(() => {\n panelElementsRef.current.forEach((el, idx) => {\n if (idx < committedSizes.length) {\n el.style.setProperty('--panel-self-size', `${committedSizes[idx]}%`);\n }\n });\n }, [committedSizes]);\n\n const registerPanelElement = useCallback(\n (index: number, el: HTMLDivElement) => {\n panelElementsRef.current.set(index, el);\n const size = liveSizesRef.current[index];\n if (size !== undefined) {\n el.style.setProperty('--panel-self-size', `${size}%`);\n }\n },\n [],\n );\n\n const unregisterPanelElement = useCallback((index: number) => {\n panelElementsRef.current.delete(index);\n }, []);\n\n const setAnnounceCb = useCallback((text: string) => {\n setAnnounceText(text);\n }, []);\n\n const containerClass = panelGroupVariants({ direction, className });\n\n const ctxValue = {\n direction,\n sizes: committedSizes,\n liveSizesRef,\n panels: panelConfigs,\n groupRef,\n updateSizesImperative,\n commitSizes,\n registerPanelElement,\n unregisterPanelElement,\n setAnnounceText: setAnnounceCb,\n };\n\n const setRef = (el: HTMLDivElement | null) => {\n (groupRef as MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof outerRef === 'function') outerRef(el);\n else if (outerRef) outerRef.current = el;\n };\n\n return (\n <ResizableContext.Provider value={ctxValue}>\n <div\n ref={setRef}\n className={containerClass}\n data-component=\"resizable\"\n data-panel-group\n data-direction={direction}\n >\n {processedChildren}\n <span className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {announceText}\n </span>\n </div>\n </ResizableContext.Provider>\n );\n },\n);\n\nPanelGroup.displayName = 'PanelGroup';\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nexport const Panel = forwardRef<PanelHandle, PanelInternalProps>(\n (\n {\n _panelIndex = 0,\n _panelId,\n minSize = 10,\n maxSize = 90,\n children,\n className,\n },\n ref,\n ) => {\n const {\n direction,\n liveSizesRef,\n panels,\n updateSizesImperative,\n commitSizes,\n registerPanelElement,\n unregisterPanelElement,\n } = useResizable();\n\n const panelRef = useRef<HTMLDivElement>(null!);\n\n useEffect(() => {\n const el = panelRef.current;\n if (!el) return;\n registerPanelElement(_panelIndex, el);\n return () => unregisterPanelElement(_panelIndex);\n }, [_panelIndex, registerPanelElement, unregisterPanelElement]);\n\n useImperativeHandle(\n ref,\n () => ({\n resize: (newSize: number) => {\n const currentSizes = [...liveSizesRef.current];\n const clamped = Math.max(minSize, Math.min(maxSize, newSize));\n const diff = clamped - (currentSizes[_panelIndex] ?? 0);\n if (Math.abs(diff) < 0.001) return;\n\n const newSizes = [...currentSizes];\n newSizes[_panelIndex] = clamped;\n\n const otherIndices = currentSizes\n .map((_, i) => i)\n .filter((i) => i !== _panelIndex);\n const otherTotal = otherIndices.reduce(\n (s, i) => s + (currentSizes[i] ?? 0),\n 0,\n );\n otherIndices.forEach((i) => {\n newSizes[i] =\n otherTotal > 0\n ? (currentSizes[i] ?? 0) - diff * ((currentSizes[i] ?? 0) / otherTotal)\n : (currentSizes[i] ?? 0) - diff / otherIndices.length;\n });\n\n updateSizesImperative(newSizes);\n commitSizes(newSizes);\n },\n }),\n [_panelIndex, minSize, maxSize, panels, liveSizesRef, updateSizesImperative, commitSizes],\n );\n\n return (\n <div\n ref={panelRef}\n id={_panelId}\n data-panel\n data-panel-index={_panelIndex}\n className={panelVariants({ direction, className })}\n >\n {children}\n </div>\n );\n },\n);\n\nPanel.displayName = 'Panel';\n\n// ─── Handle ───────────────────────────────────────────────────────────────────\n\nexport const Handle = forwardRef<HTMLDivElement, HandleInternalProps>(\n ({ _handleIndex = 0, className }, ref) => {\n const { t, i18n } = useTranslation();\n const {\n direction,\n sizes,\n liveSizesRef,\n panels,\n groupRef,\n updateSizesImperative,\n commitSizes,\n setAnnounceText,\n } = useResizable();\n\n const [isDragging, setIsDragging] = useState(false);\n const dragStateRef = useRef<{\n startX: number;\n startY: number;\n startSizes: number[];\n groupRect: DOMRect;\n } | null>(null);\n const announceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const announceRafRef = useRef<number | null>(null);\n const handleRef = useRef<HTMLDivElement>(null!);\n\n const scheduleAnnounce = useCallback(\n (size: number, immediate = false) => {\n if (announceRafRef.current !== null) {\n cancelAnimationFrame(announceRafRef.current);\n announceRafRef.current = null;\n }\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n announceTimeoutRef.current = null;\n }\n const formatted = new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n }).format(size / 100);\n const text = t('ui.resizable.sizeAnnounce', { percent: formatted });\n if (immediate) {\n setAnnounceText(text);\n } else {\n // rAF coalesces calls within the same frame; 200ms debounce prevents spam\n announceRafRef.current = requestAnimationFrame(() => {\n announceRafRef.current = null;\n announceTimeoutRef.current = setTimeout(() => setAnnounceText(text), 200);\n });\n }\n },\n [t, i18n.language, setAnnounceText],\n );\n\n const isRtl = useCallback(() => {\n if (!groupRef.current) return false;\n return getComputedStyle(groupRef.current).direction === 'rtl';\n }, [groupRef]);\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!groupRef.current) return;\n e.currentTarget.setPointerCapture(e.pointerId);\n e.currentTarget.style.setProperty('touch-action', 'none');\n dragStateRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startSizes: [...liveSizesRef.current],\n groupRect: groupRef.current.getBoundingClientRect(),\n };\n setIsDragging(true);\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStateRef.current) return;\n const { startX, startY, startSizes, groupRect } = dragStateRef.current;\n const isHorizontal = direction === 'horizontal';\n const groupSize = isHorizontal ? groupRect.width : groupRect.height;\n if (groupSize === 0) return;\n\n const rawDelta = isHorizontal ? e.clientX - startX : e.clientY - startY;\n const effectiveDelta = isHorizontal && isRtl() ? -rawDelta : rawDelta;\n const percentDelta = (effectiveDelta / groupSize) * 100;\n\n const newSizes = computeNewSizes(\n startSizes,\n _handleIndex,\n percentDelta,\n panels,\n groupSize,\n );\n\n updateSizesImperative(newSizes);\n\n if (handleRef.current) {\n const rounded = Math.round(newSizes[_handleIndex]);\n handleRef.current.setAttribute('aria-valuenow', String(rounded));\n handleRef.current.setAttribute(\n 'aria-valuetext',\n new Intl.NumberFormat(i18n.language, { style: 'percent' }).format(\n rounded / 100,\n ),\n );\n }\n\n scheduleAnnounce(newSizes[_handleIndex]);\n };\n\n const onPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStateRef.current) return;\n e.currentTarget.releasePointerCapture(e.pointerId);\n e.currentTarget.style.removeProperty('touch-action');\n dragStateRef.current = null;\n setIsDragging(false);\n const finalSizes = liveSizesRef.current;\n commitSizes(finalSizes);\n scheduleAnnounce(finalSizes[_handleIndex], true);\n };\n\n const onPointerCancel = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStateRef.current) return;\n e.currentTarget.releasePointerCapture(e.pointerId);\n e.currentTarget.style.removeProperty('touch-action');\n dragStateRef.current = null;\n setIsDragging(false);\n const finalSizes = liveSizesRef.current;\n commitSizes(finalSizes);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const li = _handleIndex;\n const ri = _handleIndex + 1;\n if (li >= panels.length || ri >= panels.length) return;\n\n const lc = panels[li];\n const rc = panels[ri];\n const isHorizontal = direction === 'horizontal';\n const rtl = isHorizontal && isRtl();\n const step = e.shiftKey ? 10 : 1;\n const current = [...liveSizesRef.current];\n\n const growLeft = (amount = step): number[] | null => {\n const avail = Math.min(\n amount,\n lc.maxSize - current[li],\n current[ri] - (rc.collapsible ? rc.collapsedSize : rc.minSize),\n );\n if (avail <= 0) return null;\n const ns = [...current];\n ns[li] += avail;\n ns[ri] -= avail;\n return ns;\n };\n\n const shrinkLeft = (amount = step): number[] | null => {\n const lMin = lc.collapsible ? lc.collapsedSize : lc.minSize;\n const avail = Math.min(amount, current[li] - lMin);\n if (avail <= 0) return null;\n const ns = [...current];\n ns[li] -= avail;\n ns[ri] += avail;\n return ns;\n };\n\n let newSizes: number[] | null = null;\n\n switch (e.key) {\n case 'ArrowRight':\n if (!isHorizontal) break;\n e.preventDefault();\n newSizes = rtl ? shrinkLeft() : growLeft();\n break;\n case 'ArrowLeft':\n if (!isHorizontal) break;\n e.preventDefault();\n newSizes = rtl ? growLeft() : shrinkLeft();\n break;\n case 'ArrowDown':\n if (isHorizontal) break;\n e.preventDefault();\n newSizes = growLeft();\n break;\n case 'ArrowUp':\n if (isHorizontal) break;\n e.preventDefault();\n newSizes = shrinkLeft();\n break;\n case 'Home': {\n e.preventDefault();\n const lMin = lc.collapsible ? lc.collapsedSize : lc.minSize;\n const delta = current[li] - lMin;\n if (delta > 0) {\n const ns = [...current];\n ns[li] = lMin;\n ns[ri] += delta;\n newSizes = ns;\n }\n break;\n }\n case 'End': {\n e.preventDefault();\n const rMin = rc.collapsible ? rc.collapsedSize : rc.minSize;\n const avail = Math.min(\n lc.maxSize - current[li],\n current[ri] - rMin,\n );\n if (avail > 0) {\n const ns = [...current];\n ns[li] += avail;\n ns[ri] -= avail;\n newSizes = ns;\n }\n break;\n }\n case 'Enter': {\n e.preventDefault();\n const panel = lc.collapsible ? lc : rc.collapsible ? rc : null;\n const pIdx = lc.collapsible ? li : rc.collapsible ? ri : -1;\n if (!panel || pIdx < 0) break;\n const partner = pIdx === li ? ri : li;\n const isCollapsed = Math.abs(current[pIdx] - panel.collapsedSize) < 0.5;\n const total = current[li] + current[ri];\n const ns = [...current];\n if (isCollapsed) {\n ns[pIdx] = panel.minSize;\n ns[partner] = total - panel.minSize;\n } else {\n ns[pIdx] = panel.collapsedSize;\n ns[partner] = total - panel.collapsedSize;\n }\n newSizes = ns;\n break;\n }\n default:\n break;\n }\n\n if (newSizes) {\n updateSizesImperative(newSizes);\n commitSizes(newSizes);\n scheduleAnnounce(newSizes[li], true);\n }\n };\n\n const li = _handleIndex;\n const ri = _handleIndex + 1;\n const leftPanel = panels[li];\n const rightPanel = panels[ri];\n const orientation = direction === 'horizontal' ? 'horizontal' as const : 'vertical' as const;\n\n const formatValueText = (size: number) =>\n new Intl.NumberFormat(i18n.language, { style: 'percent' }).format(size / 100);\n\n const setRefs = (el: HTMLDivElement | null) => {\n (handleRef as MutableRefObject<HTMLDivElement | null>).current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n };\n\n return (\n <div\n ref={setRefs}\n role=\"separator\"\n tabIndex={0}\n aria-orientation={orientation}\n aria-valuemin={leftPanel ? (leftPanel.collapsible ? leftPanel.collapsedSize : leftPanel.minSize) : 0}\n aria-valuemax={leftPanel?.maxSize ?? 100}\n aria-valuenow={Math.round(sizes[li] ?? 0)}\n aria-valuetext={formatValueText(sizes[li] ?? 0)}\n aria-controls={[leftPanel?.id, rightPanel?.id].filter(Boolean).join(' ') || undefined}\n aria-label={t('ui.resizable.resizeLabel')}\n data-dragging={isDragging ? '' : undefined}\n className={handleVariants({ orientation, className })}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerCancel}\n onKeyDown={onKeyDown}\n />\n );\n },\n);\n\nHandle.displayName = 'Handle';\n\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — Resizable. */\n/* */\n/* Resizable exposes a per-panel `PanelHandle` rather than a */\n/* whole-component handle, so the v1 adapter only declares the DOM hook */\n/* on the `PanelGroup` wrapper. Per-panel actions are deferred until the */\n/* schema grows a multi-instance pattern (tracked in */\n/* `src/user_stories/to-do/foundations/agent-readiness.mdx`). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const resizableAgent: AgentAdapter<unknown> = {\n id: 'resizable',\n capabilities: ['range_navigate'],\n state: {},\n actions: {},\n domHooks: {\n root: { attr: 'data-component', value: 'resizable' },\n item: {\n attr: 'data-panel-id',\n description: 'Each Panel forwards its `id` to react-resizable-panels which emits it as `data-panel-id`.',\n },\n },\n};\n"],"names":["ResizableContext","createContext","useResizable","ctx","useContext","STORAGE_PREFIX","loadFromStorage","groupId","raw","parsed","saveToStorage","sizes","normalizeSizes","total","a","b","s","computeNewSizes","currentSizes","handleIndex","deltaPercent","panels","groupSizePx","li","ri","lc","rc","collapseThreshold","newLeft","newRight","lMin","rMin","handleVariants","cva","panelGroupVariants","panelVariants","PanelGroup","forwardRef","direction","onLayout","className","children","outerRef","baseId","useId","groupRef","useRef","panelElementsRef","storageTimeoutRef","announceText","setAnnounceText","useState","panelConfigs","processedChildren","useMemo","configs","panelIdx","handleIdx","walk","child","isValidElement","Panel","idx","p","cloneElement","Handle","Children","committedSizes","setCommittedSizes","stored","liveSizesRef","useEffect","updateSizesImperative","useCallback","newSizes","el","commitSizes","useLayoutEffect","registerPanelElement","index","size","unregisterPanelElement","setAnnounceCb","text","containerClass","ctxValue","setRef","jsx","jsxs","_panelIndex","_panelId","minSize","maxSize","ref","panelRef","useImperativeHandle","newSize","clamped","diff","otherIndices","_","i","otherTotal","_handleIndex","t","i18n","useTranslation","isDragging","setIsDragging","dragStateRef","announceTimeoutRef","announceRafRef","handleRef","scheduleAnnounce","immediate","formatted","isRtl","onPointerDown","e","onPointerMove","startX","startY","startSizes","groupRect","isHorizontal","groupSize","rawDelta","percentDelta","rounded","onPointerUp","finalSizes","onPointerCancel","onKeyDown","rtl","step","current","growLeft","amount","avail","ns","shrinkLeft","delta","panel","pIdx","partner","isCollapsed","leftPanel","rightPanel","orientation","formatValueText","resizableAgent"],"mappings":"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"}
|