@alfadocs/ui-kit 0.1.1 → 0.1.3
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 → accordion-B6fyINUk.js} +10 -9
- package/dist/_chunks/accordion-B6fyINUk.js.map +1 -0
- package/dist/_chunks/{agenda-card-Bld47Eul.js → agenda-card-C_hQGErS.js} +12 -11
- package/dist/_chunks/{agenda-card-Bld47Eul.js.map → agenda-card-C_hQGErS.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-D86cNIJ0.js → agenda-tray-CBaVMJLO.js} +6 -5
- package/dist/_chunks/{agenda-tray-D86cNIJ0.js.map → agenda-tray-CBaVMJLO.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-CdYwt2VP.js → ai-prompt-input-K94oVLG2.js} +17 -16
- package/dist/_chunks/ai-prompt-input-K94oVLG2.js.map +1 -0
- package/dist/_chunks/{alert-ETrF7Q8J.js → alert-rOM4EG0P.js} +12 -11
- package/dist/_chunks/{alert-ETrF7Q8J.js.map → alert-rOM4EG0P.js.map} +1 -1
- package/dist/_chunks/{app-frame-uq2Gy0vs.js → app-frame-6d7Lu4ea.js} +2 -1
- package/dist/_chunks/{app-frame-uq2Gy0vs.js.map → app-frame-6d7Lu4ea.js.map} +1 -1
- package/dist/_chunks/{aspect-ratio-BqU4itGW.js → aspect-ratio-CxsdG8vk.js} +9 -8
- package/dist/_chunks/{aspect-ratio-BqU4itGW.js.map → aspect-ratio-CxsdG8vk.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-D2UEBF9B.js → audio-recorder-Cn8z2zC9.js} +7 -6
- package/dist/_chunks/{audio-recorder-D2UEBF9B.js.map → audio-recorder-Cn8z2zC9.js.map} +1 -1
- package/dist/_chunks/{audio-visualiser-B4u4goV5.js → audio-visualiser-CeMPCZkd.js} +2 -1
- package/dist/_chunks/{audio-visualiser-B4u4goV5.js.map → audio-visualiser-CeMPCZkd.js.map} +1 -1
- package/dist/_chunks/{autocomplete.agent-Bi6CiRKa.js → autocomplete.agent-DRrp-Rsx.js} +4 -3
- package/dist/_chunks/autocomplete.agent-DRrp-Rsx.js.map +1 -0
- package/dist/_chunks/{avatar-BAhxbDEu.js → avatar-Biffh-_H.js} +17 -16
- package/dist/_chunks/avatar-Biffh-_H.js.map +1 -0
- package/dist/_chunks/{badge-zDghajh8.js → badge-mrstWxve.js} +14 -13
- package/dist/_chunks/badge-mrstWxve.js.map +1 -0
- package/dist/_chunks/{balance-cell-renderer-BGyvZWjB.js → balance-cell-renderer-CiyezQhi.js} +12 -12
- package/dist/_chunks/{balance-cell-renderer-BGyvZWjB.js.map → balance-cell-renderer-CiyezQhi.js.map} +1 -1
- package/dist/_chunks/{breadcrumb-pdUacgm1.js → breadcrumb-CcZovmIq.js} +2 -1
- package/dist/_chunks/breadcrumb-CcZovmIq.js.map +1 -0
- package/dist/_chunks/{button-DmiGFnNA.js → button-7dTew-IV.js} +4 -4
- package/dist/_chunks/button-7dTew-IV.js.map +1 -0
- package/dist/_chunks/{button-group-BtTHSyU0.js → button-group-CONver7M.js} +9 -8
- package/dist/_chunks/{button-group-BtTHSyU0.js.map → button-group-CONver7M.js.map} +1 -1
- package/dist/_chunks/{card-DeItIBcV.js → card-BEy58ZKp.js} +2 -1
- package/dist/_chunks/card-BEy58ZKp.js.map +1 -0
- package/dist/_chunks/{chat-container-Co8HpB64.js → chat-container-BZvQ3_yT.js} +2 -2
- package/dist/_chunks/{chat-container-Co8HpB64.js.map → chat-container-BZvQ3_yT.js.map} +1 -1
- package/dist/_chunks/{chat-input-3rstZhHR.js → chat-input-xiBIujMv.js} +3 -3
- package/dist/_chunks/chat-input-xiBIujMv.js.map +1 -0
- package/dist/_chunks/{chat-message-dDMVSYBs.js → chat-message-BtxUyugB.js} +10 -9
- package/dist/_chunks/chat-message-BtxUyugB.js.map +1 -0
- package/dist/_chunks/{checkbox-DMzgtnqw.js → checkbox-Ni6C_KJg.js} +11 -11
- package/dist/_chunks/{checkbox-DMzgtnqw.js.map → checkbox-Ni6C_KJg.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-DBnIBRT_.js → checkbox-group-BFZ4oN5t.js} +8 -7
- package/dist/_chunks/checkbox-group-BFZ4oN5t.js.map +1 -0
- package/dist/_chunks/{collapsible-DPGQnHZh.js → collapsible-fFMqzpdL.js} +8 -7
- package/dist/_chunks/collapsible-fFMqzpdL.js.map +1 -0
- package/dist/_chunks/{color-picker-OKKF3Dww.js → color-picker-Cl3KdjJd.js} +89 -87
- package/dist/_chunks/color-picker-Cl3KdjJd.js.map +1 -0
- package/dist/_chunks/{combobox.agent-CfeB-IZ1.js → combobox.agent-DjdivI3X.js} +21 -20
- package/dist/_chunks/combobox.agent-DjdivI3X.js.map +1 -0
- package/dist/_chunks/{command-palette.agent-XLfSGHCL.js → command-palette.agent-BUjzr2ET.js} +3 -2
- package/dist/_chunks/command-palette.agent-BUjzr2ET.js.map +1 -0
- package/dist/_chunks/{date-picker-DXx8oSJb.js → date-picker-DYXNsWmM.js} +3 -3
- package/dist/_chunks/{date-picker-DXx8oSJb.js.map → date-picker-DYXNsWmM.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-C3CbY__H.js → date-range-picker-BcNDJI7m.js} +3 -3
- package/dist/_chunks/date-range-picker-BcNDJI7m.js.map +1 -0
- package/dist/_chunks/{date-time-picker-Bn3FPeAc.js → date-time-picker-CmGiTU__.js} +7 -7
- package/dist/_chunks/date-time-picker-CmGiTU__.js.map +1 -0
- package/dist/_chunks/{description-list-B1CL3RTG.js → description-list-C_1NX8P3.js} +3 -2
- package/dist/_chunks/description-list-C_1NX8P3.js.map +1 -0
- package/dist/_chunks/{dialog.agent-D9WeIWi2.js → dialog.agent-C2lP9H0h.js} +2 -2
- package/dist/_chunks/{dialog.agent-D9WeIWi2.js.map → dialog.agent-C2lP9H0h.js.map} +1 -1
- package/dist/_chunks/{dropdown-menu-BnVUeVG3.js → dropdown-menu-2HgU1Emf.js} +4 -3
- package/dist/_chunks/dropdown-menu-2HgU1Emf.js.map +1 -0
- package/dist/_chunks/{empty-state-DV96gCnp.js → empty-state-BHrItOiE.js} +3 -2
- package/dist/_chunks/{empty-state-DV96gCnp.js.map → empty-state-BHrItOiE.js.map} +1 -1
- package/dist/_chunks/{file-upload.agent-DYFnqdxw.js → file-upload.agent-LlC0W468.js} +4 -4
- package/dist/_chunks/file-upload.agent-LlC0W468.js.map +1 -0
- package/dist/_chunks/{flag-C3BUEwHH.js → flag-DZ6V7-hU.js} +3 -1
- package/dist/_chunks/{flag-C3BUEwHH.js.map → flag-DZ6V7-hU.js.map} +1 -1
- package/dist/_chunks/{floating-action-button-RigP2E7o.js → floating-action-button-Cnw-f6AG.js} +8 -7
- package/dist/_chunks/floating-action-button-Cnw-f6AG.js.map +1 -0
- package/dist/_chunks/{form-field-DI5LY5aG.js → form-field-BfsPLTSc.js} +2 -1
- package/dist/_chunks/form-field-BfsPLTSc.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-D0GiUFOe.js → freemium-paywall-Dr9aOtOC.js} +24 -23
- package/dist/_chunks/freemium-paywall-Dr9aOtOC.js.map +1 -0
- package/dist/_chunks/{header-CW2oRd5H.js → header-BpU9U-1X.js} +3 -2
- package/dist/_chunks/{header-CW2oRd5H.js.map → header-BpU9U-1X.js.map} +1 -1
- package/dist/_chunks/{icon-button-C482ii4y.js → icon-button-CNjWCD1X.js} +10 -9
- package/dist/_chunks/icon-button-CNjWCD1X.js.map +1 -0
- package/dist/_chunks/{icon-button-group-BnhkUWUg.js → icon-button-group-DeV3FpNY.js} +26 -25
- package/dist/_chunks/{icon-button-group-BnhkUWUg.js.map → icon-button-group-DeV3FpNY.js.map} +1 -1
- package/dist/_chunks/{kbd-DTcIjYA7.js → kbd-8baVw3KU.js} +35 -31
- package/dist/_chunks/kbd-8baVw3KU.js.map +1 -0
- package/dist/_chunks/{key-value-pair-DDhSYdDL.js → key-value-pair-C9hpjC_B.js} +13 -12
- package/dist/_chunks/{key-value-pair-DDhSYdDL.js.map → key-value-pair-C9hpjC_B.js.map} +1 -1
- package/dist/_chunks/{leo-sidebar-gXXcGPKk.js → leo-sidebar-CNjZqljo.js} +12 -12
- package/dist/_chunks/{leo-sidebar-gXXcGPKk.js.map → leo-sidebar-CNjZqljo.js.map} +1 -1
- package/dist/_chunks/{list-Cwe8mcmh.js → list-B1ozIjQe.js} +4 -1
- package/dist/_chunks/list-B1ozIjQe.js.map +1 -0
- package/dist/_chunks/live-region-C41SO3cA.js +58 -0
- package/dist/_chunks/{live-region-COggO6x6.js.map → live-region-C41SO3cA.js.map} +1 -1
- package/dist/_chunks/{logo-3wrZGpwg.js → logo-BpFoCL-s.js} +7 -7
- package/dist/_chunks/{logo-3wrZGpwg.js.map → logo-BpFoCL-s.js.map} +1 -1
- package/dist/_chunks/{matrix-rain-gsHqSvW7.js → matrix-rain-BEkvux64.js} +2 -1
- package/dist/_chunks/{matrix-rain-gsHqSvW7.js.map → matrix-rain-BEkvux64.js.map} +1 -1
- package/dist/_chunks/{message-card-DID3cXUW.js → message-card-CZzNO4ov.js} +6 -5
- package/dist/_chunks/message-card-CZzNO4ov.js.map +1 -0
- package/dist/_chunks/{message-tray-CVMLBnVp.js → message-tray-BWbjXW3F.js} +7 -6
- package/dist/_chunks/message-tray-BWbjXW3F.js.map +1 -0
- package/dist/_chunks/{multi-select.agent-BUKYZJfp.js → multi-select.agent-BSGEW10d.js} +34 -33
- package/dist/_chunks/multi-select.agent-BSGEW10d.js.map +1 -0
- package/dist/_chunks/{navigation-menu-NjwxyshT.js → navigation-menu-DxOMvrKM.js} +2 -1
- package/dist/_chunks/navigation-menu-DxOMvrKM.js.map +1 -0
- package/dist/_chunks/{notification-card-BZ33fq8H.js → notification-card-DgW-vVg-.js} +5 -4
- package/dist/_chunks/{notification-card-BZ33fq8H.js.map → notification-card-DgW-vVg-.js.map} +1 -1
- package/dist/_chunks/{notification-tray-CnEd7B2q.js → notification-tray-CKUgl2jc.js} +7 -6
- package/dist/_chunks/{notification-tray-CnEd7B2q.js.map → notification-tray-CKUgl2jc.js.map} +1 -1
- package/dist/_chunks/{number-input-D7rSa_ef.js → number-input-BPPhekLu.js} +19 -18
- package/dist/_chunks/number-input-BPPhekLu.js.map +1 -0
- package/dist/_chunks/{otp-input-C9R9sC74.js → otp-input-De5_Ih7B.js} +15 -14
- package/dist/_chunks/otp-input-De5_Ih7B.js.map +1 -0
- package/dist/_chunks/{pagination.agent-D75FB6XP.js → pagination.agent-CmA0Ocr5.js} +16 -15
- package/dist/_chunks/pagination.agent-CmA0Ocr5.js.map +1 -0
- package/dist/_chunks/{password-input-C6PvKyQV.js → password-input-DAT5HQth.js} +7 -7
- package/dist/_chunks/password-input-DAT5HQth.js.map +1 -0
- package/dist/_chunks/{patient-shell-CGsmI5LJ.js → patient-shell-BzHhg6uA.js} +9 -9
- package/dist/_chunks/{patient-shell-CGsmI5LJ.js.map → patient-shell-BzHhg6uA.js.map} +1 -1
- package/dist/_chunks/{payment-form-l3j-gA-t.js → payment-form-YlxrCpZQ.js} +22 -22
- package/dist/_chunks/payment-form-YlxrCpZQ.js.map +1 -0
- package/dist/_chunks/{pdf-viewer.agent-DuGfSoep.js → pdf-viewer.agent-sMned5Xn.js} +3 -3
- package/dist/_chunks/{pdf-viewer.agent-DuGfSoep.js.map → pdf-viewer.agent-sMned5Xn.js.map} +1 -1
- package/dist/_chunks/{phone-input-ZWa_FU4R.js → phone-input-BuRe5PyI.js} +41 -40
- package/dist/_chunks/phone-input-BuRe5PyI.js.map +1 -0
- package/dist/_chunks/{popover-CMr1pTPO.js → popover-Ds1iOdiv.js} +4 -3
- package/dist/_chunks/popover-Ds1iOdiv.js.map +1 -0
- package/dist/_chunks/{privacy-lock-DdpkKNM2.js → privacy-lock-KEruBpM1.js} +23 -23
- package/dist/_chunks/{privacy-lock-DdpkKNM2.js.map → privacy-lock-KEruBpM1.js.map} +1 -1
- package/dist/_chunks/{radio-B_gvGU29.js → radio-XSSNX3Af.js} +8 -7
- package/dist/_chunks/radio-XSSNX3Af.js.map +1 -0
- package/dist/_chunks/{radio-group-Bn8Wt0yc.js → radio-group-DBrUOPcy.js} +19 -18
- package/dist/_chunks/radio-group-DBrUOPcy.js.map +1 -0
- package/dist/_chunks/{react-day-picker-d0MHsyCj.js → react-day-picker-C04L_28V.js} +5 -5
- package/dist/_chunks/{react-day-picker-d0MHsyCj.js.map → react-day-picker-C04L_28V.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor.agent-C1_E7_7t.js → rich-text-editor.agent-COSb5_2D.js} +4 -4
- package/dist/_chunks/rich-text-editor.agent-COSb5_2D.js.map +1 -0
- package/dist/_chunks/{scroll-area-Ba99pJ_R.js → scroll-area-HIq0hJyJ.js} +14 -12
- package/dist/_chunks/scroll-area-HIq0hJyJ.js.map +1 -0
- package/dist/_chunks/{search-bar-VoTqJhRp.js → search-bar-9Zbew4yM.js} +4 -3
- package/dist/_chunks/search-bar-9Zbew4yM.js.map +1 -0
- package/dist/_chunks/{search-input-D6rarD0_.js → search-input-CtkWITO2.js} +28 -28
- package/dist/_chunks/{search-input-D6rarD0_.js.map → search-input-CtkWITO2.js.map} +1 -1
- package/dist/_chunks/{select-DbxWF3O_.js → select-DdAOtomN.js} +24 -23
- package/dist/_chunks/select-DdAOtomN.js.map +1 -0
- package/dist/_chunks/{separator-BRQHi8s0.js → separator-B4wXDLNC.js} +9 -8
- package/dist/_chunks/{separator-BRQHi8s0.js.map → separator-B4wXDLNC.js.map} +1 -1
- package/dist/_chunks/{sheet-DyWqluiS.js → sheet-D7GRhnWw.js} +3 -2
- package/dist/_chunks/sheet-D7GRhnWw.js.map +1 -0
- package/dist/_chunks/{sidebar-B52iGGNV.js → sidebar-Dc2ffrbf.js} +9 -8
- package/dist/_chunks/sidebar-Dc2ffrbf.js.map +1 -0
- package/dist/_chunks/sign-in-with-alfadocs-button-BotwPDcW.js +45 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-BU7MP5Hg.js.map → sign-in-with-alfadocs-button-BotwPDcW.js.map} +1 -1
- package/dist/_chunks/{signature-capture.agent-4htVctJ2.js → signature-capture.agent-C38VPXxg.js} +19 -19
- package/dist/_chunks/signature-capture.agent-C38VPXxg.js.map +1 -0
- package/dist/_chunks/{skeleton-ClO1v5GE.js → skeleton-DAdPFx9d.js} +18 -16
- package/dist/_chunks/{skeleton-ClO1v5GE.js.map → skeleton-DAdPFx9d.js.map} +1 -1
- package/dist/_chunks/{skip-link-CASJkBOe.js → skip-link-DmZ3c6cb.js} +12 -11
- package/dist/_chunks/{skip-link-CASJkBOe.js.map → skip-link-DmZ3c6cb.js.map} +1 -1
- package/dist/_chunks/{slider-n8JWpJvT.js → slider-DjyRt3Mp.js} +3 -2
- package/dist/_chunks/slider-DjyRt3Mp.js.map +1 -0
- package/dist/_chunks/{slot-grid-BRAkqChA.js → slot-grid-WHc5A8-z.js} +57 -56
- package/dist/_chunks/slot-grid-WHc5A8-z.js.map +1 -0
- package/dist/_chunks/{sparkline.agent-BLY1IMyW.js → sparkline.agent-C_xp3NRB.js} +2 -2
- package/dist/_chunks/{sparkline.agent-BLY1IMyW.js.map → sparkline.agent-C_xp3NRB.js.map} +1 -1
- package/dist/_chunks/{spinner-CoAOGcDa.js → spinner-GCcv67vh.js} +2 -1
- package/dist/_chunks/spinner-GCcv67vh.js.map +1 -0
- package/dist/_chunks/{stat-D76MNHzK.js → stat-DUB6g90R.js} +3 -1
- package/dist/_chunks/{stat-D76MNHzK.js.map → stat-DUB6g90R.js.map} +1 -1
- package/dist/_chunks/{stepper-accordion-DHQ80A4v.js → stepper-accordion-2_7Pw0tC.js} +2 -1
- package/dist/_chunks/{stepper-accordion-DHQ80A4v.js.map → stepper-accordion-2_7Pw0tC.js.map} +1 -1
- package/dist/_chunks/{stepper-calendar-vtWwa2bY.js → stepper-calendar-CWZcFgt_.js} +9 -8
- package/dist/_chunks/stepper-calendar-CWZcFgt_.js.map +1 -0
- package/dist/_chunks/{stepper-progress-DMZ5w5VR.js → stepper-progress-rE7tn7WY.js} +12 -11
- package/dist/_chunks/{stepper-progress-DMZ5w5VR.js.map → stepper-progress-rE7tn7WY.js.map} +1 -1
- package/dist/_chunks/{streaming-text-D0cW8pwq.js → streaming-text-BgjCTVOw.js} +6 -5
- package/dist/_chunks/{streaming-text-D0cW8pwq.js.map → streaming-text-BgjCTVOw.js.map} +1 -1
- package/dist/_chunks/{suggestion-chip-BgNFpPEE.js → suggestion-chip-6AB40rxz.js} +2 -1
- package/dist/_chunks/{suggestion-chip-BgNFpPEE.js.map → suggestion-chip-6AB40rxz.js.map} +1 -1
- package/dist/_chunks/{switch-DtLPKO0p.js → switch-DhSORO9C.js} +2 -1
- package/dist/_chunks/{switch-DtLPKO0p.js.map → switch-DhSORO9C.js.map} +1 -1
- package/dist/_chunks/{tabs.agent-BDUlyPbJ.js → tabs.agent-BtaNGxRh.js} +6 -5
- package/dist/_chunks/tabs.agent-BtaNGxRh.js.map +1 -0
- package/dist/_chunks/{tag-CfSZZN2f.js → tag--uLKOb9f.js} +17 -14
- package/dist/_chunks/{tag-CfSZZN2f.js.map → tag--uLKOb9f.js.map} +1 -1
- package/dist/_chunks/{task-card-B5xfiFg5.js → task-card-BeSuntXP.js} +11 -10
- package/dist/_chunks/{task-card-B5xfiFg5.js.map → task-card-BeSuntXP.js.map} +1 -1
- package/dist/_chunks/{task-tray-BnpiodZ4.js → task-tray-pRk6u8Ik.js} +10 -9
- package/dist/_chunks/{task-tray-BnpiodZ4.js.map → task-tray-pRk6u8Ik.js.map} +1 -1
- package/dist/_chunks/{text-area-BqbruBWx.js → text-area-xf9-6iDf.js} +21 -21
- package/dist/_chunks/text-area-xf9-6iDf.js.map +1 -0
- package/dist/_chunks/{text-input-lh6kRXZS.js → text-input-exh7VD7D.js} +10 -9
- package/dist/_chunks/{text-input-lh6kRXZS.js.map → text-input-exh7VD7D.js.map} +1 -1
- package/dist/_chunks/theme-root-DDb0TJjd.js +18 -0
- package/dist/_chunks/{theme-root-vapFjsnt.js.map → theme-root-DDb0TJjd.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-BHKMiORD.js → theme-toggle-CJgA6G24.js} +42 -39
- package/dist/_chunks/theme-toggle-CJgA6G24.js.map +1 -0
- package/dist/_chunks/{time-picker-DbpAmPux.js → time-picker-D-EueWUG.js} +68 -67
- package/dist/_chunks/time-picker-D-EueWUG.js.map +1 -0
- package/dist/_chunks/{timeline-vjsUeuq1.js → timeline-DIueH4TJ.js} +5 -4
- package/dist/_chunks/timeline-DIueH4TJ.js.map +1 -0
- package/dist/_chunks/{timestamp-DmSt92P1.js → timestamp-BV2lC-wV.js} +2 -1
- package/dist/_chunks/{timestamp-DmSt92P1.js.map → timestamp-BV2lC-wV.js.map} +1 -1
- package/dist/_chunks/{toast-DllSITLf.js → toast-q0SlabGr.js} +2 -2
- package/dist/_chunks/{toast-DllSITLf.js.map → toast-q0SlabGr.js.map} +1 -1
- package/dist/_chunks/{tooltip-Dp3u8jGz.js → tooltip-DHik5yRI.js} +2 -1
- package/dist/_chunks/{tooltip-Dp3u8jGz.js.map → tooltip-DHik5yRI.js.map} +1 -1
- package/dist/_chunks/{tooth-scheme.agent-BRqxWa1D.js → tooth-scheme.agent-BlDyu-Gx.js} +2 -2
- package/dist/_chunks/{tooth-scheme.agent-BRqxWa1D.js.map → tooth-scheme.agent-BlDyu-Gx.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-Bg1BTMSr.js → transcript-panel-DFnhbrlQ.js} +39 -38
- package/dist/_chunks/{transcript-panel-Bg1BTMSr.js.map → transcript-panel-DFnhbrlQ.js.map} +1 -1
- package/dist/_chunks/{typing-indicator-BRg22Rqr.js → typing-indicator-CbUBf-Dx.js} +9 -8
- package/dist/_chunks/{typing-indicator-BRg22Rqr.js.map → typing-indicator-CbUBf-Dx.js.map} +1 -1
- package/dist/_chunks/visually-hidden-BlkhaZWe.js +21 -0
- package/dist/_chunks/{visually-hidden-Y3jcdCv-.js.map → visually-hidden-BlkhaZWe.js.map} +1 -1
- package/dist/_chunks/{warning-stack-B9N9yWet.js → warning-stack-DCmO0R07.js} +26 -24
- package/dist/_chunks/warning-stack-DCmO0R07.js.map +1 -0
- package/dist/_chunks/{workflow-map-gBhL_Wrs.js → workflow-map-CAM6Uy_J.js} +13 -10
- package/dist/_chunks/workflow-map-CAM6Uy_J.js.map +1 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/app-frame.d.ts.map +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +1 -1
- package/dist/components/aspect-ratio/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/icon-button.d.ts.map +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/button-group/button-group.d.ts.map +1 -1
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/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/chat-message.d.ts.map +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/index.js +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/description-list.d.ts.map +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/empty-state/empty-state.d.ts.map +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/flag/flag.d.ts.map +1 -1
- package/dist/components/flag/index.js +1 -1
- package/dist/components/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/form-field.d.ts.map +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/header.d.ts.map +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts.map +1 -1
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/kbd/kbd.d.ts.map +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.d.ts.map +1 -1
- package/dist/components/live-region/index.js +1 -1
- package/dist/components/live-region/live-region.d.ts.map +1 -1
- package/dist/components/logo/index.js +1 -1
- package/dist/components/matrix-rain/index.js +1 -1
- package/dist/components/matrix-rain/matrix-rain.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-card/message-card.d.ts.map +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts.map +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +2 -2
- 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-card/notification-card.d.ts.map +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.d.ts.map +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.d.ts.map +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.d.ts.map +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/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts.map +1 -1
- package/dist/components/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/radio.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/scroll-area/scroll-area.d.ts.map +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/select/select.d.ts.map +1 -1
- package/dist/components/separator/index.js +1 -1
- package/dist/components/separator/separator.d.ts.map +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sheet/sheet.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.d.ts.map +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.map +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/skip-link/index.js +1 -1
- package/dist/components/skip-link/skip-link.d.ts.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/stat/stat.d.ts.map +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -1
- package/dist/components/stepper-calendar/index.js +1 -1
- package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/switch/switch.d.ts.map +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tag/index.js +1 -1
- package/dist/components/tag/tag.d.ts.map +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-card/task-card.d.ts.map +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/task-tray/task-tray.d.ts.map +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/text-input/text-input.d.ts.map +1 -1
- package/dist/components/theme-root/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/timestamp/index.js +1 -1
- package/dist/components/timestamp/timestamp.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
- package/dist/components/typing-indicator/index.js +1 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts.map +1 -1
- package/dist/components/visually-hidden/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow/workflow-card.d.ts.map +1 -1
- package/dist/components/workflow/workflow-editor.d.ts.map +1 -1
- package/dist/components/workflow/workflow-map.d.ts.map +1 -1
- package/dist/index.js +108 -108
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/accordion-BJD1aM67.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-CdYwt2VP.js.map +0 -1
- package/dist/_chunks/autocomplete.agent-Bi6CiRKa.js.map +0 -1
- package/dist/_chunks/avatar-BAhxbDEu.js.map +0 -1
- package/dist/_chunks/badge-zDghajh8.js.map +0 -1
- package/dist/_chunks/breadcrumb-pdUacgm1.js.map +0 -1
- package/dist/_chunks/button-DmiGFnNA.js.map +0 -1
- package/dist/_chunks/card-DeItIBcV.js.map +0 -1
- package/dist/_chunks/chat-input-3rstZhHR.js.map +0 -1
- package/dist/_chunks/chat-message-dDMVSYBs.js.map +0 -1
- package/dist/_chunks/checkbox-group-DBnIBRT_.js.map +0 -1
- package/dist/_chunks/collapsible-DPGQnHZh.js.map +0 -1
- package/dist/_chunks/color-picker-OKKF3Dww.js.map +0 -1
- package/dist/_chunks/combobox.agent-CfeB-IZ1.js.map +0 -1
- package/dist/_chunks/command-palette.agent-XLfSGHCL.js.map +0 -1
- package/dist/_chunks/date-range-picker-C3CbY__H.js.map +0 -1
- package/dist/_chunks/date-time-picker-Bn3FPeAc.js.map +0 -1
- package/dist/_chunks/description-list-B1CL3RTG.js.map +0 -1
- package/dist/_chunks/dropdown-menu-BnVUeVG3.js.map +0 -1
- package/dist/_chunks/file-upload.agent-DYFnqdxw.js.map +0 -1
- package/dist/_chunks/floating-action-button-RigP2E7o.js.map +0 -1
- package/dist/_chunks/form-field-DI5LY5aG.js.map +0 -1
- package/dist/_chunks/freemium-paywall-D0GiUFOe.js.map +0 -1
- package/dist/_chunks/icon-button-C482ii4y.js.map +0 -1
- package/dist/_chunks/kbd-DTcIjYA7.js.map +0 -1
- package/dist/_chunks/list-Cwe8mcmh.js.map +0 -1
- package/dist/_chunks/live-region-COggO6x6.js +0 -57
- package/dist/_chunks/message-card-DID3cXUW.js.map +0 -1
- package/dist/_chunks/message-tray-CVMLBnVp.js.map +0 -1
- package/dist/_chunks/multi-select.agent-BUKYZJfp.js.map +0 -1
- package/dist/_chunks/navigation-menu-NjwxyshT.js.map +0 -1
- package/dist/_chunks/number-input-D7rSa_ef.js.map +0 -1
- package/dist/_chunks/otp-input-C9R9sC74.js.map +0 -1
- package/dist/_chunks/pagination.agent-D75FB6XP.js.map +0 -1
- package/dist/_chunks/password-input-C6PvKyQV.js.map +0 -1
- package/dist/_chunks/payment-form-l3j-gA-t.js.map +0 -1
- package/dist/_chunks/phone-input-ZWa_FU4R.js.map +0 -1
- package/dist/_chunks/popover-CMr1pTPO.js.map +0 -1
- package/dist/_chunks/radio-B_gvGU29.js.map +0 -1
- package/dist/_chunks/radio-group-Bn8Wt0yc.js.map +0 -1
- package/dist/_chunks/rich-text-editor.agent-C1_E7_7t.js.map +0 -1
- package/dist/_chunks/scroll-area-Ba99pJ_R.js.map +0 -1
- package/dist/_chunks/search-bar-VoTqJhRp.js.map +0 -1
- package/dist/_chunks/select-DbxWF3O_.js.map +0 -1
- package/dist/_chunks/sheet-DyWqluiS.js.map +0 -1
- package/dist/_chunks/sidebar-B52iGGNV.js.map +0 -1
- package/dist/_chunks/sign-in-with-alfadocs-button-BU7MP5Hg.js +0 -44
- package/dist/_chunks/signature-capture.agent-4htVctJ2.js.map +0 -1
- package/dist/_chunks/slider-n8JWpJvT.js.map +0 -1
- package/dist/_chunks/slot-grid-BRAkqChA.js.map +0 -1
- package/dist/_chunks/spinner-CoAOGcDa.js.map +0 -1
- package/dist/_chunks/stepper-calendar-vtWwa2bY.js.map +0 -1
- package/dist/_chunks/tabs.agent-BDUlyPbJ.js.map +0 -1
- package/dist/_chunks/text-area-BqbruBWx.js.map +0 -1
- package/dist/_chunks/theme-root-vapFjsnt.js +0 -18
- package/dist/_chunks/theme-toggle-BHKMiORD.js.map +0 -1
- package/dist/_chunks/time-picker-DbpAmPux.js.map +0 -1
- package/dist/_chunks/timeline-vjsUeuq1.js.map +0 -1
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js +0 -21
- package/dist/_chunks/warning-stack-B9N9yWet.js.map +0 -1
- package/dist/_chunks/workflow-map-gBhL_Wrs.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker-OKKF3Dww.js","sources":["../../src/components/color-picker/color-utils.ts","../../src/components/color-picker/palettes.ts","../../src/components/color-picker/color-picker.tsx"],"sourcesContent":["/**\n * Pure colour-conversion utilities for the ColorPicker component.\n *\n * This is the ONLY file where hex/rgb literals are permitted (for conversion\n * math). The component file (`color-picker.tsx`) must not contain hex/rgb\n * literals — it references `var(--…)` tokens for its own UI.\n */\n\nexport interface HSLA {\n h: number; // 0–360\n s: number; // 0–100\n l: number; // 0–100\n a: number; // 0–1\n}\n\n/* ------------------------------------------------------------------ */\n/* Hex ↔ HSL */\n/* ------------------------------------------------------------------ */\n\n/** Parse a hex string (#rgb, #rrggbb, #rrggbbaa) into HSLA. */\nexport function hexToHsl(hex: string): HSLA {\n let h = hex.startsWith('#') ? hex.slice(1) : hex;\n\n // Expand shorthand (#rgb → #rrggbb, #rgba → #rrggbbaa)\n if (h.length === 3 || h.length === 4) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('');\n }\n\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const a = h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1;\n\n return rgbToHsl(r, g, b, a);\n}\n\n/** Convert normalised RGB (0–1) + alpha to HSLA. */\nfunction rgbToHsl(r: number, g: number, b: number, a: number): HSLA {\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let hue = 0;\n let sat = 0;\n\n if (max !== min) {\n const d = max - min;\n sat = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n if (max === r) {\n hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n hue = ((b - r) / d + 2) / 6;\n } else {\n hue = ((r - g) / d + 4) / 6;\n }\n }\n\n return {\n h: Math.round(hue * 360),\n s: Math.round(sat * 100),\n l: Math.round(l * 100),\n a: Math.round(a * 100) / 100,\n };\n}\n\n/** Convert HSLA to a hex string (#rrggbb or #rrggbbaa when a < 1). */\nexport function hslToHex(hsl: HSLA): string {\n const { r, g, b } = hslToRgbComponents(hsl);\n const toHex = (n: number) =>\n Math.round(n * 255)\n .toString(16)\n .padStart(2, '0');\n\n const base = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n if (hsl.a < 1) {\n return `${base}${toHex(hsl.a)}`;\n }\n return base;\n}\n\n/** Convert HSLA to an rgba() string. */\nexport function hslToRgba(hsl: HSLA): string {\n const { r, g, b } = hslToRgbComponents(hsl);\n const ri = Math.round(r * 255);\n const gi = Math.round(g * 255);\n const bi = Math.round(b * 255);\n\n if (hsl.a < 1) {\n return `rgba(${ri}, ${gi}, ${bi}, ${hsl.a})`;\n }\n return `rgba(${ri}, ${gi}, ${bi}, 1)`;\n}\n\n/** Internal: convert HSLA to normalised RGB components (0–1). */\nfunction hslToRgbComponents(hsl: HSLA): {\n r: number;\n g: number;\n b: number;\n} {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n\n if (s === 0) {\n return { r: l, g: l, b: l };\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: hueToRgb(p, q, h + 1 / 3),\n g: hueToRgb(p, q, h),\n b: hueToRgb(p, q, h - 1 / 3),\n };\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n let tt = t;\n if (tt < 0) tt += 1;\n if (tt > 1) tt -= 1;\n if (tt < 1 / 6) return p + (q - p) * 6 * tt;\n if (tt < 1 / 2) return q;\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6;\n return p;\n}\n\n/* ------------------------------------------------------------------ */\n/* Format / Parse */\n/* ------------------------------------------------------------------ */\n\n/** Format an HSLA value to the specified output format. */\nexport function formatOutput(\n hsl: HSLA,\n format: 'hex' | 'hsl' | 'rgba',\n): string {\n switch (format) {\n case 'hex':\n return hslToHex(hsl);\n case 'hsl':\n if (hsl.a < 1) {\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${hsl.a})`;\n }\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n case 'rgba':\n return hslToRgba(hsl);\n }\n}\n\n/** Parse any supported colour string into HSLA. Returns null on failure. */\nexport function parseInput(value: string): HSLA | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n // Hex: #rgb, #rrggbb, #rrggbbaa\n if (trimmed.startsWith('#')) {\n const body = trimmed.slice(1);\n if (!/^[0-9a-fA-F]{3,8}$/.test(body)) return null;\n if (![3, 4, 6, 8].includes(body.length)) return null;\n return hexToHsl(trimmed);\n }\n\n // hsla(h, s%, l%, a) or hsl(h, s%, l%)\n const hslaMatch = trimmed.match(\n /^hsla?\\(\\s*([\\d.]+)\\s*[,/]\\s*([\\d.]+)%?\\s*[,/]\\s*([\\d.]+)%?\\s*(?:[,/]\\s*([\\d.]+))?\\s*\\)$/,\n );\n if (hslaMatch) {\n return {\n h: Math.round(parseFloat(hslaMatch[1])) % 360,\n s: Math.round(parseFloat(hslaMatch[2])),\n l: Math.round(parseFloat(hslaMatch[3])),\n a: hslaMatch[4] !== undefined ? parseFloat(hslaMatch[4]) : 1,\n };\n }\n\n // rgba(r, g, b, a) or rgb(r, g, b)\n const rgbaMatch = trimmed.match(\n /^rgba?\\(\\s*([\\d.]+)\\s*[,/]\\s*([\\d.]+)\\s*[,/]\\s*([\\d.]+)\\s*(?:[,/]\\s*([\\d.]+))?\\s*\\)$/,\n );\n if (rgbaMatch) {\n const r = parseFloat(rgbaMatch[1]) / 255;\n const g = parseFloat(rgbaMatch[2]) / 255;\n const b = parseFloat(rgbaMatch[3]) / 255;\n const a = rgbaMatch[4] !== undefined ? parseFloat(rgbaMatch[4]) : 1;\n return rgbToHsl(r, g, b, a);\n }\n\n return null;\n}\n\n/* ------------------------------------------------------------------ */\n/* Contrast — WCAG 2.x relative luminance */\n/* ------------------------------------------------------------------ */\n\n/** Relative luminance per WCAG 2.x (0 = black, 1 = white). */\nexport function relativeLuminance(hsl: HSLA): number {\n const { r, g, b } = hslToRgbComponents(hsl);\n const linearise = (c: number) =>\n c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n return 0.2126 * linearise(r) + 0.7152 * linearise(g) + 0.0722 * linearise(b);\n}\n\n/** WCAG 2.x contrast ratio between two colours. */\nexport function contrastRatio(fg: HSLA, bg: HSLA): number {\n const lum1 = relativeLuminance(fg);\n const lum2 = relativeLuminance(bg);\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n return Math.round(((lighter + 0.05) / (darker + 0.05)) * 100) / 100;\n}\n\n/** Meets WCAG AA for normal text (≥ 4.5:1). */\nexport function meetsAA(ratio: number): boolean {\n return ratio >= 4.5;\n}\n\n/** Meets WCAG AAA for normal text (≥ 7:1). */\nexport function meetsAAA(ratio: number): boolean {\n return ratio >= 7;\n}\n","export interface PaletteSwatch {\n name: string;\n hex: string;\n /** Recommended text colour for contrast. */\n textColor?: '#000000' | '#ffffff';\n}\n\n/**\n * Material Design appointment colours — mirrors the platform's `DoctorColor`\n * entity. Pink 500 is first because it's the default appointment colour;\n * remaining dark (white-text) colours follow alphabetically, then light\n * (black-text) colours alphabetically.\n */\nexport const APPOINTMENT_PALETTE: PaletteSwatch[] = [\n { name: 'Pink 500', hex: '#e91e63', textColor: '#ffffff' },\n { name: 'Black', hex: '#000000', textColor: '#ffffff' },\n { name: 'Blue 500', hex: '#2196f3', textColor: '#ffffff' },\n { name: 'Blue 900', hex: '#0d47a1', textColor: '#ffffff' },\n { name: 'Blue Grey 500', hex: '#607d8b', textColor: '#ffffff' },\n { name: 'Blue Grey 800', hex: '#37474f', textColor: '#ffffff' },\n { name: 'Brown 500', hex: '#795548', textColor: '#ffffff' },\n { name: 'Deep Orange 500', hex: '#ff5722', textColor: '#ffffff' },\n { name: 'Deep Purple 500', hex: '#673ab7', textColor: '#ffffff' },\n { name: 'Green 500', hex: '#4caf50', textColor: '#ffffff' },\n { name: 'Green 900', hex: '#1b5e20', textColor: '#ffffff' },\n { name: 'Indigo 500', hex: '#3f51b5', textColor: '#ffffff' },\n { name: 'Indigo 900', hex: '#1a237e', textColor: '#ffffff' },\n { name: 'Pink 900', hex: '#880e4f', textColor: '#ffffff' },\n { name: 'Purple 500', hex: '#9c27b0', textColor: '#ffffff' },\n { name: 'Purple 900', hex: '#4a148c', textColor: '#ffffff' },\n { name: 'Red 500', hex: '#f44336', textColor: '#ffffff' },\n { name: 'Red 900', hex: '#b71c1c', textColor: '#ffffff' },\n { name: 'Teal 500', hex: '#009688', textColor: '#ffffff' },\n { name: 'Teal 900', hex: '#004d40', textColor: '#ffffff' },\n { name: 'Amber 500', hex: '#ffc107', textColor: '#000000' },\n { name: 'Cyan 500', hex: '#00bcd4', textColor: '#000000' },\n { name: 'Grey 500', hex: '#9e9e9e', textColor: '#000000' },\n { name: 'Light Blue 500', hex: '#03a9f4', textColor: '#000000' },\n { name: 'Light Green 500', hex: '#8bc34a', textColor: '#000000' },\n { name: 'Lime 500', hex: '#cddc39', textColor: '#000000' },\n { name: 'Orange 500', hex: '#ff9800', textColor: '#000000' },\n { name: 'Orange 900', hex: '#e65100', textColor: '#000000' },\n { name: 'White', hex: '#ffffff', textColor: '#000000' },\n { name: 'Yellow 500', hex: '#ffeb3b', textColor: '#000000' },\n];\n\n/** Alfadocs brand palette — the six brand families × 3 shades (300/500/700). */\nexport const BRAND_PALETTE: PaletteSwatch[] = [\n { name: 'Blue 300', hex: '#70738c' },\n { name: 'Blue 500', hex: '#292e53' },\n { name: 'Blue 700', hex: '#1d213b' },\n { name: 'Violet 300', hex: '#9995ee' },\n { name: 'Violet 500', hex: '#6761e5' },\n { name: 'Violet 700', hex: '#4945a3' },\n { name: 'Purple 300', hex: '#ccaafa' },\n { name: 'Purple 500', hex: '#b380f8' },\n { name: 'Purple 700', hex: '#7f5bb0' },\n { name: 'Magenta 300', hex: '#ea7ffc' },\n { name: 'Magenta 500', hex: '#e040fb' },\n { name: 'Magenta 700', hex: '#9f2db2' },\n { name: 'Fuchsia 300', hex: '#fa76fc' },\n { name: 'Fuchsia 500', hex: '#f732fb' },\n { name: 'Fuchsia 700', hex: '#af24b2' },\n { name: 'Grey 300', hex: '#f9f6f3' },\n { name: 'Grey 500', hex: '#f6f1ed' },\n { name: 'Grey 700', hex: '#afaba8' },\n];\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { cva } from 'class-variance-authority';\nimport { Check, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useFormField } from '../form-field/form-field-context';\nimport { Slider } from '../slider/slider';\nimport {\n contrastRatio,\n formatOutput,\n hexToHsl,\n hslToHex,\n meetsAA,\n meetsAAA,\n parseInput,\n type HSLA,\n} from './color-utils';\nimport { APPOINTMENT_PALETTE, type PaletteSwatch } from './palettes';\n\nconst COLS = 6;\n\nconst triggerVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:w-full',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:text-[var(--font-size-sm)] ds:ps-3 ds:pe-3',\n md: 'ds:h-[var(--min-target-size)] ds:text-[var(--font-size-base)] ds:ps-3 ds:pe-3',\n lg: 'ds:h-12 ds:text-[var(--font-size-lg)] ds:ps-4 ds:pe-4',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst swatchVariants = cva(\n [\n 'ds:relative ds:rounded-[var(--radius-sm)] ds:border-2 ds:cursor-pointer',\n 'ds:min-w-[var(--min-target-size)] ds:min-h-[var(--min-target-size)]',\n 'ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:hover:scale-110',\n // The swatch background is the user-picked colour — set as a CSS custom\n // property via inline `style` per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter; the bg rule lives on the class).\n 'ds:bg-[var(--swatch-bg)]',\n ].join(' '),\n {\n variants: {\n selected: {\n true: 'ds:border-[var(--primary)] ds:shadow-[var(--shadow-md)]',\n false: 'ds:border-transparent',\n },\n },\n defaultVariants: { selected: false },\n },\n);\n\nconst PANEL_CLASSES = [\n 'flex flex-col gap-[var(--spacing-md)]',\n 'rounded-[var(--radius-md)] bg-[var(--background)] text-[var(--foreground)]',\n 'p-[var(--spacing-md)]',\n].join(' ');\n\n// Checkerboard under the opacity track — static geometry, so expressed as\n// Tailwind arbitrary values rather than inline `style`. `grey-700` comes\n// from the closed palette so the tile colour still tracks the token ramp.\nconst OPACITY_CHECKER_CLASSES = [\n 'bg-[image:repeating-conic-gradient(var(--color-grey-700)_0%_25%,transparent_0%_50%)]',\n 'bg-[size:8px_8px]',\n].join(' ');\n\nconst PANEL_COMPACT_CLASSES = [\n 'rounded-[var(--radius-md)] bg-[var(--background)] text-[var(--foreground)]',\n 'p-[var(--spacing-sm)]',\n].join(' ');\n\nconst POPOVER_CONTENT_CLASSES = [\n 'z-[var(--z-popover)] rounded-[var(--radius-md)]',\n 'border border-[color:var(--border)] bg-[var(--background)] shadow-[var(--shadow-lg)]',\n 'w-72',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2',\n 'data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2',\n].join(' ');\n\nconst HEX_INPUT_CLASSES = [\n 'w-full rounded-[var(--radius-sm)] border bg-[var(--background)] text-[var(--foreground)]',\n 'ps-[var(--spacing-sm)] pe-[var(--spacing-sm)] py-[var(--spacing-xs)] text-[var(--font-size-sm)]',\n 'focus-visible:outline-[length:var(--focus-ring-width)] focus-visible:outline-solid',\n 'focus-visible:outline-[color:var(--ring)] focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n].join(' ');\n\n// Makes the Slider track/range transparent so the gradient behind shows through\nconst TRANSPARENT_SLIDER = '[&>span:first-child]:bg-transparent [&>span:first-child>span]:bg-transparent';\n\nexport interface ColorPickerProps {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n format?: 'hex' | 'hsl' | 'rgba';\n allowOpacity?: boolean;\n palette?: (string | PaletteSwatch)[];\n against?: string;\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n variant?: 'inline' | 'popover';\n /** Show only the swatch grid without sliders, hex input, or contrast readout */\n compact?: boolean;\n className?: string;\n}\n\nexport const ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n (props, ref) => {\n const {\n value,\n defaultValue,\n onChange,\n format = 'hex',\n allowOpacity = false,\n palette,\n against,\n size = 'md',\n disabled = false,\n variant = 'inline',\n compact = true,\n className,\n } = props;\n\n const { t } = useTranslation();\n const ctx = useFormField();\n const generatedId = useId();\n const pickerId = ctx.id || generatedId;\n const effectiveDisabled = ctx.disabled || disabled;\n\n const isControlled = value !== undefined;\n const [internalHsl, setInternalHsl] = useState<HSLA>(() => {\n const initial = value ?? defaultValue;\n if (initial) {\n const parsed = parseInput(initial);\n if (parsed) return parsed;\n }\n return { h: 0, s: 100, l: 50, a: 1 };\n });\n\n const currentHsl: HSLA = useMemo(() => {\n if (isControlled && value) {\n const parsed = parseInput(value);\n if (parsed) return parsed;\n }\n return internalHsl;\n }, [isControlled, value, internalHsl]);\n\n const emitChange = useCallback(\n (hsl: HSLA) => {\n const finalHsl = allowOpacity ? hsl : { ...hsl, a: 1 };\n if (!isControlled) setInternalHsl(finalHsl);\n onChange?.(formatOutput(finalHsl, format));\n },\n [allowOpacity, format, isControlled, onChange],\n );\n\n const [hexInput, setHexInput] = useState(() => hslToHex(currentHsl));\n const [hexError, setHexError] = useState(false);\n const revertTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const currentHslRef = useRef(currentHsl);\n currentHslRef.current = currentHsl;\n\n useEffect(() => {\n setHexInput(hslToHex(currentHsl));\n setHexError(false);\n if (revertTimerRef.current !== undefined) {\n clearTimeout(revertTimerRef.current);\n revertTimerRef.current = undefined;\n }\n }, [currentHsl]);\n\n useEffect(() => {\n return () => {\n if (revertTimerRef.current !== undefined) {\n clearTimeout(revertTimerRef.current);\n }\n };\n }, []);\n\n const handleHexBlur = () => {\n const parsed = parseInput(hexInput);\n if (parsed) {\n setHexError(false);\n emitChange(parsed);\n } else {\n setHexError(true);\n revertTimerRef.current = setTimeout(() => {\n revertTimerRef.current = undefined;\n setHexError(false);\n setHexInput(hslToHex(currentHslRef.current));\n }, 800);\n }\n };\n\n const swatches: PaletteSwatch[] = useMemo(() => {\n if (!palette) return APPOINTMENT_PALETTE;\n return palette.map((item) =>\n typeof item === 'string'\n ? { name: item.toUpperCase(), hex: item }\n : item,\n );\n }, [palette]);\n\n const currentHex = hslToHex(currentHsl);\n const selectedSwatchIndex = swatches.findIndex(\n (s) => s.hex.toLowerCase() === currentHex.toLowerCase(),\n );\n\n const gridRef = useRef<HTMLDivElement>(null);\n const [focusedIndex, setFocusedIndex] = useState(\n selectedSwatchIndex >= 0 ? selectedSwatchIndex : 0,\n );\n\n const focusSwatch = (index: number) => {\n const cells = gridRef.current?.querySelectorAll<HTMLElement>('[role=\"gridcell\"]');\n if (cells?.[index]) {\n cells[index].focus();\n setFocusedIndex(index);\n }\n };\n\n const handleGridKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (effectiveDisabled) return;\n const total = swatches.length;\n let next = focusedIndex;\n\n switch (event.key) {\n case 'ArrowRight':\n next = (focusedIndex + 1) % total;\n break;\n case 'ArrowLeft':\n next = (focusedIndex - 1 + total) % total;\n break;\n case 'ArrowDown':\n next = Math.min(focusedIndex + COLS, total - 1);\n break;\n case 'ArrowUp':\n next = Math.max(focusedIndex - COLS, 0);\n break;\n case 'Home':\n next = Math.floor(focusedIndex / COLS) * COLS;\n break;\n case 'End':\n next = Math.min(Math.floor(focusedIndex / COLS) * COLS + COLS - 1, total - 1);\n break;\n case 'PageUp':\n next = focusedIndex % COLS;\n break;\n case 'PageDown': {\n const lastRowStart = Math.floor((total - 1) / COLS) * COLS;\n next = Math.min(lastRowStart + (focusedIndex % COLS), total - 1);\n break;\n }\n case 'Enter':\n case ' ':\n event.preventDefault();\n emitChange(hexToHsl(swatches[focusedIndex].hex));\n return;\n default:\n return;\n }\n\n event.preventDefault();\n focusSwatch(next);\n };\n\n const [open, setOpen] = useState(false);\n\n const contrastInfo = useMemo(() => {\n if (!against) return null;\n const bgHsl = parseInput(against);\n if (!bgHsl) return null;\n const ratio = contrastRatio(currentHsl, bgHsl);\n return { ratio, aa: meetsAA(ratio), aaa: meetsAAA(ratio) };\n }, [against, currentHsl]);\n\n const swatchGrid = (\n <div\n ref={gridRef}\n role=\"grid\"\n aria-label={t('ui.inputs.colorPicker.paletteLabel', 'Colour swatches')}\n onKeyDown={handleGridKeyDown}\n className=\"ds:grid ds:grid-cols-6 ds:gap-[var(--spacing-xs)]\"\n >\n {swatches.map((_swatch, i) => {\n const rowStart = Math.floor(i / COLS) * COLS;\n const isFirstInRow = i === rowStart;\n return isFirstInRow ? (\n <div key={i} role=\"row\" className=\"ds:contents\">\n {swatches.slice(rowStart, rowStart + COLS).map((s, j) => {\n const idx = rowStart + j;\n const sel = s.hex.toLowerCase() === currentHex.toLowerCase();\n return (\n <div\n key={s.hex}\n role=\"gridcell\"\n aria-selected={sel}\n aria-label={t('ui.inputs.colorPicker.swatchLabel', { name: s.name, hex: s.hex })}\n tabIndex={idx === focusedIndex ? 0 : -1}\n onClick={() => {\n if (effectiveDisabled) return;\n emitChange(hexToHsl(s.hex));\n setFocusedIndex(idx);\n }}\n className={swatchVariants({ selected: sel })}\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter for user-picked\n // palette swatch colour; the `bg-[var(--swatch-bg)]` rule\n // lives in `swatchVariants`).\n style={{ ['--swatch-bg' as string]: s.hex }}\n >\n {sel ? (\n <Check aria-hidden=\"true\" className=\"ds:absolute ds:inset-0 ds:m-auto ds:size-4 ds:text-[var(--background)] ds:mix-blend-difference\" />\n ) : null}\n </div>\n );\n })}\n </div>\n ) : null;\n })}\n </div>\n );\n\n const fullControls = compact ? null : (\n <>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <label htmlFor={`${pickerId}-hex`} className=\"ds:text-[var(--font-size-xs)] ds:text-[var(--muted-foreground)]\">\n {t('ui.inputs.colorPicker.hex', 'Hex')}\n </label>\n <bdi dir=\"ltr\">\n <input\n id={`${pickerId}-hex`}\n type=\"text\"\n value={hexInput}\n disabled={effectiveDisabled}\n onChange={(e) => setHexInput(e.target.value)}\n onBlur={handleHexBlur}\n className={`${HEX_INPUT_CLASSES} ${hexError ? 'border-[var(--destructive)]' : 'border-[color:var(--border)]'}`}\n />\n </bdi>\n </div>\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <SliderWithGradient\n label={t('ui.inputs.colorPicker.hue', 'Hue')}\n gradient=\"linear-gradient(to right, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))\"\n min={0} max={360}\n value={currentHsl.h}\n onChange={(h) => emitChange({ ...currentHsl, h })}\n formatValue={(v) => `H ${v}°`}\n disabled={effectiveDisabled}\n />\n <SliderWithGradient\n label={t('ui.inputs.colorPicker.saturation', 'Saturation')}\n gradient={`linear-gradient(to right, hsl(${currentHsl.h},0%,${currentHsl.l}%), hsl(${currentHsl.h},100%,${currentHsl.l}%))`}\n min={0} max={100}\n value={currentHsl.s}\n onChange={(s) => emitChange({ ...currentHsl, s })}\n formatValue={(v) => `S ${v}%`}\n disabled={effectiveDisabled}\n />\n <SliderWithGradient\n label={t('ui.inputs.colorPicker.lightness', 'Lightness')}\n gradient={`linear-gradient(to right, hsl(${currentHsl.h},${currentHsl.s}%,0%), hsl(${currentHsl.h},${currentHsl.s}%,50%), hsl(${currentHsl.h},${currentHsl.s}%,100%))`}\n min={0} max={100}\n value={currentHsl.l}\n onChange={(l) => emitChange({ ...currentHsl, l })}\n formatValue={(v) => `L ${v}%`}\n disabled={effectiveDisabled}\n />\n {allowOpacity ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <label className=\"ds:text-[var(--font-size-xs)] ds:text-[var(--muted-foreground)]\">\n {t('ui.inputs.colorPicker.opacity', 'Opacity')}\n </label>\n <div className=\"ds:relative\">\n <div\n className={`ds:absolute ds:inset-0 ds:rounded-[var(--radius-full)] ds:pointer-events-none ${OPACITY_CHECKER_CLASSES}`}\n aria-hidden=\"true\"\n />\n <div\n className=\"ds:absolute ds:inset-0 ds:rounded-[var(--radius-full)] ds:pointer-events-none ds:bg-[image:var(--opacity-gradient)]\"\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter; the opacity-track\n // gradient is derived from the live HSL and has no token\n // equivalent. The `bg-[image:var(--opacity-gradient)]` rule\n // lives on the class above.)\n style={{\n ['--opacity-gradient' as string]: `linear-gradient(to right, hsla(${currentHsl.h},${currentHsl.s}%,${currentHsl.l}%,0), hsl(${currentHsl.h},${currentHsl.s}%,${currentHsl.l}%))`,\n }}\n aria-hidden=\"true\"\n />\n <Slider\n min={0} max={100} step={1}\n value={[Math.round(currentHsl.a * 100)]}\n onValueChange={([v]) => emitChange({ ...currentHsl, a: v / 100 })}\n aria-label={t('ui.inputs.colorPicker.opacity', 'Opacity')}\n formatValue={(v) => `${v}%`}\n disabled={effectiveDisabled}\n className={TRANSPARENT_SLIDER}\n />\n </div>\n </div>\n ) : null}\n </div>\n\n {contrastInfo ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:text-[var(--font-size-sm)]\" role=\"status\" aria-live=\"polite\">\n <span className=\"ds:tabular-nums\">\n {t('ui.inputs.colorPicker.contrastRatio', { ratio: contrastInfo.ratio.toFixed(1) })}\n </span>\n <ContrastBadge level=\"AA\" passes={contrastInfo.aa} t={t} />\n <ContrastBadge level=\"AAA\" passes={contrastInfo.aaa} t={t} />\n </div>\n ) : null}\n\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <div\n className=\"ds:size-8 ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--swatch-bg)]\"\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter for the live picked\n // colour; the `bg-[var(--swatch-bg)]` rule lives on the class).\n style={{ ['--swatch-bg' as string]: hslToHex(currentHsl) }}\n aria-hidden=\"true\"\n />\n <span className=\"ds:text-[var(--font-size-sm)] ds:text-[var(--muted-foreground)] ds:tabular-nums\">\n {formatOutput(currentHsl, format)}\n </span>\n </div>\n </>\n );\n\n const panelContent = (\n <div className={compact ? PANEL_COMPACT_CLASSES : PANEL_CLASSES}>\n {swatchGrid}\n {fullControls}\n </div>\n );\n\n if (variant === 'inline') {\n return (\n <div\n ref={ref}\n id={pickerId}\n className={className}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n aria-disabled={effectiveDisabled || undefined}\n data-testid=\"color-picker\"\n >\n {panelContent}\n </div>\n );\n }\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild disabled={effectiveDisabled}>\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n id={pickerId}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n className={triggerVariants({ size, className })}\n data-testid=\"color-picker-trigger\"\n >\n <span\n className={`ds:inline-block ds:size-5 ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:shrink-0 ds:bg-[var(--swatch-bg)]${compact ? '' : ' me-[var(--spacing-sm)]'}`}\n aria-hidden=\"true\"\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter; the trigger preview\n // swatch shows the current picked colour).\n style={{ ['--swatch-bg' as string]: hslToHex(currentHsl) }}\n />\n {compact ? null : (\n <span className=\"ds:text-start ds:truncate ds:tabular-nums\">\n {formatOutput(currentHsl, format)}\n </span>\n )}\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content sideOffset={4} align=\"start\" className={POPOVER_CONTENT_CLASSES}>\n {panelContent}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n },\n);\n\nColorPicker.displayName = 'ColorPicker';\n\nfunction ContrastBadge({ level, passes, t }: { level: string; passes: boolean; t: (key: string, fallback: string) => string }) {\n return (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <abbr title={`Web Content Accessibility Guidelines Level ${level}`} className=\"ds:no-underline ds:font-medium\">\n {level}\n </abbr>\n {passes ? (\n <Check aria-hidden=\"true\" className=\"ds:size-4 ds:text-[var(--success)]\" />\n ) : (\n <X aria-hidden=\"true\" className=\"ds:size-4 ds:text-[var(--destructive)]\" />\n )}\n <span className=\"ds:sr-only\">\n {passes ? t('ui.inputs.colorPicker.contrastPass', 'Pass') : t('ui.inputs.colorPicker.contrastFail', 'Fail')}\n </span>\n </span>\n );\n}\n\nfunction SliderWithGradient({\n label,\n gradient,\n min,\n max,\n value,\n onChange,\n formatValue,\n disabled,\n}: {\n label: string;\n gradient: string;\n min: number;\n max: number;\n value: number;\n onChange: (v: number) => void;\n formatValue: (v: number) => string;\n disabled: boolean;\n}) {\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <label className=\"ds:text-[var(--font-size-xs)] ds:text-[var(--muted-foreground)]\">{label}</label>\n <div className=\"ds:relative\">\n <div\n className=\"ds:absolute ds:inset-0 ds:rounded-[var(--radius-full)] ds:pointer-events-none ds:bg-[image:var(--slider-gradient)]\"\n // Inline style — permitted per 23-constraints §Runtime-computed\n // dimensions (CSS custom property setter; the hue / saturation /\n // lightness tracks are derived from the live HSL so the gradient\n // string has no token equivalent. The\n // `bg-[image:var(--slider-gradient)]` rule lives on the class.)\n style={{ ['--slider-gradient' as string]: gradient }}\n aria-hidden=\"true\"\n />\n <Slider\n min={min} max={max} step={1}\n value={[value]}\n onValueChange={([v]) => onChange(v)}\n aria-label={label}\n formatValue={formatValue}\n disabled={disabled}\n className={TRANSPARENT_SLIDER}\n />\n </div>\n </div>\n );\n}\n"],"names":["hexToHsl","hex","h","r","g","b","a","rgbToHsl","max","min","l","hue","sat","d","hslToHex","hsl","hslToRgbComponents","toHex","n","base","hslToRgba","ri","gi","bi","q","p","hueToRgb","t","tt","formatOutput","format","parseInput","value","trimmed","body","hslaMatch","rgbaMatch","relativeLuminance","linearise","c","contrastRatio","fg","bg","lum1","lum2","lighter","darker","meetsAA","ratio","meetsAAA","APPOINTMENT_PALETTE","BRAND_PALETTE","COLS","triggerVariants","cva","swatchVariants","PANEL_CLASSES","OPACITY_CHECKER_CLASSES","PANEL_COMPACT_CLASSES","POPOVER_CONTENT_CLASSES","HEX_INPUT_CLASSES","TRANSPARENT_SLIDER","ColorPicker","forwardRef","props","ref","defaultValue","onChange","allowOpacity","palette","against","size","disabled","variant","compact","className","useTranslation","ctx","useFormField","generatedId","useId","pickerId","effectiveDisabled","isControlled","internalHsl","setInternalHsl","useState","initial","parsed","currentHsl","useMemo","emitChange","useCallback","finalHsl","hexInput","setHexInput","hexError","setHexError","revertTimerRef","useRef","currentHslRef","useEffect","handleHexBlur","swatches","item","currentHex","selectedSwatchIndex","s","gridRef","focusedIndex","setFocusedIndex","focusSwatch","index","cells","_a","handleGridKeyDown","event","total","next","lastRowStart","open","setOpen","contrastInfo","bgHsl","swatchGrid","jsx","_swatch","i","rowStart","j","idx","sel","Check","fullControls","jsxs","Fragment","e","SliderWithGradient","v","Slider","ContrastBadge","panelContent","Popover","level","passes","X","label","gradient","formatValue"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.agent-CfeB-IZ1.js","sources":["../../src/components/combobox/combobox.tsx","../../src/components/combobox/combobox.agent.ts"],"sourcesContent":["import {\n forwardRef,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command, defaultFilter, useCommandState } from 'cmdk';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { normalizeDiacritics } from '../_shared/normalize-diacritics';\nimport { groupOptions } from '../_shared/group-options';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_PADDING_X,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\n\nexport type ComboboxOption<T extends string = string> = OptionShape<T>;\n\nexport interface ComboboxProps<T extends string = string> {\n options: ComboboxOption<T>[];\n value?: T | '';\n defaultValue?: T;\n onValueChange?: (value: T | '') => void;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n filter?: (value: string, search: string) => number;\n allowCreate?: boolean;\n onCreate?: (value: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n emptyMessage?: ReactNode;\n 'aria-label'?: string;\n className?: string;\n}\n\nconst comboboxInputVariants = cva(\n [\n 'ds:peer ds:w-full ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:outline-none ds:border-0',\n 'ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[var(--font-size-sm)]',\n md: 'ds:text-[var(--font-size-base)]',\n lg: 'ds:text-[var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst comboboxWrapperVariants = cva(\n [\n 'ds:group ds:relative ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)] ds:w-full',\n INPUT_SURFACE_CHROME,\n ].join(' '),\n {\n variants: {\n size: {\n sm: `${INPUT_SURFACE_HEIGHT.sm} ${INPUT_SURFACE_PADDING_X.sm}`,\n md: `${INPUT_SURFACE_HEIGHT.md} ${INPUT_SURFACE_PADDING_X.md}`,\n lg: `${INPUT_SURFACE_HEIGHT.lg} ${INPUT_SURFACE_PADDING_X.lg}`,\n },\n tone: INPUT_SURFACE_TONE,\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst comboboxContentVariants = cva(\n [\n 'ds:z-[var(--z-popover)] ds:overflow-hidden ds:w-[var(--radix-popover-trigger-width)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst comboboxItemVariants = cva(\n [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n 'ds:data-[highlighted]:bg-muted ds:data-[highlighted]:text-foreground',\n 'ds:data-[highlighted]:border-s-2 ds:data-[highlighted]:border-s-primary',\n 'ds:aria-selected:bg-muted',\n 'ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-h-8 ds:ps-3 ds:pe-3 ds:text-[var(--font-size-sm)]',\n md: 'ds:min-h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:text-[var(--font-size-base)]',\n lg: 'ds:min-h-12 ds:ps-4 ds:pe-4 ds:text-[var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst comboboxGroupHeadingClasses = [\n 'ps-3 pe-3 py-1.5',\n 'type-eyebrow text-muted-foreground',\n].join(' ');\n\nconst comboboxListClasses =\n 'max-h-[18rem] overflow-y-auto p-[var(--spacing-xs)]';\n\nconst comboboxEmptyClasses =\n 'ps-3 pe-3 py-2 type-body-sm text-muted-foreground';\n\nconst iconSizeBySize = {\n sm: 'size-3.5',\n md: 'size-4',\n lg: 'size-5',\n} as const;\n\ninterface CreateRowProps {\n search: string;\n label: string;\n iconClass: string;\n size: 'sm' | 'md' | 'lg';\n onSelect: (value: string) => void;\n}\n\nfunction ComboboxCreateRow({\n search,\n label,\n iconClass,\n size,\n onSelect,\n}: CreateRowProps): ReactElement | null {\n // Only surface the create row when no existing item matches the query.\n const filteredCount = useCommandState((state) => state.filtered.count);\n if (filteredCount > 0) return null;\n return (\n <Command.Item\n value={`__combobox-create__${search}`}\n keywords={[]}\n forceMount\n onSelect={() => onSelect(search)}\n className={comboboxItemVariants({ size })}\n >\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ds:justify-center ${iconClass}`}\n />\n <span className=\"ds:flex-1 ds:truncate\">{label}</span>\n </Command.Item>\n );\n}\n\nconst ComboboxImpl = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n clearable = false,\n disabled,\n readOnly,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n filter: externalFilter,\n allowCreate = false,\n onCreate,\n open: openProp,\n onOpenChange,\n emptyMessage,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n) {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [internalValue, setInternalValue] = useState<string>(\n value ?? defaultValue ?? '',\n );\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === currentValue),\n [options, currentValue],\n );\n const selectedLabel = selectedOption?.label ?? '';\n\n const [search, setSearch] = useState<string>(selectedLabel);\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const composingRef = useRef(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n inputRef.current?.setAttribute('aria-expanded', String(open));\n });\n\n useEffect(() => {\n if (!open) {\n setSearch(selectedLabel);\n }\n }, [selectedLabel, open]);\n\n const inputId = id ?? (inFormField ? ctx.id : undefined);\n const effectiveDisabled = (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveReadOnly = Boolean(readOnly);\n const effectiveRequired = (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy = inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const resolvedPlaceholder =\n placeholder ?? t('ui.inputs.combobox.placeholder', 'Search…');\n\n const filterFn = useMemo(\n () => (candidate: string, searchStr: string, keywords?: string[]) => {\n if (composingRef.current) return 1;\n const normalizedCandidate = normalizeDiacritics(candidate);\n const normalizedSearch = normalizeDiacritics(searchStr);\n const normalizedKeywords = keywords?.map(normalizeDiacritics);\n if (externalFilter) {\n return externalFilter(normalizedCandidate, normalizedSearch);\n }\n return defaultFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords,\n );\n },\n [externalFilter],\n );\n\n const emitValue = onValueChange as ((next: string) => void) | undefined;\n\n const commit = (next: string) => {\n if (!isControlled) setInternalValue(next);\n emitValue?.(next);\n };\n\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const handleSelect = (optValue: string) => {\n const option = options.find((o) => o.value === optValue);\n commit(optValue);\n setSearch(option?.label ?? '');\n setOpen(false);\n };\n\n const handleCreate = (nextValue: string) => {\n onCreate?.(nextValue);\n setOpen(false);\n };\n\n const handleSearchChange = (next: string) => {\n if (effectiveReadOnly) return;\n setSearch(next);\n if (!open && next.length > 0 && !composingRef.current) {\n setOpen(true);\n }\n };\n\n const handleFocus = () => {\n if (!effectiveDisabled && !effectiveReadOnly) setOpen(true);\n };\n\n const handleCompositionStart = () => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = () => {\n composingRef.current = false;\n if (effectiveReadOnly) return;\n const next = inputRef.current?.value ?? '';\n setSearch(next);\n if (next.length > 0) setOpen(true);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape' && open) {\n event.preventDefault();\n setOpen(false);\n setSearch(selectedLabel);\n }\n };\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n commit('');\n setSearch('');\n setOpen(true);\n inputRef.current?.focus();\n };\n\n const handleOpenChange = (next: boolean) => {\n if (effectiveReadOnly && next) return;\n setOpen(next);\n if (!next) setSearch(selectedLabel);\n };\n\n const showClear =\n clearable && Boolean(currentValue) && !effectiveDisabled && !effectiveReadOnly;\n\n const groups = groupOptions(options);\n const iconClass = iconSizeBySize[size];\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Command\n filter={filterFn}\n shouldFilter\n loop\n label={ariaLabel}\n className=\"ds:w-full\"\n >\n <Popover.Anchor asChild>\n <div\n ref={anchorRef}\n className={comboboxWrapperVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n <Command.Input\n ref={composeRefs(ref, inputRef)}\n value={search}\n onValueChange={handleSearchChange}\n id={inputId}\n name={name}\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={effectiveReadOnly}\n required={effectiveRequired}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n className={comboboxInputVariants({ size })}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={t('ui.inputs.combobox.clear', 'Clear selection')}\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:size-4',\n ].join(' ')}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n ) : null}\n </div>\n </Popover.Anchor>\n <Popover.Portal>\n <Popover.Content\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onInteractOutside={(event) => {\n const target = event.target as Node | null;\n if (target && anchorRef.current?.contains(target)) {\n event.preventDefault();\n }\n }}\n sideOffset={4}\n align=\"start\"\n className={comboboxContentVariants()}\n >\n <Command.List className={comboboxListClasses}>\n <Command.Empty className={comboboxEmptyClasses}>\n {emptyMessage ?? t('ui.inputs.combobox.empty', 'No results found')}\n </Command.Empty>\n {groups.map(({ group, items }, groupIndex) => {\n const body = items.map((option) => {\n const isSelected = option.value === currentValue;\n return (\n <Command.Item\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={handleSelect}\n className={comboboxItemVariants({ size })}\n >\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ds:justify-center ${iconClass}`}\n >\n {isSelected ? <Check className={iconClass} /> : null}\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{option.label}</span>\n {option.description ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </Command.Item>\n );\n });\n if (!group) {\n return (\n <Command.Group key={`group-${groupIndex}`}>\n {body}\n </Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group}`}\n heading={\n <span className={comboboxGroupHeadingClasses}>{group}</span>\n }\n >\n {body}\n </Command.Group>\n );\n })}\n {allowCreate && search.length > 0 ? (\n <ComboboxCreateRow\n search={search}\n label={t('ui.inputs.combobox.create', 'Create \"{{value}}\"', {\n value: search,\n })}\n iconClass={iconClass}\n size={size}\n onSelect={handleCreate}\n />\n ) : null}\n </Command.List>\n </Popover.Content>\n </Popover.Portal>\n </Command>\n </Popover.Root>\n );\n});\nComboboxImpl.displayName = 'Combobox';\n\ninterface ComboboxComponent {\n <T extends string = string>(\n props: ComboboxProps<T> & { ref?: Ref<HTMLInputElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\n// forwardRef erases component-level generics, so we re-widen via a callable\n// interface to preserve the `<T extends string>` signature at the call site.\nexport const Combobox = ComboboxImpl as unknown as ComboboxComponent;\n\nexport {\n comboboxInputVariants,\n comboboxWrapperVariants,\n comboboxContentVariants,\n comboboxItemVariants,\n};\n","import type { AgentAdapter } from '../../agent/types';\n\nexport const comboboxAgent: AgentAdapter<unknown> = {\n id: 'combobox',\n capabilities: ['select_single', 'pick', 'filter', 'open', 'close'],\n state: {},\n actions: {},\n domHooks: {\n root: { attr: 'data-component', value: 'combobox' },\n item: {\n attr: 'data-option-id',\n description: 'Each option emits its value as data-option-id.',\n },\n },\n};\n"],"names":["comboboxInputVariants","cva","comboboxWrapperVariants","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_PADDING_X","INPUT_SURFACE_TONE","comboboxContentVariants","comboboxItemVariants","comboboxGroupHeadingClasses","comboboxListClasses","comboboxEmptyClasses","iconSizeBySize","ComboboxCreateRow","search","label","iconClass","size","onSelect","useCommandState","state","jsxs","Command","jsx","ComboboxImpl","forwardRef","options","value","defaultValue","onValueChange","placeholder","clearable","disabled","readOnly","required","name","id","tone","externalFilter","allowCreate","onCreate","openProp","onOpenChange","emptyMessage","className","ariaLabel","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","internalValue","setInternalValue","useState","isControlled","currentValue","selectedOption","useMemo","o","selectedLabel","setSearch","internalOpen","setInternalOpen","isOpenControlled","open","composingRef","useRef","inputRef","anchorRef","useLayoutEffect","_a","useEffect","inputId","effectiveDisabled","effectiveReadOnly","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","resolvedPlaceholder","filterFn","candidate","searchStr","keywords","normalizedCandidate","normalizeDiacritics","normalizedSearch","normalizedKeywords","defaultFilter","emitValue","commit","next","setOpen","handleSelect","optValue","option","handleCreate","nextValue","handleSearchChange","handleFocus","handleCompositionStart","handleCompositionEnd","handleKeyDown","event","handleClear","handleOpenChange","showClear","groups","groupOptions","Popover","composeRefs","X","target","group","items","groupIndex","body","isSelected","Check","Combobox","comboboxAgent"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-palette.agent-XLfSGHCL.js","sources":["../../src/components/command-palette/command-palette.tsx","../../src/components/command-palette/command-palette.agent.ts"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive, defaultFilter } from 'cmdk';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface Command {\n id: string;\n label: string;\n group: string;\n keywords?: string[];\n shortcut?: string;\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\n/* -------------------------------------------------------------------- */\n/* Diacritic-insensitive normaliser */\n/* -------------------------------------------------------------------- */\n\nfunction normalise(value: string): string {\n return value.normalize('NFD').replace(/\\p{Diacritic}/gu, '').toLowerCase();\n}\n\nexport const diacriticInsensitiveFilter = (\n value: string,\n search: string,\n keywords?: string[],\n) => defaultFilter(normalise(value), normalise(search), keywords?.map(normalise));\n\n/* -------------------------------------------------------------------- */\n/* Recents (localStorage, SSR-safe) */\n/* -------------------------------------------------------------------- */\n\nconst RECENTS_KEY = 'ui.cmdk.recents';\nconst MAX_RECENTS = 5;\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed.slice(0, MAX_RECENTS).filter((v) => typeof v === 'string') : [];\n } catch {\n return [];\n }\n}\n\nfunction writeRecents(ids: string[]) {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(RECENTS_KEY, JSON.stringify(ids.slice(0, MAX_RECENTS)));\n } catch {\n /* noop */\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* useCommandPalette — Cmd/Ctrl+K hook */\n/* -------------------------------------------------------------------- */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n function handler(event: KeyboardEvent) {\n const target = event.target as HTMLElement | null;\n const tag = target?.tagName.toLowerCase();\n const isEditable =\n tag === 'input' || tag === 'textarea' || target?.isContentEditable;\n if (isEditable && !(open && event.key === 'Escape')) return;\n\n const isK = event.key === 'k' || event.key === 'K';\n const isMeta = event.metaKey || event.ctrlKey;\n if (isK && isMeta) {\n event.preventDefault();\n setOpen((v) => !v);\n }\n }\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n return { open, setOpen };\n}\n\n/* -------------------------------------------------------------------- */\n/* Primitives (forwardRef wrappers around cmdk + dialog chrome) */\n/* -------------------------------------------------------------------- */\n\nconst rootClasses = [\n 'flex h-full w-full flex-col overflow-hidden',\n 'rounded-[var(--radius-md)]',\n 'bg-[var(--background)] text-[var(--foreground)]',\n].join(' ');\n\nexport interface CommandPaletteRootProps\n extends ComponentPropsWithoutRef<typeof CommandPrimitive> {}\n\nconst CommandPalette = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n CommandPaletteRootProps\n>(({ className, filter = diacriticInsensitiveFilter, ...rest }, ref) => (\n <CommandPrimitive\n ref={ref}\n filter={filter}\n className={[rootClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandPalette.displayName = 'CommandPalette';\n\n/* -------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------- */\n\nconst inputWrapClasses = [\n 'flex items-center',\n 'border-block-end border-[var(--border)]',\n 'ps-[var(--spacing-md)] pe-[var(--spacing-sm)]',\n].join(' ');\n\nconst inputClasses = [\n 'flex w-full bg-transparent',\n 'min-h-[var(--min-target-size)]',\n 'text-[var(--font-size-base)] text-[var(--foreground)]',\n 'placeholder:text-[var(--muted-foreground)]',\n 'outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'border-0',\n].join(' ');\n\nexport interface CommandInputProps\n extends ComponentPropsWithoutRef<typeof CommandPrimitive.Input> {}\n\nconst CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(({ className, placeholder, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <div className={inputWrapClasses}>\n <Search aria-hidden=\"true\" className=\"ds:size-4 ds:me-2 ds:text-[var(--muted-foreground)]\" />\n <CommandPrimitive.Input\n ref={ref}\n placeholder={\n placeholder ??\n t('navigation.cmdk.placeholder', 'Type a command or search\\u2026')\n }\n className={[inputClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\n/* -------------------------------------------------------------------- */\n/* List / Empty / Group / Item / Separator */\n/* -------------------------------------------------------------------- */\n\nconst CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={[\n 'ds:max-h-[20rem] ds:overflow-y-auto',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:py-[var(--spacing-xs)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, children, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={[\n 'ds:py-[var(--spacing-lg)] ds:text-center',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('navigation.cmdk.empty', 'No results found')}\n </CommandPrimitive.Empty>\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, heading, ...rest }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n heading={heading}\n className={[\n 'ds:overflow-hidden',\n 'ds:text-[var(--foreground)]',\n 'ds:[&_[cmdk-group-heading]]:ps-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:pe-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:py-[var(--spacing-xs)]',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandGroup.displayName = 'CommandGroup';\n\nconst itemClasses = [\n 'relative flex items-center',\n 'gap-[var(--spacing-sm)]',\n 'min-h-[var(--min-target-size)]',\n 'rounded-[var(--radius-sm)]',\n 'ps-[var(--spacing-sm)] pe-[var(--spacing-sm)]',\n 'text-[var(--font-size-sm)] text-[var(--foreground)]',\n 'cursor-pointer select-none outline-none',\n 'data-[selected=true]:bg-[var(--primary)] data-[selected=true]:text-[var(--primary-foreground)]',\n 'data-[selected=true]:font-[var(--font-weight-semibold)]',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'transition-colors duration-[var(--animation-duration)] motion-reduce:transition-none',\n].join(' ');\n\nexport interface CommandItemProps\n extends ComponentPropsWithoutRef<typeof CommandPrimitive.Item> {}\n\nconst CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={[itemClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={[\n 'ds:-ms-[var(--spacing-xs)] ds:-me-[var(--spacing-xs)]',\n 'ds:my-[var(--spacing-xs)]',\n 'ds:h-px ds:bg-[var(--border)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport interface CommandShortcutProps extends ComponentPropsWithoutRef<'kbd'> {}\n\nconst CommandShortcut = forwardRef<HTMLElement, CommandShortcutProps>(\n ({ className, children, ...rest }, ref) => (\n <kbd\n ref={ref}\n className={[\n 'ds:ms-auto',\n 'ds:inline-flex ds:items-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:h-5 ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--muted)]/20 ds:text-[var(--muted-foreground)]',\n 'ds:text-[var(--font-size-xs)] ds:font-[var(--font-weight-medium)]',\n 'ds:data-[selected=true]:bg-[var(--primary-foreground)]/20',\n 'ds:data-[selected=true]:text-[var(--primary-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </kbd>\n ),\n);\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -------------------------------------------------------------------- */\n/* Highlight helper */\n/* -------------------------------------------------------------------- */\n\n/**\n * Returns React nodes that wrap the matching segments of `label` in `<mark>`.\n * Diacritic-insensitive. No `dangerouslySetInnerHTML`.\n */\nexport function highlightMatch(label: string, query: string): ReactNode {\n if (!query) return label;\n const norm = normalise(label);\n const normQ = normalise(query);\n const idx = norm.indexOf(normQ);\n if (idx === -1) return label;\n // Walk the original label using character-by-character correspondence with the\n // normalised string. Since normalise may drop diacritics, we use index mapping.\n const before = label.slice(0, idx);\n const match = label.slice(idx, idx + normQ.length);\n const after = label.slice(idx + normQ.length);\n return (\n <>\n {before}\n <mark className=\"ds:bg-[var(--accent)]/20 ds:text-inherit ds:rounded-[var(--radius-sm)] ds:px-[0.125em]\">\n {match}\n </mark>\n {after}\n </>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* CommandPaletteDialog — Dialog shell + commands-as-data API */\n/* -------------------------------------------------------------------- */\n\nexport interface CommandPaletteDialogProps {\n /** Controlled open state. */\n open: boolean;\n /** Fires when the dialog opens/closes. */\n onOpenChange: (open: boolean) => void;\n /** Commands to display. */\n commands: Command[];\n /** Extra content rendered above the input (optional). */\n header?: ReactNode;\n}\n\nconst overlayClasses = [\n 'fixed inset-0 z-[var(--z-modal-backdrop)]',\n 'bg-[var(--foreground)]/40 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in data-[state=closed]:fade-out',\n 'motion-reduce:animate-none',\n].join(' ');\n\nconst dialogContentClasses = [\n 'fixed z-[var(--z-modal)]',\n // Logical-inset arbitrary-value positioning: `inset-inline-start-1/2`\n // isn't a real Tailwind class (the generator maps fractions only to\n // `start-*`), so use `start-1/2` for horizontal and `top-*` for the\n // top offset — matching the working Dialog component.\n 'top-[12vh] start-1/2 -translate-x-1/2 rtl:translate-x-1/2',\n 'w-[92vw] max-w-[var(--dialog-width-lg)]',\n 'rounded-[var(--radius-lg)]',\n 'bg-[var(--background)] text-[var(--foreground)]',\n 'shadow-[var(--shadow-xl)]',\n 'border border-[var(--border)]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95',\n 'motion-reduce:animate-none',\n 'focus:outline-none',\n].join(' ');\n\nconst VisuallyHidden = ({ children }: { children: ReactNode }) => (\n <span className=\"ds:sr-only\">{children}</span>\n);\n\nfunction CommandPaletteDialog({\n open,\n onOpenChange,\n commands,\n header,\n}: CommandPaletteDialogProps) {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n const [recents, setRecents] = useState<string[]>(readRecents);\n\n useEffect(() => {\n if (!open) setSearch('');\n }, [open]);\n\n const grouped = useMemo(() => {\n const byGroup = new Map<string, Command[]>();\n commands.forEach((c) => {\n const list = byGroup.get(c.group) ?? [];\n list.push(c);\n byGroup.set(c.group, list);\n });\n return byGroup;\n }, [commands]);\n\n const recentCommands = useMemo(() => {\n if (search) return [];\n const byId = new Map(commands.map((c) => [c.id, c]));\n return recents.map((id) => byId.get(id)).filter(Boolean) as Command[];\n }, [commands, recents, search]);\n\n const runCommand = useCallback(\n (cmd: Command) => {\n onOpenChange(false);\n const next = [cmd.id, ...recents.filter((id) => id !== cmd.id)].slice(0, MAX_RECENTS);\n setRecents(next);\n writeRecents(next);\n // Defer so Dialog unmount doesn't swallow the callback\n setTimeout(() => cmd.onSelect(), 0);\n },\n [recents, onOpenChange],\n );\n\n const clearRecents = useCallback(() => {\n setRecents([]);\n writeRecents([]);\n }, []);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay className={overlayClasses} />\n <RadixDialog.Content\n className={dialogContentClasses}\n aria-label={t('navigation.cmdk.title', 'Command palette')}\n >\n <RadixDialog.Title asChild>\n <VisuallyHidden>\n {t('navigation.cmdk.title', 'Command palette')}\n </VisuallyHidden>\n </RadixDialog.Title>\n <RadixDialog.Description asChild>\n <VisuallyHidden>\n {t(\n 'navigation.cmdk.description',\n 'Search for commands, pages, and actions',\n )}\n </VisuallyHidden>\n </RadixDialog.Description>\n <CommandPalette label={t('navigation.cmdk.title', 'Command palette')}>\n {header}\n <CommandInput value={search} onValueChange={setSearch} />\n <CommandList>\n <CommandEmpty />\n {recentCommands.length > 0 ? (\n <>\n <CommandGroup heading={t('navigation.cmdk.recents', 'Recent')}>\n {recentCommands.map((cmd) => (\n <CommandItem\n key={`recent-${cmd.id}`}\n value={`recent-${cmd.label}`}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? <span aria-hidden=\"true\">{cmd.icon}</span> : null}\n <span>{cmd.label}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n <CommandItem\n value=\"__clear-recents\"\n onSelect={clearRecents}\n >\n <span>\n {t(\n 'navigation.cmdk.clearRecents',\n 'Clear recent commands',\n )}\n </span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n </>\n ) : null}\n {Array.from(grouped.entries()).map(([group, list]) => (\n <CommandGroup key={group} heading={group}>\n {list.map((cmd) => (\n <CommandItem\n key={cmd.id}\n value={cmd.label}\n keywords={cmd.keywords}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? <span aria-hidden=\"true\">{cmd.icon}</span> : null}\n <span>{highlightMatch(cmd.label, search)}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandPalette>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem,\n CommandEmpty,\n CommandSeparator,\n CommandShortcut,\n};\n","import type { AgentAdapter } from '../../agent/types';\n\nexport const commandPaletteAgent: AgentAdapter<unknown> = {\n id: 'command-palette',\n capabilities: ['open', 'close', 'filter', 'pick', 'submit'],\n state: {},\n actions: {},\n domHooks: {\n root: { attr: 'data-component', value: 'command-palette' },\n item: {\n attr: 'data-command-id',\n description: 'Each command item emits its key as data-command-id.',\n },\n },\n};\n"],"names":["normalise","value","diacriticInsensitiveFilter","search","keywords","defaultFilter","RECENTS_KEY","MAX_RECENTS","readRecents","raw","parsed","v","writeRecents","ids","useCommandPalette","open","setOpen","useState","useEffect","handler","event","target","tag","isK","isMeta","rootClasses","CommandPalette","forwardRef","className","filter","rest","ref","jsx","CommandPrimitive","inputWrapClasses","inputClasses","CommandInput","placeholder","t","useTranslation","jsxs","Search","CommandList","CommandEmpty","children","CommandGroup","heading","itemClasses","CommandItem","CommandSeparator","CommandShortcut","highlightMatch","label","query","norm","normQ","idx","before","match","after","Fragment","overlayClasses","dialogContentClasses","VisuallyHidden","CommandPaletteDialog","onOpenChange","commands","header","setSearch","recents","setRecents","grouped","useMemo","byGroup","c","list","recentCommands","byId","id","runCommand","useCallback","cmd","next","clearRecents","RadixDialog","group","commandPaletteAgent"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker-C3CbY__H.js","sources":["../../node_modules/date-fns/subDays.js","../../node_modules/date-fns/subWeeks.js","../../src/components/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days 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 days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addWeeks } from \"./addWeeks.js\";\n\n/**\n * The {@link subWeeks} function options.\n */\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks 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 weeks to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the weeks subtracted\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * const result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport function subWeeks(date, amount, options) {\n return addWeeks(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subWeeks;\n","import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n DayPicker,\n type DateRange,\n} from 'react-day-picker';\nimport {\n format as fnsFormat,\n differenceInCalendarDays,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n subDays,\n subWeeks,\n} from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useFormField } from '../form-field/form-field-context';\nimport {\n getDateFnsLocale,\n buildDisabledMatcher,\n CalendarChevron,\n triggerVariants,\n calendarIconVariants,\n popoverContentVariants,\n presetButtonVariants,\n} from '../_shared';\nimport '../../tokens/themes/bridges/react-day-picker.css';\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\nexport interface DateRangePreset {\n label: string;\n range: () => { from: Date; to: Date };\n}\n\nexport interface DateRangeValue {\n from?: Date;\n to?: Date;\n}\n\nexport interface DateRangePickerProps\n extends Pick<VariantProps<typeof triggerVariants>, 'size'> {\n /** Current range — controlled. */\n value?: DateRangeValue;\n /** Default range — uncontrolled. */\n defaultValue?: DateRangeValue;\n /** Called when the range changes. */\n onChange?: (range: DateRangeValue) => void;\n /** Minimum selectable date. */\n minDate?: Date;\n /** Maximum selectable date. */\n maxDate?: Date;\n /** Custom presets. Replaces defaults unless mergePresets is true. */\n presets?: DateRangePreset[];\n /** Merge custom presets with defaults instead of replacing. */\n mergePresets?: boolean;\n /** Component size. */\n size?: 'sm' | 'md' | 'lg';\n /** Disabled state. */\n disabled?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** Additional class names. */\n className?: string;\n /** id override. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n presets: presetsProp,\n mergePresets = false,\n size = 'md',\n disabled,\n placeholder,\n className,\n id,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const effectiveId = id ?? ctx.id;\n const effectiveDisabled = ctx.disabled || disabled;\n const effectiveTone = ctx.invalid ? 'error' : 'default';\n\n const locale = getDateFnsLocale(i18n.language);\n const placeholderText =\n placeholder ?? t('ui.inputs.dateRangePicker.placeholder', 'Select date range');\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<DateRangeValue>(\n value ?? defaultValue ?? {},\n );\n const currentValue: DateRangeValue = isControlled ? value : internalValue;\n\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(\n currentValue.from ?? new Date(),\n );\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const emit = useCallback(\n (range: DateRangeValue) => {\n if (!isControlled) setInternalValue(range);\n onChange?.(range);\n },\n [isControlled, onChange],\n );\n\n const disabledMatcher = buildDisabledMatcher(minDate, maxDate);\n\n // Default presets\n const defaultPresets: DateRangePreset[] = [\n {\n label: t('ui.inputs.dateRangePicker.presets.today', 'Today'),\n range: () => {\n const today = new Date();\n return { from: today, to: today };\n },\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.yesterday', 'Yesterday'),\n range: () => {\n const yesterday = subDays(new Date(), 1);\n return { from: yesterday, to: yesterday };\n },\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.last7', 'Last 7 days'),\n range: () => ({\n from: subDays(new Date(), 6),\n to: new Date(),\n }),\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.thisWeek', 'This week'),\n range: () => ({\n from: startOfWeek(new Date(), { locale }),\n to: endOfWeek(new Date(), { locale }),\n }),\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.lastWeek', 'Last week'),\n range: () => {\n const lastWeekDay = subWeeks(new Date(), 1);\n return {\n from: startOfWeek(lastWeekDay, { locale }),\n to: endOfWeek(lastWeekDay, { locale }),\n };\n },\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.thisMonth', 'This month'),\n range: () => ({\n from: startOfMonth(new Date()),\n to: endOfMonth(new Date()),\n }),\n },\n {\n label: t('ui.inputs.dateRangePicker.presets.last30', 'Last 30 days'),\n range: () => ({\n from: subDays(new Date(), 29),\n to: new Date(),\n }),\n },\n ];\n\n const effectivePresets = presetsProp\n ? mergePresets\n ? [...defaultPresets, ...presetsProp]\n : presetsProp\n : defaultPresets;\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n if (range) {\n emit({ from: range.from, to: range.to });\n } else {\n emit({});\n }\n };\n\n const handlePresetClick = (preset: DateRangePreset) => {\n const range = preset.range();\n emit(range);\n setMonth(range.from);\n setOpen(false);\n };\n\n // Format display text\n const displayText = (() => {\n if (currentValue.from && currentValue.to) {\n const fromStr = fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n const toStr = fnsFormat(currentValue.to, 'MMM d, yyyy', { locale });\n return `${fromStr} – ${toStr}`;\n }\n if (currentValue.from) {\n return fnsFormat(currentValue.from, 'MMM d, yyyy', { locale });\n }\n return '';\n })();\n\n // Range summary for screen readers\n const rangeSummary = (() => {\n if (currentValue.from && currentValue.to) {\n const days = differenceInCalendarDays(currentValue.to, currentValue.from) + 1;\n return t('ui.inputs.dateRangePicker.days', '{{count}} days', { count: days });\n }\n return '';\n })();\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div ref={ref} className={className}>\n <Popover.Trigger asChild disabled={effectiveDisabled}>\n <button\n ref={triggerRef}\n id={effectiveId}\n type=\"button\"\n disabled={effectiveDisabled}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n // `aria-required` is not valid on `<button>` per ARIA 1.2 — the\n // FormField label's visible asterisk + `aria-describedby` link\n // communicate the required state instead.\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={triggerVariants({ size, tone: effectiveTone })}\n >\n <span className={displayText ? 'ds:text-foreground' : 'ds:text-muted-foreground'}>\n {displayText || placeholderText}\n </span>\n <span aria-hidden=\"true\" className={calendarIconVariants({ size })}>\n <Calendar />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n sideOffset={4}\n align=\"start\"\n className={popoverContentVariants()}\n >\n <div className=\"ds:flex ds:gap-[var(--spacing-md)]\">\n {/* Presets column */}\n {effectivePresets.length > 0 ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-[8rem] ds:border-e ds:border-border ds:pe-[var(--spacing-md)]\">\n {effectivePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={presetButtonVariants()}\n >\n {preset.label}\n </button>\n ))}\n </div>\n ) : null}\n\n {/* Dual calendar */}\n <div>\n <DayPicker\n mode=\"range\"\n selected={\n currentValue.from\n ? { from: currentValue.from, to: currentValue.to }\n : undefined\n }\n onSelect={handleRangeSelect}\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={2}\n disabled={disabledMatcher}\n locale={locale}\n showOutsideDays\n fixedWeeks\n pagedNavigation\n components={{ Chevron: CalendarChevron }}\n />\n\n {/* Range summary live region */}\n {rangeSummary ? (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"type-body-sm ds:text-muted-foreground ds:mt-[var(--spacing-sm)] ds:text-center\"\n >\n {rangeSummary}\n </div>\n ) : null}\n </div>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n"],"names":["subDays","date","amount","options","addDays","subWeeks","addWeeks","DateRangePicker","forwardRef","value","defaultValue","onChange","minDate","maxDate","presetsProp","mergePresets","size","disabled","placeholder","className","id","ref","t","i18n","useTranslation","ctx","useFormField","effectiveId","effectiveDisabled","effectiveTone","locale","getDateFnsLocale","placeholderText","isControlled","internalValue","setInternalValue","useState","currentValue","open","setOpen","month","setMonth","triggerRef","useRef","emit","useCallback","range","disabledMatcher","buildDisabledMatcher","defaultPresets","today","yesterday","startOfWeek","endOfWeek","lastWeekDay","startOfMonth","endOfMonth","effectivePresets","handleRangeSelect","handlePresetClick","preset","displayText","fromStr","fnsFormat","toStr","rangeSummary","days","differenceInCalendarDays","jsx","Popover","jsxs","triggerVariants","calendarIconVariants","Calendar","popoverContentVariants","presetButtonVariants","DayPicker","CalendarChevron"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-picker-Bn3FPeAc.js","sources":["../../node_modules/date-fns/setHours.js","../../node_modules/date-fns/setMinutes.js","../../src/components/date-time-picker/date-time-picker.tsx"],"sourcesContent":["import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setHours} function options.\n */\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to 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 hours - The hours of the new date\n * @param options - An object with options\n *\n * @returns The new date with the hours set\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * const result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport function setHours(date, hours, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(hours);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setHours;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMinutes} function options.\n */\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, returned from the context function, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param minutes - The minutes of the new date\n * @param options - An object with options\n *\n * @returns The new date with the minutes set\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport function setMinutes(date, minutes, options) {\n const date_ = toDate(date, options?.in);\n date_.setMinutes(minutes);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default setMinutes;\n","import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as Popover from '@radix-ui/react-popover';\nimport { DayPicker } from 'react-day-picker';\nimport {\n format as fnsFormat,\n isBefore,\n isAfter,\n setHours,\n setMinutes,\n} from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useFormField } from '../form-field/form-field-context';\nimport {\n getDateFnsLocale,\n buildDisabledMatcher,\n CalendarChevron,\n triggerVariants,\n calendarIconVariants,\n popoverContentVariants,\n} from '../_shared';\nimport { TimePicker } from '../time-picker/time-picker';\nimport type { TimeValue } from '../_shared/time';\nimport '../../tokens/themes/bridges/react-day-picker.css';\n\n/* -------------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------------- */\n\n/** Get timezone short name. */\nfunction getTimezoneLabel(locale: string, timezone?: string): string {\n try {\n const opts: Intl.DateTimeFormatOptions = { timeZoneName: 'short' };\n if (timezone && timezone !== 'local') {\n opts.timeZone = timezone === 'utc' ? 'UTC' : timezone;\n }\n const parts = new Intl.DateTimeFormat(locale, opts).formatToParts(new Date());\n return parts.find((p) => p.type === 'timeZoneName')?.value ?? '';\n } catch {\n return '';\n }\n}\n\n/** Check if a timezone differs from the browser's. */\nfunction tzDiffersFromBrowser(timezone?: string): boolean {\n if (!timezone || timezone === 'local') return false;\n try {\n const browserTz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone === 'utc') return browserTz !== 'UTC';\n return browserTz !== timezone;\n } catch {\n return false;\n }\n}\n\n/* -------------------------------------------------------------------------- */\n/* CVA variants */\n/* -------------------------------------------------------------------------- */\n\nconst applyButtonVariants = cva(\n [\n 'ds:w-full ds:rounded-[var(--radius-sm)]',\n 'ds:bg-primary ds:text-primary-foreground',\n 'ds:hover:bg-primary-hover ds:cursor-pointer',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:text-[var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:text-[var(--font-size-base)]',\n lg: 'ds:h-12 ds:text-[var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n/* -------------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------------- */\n\nexport interface DateTimePickerProps\n extends Pick<VariantProps<typeof triggerVariants>, 'size'> {\n /** Current datetime — controlled. */\n value?: Date;\n /** Default datetime — uncontrolled. */\n defaultValue?: Date;\n /** Called when the datetime changes. */\n onChange?: (date: Date | undefined) => void;\n /** Timezone — IANA string, 'local', or 'utc'. */\n timezone?: string;\n /** Show timezone annotation. Defaults to true when tz differs from browser. */\n showTimezone?: boolean;\n /** Minimum datetime. */\n minDate?: Date;\n /** Maximum datetime. */\n maxDate?: Date;\n /** Force 12h/24h mode. */\n hour12?: boolean;\n /** Minute step for TimePicker. */\n minuteStep?: 1 | 5 | 10 | 15 | 30;\n /** Component size. */\n size?: 'sm' | 'md' | 'lg';\n /** Disabled state. */\n disabled?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** Additional class names. */\n className?: string;\n /** id override. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------------- */\n\nexport const DateTimePicker = forwardRef<HTMLDivElement, DateTimePickerProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n timezone,\n showTimezone: showTimezoneProp,\n minDate,\n maxDate,\n hour12,\n minuteStep = 1,\n size = 'md',\n disabled,\n placeholder,\n className,\n id,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const effectiveId = id ?? ctx.id;\n const effectiveDisabled = ctx.disabled || disabled;\n const effectiveTone = ctx.invalid ? 'error' : 'default';\n\n const locale = getDateFnsLocale(i18n.language);\n const placeholderText =\n placeholder ?? t('ui.inputs.dateTimePicker.placeholder', 'Select date and time');\n const applyLabel = t('ui.inputs.dateTimePicker.apply', 'Apply');\n const outOfRangeLabel = t(\n 'ui.inputs.dateTimePicker.outOfRange',\n 'Date/time is out of allowed range',\n );\n\n const showTimezone =\n showTimezoneProp !== undefined ? showTimezoneProp : tzDiffersFromBrowser(timezone);\n const timezoneLabel = showTimezone\n ? getTimezoneLabel(i18n.language, timezone)\n : '';\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<Date | undefined>(\n value ?? defaultValue,\n );\n const currentValue = isControlled ? value : internalValue;\n\n // Draft state while popover is open\n const [draftDate, setDraftDate] = useState<Date | undefined>(currentValue);\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(currentValue ?? new Date());\n const [rangeError, setRangeError] = useState(false);\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const emit = useCallback(\n (date: Date | undefined) => {\n if (!isControlled) setInternalValue(date);\n onChange?.(date);\n },\n [isControlled, onChange],\n );\n\n const disabledMatcher = buildDisabledMatcher(minDate, maxDate);\n\n /** Check if a full datetime is within range. */\n const isInRange = useCallback(\n (date: Date): boolean => {\n if (minDate && isBefore(date, minDate)) return false;\n if (maxDate && isAfter(date, maxDate)) return false;\n return true;\n },\n [minDate, maxDate],\n );\n\n // Sync draft when popover opens\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n setDraftDate(currentValue ?? new Date());\n setMonth(currentValue ?? new Date());\n setRangeError(false);\n }\n setOpen(nextOpen);\n };\n\n const handleDaySelect = (date: Date | undefined) => {\n if (!date) return;\n const prev = draftDate ?? new Date();\n const merged = setMinutes(setHours(date, prev.getHours()), prev.getMinutes());\n setDraftDate(merged);\n setRangeError(!isInRange(merged));\n };\n\n const handleTimeChange = (time: TimeValue) => {\n const prev = draftDate ?? new Date();\n const merged = setMinutes(setHours(prev, time.hours), time.minutes);\n setDraftDate(merged);\n setRangeError(!isInRange(merged));\n };\n\n const handleApply = () => {\n if (!draftDate) return;\n if (!isInRange(draftDate)) {\n setRangeError(true);\n return;\n }\n emit(draftDate);\n setOpen(false);\n triggerRef.current?.focus();\n };\n\n // Format display text\n const displayText = currentValue\n ? fnsFormat(currentValue, 'MMM d, yyyy HH:mm', { locale })\n : '';\n\n const calendarLabel = t('ui.inputs.datePicker.gridLabel', 'Calendar');\n const timeLabel = t('ui.inputs.timePicker.groupLabel', 'Time');\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <div ref={ref} className={className}>\n <Popover.Trigger asChild disabled={effectiveDisabled}>\n <button\n ref={triggerRef}\n id={effectiveId}\n type=\"button\"\n disabled={effectiveDisabled}\n aria-describedby={ctx.describedBy || undefined}\n aria-invalid={ctx.invalid || undefined}\n // `aria-required` is not valid on `<button>` per ARIA 1.2 — the\n // FormField label's visible asterisk + `aria-describedby` link\n // communicate the required state instead.\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={triggerVariants({ size, tone: effectiveTone })}\n >\n <span className={displayText ? 'ds:text-foreground' : 'ds:text-muted-foreground'}>\n {displayText || placeholderText}\n </span>\n <span aria-hidden=\"true\" className={calendarIconVariants({ size })}>\n <Calendar />\n </span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n sideOffset={4}\n align=\"start\"\n className={popoverContentVariants()}\n >\n <div className=\"ds:flex ds:flex-col ds:sm:flex-row ds:gap-[var(--spacing-md)]\">\n {/* Calendar region */}\n <div role=\"region\" aria-label={calendarLabel}>\n <DayPicker\n mode=\"single\"\n selected={draftDate}\n onSelect={handleDaySelect}\n month={month}\n onMonthChange={setMonth}\n disabled={disabledMatcher}\n locale={locale}\n showOutsideDays\n fixedWeeks\n components={{ Chevron: CalendarChevron }}\n />\n </div>\n\n {/* Time + Apply region */}\n <div\n role=\"region\"\n aria-label={timeLabel}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:sm:border-s ds:sm:border-border ds:sm:ps-[var(--spacing-md)] ds:min-w-[10rem]\"\n >\n <TimePicker\n value={\n draftDate\n ? { hours: draftDate.getHours(), minutes: draftDate.getMinutes() }\n : { hours: 0, minutes: 0 }\n }\n onChange={handleTimeChange}\n hour12={hour12}\n minuteStep={minuteStep}\n size={size}\n />\n\n {/* Timezone annotation */}\n {timezoneLabel ? (\n <span\n className=\"type-meta ds:text-muted-foreground\"\n >\n {timezoneLabel}\n </span>\n ) : null}\n\n {/* Range error */}\n {rangeError ? (\n <span\n role=\"alert\"\n className=\"type-meta ds:text-destructive\"\n >\n {outOfRangeLabel}\n </span>\n ) : null}\n\n {/* Apply button */}\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!draftDate || rangeError}\n className={applyButtonVariants({ size })}\n >\n {applyLabel}\n </button>\n </div>\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n },\n);\n\nDateTimePicker.displayName = 'DateTimePicker';\n"],"names":["setHours","date","hours","options","_date","toDate","setMinutes","minutes","date_","getTimezoneLabel","locale","timezone","opts","_a","p","tzDiffersFromBrowser","browserTz","applyButtonVariants","cva","DateTimePicker","forwardRef","value","defaultValue","onChange","showTimezoneProp","minDate","maxDate","hour12","minuteStep","size","disabled","placeholder","className","id","ref","t","i18n","useTranslation","ctx","useFormField","effectiveId","effectiveDisabled","effectiveTone","getDateFnsLocale","placeholderText","applyLabel","outOfRangeLabel","timezoneLabel","isControlled","internalValue","setInternalValue","useState","currentValue","draftDate","setDraftDate","open","setOpen","month","setMonth","rangeError","setRangeError","triggerRef","useRef","emit","useCallback","disabledMatcher","buildDisabledMatcher","isInRange","isBefore","isAfter","handleOpenChange","nextOpen","handleDaySelect","prev","merged","handleTimeChange","time","handleApply","displayText","fnsFormat","calendarLabel","timeLabel","jsx","Popover","jsxs","triggerVariants","calendarIconVariants","Calendar","popoverContentVariants","DayPicker","CalendarChevron","TimePicker"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"description-list-B1CL3RTG.js","sources":["../../src/components/description-list/description-list.tsx"],"sourcesContent":["import { createContext, forwardRef, useCallback, useContext, useState } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Copy, Check } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface DescriptionListContextShape {\n layout: 'inline' | 'stacked' | 'responsive';\n density: 'default' | 'compact';\n divider: 'none' | 'between' | 'bordered';\n}\n\nconst DescriptionListContext = createContext<DescriptionListContextShape>({\n layout: 'inline',\n density: 'default',\n divider: 'none',\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — root <dl> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListVariants = cva('ds:flex ds:flex-col', {\n variants: {\n layout: {\n inline: '',\n stacked: '',\n responsive: '',\n },\n density: {\n default: 'ds:gap-[var(--spacing-md)]',\n compact: 'ds:gap-[var(--spacing-sm)]',\n },\n divider: {\n none: '',\n between: '',\n bordered: '',\n },\n },\n defaultVariants: {\n layout: 'inline',\n density: 'default',\n divider: 'none',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — row <div> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListRowVariants = cva('', {\n variants: {\n layout: {\n inline: 'ds:grid ds:gap-[var(--spacing-md)]',\n stacked: 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n responsive:\n 'ds:grid ds:gap-[var(--spacing-md)] ds:max-sm:flex ds:max-sm:flex-col ds:max-sm:gap-[var(--spacing-xs)]',\n },\n divider: {\n none: '',\n between:\n 'ds:[&:not(:last-child)]:border-b ds:[&:not(:last-child)]:border-[color:var(--border)] ds:[&:not(:last-child)]:pb-[var(--spacing-md)]',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-sm)] ds:p-[var(--spacing-sm)]',\n },\n copyable: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n layout: 'inline',\n copyable: false,\n className: 'ds:grid-cols-[minmax(0,1fr)_minmax(0,2fr)]',\n },\n {\n layout: 'inline',\n copyable: true,\n className: 'ds:grid-cols-[minmax(0,1fr)_minmax(0,2fr)_auto]',\n },\n {\n layout: 'responsive',\n copyable: false,\n className: 'ds:grid-cols-[minmax(0,1fr)_minmax(0,2fr)]',\n },\n {\n layout: 'responsive',\n copyable: true,\n className: 'ds:grid-cols-[minmax(0,1fr)_minmax(0,2fr)_auto]',\n },\n ],\n defaultVariants: {\n layout: 'inline',\n divider: 'none',\n copyable: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {\n layout?: 'inline' | 'stacked' | 'responsive';\n density?: 'default' | 'compact';\n divider?: 'none' | 'between' | 'bordered';\n}\n\nexport interface DescriptionListRowProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, shows a copy-to-clipboard button using KeyValuePair's established mechanism */\n copyable?: boolean;\n /** Text written to the clipboard when copyable=true */\n copyText?: string;\n /** Label used in the copy button's aria-label: \"Copy {copyLabel}\". Falls back to copyText. */\n copyLabel?: string;\n}\n\nexport interface DescriptionListTermProps extends React.HTMLAttributes<HTMLElement> {}\n\nexport interface DescriptionListDetailProps extends React.HTMLAttributes<HTMLElement> {\n /** Right-aligns numeric values via text-end */\n numeric?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root — <dl> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRoot = forwardRef<HTMLDListElement, DescriptionListProps>(\n (\n {\n layout = 'inline',\n density = 'default',\n divider = 'none',\n className,\n children,\n ...props\n },\n ref,\n ) => (\n <DescriptionListContext.Provider value={{ layout, density, divider }}>\n <dl\n ref={ref}\n className={descriptionListVariants({ layout, density, divider, className })}\n {...props}\n >\n {children}\n </dl>\n </DescriptionListContext.Provider>\n ),\n);\nDescriptionListRoot.displayName = 'DescriptionList';\n\n/* ------------------------------------------------------------------ */\n/* Row — <div> that groups a <dt> with its <dd>(s) */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRow = forwardRef<HTMLDivElement, DescriptionListRowProps>(\n (\n {\n copyable = false,\n copyText,\n copyLabel,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { layout, divider } = useContext(DescriptionListContext);\n const { t } = useTranslation();\n const [copied, setCopied] = useState(false);\n const [announcement, setAnnouncement] = useState('');\n\n const handleCopy = useCallback(async () => {\n if (!copyText) {\n if (import.meta.env.DEV) {\n console.warn(\n 'DescriptionList.Row: copyable=true but no copyText provided. Copy is a no-op.',\n );\n }\n return;\n }\n try {\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setAnnouncement(t('ui.keyValuePair.copied'));\n setTimeout(() => {\n setCopied(false);\n setAnnouncement('');\n }, 2000);\n } catch {\n setAnnouncement(t('ui.keyValuePair.notAvailable'));\n setTimeout(() => setAnnouncement(''), 3000);\n }\n }, [copyText, t]);\n\n const ariaLabel = t('ui.keyValuePair.copy', { label: copyLabel ?? copyText ?? '' });\n\n return (\n <div\n ref={ref}\n className={descriptionListRowVariants({ layout, divider, copyable, className })}\n {...props}\n >\n {children}\n {copyable && (\n <IconButton\n icon={copied ? <Check /> : <Copy />}\n size=\"sm\"\n aria-label={ariaLabel}\n onClick={handleCopy}\n intent=\"ghost\"\n className=\"ds:self-start\"\n />\n )}\n {copyable && (\n <span role=\"status\" className=\"ds:sr-only\">\n {announcement}\n </span>\n )}\n </div>\n );\n },\n);\nDescriptionListRow.displayName = 'DescriptionList.Row';\n\n/* ------------------------------------------------------------------ */\n/* CVA — term <dt> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListTermVariants = cva(\n 'type-label ds:text-[color:var(--muted-foreground)] ds:text-start ds:[overflow-wrap:anywhere] ds:[word-break:normal]',\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — detail <dd> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListDetailVariants = cva(\n 'type-body ds:text-[color:var(--foreground)] ds:m-0 ds:[overflow-wrap:anywhere] ds:[word-break:normal]',\n {\n variants: {\n numeric: {\n true: 'ds:text-end',\n false: 'ds:text-start',\n },\n },\n defaultVariants: {\n numeric: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Term — <dt> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListTerm = forwardRef<HTMLElement, DescriptionListTermProps>(\n ({ className, ...props }, ref) => (\n <dt\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListTermVariants({ className })}\n {...props}\n />\n ),\n);\nDescriptionListTerm.displayName = 'DescriptionList.Term';\n\n/* ------------------------------------------------------------------ */\n/* Detail — <dd> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListDetail = forwardRef<HTMLElement, DescriptionListDetailProps>(\n ({ numeric = false, className, ...props }, ref) => (\n <dd\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListDetailVariants({ numeric, className })}\n {...props}\n />\n ),\n);\nDescriptionListDetail.displayName = 'DescriptionList.Detail';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const DescriptionList = Object.assign(DescriptionListRoot, {\n Row: DescriptionListRow,\n Term: DescriptionListTerm,\n Detail: DescriptionListDetail,\n});\n"],"names":["DescriptionListContext","createContext","descriptionListVariants","cva","descriptionListRowVariants","DescriptionListRoot","forwardRef","layout","density","divider","className","children","props","ref","jsx","DescriptionListRow","copyable","copyText","copyLabel","useContext","t","useTranslation","copied","setCopied","useState","announcement","setAnnouncement","handleCopy","useCallback","ariaLabel","jsxs","IconButton","Check","Copy","descriptionListTermVariants","descriptionListDetailVariants","DescriptionListTerm","DescriptionListDetail","numeric","DescriptionList"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-BnVUeVG3.js","sources":["../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { Separator as DsSeparator } from '../separator/separator';\nimport { Kbd, type KbdNamedKey } from '../kbd/kbd';\nimport { useDocumentDirection } from '../_shared/use-direction';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:min-w-[8rem]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion — gated on --animation-duration via Tailwind's animate-in\n // preset. motion-reduce disables via the no-preference query.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n);\n\nconst itemClasses = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n // Highlighted + hover state\n 'ds:data-[highlighted]:bg-[color:var(--muted)]/40',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n // Disabled\n 'ds:data-[disabled]:opacity-50 ds:data-[disabled]:cursor-not-allowed',\n 'ds:data-[disabled]:pointer-events-none',\n ].join(' '),\n);\n\nconst labelClasses = cva(\n [\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-eyebrow ds:text-[color:var(--muted-foreground)]',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst indicatorSlotClasses =\n 'inline-flex items-center justify-center size-4 shrink-0';\n\n/* ------------------------------------------------------------------ */\n/* Root / Trigger / Portal */\n/* ------------------------------------------------------------------ */\n\ntype DropdownMenuRootProps = ComponentPropsWithoutRef<typeof RadixDropdownMenu.Root>;\n\nconst Root = ({ dir, ...props }: DropdownMenuRootProps) => {\n const autoDir = useDocumentDirection();\n return <RadixDropdownMenu.Root dir={dir ?? autoDir} {...props} />;\n};\nRoot.displayName = 'DropdownMenu.Root';\n\nconst Trigger = RadixDropdownMenu.Trigger;\nconst Portal = RadixDropdownMenu.Portal;\nconst RadixGroup = RadixDropdownMenu.Group;\nconst RadixRadioGroup = RadixDropdownMenu.RadioGroup;\n\n/* ------------------------------------------------------------------ */\n/* Content */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuContentProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.Content>,\n VariantProps<typeof contentVariants> {}\n\nconst Content = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nContent.displayName = 'DropdownMenu.Content';\n\n/* ------------------------------------------------------------------ */\n/* Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuItemProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.Item> {\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n description?: ReactNode;\n /** Convenience — renders a DS <Kbd keys={…}> on the inline-end. */\n shortcut?: Array<KbdNamedKey | string>;\n}\n\nconst Item = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Item>,\n DropdownMenuItemProps\n>(\n (\n { className, startIcon, endIcon, description, shortcut, children, ...props },\n ref,\n ) => (\n <RadixDropdownMenu.Item\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:flex ds:flex-col ds:min-w-0\">\n <span className=\"ds:truncate\">{children}</span>\n {description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {description}\n </span>\n ) : null}\n </span>\n {shortcut ? (\n <span className=\"ds:ms-auto\">\n <Kbd keys={shortcut} size=\"sm\" />\n </span>\n ) : endIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:ms-auto ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {endIcon}\n </span>\n ) : null}\n </RadixDropdownMenu.Item>\n ),\n);\nItem.displayName = 'DropdownMenu.Item';\n\n/* ------------------------------------------------------------------ */\n/* CheckboxItem */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.CheckboxItem> {}\n\nconst CheckboxItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuCheckboxItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"ds:size-4\" />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.CheckboxItem>\n));\nCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n/* ------------------------------------------------------------------ */\n/* RadioGroup / RadioItem */\n/* ------------------------------------------------------------------ */\n\nconst RadioGroup = RadixRadioGroup;\n\nexport interface DropdownMenuRadioItemProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.RadioItem> {}\n\nconst RadioItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.RadioItem>,\n DropdownMenuRadioItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.RadioItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check\n aria-hidden\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.RadioItem>\n));\nRadioItem.displayName = 'DropdownMenu.RadioItem';\n\n/* ------------------------------------------------------------------ */\n/* Label */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuLabelProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.Label> {}\n\nconst Label = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Label>,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Label\n ref={ref}\n className={labelClasses({ className })}\n {...props}\n />\n));\nLabel.displayName = 'DropdownMenu.Label';\n\n/* ------------------------------------------------------------------ */\n/* Separator */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuSeparatorProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.Separator> {}\n\nconst MenuSeparator = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Separator>,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Separator ref={ref} asChild {...props}>\n <DsSeparator\n className={['ds:my-[calc(var(--spacing-xs)/2)]', className ?? '']\n .filter(Boolean)\n .join(' ')}\n />\n </RadixDropdownMenu.Separator>\n));\nMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut — thin wrapper over DS Kbd for the right side of an Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuShortcutProps {\n keys: Array<KbdNamedKey | string>;\n separator?: 'none' | 'plus' | 'then';\n}\n\nconst Shortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n ({ keys, separator = 'none' }, ref) => (\n <span ref={ref} className=\"ds:ms-auto ds:ps-[var(--spacing-sm)]\">\n <Kbd keys={keys} separator={separator} size=\"sm\" />\n </span>\n ),\n);\nShortcut.displayName = 'DropdownMenu.Shortcut';\n\n/* ------------------------------------------------------------------ */\n/* Sub-menu */\n/* ------------------------------------------------------------------ */\n\nconst Sub = RadixDropdownMenu.Sub;\n\nexport interface DropdownMenuSubTriggerProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.SubTrigger> {\n startIcon?: ReactNode;\n}\n\nconst SubTrigger = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, startIcon, children, ...props }, ref) => (\n <RadixDropdownMenu.SubTrigger\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <ChevronRight\n aria-hidden\n className=\"ds:ms-auto ds:size-4 ds:shrink-0 ds:rtl:-scale-x-100\"\n />\n </RadixDropdownMenu.SubTrigger>\n));\nSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nexport interface DropdownMenuSubContentProps\n extends ComponentPropsWithoutRef<typeof RadixDropdownMenu.SubContent> {}\n\nconst SubContent = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubContent>,\n DropdownMenuSubContentProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.SubContent\n ref={ref}\n sideOffset={8}\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nSubContent.displayName = 'DropdownMenu.SubContent';\n\n/* ------------------------------------------------------------------ */\n/* Assembled namespace export */\n/* ------------------------------------------------------------------ */\n\nexport const DropdownMenu = {\n Root,\n Trigger,\n Portal,\n Content,\n Group: RadixGroup,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Label,\n Separator: MenuSeparator,\n Shortcut,\n Sub,\n SubTrigger,\n SubContent,\n};\n"],"names":["contentVariants","cva","itemClasses","labelClasses","indicatorSlotClasses","Root","dir","props","autoDir","useDocumentDirection","jsx","RadixDropdownMenu","Trigger","Portal","RadixGroup","RadixRadioGroup","Content","forwardRef","className","sideOffset","ref","Item","startIcon","endIcon","description","shortcut","children","jsxs","Kbd","CheckboxItem","Check","RadioGroup","RadioItem","Label","MenuSeparator","DsSeparator","Shortcut","keys","separator","Sub","SubTrigger","ChevronRight","SubContent","DropdownMenu"],"mappings":"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"}
|