@alfadocs/ui-kit 0.0.19 → 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-BU7MP5Hg.js +44 -0
- package/dist/_chunks/sign-in-with-alfadocs-button-BU7MP5Hg.js.map +1 -0
- package/dist/_chunks/{signature-capture.agent-L_1_-zVR.js → signature-capture.agent-4htVctJ2.js} +163 -163
- package/dist/_chunks/signature-capture.agent-4htVctJ2.js.map +1 -0
- package/dist/_chunks/skeleton-ClO1v5GE.js +95 -0
- package/dist/_chunks/skeleton-ClO1v5GE.js.map +1 -0
- package/dist/_chunks/skip-link-CASJkBOe.js +68 -0
- package/dist/_chunks/skip-link-CASJkBOe.js.map +1 -0
- package/dist/_chunks/slider-n8JWpJvT.js +273 -0
- package/dist/_chunks/slider-n8JWpJvT.js.map +1 -0
- package/dist/_chunks/slot-grid-BRAkqChA.js +491 -0
- package/dist/_chunks/slot-grid-BRAkqChA.js.map +1 -0
- package/dist/_chunks/{sparkline.agent-BDTXzTy9.js → sparkline.agent-BLY1IMyW.js} +45 -45
- package/dist/_chunks/sparkline.agent-BLY1IMyW.js.map +1 -0
- package/dist/_chunks/{spinner-77xUGpuX.js → spinner-CoAOGcDa.js} +40 -40
- package/dist/_chunks/spinner-CoAOGcDa.js.map +1 -0
- package/dist/_chunks/stat-D76MNHzK.js +208 -0
- package/dist/_chunks/stat-D76MNHzK.js.map +1 -0
- package/dist/_chunks/{stepper-accordion-BkvqQWPI.js → stepper-accordion-DHQ80A4v.js} +33 -33
- package/dist/_chunks/stepper-accordion-DHQ80A4v.js.map +1 -0
- package/dist/_chunks/{stepper-calendar-BQMjrwzo.js → stepper-calendar-vtWwa2bY.js} +159 -159
- package/dist/_chunks/stepper-calendar-vtWwa2bY.js.map +1 -0
- package/dist/_chunks/stepper-progress-DMZ5w5VR.js +128 -0
- package/dist/_chunks/stepper-progress-DMZ5w5VR.js.map +1 -0
- package/dist/_chunks/streaming-text-D0cW8pwq.js +104 -0
- package/dist/_chunks/streaming-text-D0cW8pwq.js.map +1 -0
- package/dist/_chunks/suggestion-chip-BgNFpPEE.js +157 -0
- package/dist/_chunks/suggestion-chip-BgNFpPEE.js.map +1 -0
- package/dist/_chunks/switch-DtLPKO0p.js +137 -0
- package/dist/_chunks/switch-DtLPKO0p.js.map +1 -0
- package/dist/_chunks/{tabs.agent-FsGU3sZL.js → tabs.agent-BDUlyPbJ.js} +101 -101
- package/dist/_chunks/tabs.agent-BDUlyPbJ.js.map +1 -0
- package/dist/_chunks/tag-CfSZZN2f.js +194 -0
- package/dist/_chunks/tag-CfSZZN2f.js.map +1 -0
- package/dist/_chunks/task-card-B5xfiFg5.js +112 -0
- package/dist/_chunks/task-card-B5xfiFg5.js.map +1 -0
- package/dist/_chunks/task-tray-BnpiodZ4.js +99 -0
- package/dist/_chunks/task-tray-BnpiodZ4.js.map +1 -0
- package/dist/_chunks/text-area-BqbruBWx.js +152 -0
- package/dist/_chunks/text-area-BqbruBWx.js.map +1 -0
- package/dist/_chunks/text-input-lh6kRXZS.js +187 -0
- package/dist/_chunks/text-input-lh6kRXZS.js.map +1 -0
- package/dist/_chunks/theme-toggle-BHKMiORD.js +326 -0
- package/dist/_chunks/theme-toggle-BHKMiORD.js.map +1 -0
- package/dist/_chunks/{time-picker-BapZq0OY.js → time-picker-DbpAmPux.js} +102 -102
- package/dist/_chunks/time-picker-DbpAmPux.js.map +1 -0
- package/dist/_chunks/timeline-vjsUeuq1.js +219 -0
- package/dist/_chunks/timeline-vjsUeuq1.js.map +1 -0
- package/dist/_chunks/{timestamp-BLM-jjdw.js → timestamp-DmSt92P1.js} +30 -30
- package/dist/_chunks/timestamp-DmSt92P1.js.map +1 -0
- package/dist/_chunks/{toast-DSCqnDRl.js → toast-DllSITLf.js} +151 -151
- package/dist/_chunks/{toast-DSCqnDRl.js.map → toast-DllSITLf.js.map} +1 -1
- package/dist/_chunks/{tooltip-DF6WjD1r.js → tooltip-Dp3u8jGz.js} +30 -30
- package/dist/_chunks/tooltip-Dp3u8jGz.js.map +1 -0
- package/dist/_chunks/{tooth-scheme.agent-CFKl3iQr.js → tooth-scheme.agent-BRqxWa1D.js} +75 -75
- package/dist/_chunks/tooth-scheme.agent-BRqxWa1D.js.map +1 -0
- package/dist/_chunks/transcript-panel-Bg1BTMSr.js +265 -0
- package/dist/_chunks/transcript-panel-Bg1BTMSr.js.map +1 -0
- package/dist/_chunks/typing-indicator-BRg22Rqr.js +81 -0
- package/dist/_chunks/typing-indicator-BRg22Rqr.js.map +1 -0
- package/dist/_chunks/use-locale-BuXR_Zl9.js +32 -0
- package/dist/_chunks/use-locale-BuXR_Zl9.js.map +1 -0
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js +21 -0
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js.map +1 -0
- package/dist/_chunks/{warning-stack-Cyf_81SL.js → warning-stack-B9N9yWet.js} +38 -38
- package/dist/_chunks/warning-stack-B9N9yWet.js.map +1 -0
- package/dist/_chunks/{workflow-map-Uf-hHAO3.js → workflow-map-gBhL_Wrs.js} +385 -385
- package/dist/_chunks/workflow-map-gBhL_Wrs.js.map +1 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/_shared/index.d.ts +2 -0
- package/dist/components/_shared/index.d.ts.map +1 -1
- package/dist/components/_shared/use-focus-trap.d.ts +32 -0
- package/dist/components/_shared/use-focus-trap.d.ts.map +1 -0
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts +3 -0
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +1 -0
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/aspect-ratio/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/card/index.js +1 -1
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/data-table/toolbar.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/flag/index.js +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/icon-button/index.d.ts +3 -0
- package/dist/components/icon-button/index.d.ts.map +1 -0
- package/dist/components/icon-button/index.js +5 -0
- package/dist/components/icon-button/index.js.map +1 -0
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/index.d.ts +8 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/live-region/index.d.ts +3 -0
- package/dist/components/live-region/index.d.ts.map +1 -0
- package/dist/components/live-region/index.js +5 -0
- package/dist/components/live-region/index.js.map +1 -0
- package/dist/components/live-region/live-region.d.ts +49 -0
- package/dist/components/live-region/live-region.d.ts.map +1 -0
- package/dist/components/logo/index.js +1 -1
- package/dist/components/matrix-rain/index.js +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/navigation-menu/index.d.ts +4 -2
- package/dist/components/navigation-menu/index.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +3 -2
- package/dist/components/navigation-menu/index.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +2 -6
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/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/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts +20 -0
- package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +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/sign-in-with-alfadocs-button-y3gy-W-D.js +0 -38
- package/dist/_chunks/sign-in-with-alfadocs-button-y3gy-W-D.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":"spinner-77xUGpuX.js","sources":["../../src/components/spinner/spinner.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nconst spinnerVariants = cva('inline-block shrink-0 text-current', {\n variants: {\n size: {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n },\n variant: {\n pulse: '',\n chase: '',\n prism: '',\n },\n speed: {\n slower: '',\n slow: '',\n normal: '',\n fast: '',\n faster: '',\n },\n },\n compoundVariants: [\n { variant: 'pulse', speed: 'slower', class: '[--spinner-duration:2400ms]' },\n { variant: 'pulse', speed: 'slow', class: '[--spinner-duration:1800ms]' },\n { variant: 'pulse', speed: 'normal', class: '[--spinner-duration:1200ms]' },\n { variant: 'pulse', speed: 'fast', class: '[--spinner-duration:900ms]' },\n { variant: 'pulse', speed: 'faster', class: '[--spinner-duration:600ms]' },\n { variant: 'chase', speed: 'slower', class: '[--spinner-duration:2400ms]' },\n { variant: 'chase', speed: 'slow', class: '[--spinner-duration:1800ms]' },\n { variant: 'chase', speed: 'normal', class: '[--spinner-duration:1200ms]' },\n { variant: 'chase', speed: 'fast', class: '[--spinner-duration:900ms]' },\n { variant: 'chase', speed: 'faster', class: '[--spinner-duration:600ms]' },\n // prism runs 2× so each of the 4 brand hues has room to read.\n { variant: 'prism', speed: 'slower', class: '[--spinner-duration:4800ms]' },\n { variant: 'prism', speed: 'slow', class: '[--spinner-duration:3600ms]' },\n { variant: 'prism', speed: 'normal', class: '[--spinner-duration:2400ms]' },\n { variant: 'prism', speed: 'fast', class: '[--spinner-duration:1800ms]' },\n { variant: 'prism', speed: 'faster', class: '[--spinner-duration:1200ms]' },\n ],\n defaultVariants: { size: 'md', variant: 'pulse', speed: 'normal' },\n});\n\nconst shapeVariants = cva(\n [\n 'fill-current',\n '[transform-box:fill-box] [transform-origin:center]',\n 'motion-reduce:animate-none',\n '[animation-delay:calc(var(--spinner-duration)/4*var(--spinner-position))]',\n ].join(' '),\n {\n variants: {\n variant: {\n pulse:\n 'animate-[spinner-pulse_var(--spinner-duration)_ease-in-out_infinite]',\n chase:\n 'animate-[spinner-chase_var(--spinner-duration)_ease-out_infinite]',\n prism:\n 'animate-[spinner-prism_var(--spinner-duration)_linear_infinite] motion-reduce:fill-[var(--color-violet-500)]',\n },\n position: {\n top: '[--spinner-position:0]',\n right: '[--spinner-position:1]',\n bottom: '[--spinner-position:2]',\n left: '[--spinner-position:3]',\n },\n },\n defaultVariants: { variant: 'pulse', position: 'top' },\n },\n);\n\nexport type SpinnerVariant = 'pulse' | 'chase' | 'prism';\nexport type SpinnerSpeed = 'slower' | 'slow' | 'normal' | 'fast' | 'faster';\n\nexport interface SpinnerProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'role' | 'children'>,\n VariantProps<typeof spinnerVariants> {\n size?: 'sm' | 'md' | 'lg';\n variant?: SpinnerVariant;\n speed?: SpinnerSpeed;\n label?: string;\n}\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(\n (\n {\n size = 'md',\n variant = 'pulse',\n speed = 'normal',\n label,\n className,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const accessibleLabel = label ?? t('ui.common.loading', 'Loading…');\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={spinnerVariants({ size, variant, speed, className })}\n {...props}\n >\n <svg aria-hidden=\"true\" viewBox=\"0 0 148 148\" className=\"size-full\">\n <g\n data-shape=\"top\"\n className={shapeVariants({ variant, position: 'top' })}\n >\n <rect\n x=\"53.04\"\n y=\"2.54\"\n width=\"33.99\"\n height=\"49.34\"\n rx=\"4.56\"\n ry=\"4.56\"\n transform=\"translate(-4.66 19.05) rotate(-15)\"\n />\n </g>\n <g\n data-shape=\"right\"\n className={shapeVariants({ variant, position: 'right' })}\n >\n <rect\n x=\"96.12\"\n y=\"53.04\"\n width=\"49.34\"\n height=\"33.99\"\n rx=\"4.56\"\n ry=\"4.56\"\n transform=\"translate(-14.01 33.65) rotate(-15)\"\n />\n </g>\n <g\n data-shape=\"bottom\"\n className={shapeVariants({ variant, position: 'bottom' })}\n >\n <rect\n x=\"60.97\"\n y=\"96.12\"\n width=\"33.99\"\n height=\"49.34\"\n rx=\"4.56\"\n ry=\"4.56\"\n transform=\"translate(-28.61 24.29) rotate(-15)\"\n />\n </g>\n <g\n data-shape=\"left\"\n className={shapeVariants({ variant, position: 'left' })}\n >\n <path d=\"M47.82,59.56c-.65-2.43-3.15-3.87-5.58-3.22L3.38,66.75c-2.43.65-3.87,3.15-3.22,5.58l6.44,24.03c.65,2.43,3.15,3.87,5.58,3.22l38.86-10.41c2.43-.65,3.87-3.15,3.22-5.58l-6.44-24.03Z\" />\n </g>\n </svg>\n <span className=\"sr-only\">{accessibleLabel}</span>\n </span>\n );\n },\n);\n\nSpinner.displayName = 'Spinner';\n"],"names":["spinnerVariants","cva","shapeVariants","Spinner","forwardRef","size","variant","speed","label","className","props","ref","t","useTranslation","accessibleLabel","jsxs","jsx"],"mappings":"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"}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { jsxs as l, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as I, useId as j } from "react";
|
|
3
|
-
import { c as p } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { useTranslation as h } from "react-i18next";
|
|
5
|
-
const y = p("flex flex-col", {
|
|
6
|
-
variants: {
|
|
7
|
-
variant: {
|
|
8
|
-
default: "gap-[var(--spacing-xs)]",
|
|
9
|
-
outlined: [
|
|
10
|
-
"gap-[var(--spacing-xs)]",
|
|
11
|
-
"border border-[color:var(--border)]",
|
|
12
|
-
"rounded-[var(--radius-md)]",
|
|
13
|
-
"ps-[var(--spacing-md)] pe-[var(--spacing-md)]",
|
|
14
|
-
"pt-[var(--spacing-md)] pb-[var(--spacing-md)]"
|
|
15
|
-
].join(" "),
|
|
16
|
-
// White card surface with the shared card shadow — matches
|
|
17
|
-
// `Card variant="elevated"` tokens (`--card` + `--shadow-card`) so
|
|
18
|
-
// a grid of elevated Stats reads as a set of shaded panels without
|
|
19
|
-
// nesting a Card around each one.
|
|
20
|
-
elevated: [
|
|
21
|
-
"gap-[var(--spacing-xs)]",
|
|
22
|
-
"bg-[var(--card)]",
|
|
23
|
-
"text-[var(--card-foreground)]",
|
|
24
|
-
"shadow-[var(--shadow-card)]",
|
|
25
|
-
"rounded-[var(--radius-lg)]",
|
|
26
|
-
"ps-[var(--spacing-md)] pe-[var(--spacing-md)]",
|
|
27
|
-
"pt-[var(--spacing-md)] pb-[var(--spacing-md)]",
|
|
28
|
-
// Forced-colors: UA strips shadow, so render a border as the
|
|
29
|
-
// separation cue — mirrors Card's forced-colors behaviour.
|
|
30
|
-
"forced-colors:border forced-colors:border-[CanvasText]"
|
|
31
|
-
].join(" "),
|
|
32
|
-
compact: "gap-[var(--spacing-none)]"
|
|
33
|
-
},
|
|
34
|
-
size: {
|
|
35
|
-
sm: "",
|
|
36
|
-
md: "",
|
|
37
|
-
lg: ""
|
|
38
|
-
},
|
|
39
|
-
align: {
|
|
40
|
-
start: "items-start text-start",
|
|
41
|
-
center: "items-center text-center",
|
|
42
|
-
end: "items-end text-end"
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
defaultVariants: {
|
|
46
|
-
variant: "default",
|
|
47
|
-
size: "md",
|
|
48
|
-
align: "start"
|
|
49
|
-
}
|
|
50
|
-
}), k = p(
|
|
51
|
-
"type-metric text-[var(--foreground)]",
|
|
52
|
-
{
|
|
53
|
-
variants: {
|
|
54
|
-
size: {
|
|
55
|
-
sm: "[--type-metric-size:var(--font-size-xl)]",
|
|
56
|
-
md: "[--type-metric-size:var(--font-size-3xl)]",
|
|
57
|
-
lg: "[--type-metric-size:var(--font-size-5xl)]"
|
|
58
|
-
},
|
|
59
|
-
variant: {
|
|
60
|
-
default: "",
|
|
61
|
-
outlined: "",
|
|
62
|
-
elevated: "",
|
|
63
|
-
compact: ""
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
compoundVariants: [
|
|
67
|
-
{ variant: "compact", size: "sm", className: "[--type-metric-size:var(--font-size-lg)]" },
|
|
68
|
-
{ variant: "compact", size: "md", className: "[--type-metric-size:var(--font-size-xl)]" },
|
|
69
|
-
{ variant: "compact", size: "lg", className: "[--type-metric-size:var(--font-size-2xl)]" }
|
|
70
|
-
],
|
|
71
|
-
defaultVariants: {
|
|
72
|
-
size: "md",
|
|
73
|
-
variant: "default"
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
), S = p(
|
|
77
|
-
"inline-flex items-center gap-[var(--spacing-xs)] type-label",
|
|
78
|
-
{
|
|
79
|
-
variants: {
|
|
80
|
-
trend: {
|
|
81
|
-
up: "text-[var(--success)]",
|
|
82
|
-
down: "text-[var(--destructive)]",
|
|
83
|
-
flat: "text-[var(--muted-foreground)]"
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
defaultVariants: {
|
|
87
|
-
trend: "flat"
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
), T = { up: "↑", down: "↓", flat: "→" }, F = {
|
|
91
|
-
up: "ui.stat.trend.up",
|
|
92
|
-
down: "ui.stat.trend.down",
|
|
93
|
-
flat: "ui.stat.trend.flat"
|
|
94
|
-
};
|
|
95
|
-
function R({ trend: t, delta: a, deltaFormat: r = "decimal", locale: o }) {
|
|
96
|
-
const { t: n, i18n: s } = h(), i = typeof a == "string" ? a : new Intl.NumberFormat(o ?? s.language, {
|
|
97
|
-
style: r === "percent" ? "percent" : "decimal"
|
|
98
|
-
}).format(r === "percent" ? a / 100 : a);
|
|
99
|
-
return /* @__PURE__ */ l("span", { className: S({ trend: t }), children: [
|
|
100
|
-
/* @__PURE__ */ e("span", { "aria-hidden": "true", children: T[t] }),
|
|
101
|
-
/* @__PURE__ */ e("span", { className: "sr-only", children: n(F[t]) }),
|
|
102
|
-
i
|
|
103
|
-
] });
|
|
104
|
-
}
|
|
105
|
-
const D = I(
|
|
106
|
-
({
|
|
107
|
-
label: t,
|
|
108
|
-
value: a,
|
|
109
|
-
format: r,
|
|
110
|
-
currency: o,
|
|
111
|
-
locale: n,
|
|
112
|
-
trend: s,
|
|
113
|
-
delta: i,
|
|
114
|
-
deltaFormat: N = "decimal",
|
|
115
|
-
icon: u,
|
|
116
|
-
loading: w = !1,
|
|
117
|
-
variant: d = "default",
|
|
118
|
-
size: m = "md",
|
|
119
|
-
align: v = "start",
|
|
120
|
-
className: f,
|
|
121
|
-
...g
|
|
122
|
-
}, x) => {
|
|
123
|
-
const { i18n: z } = h(), b = j(), V = () => {
|
|
124
|
-
if (typeof a == "string") return a;
|
|
125
|
-
const c = n ?? z.language;
|
|
126
|
-
switch (r) {
|
|
127
|
-
case "currency":
|
|
128
|
-
return new Intl.NumberFormat(c, {
|
|
129
|
-
style: "currency",
|
|
130
|
-
currency: o ?? "USD"
|
|
131
|
-
}).format(a);
|
|
132
|
-
case "percent":
|
|
133
|
-
return new Intl.NumberFormat(c, { style: "percent" }).format(a);
|
|
134
|
-
case "decimal":
|
|
135
|
-
return new Intl.NumberFormat(c, { style: "decimal" }).format(a);
|
|
136
|
-
default:
|
|
137
|
-
return new Intl.NumberFormat(c).format(a);
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
return w ? /* @__PURE__ */ l(
|
|
141
|
-
"div",
|
|
142
|
-
{
|
|
143
|
-
ref: x,
|
|
144
|
-
role: "group",
|
|
145
|
-
"aria-busy": "true",
|
|
146
|
-
"aria-label": t,
|
|
147
|
-
className: y({ variant: d, size: m, align: v, className: f }),
|
|
148
|
-
...g,
|
|
149
|
-
children: [
|
|
150
|
-
/* @__PURE__ */ e("div", { className: "h-[var(--skeleton-label-h)] w-[var(--skeleton-label-w)] animate-pulse rounded-[var(--radius-sm)] bg-[var(--muted)]" }),
|
|
151
|
-
/* @__PURE__ */ e("div", { className: "h-[var(--skeleton-value-h)] w-[var(--skeleton-value-w)] animate-pulse rounded-[var(--radius-sm)] bg-[var(--muted)]" })
|
|
152
|
-
]
|
|
153
|
-
}
|
|
154
|
-
) : /* @__PURE__ */ l(
|
|
155
|
-
"div",
|
|
156
|
-
{
|
|
157
|
-
ref: x,
|
|
158
|
-
role: "group",
|
|
159
|
-
"aria-labelledby": b,
|
|
160
|
-
className: y({ variant: d, size: m, align: v, className: f }),
|
|
161
|
-
...g,
|
|
162
|
-
children: [
|
|
163
|
-
/* @__PURE__ */ l("span", { className: "inline-flex items-center", children: [
|
|
164
|
-
u && /* @__PURE__ */ e(
|
|
165
|
-
"span",
|
|
166
|
-
{
|
|
167
|
-
"aria-hidden": "true",
|
|
168
|
-
className: [
|
|
169
|
-
"me-[var(--spacing-xs)] inline-flex shrink-0",
|
|
170
|
-
// Accent tint on the leading icon. The icon is decorative
|
|
171
|
-
// (aria-hidden), so magenta-500's 3.2:1 contrast on white
|
|
172
|
-
// is acceptable here — the Stat label + value still
|
|
173
|
-
// carry the accessible name at `--foreground`.
|
|
174
|
-
"text-[color:var(--accent)]",
|
|
175
|
-
"forced-colors:text-[CanvasText]"
|
|
176
|
-
].join(" "),
|
|
177
|
-
children: u
|
|
178
|
-
}
|
|
179
|
-
),
|
|
180
|
-
/* @__PURE__ */ e(
|
|
181
|
-
"span",
|
|
182
|
-
{
|
|
183
|
-
id: b,
|
|
184
|
-
className: "type-label text-[var(--muted-foreground)]",
|
|
185
|
-
children: t
|
|
186
|
-
}
|
|
187
|
-
)
|
|
188
|
-
] }),
|
|
189
|
-
/* @__PURE__ */ e("span", { className: k({ size: m, variant: d }), children: V() }),
|
|
190
|
-
s != null && i != null && /* @__PURE__ */ e(
|
|
191
|
-
R,
|
|
192
|
-
{
|
|
193
|
-
trend: s,
|
|
194
|
-
delta: i,
|
|
195
|
-
deltaFormat: N,
|
|
196
|
-
locale: n
|
|
197
|
-
}
|
|
198
|
-
)
|
|
199
|
-
]
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
);
|
|
204
|
-
D.displayName = "Stat";
|
|
205
|
-
export {
|
|
206
|
-
D as S
|
|
207
|
-
};
|
|
208
|
-
//# sourceMappingURL=stat-CrumvZWf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stat-CrumvZWf.js","sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\n/* ------------------------------------------------------------------ */\n/* CVA — stat root */\n/* ------------------------------------------------------------------ */\n\nconst statVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-[var(--spacing-xs)]',\n outlined: [\n 'gap-[var(--spacing-xs)]',\n 'border border-[color:var(--border)]',\n 'rounded-[var(--radius-md)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)]',\n 'pt-[var(--spacing-md)] pb-[var(--spacing-md)]',\n ].join(' '),\n // White card surface with the shared card shadow — matches\n // `Card variant=\"elevated\"` tokens (`--card` + `--shadow-card`) so\n // a grid of elevated Stats reads as a set of shaded panels without\n // nesting a Card around each one.\n elevated: [\n 'gap-[var(--spacing-xs)]',\n 'bg-[var(--card)]',\n 'text-[var(--card-foreground)]',\n 'shadow-[var(--shadow-card)]',\n 'rounded-[var(--radius-lg)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)]',\n 'pt-[var(--spacing-md)] pb-[var(--spacing-md)]',\n // Forced-colors: UA strips shadow, so render a border as the\n // separation cue — mirrors Card's forced-colors behaviour.\n 'forced-colors:border forced-colors:border-[CanvasText]',\n ].join(' '),\n compact: 'gap-[var(--spacing-none)]',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n align: {\n start: 'items-start text-start',\n center: 'items-center text-center',\n end: 'items-end text-end',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n align: 'start',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — value element */\n/* ------------------------------------------------------------------ */\n\nconst valueVariants = cva(\n 'type-metric text-[var(--foreground)]',\n {\n variants: {\n size: {\n sm: '[--type-metric-size:var(--font-size-xl)]',\n md: '[--type-metric-size:var(--font-size-3xl)]',\n lg: '[--type-metric-size:var(--font-size-5xl)]',\n },\n variant: {\n default: '',\n outlined: '',\n elevated: '',\n compact: '',\n },\n },\n compoundVariants: [\n { variant: 'compact', size: 'sm', className: '[--type-metric-size:var(--font-size-lg)]' },\n { variant: 'compact', size: 'md', className: '[--type-metric-size:var(--font-size-xl)]' },\n { variant: 'compact', size: 'lg', className: '[--type-metric-size:var(--font-size-2xl)]' },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — trend element */\n/* ------------------------------------------------------------------ */\n\nconst trendVariants = cva(\n 'inline-flex items-center gap-[var(--spacing-xs)] type-label',\n {\n variants: {\n trend: {\n up: 'text-[var(--success)]',\n down: 'text-[var(--destructive)]',\n flat: 'text-[var(--muted-foreground)]',\n },\n },\n defaultVariants: {\n trend: 'flat',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* StatTrend (internal — not exported) */\n/* ------------------------------------------------------------------ */\n\ninterface StatTrendProps {\n trend: 'up' | 'down' | 'flat';\n delta: number | string;\n deltaFormat?: 'decimal' | 'percent';\n locale?: string;\n}\n\nconst ARROW = { up: '↑', down: '↓', flat: '→' } as const;\nconst TREND_KEY = {\n up: 'ui.stat.trend.up',\n down: 'ui.stat.trend.down',\n flat: 'ui.stat.trend.flat',\n} as const;\n\nfunction StatTrend({ trend, delta, deltaFormat = 'decimal', locale }: StatTrendProps) {\n const { t, i18n } = useTranslation();\n\n const formattedDelta =\n typeof delta === 'string'\n ? delta\n : new Intl.NumberFormat(locale ?? i18n.language, {\n style: deltaFormat === 'percent' ? 'percent' : 'decimal',\n }).format(deltaFormat === 'percent' ? delta / 100 : delta);\n\n return (\n <span className={trendVariants({ trend })}>\n <span aria-hidden=\"true\">{ARROW[trend]}</span>\n <span className=\"sr-only\">{t(TREND_KEY[trend])}</span>\n {formattedDelta}\n </span>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* StatProps */\n/* ------------------------------------------------------------------ */\n\nexport interface StatProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statVariants> {\n /** Metric label rendered above the value. */\n label: string;\n /** Numeric or pre-formatted string value. */\n value: number | string;\n /** Number formatting style. Omit to use default decimal formatting. */\n format?: 'decimal' | 'currency' | 'percent';\n /** ISO 4217 currency code — required when format=\"currency\". */\n currency?: string;\n /** BCP 47 locale override. Defaults to the active i18n language. */\n locale?: string;\n /** Trend direction. Requires `delta` to render the trend row. */\n trend?: 'up' | 'down' | 'flat';\n /** Trend delta magnitude, e.g. 12 for \"↑ 12%\". */\n delta?: number | string;\n /** Number formatting style for the delta. Default \"decimal\". */\n deltaFormat?: 'decimal' | 'percent';\n /** Optional leading icon rendered at the start of the label row. */\n icon?: ReactNode;\n /** Renders animated skeleton placeholders instead of content. */\n loading?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Stat */\n/* ------------------------------------------------------------------ */\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n (\n {\n label,\n value,\n format,\n currency,\n locale,\n trend,\n delta,\n deltaFormat = 'decimal',\n icon,\n loading = false,\n variant = 'default',\n size = 'md',\n align = 'start',\n className,\n ...props\n },\n ref,\n ) => {\n const { i18n } = useTranslation();\n const labelId = useId();\n\n const formatValue = (): string => {\n if (typeof value === 'string') return value;\n const lang = locale ?? i18n.language;\n\n switch (format) {\n case 'currency':\n return new Intl.NumberFormat(lang, {\n style: 'currency',\n currency: currency ?? 'USD',\n }).format(value);\n case 'percent':\n return new Intl.NumberFormat(lang, { style: 'percent' }).format(value);\n case 'decimal':\n return new Intl.NumberFormat(lang, { style: 'decimal' }).format(value);\n default:\n return new Intl.NumberFormat(lang).format(value);\n }\n };\n\n if (loading) {\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-busy=\"true\"\n aria-label={label}\n className={statVariants({ variant, size, align, className })}\n {...props}\n >\n <div className=\"h-[var(--skeleton-label-h)] w-[var(--skeleton-label-w)] animate-pulse rounded-[var(--radius-sm)] bg-[var(--muted)]\" />\n <div className=\"h-[var(--skeleton-value-h)] w-[var(--skeleton-value-w)] animate-pulse rounded-[var(--radius-sm)] bg-[var(--muted)]\" />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={labelId}\n className={statVariants({ variant, size, align, className })}\n {...props}\n >\n <span className=\"inline-flex items-center\">\n {icon && (\n <span\n aria-hidden=\"true\"\n className={[\n 'me-[var(--spacing-xs)] inline-flex shrink-0',\n // Accent tint on the leading icon. The icon is decorative\n // (aria-hidden), so magenta-500's 3.2:1 contrast on white\n // is acceptable here — the Stat label + value still\n // carry the accessible name at `--foreground`.\n 'text-[color:var(--accent)]',\n 'forced-colors:text-[CanvasText]',\n ].join(' ')}\n >\n {icon}\n </span>\n )}\n <span\n id={labelId}\n className=\"type-label text-[var(--muted-foreground)]\"\n >\n {label}\n </span>\n </span>\n <span className={valueVariants({ size, variant })}>\n {formatValue()}\n </span>\n {trend != null && delta != null && (\n <StatTrend\n trend={trend}\n delta={delta}\n deltaFormat={deltaFormat}\n locale={locale}\n />\n )}\n </div>\n );\n },\n);\n\nStat.displayName = 'Stat';\n"],"names":["statVariants","cva","valueVariants","trendVariants","ARROW","TREND_KEY","StatTrend","trend","delta","deltaFormat","locale","t","i18n","useTranslation","formattedDelta","jsx","Stat","forwardRef","label","value","format","currency","icon","loading","variant","size","align","className","props","ref","labelId","useId","formatValue","lang","jsxs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stepper-accordion-BkvqQWPI.js","sources":["../../node_modules/lucide-react/dist/esm/icons/lock.js","../../src/components/stepper-accordion/stepper-accordion.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronDown, Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport {\n stateForStep,\n type StepSpec,\n type StepState,\n} from '../_shared/stepper';\n\n/* -------------------------------------------------------------------- */\n/* StepperAccordion */\n/* */\n/* Vertical disclosure wizard. The current step is expanded inline; */\n/* completed steps collapse to a one-line summary with an \"Edit\" hint */\n/* that re-opens them; upcoming steps are locked. Built on Radix */\n/* Accordion in controlled-single mode with collapsible=false so the */\n/* current panel always stays open. */\n/* -------------------------------------------------------------------- */\n\nconst STEP_VALUE_PREFIX = 'step-';\nconst makeValue = (index: number) => `${STEP_VALUE_PREFIX}${index}`;\nconst indexFromValue = (value: string): number =>\n Number(value.slice(STEP_VALUE_PREFIX.length));\n\n/* -------------------------------------------------------------------- */\n/* Indicator — shared with progress bar visual tone but sized for the */\n/* vertical wizard's dense header row. */\n/* -------------------------------------------------------------------- */\n\nconst iconDrawClasses = [\n '[stroke-dasharray:1] [stroke-dashoffset:1]',\n 'animate-[stepper-icon-draw_var(--animation-duration)_var(--ease-out)_forwards]',\n 'motion-reduce:animate-none motion-reduce:[stroke-dashoffset:0]',\n].join(' ');\n\nfunction CheckGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className=\"size-4\"\n >\n <path pathLength=\"1\" d=\"M5 12l5 5L20 7\" className={iconDrawClasses} />\n </svg>\n );\n}\n\nfunction CrossGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className=\"size-4\"\n >\n <path pathLength=\"1\" d=\"M6 6l12 12\" className={iconDrawClasses} />\n <path pathLength=\"1\" d=\"M18 6l-12 12\" className={iconDrawClasses} />\n </svg>\n );\n}\n\nconst indicatorClasses = [\n 'inline-flex shrink-0 items-center justify-center',\n 'min-w-[var(--min-target-size)] min-h-[var(--min-target-size)]',\n 'size-[var(--min-target-size)]',\n 'rounded-[var(--radius-full)]',\n 'text-[var(--font-size-sm)] font-[var(--font-weight-semibold)]',\n 'border border-[var(--border)]',\n 'transition-[background-color,border-color,color]',\n 'duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n].join(' ');\n\nconst indicatorVariants = cva(indicatorClasses, {\n variants: {\n state: {\n upcoming: 'bg-[var(--background)] text-[var(--muted-foreground)]',\n current: [\n 'border-[var(--primary)] bg-[var(--primary)] text-[var(--primary-foreground)]',\n 'animate-[stepper-indicator-pop_var(--animation-duration)_var(--ease-out)_both]',\n 'motion-reduce:animate-none',\n ].join(' '),\n completed:\n 'border-[var(--primary)] bg-[var(--primary)] text-[var(--primary-foreground)]',\n error: [\n 'border-[var(--destructive)] bg-[var(--destructive)] text-[var(--destructive-foreground)]',\n 'animate-[stepper-indicator-pop_var(--animation-duration)_var(--ease-out)_both]',\n 'motion-reduce:animate-none',\n ].join(' '),\n },\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* Item / trigger / content variants */\n/* -------------------------------------------------------------------- */\n\nconst itemVariants = cva(\n [\n 'group/item overflow-hidden rounded-[var(--radius-md)]',\n 'border border-[var(--border)] bg-[var(--card)]',\n 'data-[state=open]:border-[var(--primary)]',\n 'transition-[border-color] duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n tone: {\n neutral: '',\n error: 'data-[state=open]:border-[var(--destructive)]',\n },\n },\n defaultVariants: { tone: 'neutral' },\n },\n);\n\nconst triggerClasses = [\n 'flex w-full items-center gap-[var(--spacing-sm)]',\n 'min-h-[var(--min-target-size)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)]',\n 'pt-[var(--spacing-sm)] pb-[var(--spacing-sm)]',\n 'text-start',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-[var(--ring)] focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'disabled:cursor-not-allowed',\n 'transition-[background-color] duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n 'hover:enabled:bg-[var(--muted)]/40',\n].join(' ');\n\nconst labelClasses = (state: StepState) =>\n [\n 'type-body-sm',\n state === 'current' || state === 'error'\n ? 'font-[var(--font-weight-semibold)] text-[var(--foreground)]'\n : state === 'completed'\n ? 'text-[var(--foreground)]'\n : 'text-[var(--muted-foreground)]',\n ].join(' ');\n\nconst descriptionClasses = [\n 'type-meta text-[var(--muted-foreground)]',\n 'mt-[var(--spacing-xs)]',\n].join(' ');\n\nconst hintClasses = [\n 'type-meta',\n 'inline-flex items-center gap-[var(--spacing-xs)]',\n 'text-[var(--muted-foreground)]',\n].join(' ');\n\nconst chevronClasses = [\n 'size-4 shrink-0 text-[var(--muted-foreground)]',\n 'transition-transform duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n 'group-data-[state=open]/item:rotate-180',\n].join(' ');\n\nconst summaryClasses = [\n 'type-meta text-[var(--muted-foreground)]',\n 'ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]',\n 'pe-[var(--spacing-md)] pb-[var(--spacing-sm)]',\n 'group-data-[state=open]/item:hidden',\n].join(' ');\n\nconst contentClasses = [\n 'overflow-hidden',\n 'data-[state=open]:animate-[accordion-down_var(--animation-duration)_var(--ease-out)]',\n 'data-[state=closed]:animate-[accordion-up_var(--animation-duration)_var(--ease-in)]',\n].join(' ');\n\nconst contentInnerClasses = [\n 'ps-[calc(var(--min-target-size)+var(--spacing-md)+var(--spacing-sm))]',\n 'pe-[var(--spacing-md)] pt-[var(--spacing-xs)] pb-[var(--spacing-md)]',\n].join(' ');\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface AccordionStepSpec extends StepSpec {\n /** Form content rendered inside the expanded panel. */\n content: ReactNode;\n /**\n * One-line summary shown under the header when the step is completed\n * and its panel is collapsed. Typically a preview of the captured\n * data — \"Mario Rossi · 12/03/1985\".\n */\n summary?: ReactNode;\n}\n\nconst rootVariants = cva('flex flex-col gap-[var(--spacing-sm)]', {\n variants: {},\n});\n\nexport interface StepperAccordionProps\n extends Omit<\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>,\n 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'collapsible'\n >,\n VariantProps<typeof rootVariants> {\n /** Active step (0-indexed). The matching panel is the one that is open. */\n activeStep: number;\n /** Step specs — each one provides its own content + optional summary. */\n steps: AccordionStepSpec[];\n /**\n * Fires when the user re-opens a completed step. Upcoming steps cannot\n * be activated — their triggers are disabled. The current step cannot\n * be collapsed (Radix `collapsible=false`).\n */\n onStepChange?: (index: number) => void;\n /** Override the default `aria-label` on the list wrapper. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nconst StepperAccordion = forwardRef<HTMLDivElement, StepperAccordionProps>(\n (\n {\n activeStep,\n steps,\n onStepChange,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const total = steps.length;\n const clampedActive = Math.max(0, Math.min(activeStep, total - 1));\n const label = ariaLabel ?? t('navigation.stepper.label');\n const editCopy = t('navigation.stepper.edit');\n const lockedCopy = t('navigation.stepper.locked');\n const completedCopy = t('navigation.stepper.completed');\n const errorCopy = t('navigation.stepper.error');\n\n const handleValueChange = (value: string) => {\n // `collapsible=false` prevents empty-string values in practice, but the\n // primitive's type still allows one — guard anyway.\n if (!value) return;\n const index = indexFromValue(value);\n if (Number.isFinite(index) && index !== clampedActive) {\n onStepChange?.(index);\n }\n };\n\n return (\n <AccordionPrimitive.Root\n ref={ref}\n type=\"single\"\n value={makeValue(clampedActive)}\n onValueChange={handleValueChange}\n collapsible={false}\n aria-label={label}\n className={rootVariants({ className })}\n {...rest}\n >\n {steps.map((spec, index) => {\n const state = stateForStep(index, clampedActive, spec.status);\n const isCurrent = state === 'current' || state === 'error';\n const isUpcoming = state === 'upcoming';\n const itemTone = state === 'error' ? 'error' : 'neutral';\n const stepN = t('navigation.stepper.stepN', { n: index + 1 });\n\n const indicatorContent = (() => {\n if (state === 'completed') {\n return (\n <>\n <CheckGlyph />\n <span className=\"sr-only\">{completedCopy}</span>\n </>\n );\n }\n if (state === 'error') {\n return (\n <>\n <CrossGlyph />\n <span className=\"sr-only\">{errorCopy}</span>\n </>\n );\n }\n return <span>{index + 1}</span>;\n })();\n\n const hint = (() => {\n if (state === 'completed') {\n return <span className={hintClasses}>{editCopy}</span>;\n }\n if (state === 'upcoming') {\n return (\n <span className={hintClasses}>\n <Lock aria-hidden=\"true\" className=\"size-3\" />\n {lockedCopy}\n </span>\n );\n }\n return null;\n })();\n\n return (\n <AccordionPrimitive.Item\n key={index}\n value={makeValue(index)}\n className={itemVariants({ tone: itemTone })}\n >\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n // Upcoming steps are *HTML*-disabled — they must not be\n // reachable by Tab or by Radix's arrow-key navigation ring\n // (Radix filters `item.ref.current?.disabled`, which is\n // the HTML attribute). Current is only *ARIA*-disabled so\n // keyboard users can Tab to it as a heading anchor and\n // hear \"current step\"; Radix's `collapsible=false` makes\n // the click a no-op regardless. Setting `disabled` at the\n // Trigger rather than the Item because `...triggerProps`\n // spreads after Collapsible writes its own `disabled`\n // from context, so the Item-level disabled gets overridden.\n disabled={isUpcoming}\n aria-disabled={isCurrent || undefined}\n aria-label={\n state === 'completed' ? `${stepN}, ${editCopy}` : stepN\n }\n aria-current={isCurrent ? 'step' : undefined}\n className={triggerClasses}\n >\n <span\n aria-hidden=\"true\"\n className={indicatorVariants({ state })}\n >\n {indicatorContent}\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className={labelClasses(state)}>{spec.label}</span>\n {spec.description ? (\n <span className={descriptionClasses}>\n {spec.description}\n </span>\n ) : null}\n </span>\n {hint}\n {isCurrent ? null : (\n <ChevronDown\n aria-hidden=\"true\"\n className={chevronClasses}\n />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n {spec.summary && state === 'completed' ? (\n <div className={summaryClasses}>{spec.summary}</div>\n ) : null}\n <AccordionPrimitive.Content className={contentClasses}>\n <div className={contentInnerClasses}>{spec.content}</div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n );\n })}\n </AccordionPrimitive.Root>\n );\n },\n);\nStepperAccordion.displayName = 'StepperAccordion';\n\nexport { StepperAccordion };\n"],"names":["__iconNode","Lock","createLucideIcon","STEP_VALUE_PREFIX","makeValue","index","indexFromValue","value","iconDrawClasses","CheckGlyph","jsx","CrossGlyph","jsxs","indicatorClasses","indicatorVariants","cva","itemVariants","triggerClasses","labelClasses","state","descriptionClasses","hintClasses","chevronClasses","summaryClasses","contentClasses","contentInnerClasses","rootVariants","StepperAccordion","forwardRef","activeStep","steps","onStepChange","ariaLabel","className","rest","ref","t","useTranslation","total","clampedActive","label","editCopy","lockedCopy","completedCopy","errorCopy","handleValueChange","AccordionPrimitive","spec","stateForStep","isCurrent","isUpcoming","itemTone","stepN","indicatorContent","Fragment","hint","ChevronDown"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stepper-calendar-BQMjrwzo.js","sources":["../../node_modules/date-fns/subMonths.js","../../src/components/stepper-calendar/stepper-calendar.tsx"],"sourcesContent":["import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n addDays,\n addMonths,\n format as fnsFormat,\n isSameDay,\n isSameMonth,\n parseISO,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { StepSpec, StepStatus } from '../_shared/stepper';\nimport { stateForStep } from '../_shared/stepper';\nimport { StepperProgress } from '../stepper-progress/stepper-progress';\nimport { Button } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { SlotGrid, type SlotGridDay, type SlotGridSlot } from '../slot-grid/slot-grid';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { resolveFirstDay } from '../calendar/calendar';\n\n// Slot IDs use a fixed `${yyyy-mm-dd}T${HH:mm}` shape so the trailing time\n// segment can be safely peeled off in onSlotSelect. Validating against the\n// shape rather than splitting blindly so an unexpected ID surfaces as a\n// no-op rather than a malformed time value.\nconst SLOT_ID_PATTERN = /^(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2})$/;\n\n/* -------------------------------------------------------------------- */\n/* StepperCalendar */\n/* */\n/* Single-component, A/B-testable appointment-booking flow with 4 */\n/* fixed steps in this order: */\n/* 0. Service — pick from `services` */\n/* 1. Date — inline month grid; only `availableDates` are enabled */\n/* 2. Time — slot grid showing `availableSlots[selectedDate]` */\n/* 3. Details — render-prop slot for the consumer's form fields */\n/* -------------------------------------------------------------------- */\n\n/** Service offering rendered on Step 1. Data is API-driven by the consumer. */\nexport interface StepperCalendarService {\n id: string;\n /** Already-translated label (consumer is responsible for i18n of data). */\n label: string;\n /** Duration in minutes — shown alongside the label. */\n durationMin: number;\n /** Optional secondary line. */\n description?: string;\n}\n\n/** Re-exported for convenience. */\nexport type ServiceOption = StepperCalendarService;\n\n/** Booking selection — controlled by the consumer. */\nexport interface StepperCalendarValue {\n serviceId?: string;\n /** ISO yyyy-mm-dd. */\n date?: string;\n /** HH:mm (24h). */\n time?: string;\n}\n\nconst TOTAL_STEPS = 4;\n\nconst rootVariants = cva(\n 'flex w-full flex-col gap-[var(--spacing-md)] text-[var(--foreground)]',\n {\n variants: {\n layout: {\n vertical: 'flex-col',\n horizontal: 'lg:flex-row lg:items-start',\n },\n density: {\n comfortable: 'gap-[var(--spacing-md)]',\n compact: 'gap-[var(--spacing-sm)]',\n },\n },\n defaultVariants: {\n layout: 'vertical',\n density: 'comfortable',\n },\n },\n);\n\nconst stepBodyVariants = cva(\n [\n 'flex flex-col gap-[var(--spacing-md)]',\n 'rounded-[var(--radius-md)] border border-[var(--border)] bg-[var(--card)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)]',\n 'pt-[var(--spacing-md)] pb-[var(--spacing-md)]',\n ].join(' '),\n {\n variants: {\n density: {\n comfortable: 'gap-[var(--spacing-md)]',\n compact: 'gap-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { density: 'comfortable' },\n },\n);\n\nconst serviceCardVariants = cva(\n [\n 'group/service flex flex-col items-start gap-[var(--spacing-xs)] text-start',\n 'rounded-[var(--radius-md)] border border-[var(--border)] bg-[var(--background)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-md)]',\n 'pt-[var(--spacing-sm)] pb-[var(--spacing-sm)]',\n 'min-h-[var(--min-target-size)]',\n 'transition-[background-color,border-color] duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n 'hover:enabled:bg-[var(--muted)]/40',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-[var(--ring)] focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'aria-checked:border-[var(--primary)] aria-checked:bg-[var(--primary)]/5',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst monthHeaderVariants = cva(\n 'flex items-center justify-between gap-[var(--spacing-sm)]',\n);\n\nconst monthGridVariants = cva(\n 'grid grid-cols-7 gap-[var(--spacing-xs)]',\n);\n\nconst dayCellVariants = cva(\n [\n 'inline-flex items-center justify-center',\n // `min-target-size` (44/48px) governs the rendered size — it always\n // exceeds the explicit floor below. Keeping the explicit floor for\n // grid layout stability when the cell content is empty (skeletons),\n // matching the precedent in `slot-grid`.\n 'min-h-[var(--min-target-size)] min-w-[var(--min-target-size)]',\n 'h-10 w-10 rounded-[var(--radius-sm)]',\n 'text-[var(--font-size-sm)] font-[var(--font-weight-medium)]',\n 'border border-transparent bg-[var(--background)] text-[var(--foreground)]',\n 'transition-[background-color,border-color,color] duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n 'hover:enabled:bg-[var(--muted)]/40',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-[var(--ring)] focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n 'aria-selected:bg-[var(--primary)] aria-selected:text-[var(--primary-foreground)]',\n 'aria-selected:border-[var(--primary)]',\n 'data-[outside=true]:text-[var(--muted-foreground)]',\n ].join(' '),\n);\n\nconst actionsRowVariants = cva(\n 'flex items-center justify-between gap-[var(--spacing-sm)] mt-[var(--spacing-md)]',\n);\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nfunction isoDay(date: Date): string {\n return fnsFormat(date, 'yyyy-MM-dd');\n}\n\n/** Compute the first incomplete step from the current value. */\nfunction firstIncompleteStep(value: StepperCalendarValue): number {\n if (!value.serviceId) return 0;\n if (!value.date) return 1;\n if (!value.time) return 2;\n return 3;\n}\n\n/* -------------------------------------------------------------------- */\n/* Public props */\n/* -------------------------------------------------------------------- */\n\nexport interface StepperCalendarProps\n extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'onChange' | 'onSubmit'\n >,\n VariantProps<typeof rootVariants> {\n services: StepperCalendarService[];\n availableDates: string[];\n availableSlots: Record<string, string[]>;\n value: StepperCalendarValue;\n onChange: (next: StepperCalendarValue) => void;\n onSubmit?: (value: StepperCalendarValue) => void;\n detailsFields?: ReactNode;\n loadingDates?: boolean;\n loadingSlots?: boolean;\n /** Per-step status overrides — `error` will mark a step in the rail. */\n stepStatuses?: Partial<Record<0 | 1 | 2 | 3, StepStatus>>;\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Service grid (Step 0) */\n/* -------------------------------------------------------------------- */\n\ninterface ServiceGridProps {\n services: StepperCalendarService[];\n selectedId?: string;\n onSelect: (id: string) => void;\n durationLabel: (minutes: number) => string;\n groupLabel: string;\n}\n\nconst ServiceGrid = forwardRef<HTMLDivElement, ServiceGridProps>(\n ({ services, selectedId, onSelect, durationLabel, groupLabel }, ref) => {\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const focusedIndex = (() => {\n const i = services.findIndex((s) => s.id === selectedId);\n return i >= 0 ? i : 0;\n })();\n\n const moveFocus = (next: number) => {\n const wrapped = (next + services.length) % services.length;\n const target = itemRefs.current[wrapped];\n if (!target) return;\n // Per WAI-ARIA radiogroup, arrow keys move focus AND selection.\n target.focus();\n const svc = services[wrapped];\n if (svc) onSelect(svc.id);\n };\n\n const handleKeyDown = (\n event: KeyboardEvent<HTMLButtonElement>,\n currentIndex: number,\n ) => {\n // RTL inversion: in an RTL document, ArrowLeft visually advances forward.\n const isRtl =\n typeof document !== 'undefined' &&\n document.documentElement.dir === 'rtl';\n const forward = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const back = isRtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === forward || event.key === 'ArrowDown') {\n event.preventDefault();\n moveFocus(currentIndex + 1);\n return;\n }\n if (event.key === back || event.key === 'ArrowUp') {\n event.preventDefault();\n moveFocus(currentIndex - 1);\n return;\n }\n if (event.key === 'Home') {\n event.preventDefault();\n moveFocus(0);\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n moveFocus(services.length - 1);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-label={groupLabel}\n className=\"grid gap-[var(--spacing-sm)] sm:grid-cols-2\"\n >\n {services.map((svc, index) => {\n const checked = svc.id === selectedId;\n const isRovingTabStop = index === focusedIndex;\n return (\n <button\n key={svc.id}\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={checked}\n tabIndex={isRovingTabStop ? 0 : -1}\n onClick={() => onSelect(svc.id)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n className={serviceCardVariants()}\n >\n <span className=\"type-body-sm font-[var(--font-weight-semibold)] text-[var(--foreground)]\">\n {svc.label}\n </span>\n {svc.description ? (\n <span className=\"type-meta text-[var(--muted-foreground)]\">\n {svc.description}\n </span>\n ) : null}\n <span className=\"type-meta text-[var(--muted-foreground)]\">\n {durationLabel(svc.durationMin)}\n </span>\n </button>\n );\n })}\n </div>\n );\n },\n);\nServiceGrid.displayName = 'StepperCalendar.ServiceGrid';\n\n/* -------------------------------------------------------------------- */\n/* Inline month grid (Step 1) */\n/* -------------------------------------------------------------------- */\n\ntype WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\ninterface MonthGridProps {\n availableDates: Set<string>;\n selectedDate?: string;\n onSelectDate: (iso: string) => void;\n loading: boolean;\n locale: string;\n weekStartsOn: WeekStart;\n prevLabel: string;\n nextLabel: string;\n emptyLabel: string;\n}\n\nconst MonthGrid = forwardRef<HTMLDivElement, MonthGridProps>(\n (\n {\n availableDates,\n selectedDate,\n onSelectDate,\n loading,\n locale,\n weekStartsOn,\n prevLabel,\n nextLabel,\n emptyLabel,\n },\n ref,\n ) => {\n const initialMonth = useMemo(() => {\n if (selectedDate) return parseISO(selectedDate);\n const first = [...availableDates].sort()[0];\n return first ? parseISO(first) : new Date();\n }, [availableDates, selectedDate]);\n\n const [month, setMonth] = useState<Date>(initialMonth);\n const [focusedDay, setFocusedDay] = useState<Date>(\n selectedDate ? parseISO(selectedDate) : initialMonth,\n );\n\n // Build the 6x7 grid (always full weeks for stable layout).\n const monthStart = startOfMonth(month);\n const gridStart = startOfWeek(monthStart, { weekStartsOn });\n const days: Date[] = useMemo(() => {\n const cells: Date[] = [];\n for (let i = 0; i < 42; i += 1) {\n cells.push(addDays(gridStart, i));\n }\n return cells;\n }, [gridStart]);\n\n const weekdayLabels = useMemo(() => {\n const base = startOfWeek(new Date(), { weekStartsOn });\n const fmt = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return Array.from({ length: 7 }, (_, i) => fmt.format(addDays(base, i)));\n }, [locale, weekStartsOn]);\n\n const monthLabel = useMemo(() => {\n try {\n return new Intl.DateTimeFormat(locale, {\n month: 'long',\n year: 'numeric',\n }).format(month);\n } catch {\n return fnsFormat(month, 'MMMM yyyy');\n }\n }, [locale, month]);\n\n const isAvailable = useCallback(\n (d: Date) => availableDates.has(isoDay(d)),\n [availableDates],\n );\n\n const moveFocus = useCallback(\n (next: Date) => {\n setFocusedDay(next);\n if (!isSameMonth(next, month)) setMonth(startOfMonth(next));\n },\n [month],\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const map: Record<string, number> = {\n ArrowLeft: -1,\n ArrowRight: 1,\n ArrowUp: -7,\n ArrowDown: 7,\n };\n if (event.key in map) {\n event.preventDefault();\n moveFocus(addDays(focusedDay, map[event.key]));\n return;\n }\n if (event.key === 'Home') {\n event.preventDefault();\n moveFocus(startOfWeek(focusedDay, { weekStartsOn }));\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n moveFocus(addDays(startOfWeek(focusedDay, { weekStartsOn }), 6));\n return;\n }\n if (event.key === 'PageUp') {\n event.preventDefault();\n moveFocus(subMonths(focusedDay, 1));\n return;\n }\n if (event.key === 'PageDown') {\n event.preventDefault();\n moveFocus(addMonths(focusedDay, 1));\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (isAvailable(focusedDay)) onSelectDate(isoDay(focusedDay));\n }\n };\n\n const focusedRef = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n // Move focus to the focused day when it changes. Note: when the parent\n // StepperCalendar transitions Service → Date, its own step-change focus\n // effect *also* tries to focus the body's first interactive element. In\n // practice this effect runs deeper in the tree and after mount, so it\n // wins — but consumers should be aware of the interaction if they\n // tweak the ordering.\n focusedRef.current?.focus();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedDay.getTime()]);\n\n if (loading) {\n return (\n <div ref={ref} className=\"flex flex-col gap-[var(--spacing-sm)]\">\n <Skeleton variant=\"text\" size=\"md\" width=\"40%\" />\n <div className={monthGridVariants()}>\n {Array.from({ length: 42 }, (_, i) => (\n <Skeleton\n key={`day-skeleton-${i}`}\n variant=\"rounded\"\n size=\"md\"\n height=\"40px\"\n />\n ))}\n </div>\n </div>\n );\n }\n\n if (availableDates.size === 0) {\n return (\n <div ref={ref}>\n <EmptyState variant=\"no-results\" title={emptyLabel} />\n </div>\n );\n }\n\n return (\n <div ref={ref} className=\"flex flex-col gap-[var(--spacing-sm)]\">\n <div className={monthHeaderVariants()}>\n <IconButton\n icon={<ChevronLeft />}\n aria-label={prevLabel}\n size=\"sm\"\n intent=\"ghost\"\n flipIconInRtl\n onClick={() => setMonth(subMonths(month, 1))}\n />\n <span\n className=\"type-body-sm font-[var(--font-weight-semibold)]\"\n aria-live=\"polite\"\n >\n {monthLabel}\n </span>\n <IconButton\n icon={<ChevronRight />}\n aria-label={nextLabel}\n size=\"sm\"\n intent=\"ghost\"\n flipIconInRtl\n onClick={() => setMonth(addMonths(month, 1))}\n />\n </div>\n <div\n role=\"grid\"\n aria-label={monthLabel}\n className=\"flex flex-col gap-[var(--spacing-xs)]\"\n onKeyDown={handleKeyDown}\n >\n <div className={monthGridVariants()} role=\"row\">\n {weekdayLabels.map((wd) => (\n <span\n key={wd}\n role=\"columnheader\"\n className=\"type-meta text-center text-[var(--muted-foreground)]\"\n >\n {wd}\n </span>\n ))}\n </div>\n {Array.from({ length: 6 }, (_, weekIndex) => {\n const week = days.slice(weekIndex * 7, weekIndex * 7 + 7);\n return (\n <div\n key={`week-${weekIndex}`}\n role=\"row\"\n className={monthGridVariants()}\n >\n {week.map((d) => {\n const iso = isoDay(d);\n const outside = !isSameMonth(d, month);\n const available = isAvailable(d);\n const selected = selectedDate === iso;\n const isFocused = isSameDay(d, focusedDay);\n return (\n <button\n key={iso}\n ref={isFocused ? focusedRef : undefined}\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n aria-disabled={!available || undefined}\n disabled={!available}\n data-outside={outside || undefined}\n tabIndex={isFocused ? 0 : -1}\n onClick={() => available && onSelectDate(iso)}\n className={dayCellVariants()}\n >\n {fnsFormat(d, 'd')}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nMonthGrid.displayName = 'StepperCalendar.MonthGrid';\n\n/* -------------------------------------------------------------------- */\n/* Time step body */\n/* -------------------------------------------------------------------- */\n\ninterface TimeStepBodyProps {\n date?: string;\n slots: string[];\n selectedTime?: string;\n loading: boolean;\n emptyLabel: string;\n onSelect: (time: string) => void;\n}\n\nfunction TimeStepBody({\n date,\n slots,\n selectedTime,\n loading,\n emptyLabel,\n onSelect,\n}: TimeStepBodyProps) {\n if (!date) return null;\n if (loading) {\n return (\n <SlotGrid\n days={[{ date, slots: [] }]}\n state=\"loading\"\n />\n );\n }\n if (slots.length === 0) {\n return <EmptyState variant=\"no-results\" title={emptyLabel} />;\n }\n const slotObjects: SlotGridSlot[] = slots.map((time) => {\n // Build a Date from `date` + `time` for `Intl` formatting.\n const [h, m] = time.split(':');\n const start = parseISO(date);\n start.setHours(Number(h), Number(m), 0, 0);\n return {\n id: `${date}T${time}`,\n start,\n label: time,\n };\n });\n const day: SlotGridDay = { date, slots: slotObjects };\n return (\n <SlotGrid\n days={[day]}\n selectedSlotId={selectedTime ? `${date}T${selectedTime}` : undefined}\n onSlotSelect={(slot) => {\n // Validate against the documented `${yyyy-mm-dd}T${HH:mm}` shape so\n // an unexpected ID surfaces as a no-op rather than a malformed time.\n const match = SLOT_ID_PATTERN.exec(slot.id);\n if (match) onSelect(match[2]);\n }}\n />\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nconst StepperCalendar = forwardRef<HTMLDivElement, StepperCalendarProps>(\n (\n {\n services,\n availableDates,\n availableSlots,\n value,\n onChange,\n onSubmit,\n detailsFields,\n loadingDates = false,\n loadingSlots = false,\n stepStatuses,\n layout = 'vertical',\n density = 'comfortable',\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const locale = i18n.language ?? 'en';\n const weekStartsOn = useMemo(\n () => resolveFirstDay(locale) as WeekStart,\n [locale],\n );\n\n // Derive max-allowed step from value, then clamp internal active step.\n const maxAllowed = firstIncompleteStep(value);\n const [activeStep, setActiveStep] = useState<number>(maxAllowed);\n // If `value` regresses (consumer cleared a field), pull active back.\n useEffect(() => {\n if (activeStep > maxAllowed) setActiveStep(maxAllowed);\n }, [activeStep, maxAllowed]);\n\n const headingRef = useRef<HTMLHeadingElement>(null);\n const isFirstRenderRef = useRef(true);\n\n // Move focus to the new step's heading when activeStep changes (skip\n // first render to avoid stealing focus on mount). Targeting the heading\n // (rather than the first interactive control) is the pattern recommended\n // by 05-accessibility.mdx — screen-reader users hear the step label\n // before any field, and sighted keyboard users can Tab into the form.\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n return;\n }\n headingRef.current?.focus();\n }, [activeStep]);\n\n const steps: StepSpec[] = useMemo(\n () => [\n {\n label: t('navigation.stepperCalendar.steps.service'),\n status: stepStatuses?.[0],\n },\n {\n label: t('navigation.stepperCalendar.steps.date'),\n status: stepStatuses?.[1],\n },\n {\n label: t('navigation.stepperCalendar.steps.time'),\n status: stepStatuses?.[2],\n },\n {\n label: t('navigation.stepperCalendar.steps.details'),\n status: stepStatuses?.[3],\n },\n ],\n [stepStatuses, t],\n );\n\n const label = ariaLabel ?? t('navigation.stepperCalendar.label');\n const backLabel = t('navigation.stepperCalendar.actions.back');\n const nextLabel = t('navigation.stepperCalendar.actions.next');\n const submitLabel = t('navigation.stepperCalendar.actions.submit');\n const emptyTimeLabel = t('navigation.stepperCalendar.time.empty');\n const prevMonthLabel = t('navigation.stepperCalendar.date.previousMonth');\n const nextMonthLabel = t('navigation.stepperCalendar.date.nextMonth');\n const serviceGroupLabel = t('navigation.stepperCalendar.steps.service');\n\n const durationLabel = useCallback(\n (minutes: number) =>\n t('navigation.stepperCalendar.service.duration', { minutes }),\n [t],\n );\n\n const canAdvance = (() => {\n if (activeStep === 0) return Boolean(value.serviceId);\n if (activeStep === 1) return Boolean(value.date);\n if (activeStep === 2) return Boolean(value.time);\n return false; // step 3 is terminal\n })();\n\n const handleServiceSelect = (serviceId: string) => {\n onChange({ ...value, serviceId });\n // Auto-advance for conversion. Use a short delay so users see the\n // selection register before the step swaps. Plain `setTimeout` (not\n // `window.setTimeout`) so the component does not assume a DOM global.\n setTimeout(() => {\n setActiveStep((s) => (s === 0 ? 1 : s));\n }, 120);\n };\n\n const handleDateSelect = (date: string) => {\n // Clear time when date changes.\n onChange({ ...value, date, time: undefined });\n };\n\n const handleTimeSelect = (time: string) => {\n onChange({ ...value, time });\n };\n\n const handleBack = () => setActiveStep((s) => Math.max(0, s - 1));\n const handleNext = () =>\n setActiveStep((s) => Math.min(TOTAL_STEPS - 1, s + 1));\n const handleSubmit = () => onSubmit?.(value);\n\n const headingId = `stepper-calendar-step-${activeStep}-heading`;\n const availableDateSet = useMemo(\n () => new Set(availableDates),\n [availableDates],\n );\n\n /* ---- Active step body ---- */\n let body: ReactNode = null;\n if (activeStep === 0) {\n body = (\n <ServiceGrid\n services={services}\n selectedId={value.serviceId}\n onSelect={handleServiceSelect}\n durationLabel={durationLabel}\n groupLabel={serviceGroupLabel}\n />\n );\n } else if (activeStep === 1) {\n body = (\n <MonthGrid\n availableDates={availableDateSet}\n selectedDate={value.date}\n onSelectDate={handleDateSelect}\n loading={loadingDates}\n locale={locale}\n weekStartsOn={weekStartsOn}\n prevLabel={prevMonthLabel}\n nextLabel={nextMonthLabel}\n emptyLabel={emptyTimeLabel}\n />\n );\n } else if (activeStep === 2) {\n body = (\n <TimeStepBody\n date={value.date}\n slots={value.date ? (availableSlots[value.date] ?? []) : []}\n selectedTime={value.time}\n loading={loadingSlots}\n emptyLabel={emptyTimeLabel}\n onSelect={handleTimeSelect}\n />\n );\n } else {\n body = (\n <div className=\"flex flex-col gap-[var(--spacing-sm)]\">\n {detailsFields}\n </div>\n );\n }\n\n const isTerminal = activeStep === TOTAL_STEPS - 1;\n const activeState = stateForStep(\n activeStep,\n activeStep,\n stepStatuses?.[activeStep as 0 | 1 | 2 | 3],\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={label}\n className={rootVariants({ layout, density, className })}\n {...rest}\n >\n <StepperProgress\n activeStep={activeStep}\n steps={steps}\n aria-label={label}\n />\n <section\n aria-labelledby={headingId}\n className={stepBodyVariants({ density })}\n data-step={activeStep}\n data-state={activeState}\n >\n <h2\n ref={headingRef}\n id={headingId}\n tabIndex={-1}\n className=\"type-body-sm font-[var(--font-weight-semibold)] focus:outline-none\"\n >\n {steps[activeStep]?.label}\n </h2>\n {body}\n <div className={actionsRowVariants()}>\n <Button\n type=\"button\"\n intent=\"ghost\"\n size=\"md\"\n onClick={handleBack}\n disabled={activeStep === 0}\n >\n {backLabel}\n </Button>\n {isTerminal ? (\n <Button\n type=\"button\"\n intent=\"primary\"\n size=\"md\"\n onClick={handleSubmit}\n >\n {submitLabel}\n </Button>\n ) : (\n <Button\n type=\"button\"\n intent=\"primary\"\n size=\"md\"\n onClick={handleNext}\n disabled={!canAdvance}\n >\n {nextLabel}\n </Button>\n )}\n </div>\n </section>\n </div>\n );\n },\n);\nStepperCalendar.displayName = 'StepperCalendar';\n\nexport { StepperCalendar };\n"],"names":["subMonths","date","amount","options","addMonths","SLOT_ID_PATTERN","TOTAL_STEPS","rootVariants","cva","stepBodyVariants","serviceCardVariants","monthHeaderVariants","monthGridVariants","dayCellVariants","actionsRowVariants","isoDay","fnsFormat","firstIncompleteStep","value","ServiceGrid","forwardRef","services","selectedId","onSelect","durationLabel","groupLabel","ref","itemRefs","useRef","focusedIndex","i","s","moveFocus","next","wrapped","target","svc","handleKeyDown","event","currentIndex","isRtl","forward","back","jsx","index","checked","jsxs","el","e","MonthGrid","availableDates","selectedDate","onSelectDate","loading","locale","weekStartsOn","prevLabel","nextLabel","emptyLabel","initialMonth","useMemo","parseISO","first","month","setMonth","useState","focusedDay","setFocusedDay","monthStart","startOfMonth","gridStart","startOfWeek","days","cells","addDays","weekdayLabels","base","fmt","_","monthLabel","isAvailable","useCallback","d","isSameMonth","map","focusedRef","useEffect","_a","Skeleton","EmptyState","IconButton","ChevronLeft","ChevronRight","wd","weekIndex","week","iso","outside","available","selected","isFocused","isSameDay","TimeStepBody","slots","selectedTime","SlotGrid","slotObjects","time","h","m","start","slot","match","StepperCalendar","availableSlots","onChange","onSubmit","detailsFields","loadingDates","loadingSlots","stepStatuses","layout","density","ariaLabel","className","rest","t","i18n","useTranslation","resolveFirstDay","maxAllowed","activeStep","setActiveStep","headingRef","isFirstRenderRef","steps","label","backLabel","submitLabel","emptyTimeLabel","prevMonthLabel","nextMonthLabel","serviceGroupLabel","minutes","canAdvance","handleServiceSelect","serviceId","handleDateSelect","handleTimeSelect","handleBack","handleNext","handleSubmit","headingId","availableDateSet","body","isTerminal","activeState","stateForStep","StepperProgress","Button"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { jsxs as n, jsx as t } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as k, useRef as R, useState as S, useEffect as C, useLayoutEffect as E } from "react";
|
|
3
|
-
import { c as s } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { useTranslation as A } from "react-i18next";
|
|
5
|
-
const B = s("flex w-full", {
|
|
6
|
-
variants: {
|
|
7
|
-
captionPosition: {
|
|
8
|
-
top: "flex-col gap-[var(--spacing-xs)]",
|
|
9
|
-
bottom: "flex-col-reverse gap-[var(--spacing-xs)]"
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
defaultVariants: { captionPosition: "top" }
|
|
13
|
-
}), H = s(
|
|
14
|
-
"relative w-full overflow-hidden rounded-[var(--radius-full)] bg-[var(--muted)]",
|
|
15
|
-
{
|
|
16
|
-
variants: {
|
|
17
|
-
size: {
|
|
18
|
-
sm: "h-[var(--spacing-xs)]",
|
|
19
|
-
default: "h-[var(--spacing-sm)]"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
defaultVariants: { size: "default" }
|
|
23
|
-
}
|
|
24
|
-
), L = s(
|
|
25
|
-
[
|
|
26
|
-
"block h-full rounded-[var(--radius-full)]",
|
|
27
|
-
"[inline-size:calc(var(--stepper-progress-value,0)*1%)]",
|
|
28
|
-
"transition-[inline-size,background-color] duration-[var(--animation-duration)] ease-[var(--ease-out)]",
|
|
29
|
-
"motion-reduce:transition-none"
|
|
30
|
-
].join(" "),
|
|
31
|
-
{
|
|
32
|
-
variants: {
|
|
33
|
-
tone: {
|
|
34
|
-
progress: "bg-[var(--primary)]",
|
|
35
|
-
error: "bg-[var(--destructive)]",
|
|
36
|
-
complete: "bg-[var(--success,var(--primary))]"
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
defaultVariants: { tone: "progress" }
|
|
40
|
-
}
|
|
41
|
-
), O = s(
|
|
42
|
-
"flex items-baseline gap-[var(--spacing-sm)] flex-wrap",
|
|
43
|
-
{
|
|
44
|
-
variants: {
|
|
45
|
-
tone: {
|
|
46
|
-
progress: "text-[var(--foreground)]",
|
|
47
|
-
error: "text-[var(--destructive)]",
|
|
48
|
-
complete: "text-[var(--foreground)]"
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
defaultVariants: { tone: "progress" }
|
|
52
|
-
}
|
|
53
|
-
), $ = k(
|
|
54
|
-
({
|
|
55
|
-
activeStep: g,
|
|
56
|
-
steps: l,
|
|
57
|
-
"aria-label": x,
|
|
58
|
-
hideCaption: h = !1,
|
|
59
|
-
size: b = "default",
|
|
60
|
-
captionPosition: y = "top",
|
|
61
|
-
className: N,
|
|
62
|
-
...V
|
|
63
|
-
}, w) => {
|
|
64
|
-
const { t: i } = A(), c = R(null), a = l.length, r = Math.max(0, Math.min(g, a - 1)), e = l[r], u = (e == null ? void 0 : e.status) === "error" ? "error" : "current", p = r + 1, P = a === 0 ? 0 : p / a * 100, d = u === "error" ? "error" : r === a - 1 && a > 0 ? "complete" : "progress", [j, z] = S(!1);
|
|
65
|
-
C(() => {
|
|
66
|
-
z(!0);
|
|
67
|
-
}, []);
|
|
68
|
-
const f = j ? P : 0;
|
|
69
|
-
E(() => {
|
|
70
|
-
var m;
|
|
71
|
-
(m = c.current) == null || m.style.setProperty(
|
|
72
|
-
"--stepper-progress-value",
|
|
73
|
-
String(f)
|
|
74
|
-
);
|
|
75
|
-
}, [f]);
|
|
76
|
-
const v = i("navigation.stepper.stepOfTotal", {
|
|
77
|
-
n: r + 1,
|
|
78
|
-
total: a
|
|
79
|
-
}), M = x ?? i("navigation.stepper.label"), o = u === "error" && (e != null && e.description) ? e.description : null, T = [
|
|
80
|
-
v,
|
|
81
|
-
e ? `— ${e.label}` : null,
|
|
82
|
-
o
|
|
83
|
-
].filter(Boolean).join(" ");
|
|
84
|
-
return /* @__PURE__ */ n(
|
|
85
|
-
"div",
|
|
86
|
-
{
|
|
87
|
-
ref: w,
|
|
88
|
-
className: B({ captionPosition: y, className: N }),
|
|
89
|
-
...V,
|
|
90
|
-
children: [
|
|
91
|
-
h ? null : /* @__PURE__ */ n("div", { className: O({ tone: d }), "aria-hidden": "true", children: [
|
|
92
|
-
/* @__PURE__ */ t("span", { className: "type-meta font-[var(--font-weight-semibold)]", children: v }),
|
|
93
|
-
e ? /* @__PURE__ */ n("span", { className: "type-meta text-[var(--muted-foreground)]", children: [
|
|
94
|
-
"— ",
|
|
95
|
-
e.label
|
|
96
|
-
] }) : null,
|
|
97
|
-
o ? /* @__PURE__ */ t("span", { className: "type-meta ms-auto text-[var(--destructive)]", children: o }) : null
|
|
98
|
-
] }),
|
|
99
|
-
/* @__PURE__ */ t(
|
|
100
|
-
"div",
|
|
101
|
-
{
|
|
102
|
-
role: "progressbar",
|
|
103
|
-
"aria-label": M,
|
|
104
|
-
"aria-valuemin": 0,
|
|
105
|
-
"aria-valuemax": a,
|
|
106
|
-
"aria-valuenow": p,
|
|
107
|
-
"aria-valuetext": T,
|
|
108
|
-
className: H({ size: b }),
|
|
109
|
-
children: /* @__PURE__ */ t(
|
|
110
|
-
"span",
|
|
111
|
-
{
|
|
112
|
-
ref: c,
|
|
113
|
-
"aria-hidden": "true",
|
|
114
|
-
className: L({ tone: d })
|
|
115
|
-
}
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
)
|
|
119
|
-
]
|
|
120
|
-
}
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
);
|
|
124
|
-
$.displayName = "StepperProgress";
|
|
125
|
-
export {
|
|
126
|
-
$ as S
|
|
127
|
-
};
|
|
128
|
-
//# sourceMappingURL=stepper-progress-Bwfl-0rV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stepper-progress-Bwfl-0rV.js","sources":["../../src/components/stepper-progress/stepper-progress.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport type { StepSpec, StepState } from '../_shared/stepper';\n\n/* -------------------------------------------------------------------- */\n/* StepperProgress */\n/* */\n/* A lightweight \"Step N of M — {label}\" caption + fill bar. Pure */\n/* indicator — no revisit, no per-step click targets. For flows that */\n/* need editable completed steps, reach for `StepperAccordion`. */\n/* -------------------------------------------------------------------- */\n\ntype Size = 'sm' | 'default';\ntype CaptionPosition = 'top' | 'bottom';\ntype Tone = 'progress' | 'error' | 'complete';\n\nconst rootVariants = cva('flex w-full', {\n variants: {\n captionPosition: {\n top: 'flex-col gap-[var(--spacing-xs)]',\n bottom: 'flex-col-reverse gap-[var(--spacing-xs)]',\n },\n },\n defaultVariants: { captionPosition: 'top' },\n});\n\nconst trackVariants = cva(\n 'relative w-full overflow-hidden rounded-[var(--radius-full)] bg-[var(--muted)]',\n {\n variants: {\n size: {\n sm: 'h-[var(--spacing-xs)]',\n default: 'h-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { size: 'default' },\n },\n);\n\nconst fillVariants = cva(\n [\n 'block h-full rounded-[var(--radius-full)]',\n '[inline-size:calc(var(--stepper-progress-value,0)*1%)]',\n 'transition-[inline-size,background-color] duration-[var(--animation-duration)] ease-[var(--ease-out)]',\n 'motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n tone: {\n progress: 'bg-[var(--primary)]',\n error: 'bg-[var(--destructive)]',\n complete: 'bg-[var(--success,var(--primary))]',\n },\n },\n defaultVariants: { tone: 'progress' },\n },\n);\n\nconst captionVariants = cva(\n 'flex items-baseline gap-[var(--spacing-sm)] flex-wrap',\n {\n variants: {\n tone: {\n progress: 'text-[var(--foreground)]',\n error: 'text-[var(--destructive)]',\n complete: 'text-[var(--foreground)]',\n },\n },\n defaultVariants: { tone: 'progress' },\n },\n);\n\nexport interface StepperProgressProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'aria-label'>,\n VariantProps<typeof trackVariants>,\n VariantProps<typeof rootVariants> {\n /** Active step (0-indexed). */\n activeStep: number;\n /** Step specs — `label` is used in the caption for the active step. */\n steps: StepSpec[];\n /** Override the default `aria-label` on the progressbar. */\n 'aria-label'?: string;\n /** Hide the \"Step N of M — label\" caption. @default false */\n hideCaption?: boolean;\n /** Track size. @default 'default' */\n size?: Size;\n /** Caption position relative to the bar. @default 'top' */\n captionPosition?: CaptionPosition;\n}\n\nconst StepperProgress = forwardRef<HTMLDivElement, StepperProgressProps>(\n (\n {\n activeStep,\n steps,\n 'aria-label': ariaLabel,\n hideCaption = false,\n size = 'default',\n captionPosition = 'top',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const fillRef = useRef<HTMLSpanElement>(null);\n\n const total = steps.length;\n const clampedActive = Math.max(0, Math.min(activeStep, total - 1));\n const activeSpec = steps[clampedActive];\n // The progress variant only renders one \"active\" step at a time — the\n // shared four-way state machine collapses to error-or-current here.\n const activeState: StepState =\n activeSpec?.status === 'error' ? 'error' : 'current';\n\n // Fill reaches through the completed segments plus the current one, so\n // a 4-step flow at index 1 fills 50% (2/4). Matches the user's mental\n // model for \"how far along am I\".\n const filledCount = clampedActive + 1;\n const targetPercent = total === 0 ? 0 : (filledCount / total) * 100;\n\n const tone: Tone =\n activeState === 'error'\n ? 'error'\n : clampedActive === total - 1 && total > 0\n ? 'complete'\n : 'progress';\n\n // Mount-in animation: paint at 0 on first render, then swap to the\n // target in a post-mount effect so the CSS transition animates from\n // empty → target. Matches the pattern in `components/progress`.\n const [hasMounted, setHasMounted] = useState(false);\n useEffect(() => {\n setHasMounted(true);\n }, []);\n const percent = hasMounted ? targetPercent : 0;\n\n // Setting a CSS custom property via `style.setProperty` (rather than a\n // JSX `style={{}}` attribute) is the sanctioned escape hatch for\n // runtime-computed CSS tokens per `src/docs/23-constraints.mdx` §4;\n // the `components/progress` bar uses the same pattern for its fill.\n useLayoutEffect(() => {\n fillRef.current?.style.setProperty(\n '--stepper-progress-value',\n String(percent),\n );\n }, [percent]);\n\n const captionText = t('navigation.stepper.stepOfTotal', {\n n: clampedActive + 1,\n total,\n });\n const label = ariaLabel ?? t('navigation.stepper.label');\n const errorCopy =\n activeState === 'error' && activeSpec?.description\n ? activeSpec.description\n : null;\n // `aria-valuetext` is the single AT source — the caption is aria-hidden\n // so anything the caption exposes (label, error description) must be\n // appended here too, or it's invisible to screen-reader users who set\n // `hideCaption`.\n const valueText = [\n captionText,\n activeSpec ? `— ${activeSpec.label}` : null,\n errorCopy,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n ref={ref}\n className={rootVariants({ captionPosition, className })}\n {...rest}\n >\n {hideCaption ? null : (\n <div className={captionVariants({ tone })} aria-hidden=\"true\">\n <span className=\"type-meta font-[var(--font-weight-semibold)]\">\n {captionText}\n </span>\n {activeSpec ? (\n <span className=\"type-meta text-[var(--muted-foreground)]\">\n — {activeSpec.label}\n </span>\n ) : null}\n {errorCopy ? (\n <span className=\"type-meta ms-auto text-[var(--destructive)]\">\n {errorCopy}\n </span>\n ) : null}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={filledCount}\n aria-valuetext={valueText}\n className={trackVariants({ size })}\n >\n <span\n ref={fillRef}\n aria-hidden=\"true\"\n className={fillVariants({ tone })}\n />\n </div>\n </div>\n );\n },\n);\nStepperProgress.displayName = 'StepperProgress';\n\nexport { StepperProgress };\n"],"names":["rootVariants","cva","trackVariants","fillVariants","captionVariants","StepperProgress","forwardRef","activeStep","steps","ariaLabel","hideCaption","size","captionPosition","className","rest","ref","t","useTranslation","fillRef","useRef","total","clampedActive","activeSpec","activeState","filledCount","targetPercent","tone","hasMounted","setHasMounted","useState","useEffect","percent","useLayoutEffect","_a","captionText","label","errorCopy","valueText","jsxs","jsx"],"mappings":";;;;AAwBA,MAAMA,IAAeC,EAAI,eAAe;AAAA,EACtC,UAAU;AAAA,IACR,iBAAiB;AAAA,MACf,KAAK;AAAA,MACL,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,iBAAiB,EAAE,iBAAiB,MAAA;AACtC,CAAC,GAEKC,IAAgBD;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB,EAAE,MAAM,UAAA;AAAA,EAAU;AAEvC,GAEME,IAAeF;AAAA,EACnB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,iBAAiB,EAAE,MAAM,WAAA;AAAA,EAAW;AAExC,GAEMG,IAAkBH;AAAA,EACtB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,iBAAiB,EAAE,MAAM,WAAA;AAAA,EAAW;AAExC,GAoBMI,IAAkBC;AAAA,EACtB,CACE;AAAA,IACE,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAcC;AAAA,IACd,aAAAC,IAAc;AAAA,IACd,MAAAC,IAAO;AAAA,IACP,iBAAAC,IAAkB;AAAA,IAClB,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUC,EAAwB,IAAI,GAEtCC,IAAQZ,EAAM,QACda,IAAgB,KAAK,IAAI,GAAG,KAAK,IAAId,GAAYa,IAAQ,CAAC,CAAC,GAC3DE,IAAad,EAAMa,CAAa,GAGhCE,KACJD,KAAA,gBAAAA,EAAY,YAAW,UAAU,UAAU,WAKvCE,IAAcH,IAAgB,GAC9BI,IAAgBL,MAAU,IAAI,IAAKI,IAAcJ,IAAS,KAE1DM,IACJH,MAAgB,UACZ,UACAF,MAAkBD,IAAQ,KAAKA,IAAQ,IACrC,aACA,YAKF,CAACO,GAAYC,CAAa,IAAIC,EAAS,EAAK;AAClD,IAAAC,EAAU,MAAM;AACd,MAAAF,EAAc,EAAI;AAAA,IACpB,GAAG,CAAA,CAAE;AACL,UAAMG,IAAUJ,IAAaF,IAAgB;AAM7C,IAAAO,EAAgB,MAAM;;AACpB,OAAAC,IAAAf,EAAQ,YAAR,QAAAe,EAAiB,MAAM;AAAA,QACrB;AAAA,QACA,OAAOF,CAAO;AAAA;AAAA,IAElB,GAAG,CAACA,CAAO,CAAC;AAEZ,UAAMG,IAAclB,EAAE,kCAAkC;AAAA,MACtD,GAAGK,IAAgB;AAAA,MACnB,OAAAD;AAAA,IAAA,CACD,GACKe,IAAQ1B,KAAaO,EAAE,0BAA0B,GACjDoB,IACJb,MAAgB,YAAWD,KAAA,QAAAA,EAAY,eACnCA,EAAW,cACX,MAKAe,IAAY;AAAA,MAChBH;AAAA,MACAZ,IAAa,KAAKA,EAAW,KAAK,KAAK;AAAA,MACvCc;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAvB;AAAA,QACA,WAAWf,EAAa,EAAE,iBAAAY,GAAiB,WAAAC,GAAW;AAAA,QACrD,GAAGC;AAAA,QAEH,UAAA;AAAA,UAAAJ,IAAc,OACb,gBAAA4B,EAAC,OAAA,EAAI,WAAWlC,EAAgB,EAAE,MAAAsB,EAAA,CAAM,GAAG,eAAY,QACrD,UAAA;AAAA,YAAA,gBAAAa,EAAC,QAAA,EAAK,WAAU,gDACb,UAAAL,GACH;AAAA,YACCZ,IACC,gBAAAgB,EAAC,QAAA,EAAK,WAAU,4CAA2C,UAAA;AAAA,cAAA;AAAA,cACtDhB,EAAW;AAAA,YAAA,EAAA,CAChB,IACE;AAAA,YACHc,IACC,gBAAAG,EAAC,QAAA,EAAK,WAAU,+CACb,aACH,IACE;AAAA,UAAA,GACN;AAAA,UAEF,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAYJ;AAAA,cACZ,iBAAe;AAAA,cACf,iBAAef;AAAA,cACf,iBAAeI;AAAA,cACf,kBAAgBa;AAAA,cAChB,WAAWnC,EAAc,EAAE,MAAAS,GAAM;AAAA,cAEjC,UAAA,gBAAA4B;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAKrB;AAAA,kBACL,eAAY;AAAA,kBACZ,WAAWf,EAAa,EAAE,MAAAuB,EAAA,CAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClC;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACArB,EAAgB,cAAc;"}
|